source: gs3-extensions/atlas-src/trunk/src/org/greenstone/client/Menu.java@ 22277

Last change on this file since 22277 was 22277, checked in by sjm84, 14 years ago

Added several improvements to the code such as the ability to remove places if they from the text and map if they should not be places

File size: 4.0 KB
Line 
1package org.greenstone.client;
2
3import java.util.ArrayList;
4
5import com.google.gwt.event.dom.client.MouseOutHandler;
6import com.google.gwt.event.dom.client.MouseOverHandler;
7import com.google.gwt.user.client.DOM;
8import com.google.gwt.user.client.Element;
9import com.google.gwt.user.client.Timer;
10import com.google.gwt.user.client.ui.HTML;
11import com.google.gwt.user.client.ui.Label;
12
13public class Menu
14{
15 protected Element _parent = null;
16 protected ArrayList<Menu> _childMenus = new ArrayList<Menu>();
17 protected ArrayList<MenuItem> _menuItems = new ArrayList<MenuItem>();
18 protected HTML _menuDiv = new HTML();
19 protected MouseOverHandler _onMouseOver = null;
20 protected MouseOutHandler _onMouseOut = null;
21
22 public Menu(Element parent, MouseOverHandler onMouseOver, MouseOutHandler onMouseOut)
23 {
24 _parent = parent;
25 parent.appendChild(_menuDiv.getElement());
26 _menuDiv.getElement().getStyle().setProperty("background", "#FFFFFF");
27 _menuDiv.getElement().getStyle().setProperty("padding", "2px");
28 _menuDiv.getElement().getStyle().setProperty("position", "absolute");
29
30 _onMouseOver = onMouseOver;
31 _onMouseOut = onMouseOut;
32 }
33
34 public void addMenuItems(ArrayList<MenuItem> menuItems)
35 {
36 _menuItems = menuItems;
37 int maxWidth = -1;
38 for(int i = 0; i < menuItems.size(); i++)
39 {
40 if(!menuItems.get(i).condition())
41 {
42 continue;
43 }
44 Element item = menuItems.get(i).getMenuElement();
45 item.getStyle().setProperty("background", "#FFFFFF");
46 item.getStyle().setProperty("color", "#000000");
47 item.getStyle().setProperty("border", "1px solid");
48 item.getStyle().setProperty("padding", "2px");
49
50 Label newLabel = Label.wrap(item);
51 newLabel.addMouseOverHandler(_onMouseOver);
52 newLabel.addMouseOutHandler(_onMouseOut);
53 newLabel.addClickHandler(menuItems.get(i).getClickHandler());
54
55 _menuDiv.getElement().appendChild(item);
56
57 if(item.getOffsetWidth() > maxWidth)
58 {
59 maxWidth = item.getOffsetWidth();
60 }
61 }
62
63 for(int i = 0; i < menuItems.size(); i++)
64 {
65 menuItems.get(i).getMenuElement().getStyle().setProperty("width", maxWidth + "px");
66 }
67 }
68
69 public void moveMenu(final int x, final int y)
70 {
71 _menuDiv.setVisible(false);
72 _menuDiv.getElement().getStyle().setProperty("left", x + "px");
73 _menuDiv.getElement().getStyle().setProperty("top", y + "px");
74
75 Timer pause = new Timer()
76 {
77 public void run()
78 {
79 if (_menuDiv.getOffsetHeight() > GS3MapLibrary.getElementById("GSContent").getOffsetHeight())
80 {
81 _menuDiv.getElement().getStyle().setProperty("top", GS3MapLibrary.getElementById("GSContent").getAbsoluteTop() + "px");
82 _menuDiv.getElement().getStyle().setProperty("overflow", "auto");
83 _menuDiv.getElement().getStyle().setProperty("height", GS3MapLibrary.getElementById("GSContent").getOffsetHeight() + "px");
84 }
85 else if(y + _menuDiv.getOffsetHeight() > GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop())
86 {
87 _menuDiv.getElement().getStyle().setProperty("top", (y - ( y + _menuDiv.getOffsetHeight() - GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop()) + "px"));
88 }
89 _menuDiv.setVisible(true);
90 }
91 };
92 pause.schedule(100);
93 }
94
95 public void addChildMenu(Menu menu)
96 {
97 _childMenus.add(menu);
98 }
99
100 public void hideMenu()
101 {
102 _menuDiv.setVisible(false);
103
104 for(Menu m : _childMenus)
105 {
106 if(m != null)
107 {
108 m.hideMenu();
109 }
110 }
111 }
112
113 public void refreshMenu()
114 {
115 _parent.removeChild(_menuDiv.getElement());
116 _menuDiv = new HTML();
117 _parent.appendChild(_menuDiv.getElement());
118 _menuDiv.getElement().getStyle().setProperty("background", "#FFFFFF");
119 _menuDiv.getElement().getStyle().setProperty("padding", "2px");
120 _menuDiv.getElement().getStyle().setProperty("position", "absolute");
121 addMenuItems(_menuItems);
122 }
123
124 public void showMenu()
125 {
126 _menuDiv.setVisible(true);
127 }
128
129 public HTML getMenuDiv()
130 {
131 return _menuDiv;
132 }
133}
Note: See TracBrowser for help on using the repository browser.