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

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

Initial version of ATLAS as an extension

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 ArrayList<Menu> _childMenus = new ArrayList<Menu>();
16 protected ArrayList<MenuItem> _menuItems = new ArrayList<MenuItem>();
17 protected HTML _menuDiv = new HTML();
18 protected MouseOverHandler _onMouseOver = null;
19 protected MouseOutHandler _onMouseOut = null;
20
21 public Menu(Element parent, MouseOverHandler onMouseOver, MouseOutHandler onMouseOut)
22 {
23 parent.appendChild(_menuDiv.getElement());
24 _menuDiv.getElement().getStyle().setProperty("background", "#FFFFFF");
25 _menuDiv.getElement().getStyle().setProperty("padding", "2px");
26 _menuDiv.getElement().getStyle().setProperty("position", "absolute");
27
28 _onMouseOver = onMouseOver;
29 _onMouseOut = onMouseOut;
30 }
31
32 public void addMenuItems(ArrayList<MenuItem> menuItems)
33 {
34 int maxWidth = -1;
35 for(int i = 0; i < menuItems.size(); i++)
36 {
37 Element item = menuItems.get(i).getMenuElement();
38 item.getStyle().setProperty("background", "#FFFFFF");
39 item.getStyle().setProperty("color", "#000000");
40 item.getStyle().setProperty("border", "1px solid");
41 item.getStyle().setProperty("padding", "2px");
42
43 Label newLabel = Label.wrap(item);
44 newLabel.addMouseOverHandler(_onMouseOver);
45 newLabel.addMouseOutHandler(_onMouseOut);
46 newLabel.addClickHandler(menuItems.get(i).getClickHandler());
47
48 _menuDiv.getElement().appendChild(item);
49
50 if(item.getOffsetWidth() > maxWidth)
51 {
52 maxWidth = item.getOffsetWidth();
53 }
54 }
55
56 for(int i = 0; i < menuItems.size(); i++)
57 {
58 menuItems.get(i).getMenuElement().getStyle().setProperty("width", maxWidth + "px");
59 }
60 }
61
62 public void moveMenu(final int x, final int y)
63 {
64 _menuDiv.setVisible(false);
65 _menuDiv.getElement().getStyle().setProperty("left", x + "px");
66 _menuDiv.getElement().getStyle().setProperty("top", y + "px");
67
68 Timer pause = new Timer()
69 {
70 public void run()
71 {
72 //GS3MapLibrary.logToConsole("Menu height = " + _menuDiv.getOffsetHeight() + ", Div height = " + GS3MapLibrary.getElementById("GSContent").getOffsetHeight() + ", Top = " + GS3MapLibrary.getElementById("GSContent").getAbsoluteTop());
73
74 if (_menuDiv.getOffsetHeight() > GS3MapLibrary.getElementById("GSContent").getOffsetHeight())
75 {
76 _menuDiv.getElement().getStyle().setProperty("top", GS3MapLibrary.getElementById("GSContent").getAbsoluteTop() + "px");
77 _menuDiv.getElement().getStyle().setProperty("overflow", "auto");
78 _menuDiv.getElement().getStyle().setProperty("height", GS3MapLibrary.getElementById("GSContent").getOffsetHeight() + "px");
79 }
80 else if(y + _menuDiv.getOffsetHeight() > GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop())
81 {
82 //GS3MapLibrary.logToConsole("TRUE, " + (y + _menuDiv.getOffsetHeight()) + " is greater than " + GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop());
83 _menuDiv.getElement().getStyle().setProperty("top", (y - ( y + _menuDiv.getOffsetHeight() - GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop()) + "px"));
84 }
85 else
86 {
87 //GS3MapLibrary.logToConsole("FALSE, " + (y + _menuDiv.getOffsetHeight()) + " is less than " + GS3MapLibrary.getElementById("GSFooter").getAbsoluteTop());
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 showMenu()
114 {
115 _menuDiv.setVisible(true);
116 }
117
118 public HTML getMenuDiv()
119 {
120 return _menuDiv;
121 }
122}
Note: See TracBrowser for help on using the repository browser.