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 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 | }
|
---|