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