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

Last change on this file since 23906 was 23906, checked in by sjm84, 13 years ago

Committing most recent version of ATLAS

File size: 3.9 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.Element;
8import com.google.gwt.user.client.Timer;
9import com.google.gwt.user.client.ui.HTML;
10import com.google.gwt.user.client.ui.Label;
11
12public 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}
Note: See TracBrowser for help on using the repository browser.