001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016 package org.kuali.student.common.ui.client.widgets.search; 017 018 import java.util.ArrayList; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.kuali.student.common.ui.client.widgets.KSButton; 024 import org.kuali.student.common.ui.client.widgets.KSButtonAbstract.ButtonStyle; 025 import org.kuali.student.common.ui.client.widgets.layout.HorizontalBlockFlowPanel; 026 import org.kuali.student.common.ui.client.widgets.layout.VerticalFlowPanel; 027 028 import com.google.gwt.event.dom.client.ClickEvent; 029 import com.google.gwt.event.dom.client.ClickHandler; 030 import com.google.gwt.user.client.ui.Composite; 031 import com.google.gwt.user.client.ui.SimplePanel; 032 import com.google.gwt.user.client.ui.Widget; 033 034 public class LinkPanel extends Composite{ 035 036 private Map<Enum<?>, PanelInfo> panels = new HashMap<Enum<?>, PanelInfo>(); 037 private SimplePanel container = new SimplePanel(); 038 039 private class PanelInfo extends Composite{ 040 private VerticalFlowPanel layout = new VerticalFlowPanel(); 041 private HorizontalBlockFlowPanel linkPanel = new HorizontalBlockFlowPanel(); 042 private Enum<?> key; 043 private Widget content; 044 private List<NavLink> links = new ArrayList<NavLink>(); 045 private class NavLink{ 046 protected String linkName; 047 protected Enum<?> linkToKey; 048 } 049 050 public PanelInfo(Enum<?> key, Widget content){ 051 this.key = key; 052 this.content = content; 053 layout.add(content); 054 layout.add(linkPanel); 055 this.initWidget(layout); 056 } 057 058 public KSButton addLink(String linkText, final Enum<?> linkedPanelKey){ 059 NavLink link = new NavLink(); 060 link.linkName = linkText; 061 link.linkToKey = linkedPanelKey; 062 links.add(link); 063 //KSLabel linkWidget = new KSLabel(linkText); 064 KSButton linkWidget = new KSButton(linkText, ButtonStyle.DEFAULT_ANCHOR); 065 linkWidget.addClickHandler(new ClickHandler(){ 066 067 @Override 068 public void onClick(ClickEvent event) { 069 Widget newPanel = panels.get(linkedPanelKey); 070 container.setWidget(newPanel); 071 } 072 }); 073 074 linkPanel.add(linkWidget); 075 return linkWidget; 076 } 077 } 078 079 public LinkPanel(Enum<?> defaultPanelKey, Widget content){ 080 PanelInfo info = new PanelInfo(defaultPanelKey, content); 081 panels.put(defaultPanelKey, info); 082 container.setWidget(info); 083 this.initWidget(container); 084 } 085 086 public void addPanel(Enum<?> panelKey, Widget content){ 087 PanelInfo info = new PanelInfo(panelKey, content); 088 panels.put(panelKey, info); 089 } 090 091 public KSButton addLinkToPanel(Enum<?> panelKey, String linkText, Enum<?> linkedPanelKey){ 092 PanelInfo info = panels.get(panelKey); 093 return info.addLink(linkText, linkedPanelKey); 094 } 095 }