[22272] | 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 | {
|
---|
[22277] | 15 | protected Element _parent = null;
|
---|
[22272] | 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 | {
|
---|
[22277] | 24 | _parent = parent;
|
---|
[22272] | 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 | {
|
---|
[22277] | 36 | _menuItems = menuItems;
|
---|
[22272] | 37 | int maxWidth = -1;
|
---|
| 38 | for(int i = 0; i < menuItems.size(); i++)
|
---|
| 39 | {
|
---|
[22277] | 40 | if(!menuItems.get(i).condition())
|
---|
| 41 | {
|
---|
| 42 | continue;
|
---|
| 43 | }
|
---|
[22272] | 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()
|
---|
[22277] | 78 | {
|
---|
[22272] | 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 |
|
---|
[22277] | 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 |
|
---|
[22272] | 124 | public void showMenu()
|
---|
| 125 | {
|
---|
| 126 | _menuDiv.setVisible(true);
|
---|
| 127 | }
|
---|
| 128 |
|
---|
| 129 | public HTML getMenuDiv()
|
---|
| 130 | {
|
---|
| 131 | return _menuDiv;
|
---|
| 132 | }
|
---|
| 133 | }
|
---|