1 | package org.greenstone.client;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 |
|
---|
5 | import com.google.gwt.event.dom.client.MouseOutHandler;
|
---|
6 | import com.google.gwt.event.dom.client.MouseOverHandler;
|
---|
7 | import com.google.gwt.user.client.DOM;
|
---|
8 | import com.google.gwt.user.client.Element;
|
---|
9 | import com.google.gwt.user.client.Timer;
|
---|
10 | import com.google.gwt.user.client.ui.HTML;
|
---|
11 | import com.google.gwt.user.client.ui.Label;
|
---|
12 |
|
---|
13 | public 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 | }
|
---|