The final restructured version for automatic build using maven tycho
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / util / DropDownMenu.java
diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/util/DropDownMenu.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/util/DropDownMenu.java
new file mode 100644 (file)
index 0000000..ffa1857
--- /dev/null
@@ -0,0 +1,86 @@
+package net.mograsim.plugin.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+public class DropDownMenu
+{
+       private Button button;
+
+       public DropDownMenu(Composite parent, String label, DropDownEntry... entries)
+       {
+               button = new Button(parent, SWT.PUSH);
+               button.setText(label);
+               setupDrowpDownMenu(entries);
+       }
+
+       private void setupDrowpDownMenu(DropDownEntry[] entries)
+       {
+               Menu menu = new Menu(button);
+               for (DropDownEntry entry : entries)
+               {
+                       MenuItem item = new MenuItem(menu, SWT.PUSH);
+                       item.addSelectionListener(new SelectionListener()
+                       {
+                               @Override
+                               public void widgetSelected(SelectionEvent e)
+                               {
+                                       entry.listener.widgetSelected(e);
+                               }
+
+                               @Override
+                               public void widgetDefaultSelected(SelectionEvent e)
+                               {
+                                       widgetSelected(e);
+                               }
+                       });
+                       item.setText(entry.title);
+               }
+
+               button.addListener(SWT.Selection, new Listener()
+               {
+                       @Override
+                       public void handleEvent(Event event)
+                       {
+                               Rectangle rect = button.getBounds();
+                               Point pt = new Point(rect.x, rect.y + rect.height);
+                               pt = button.getParent().toDisplay(pt);
+                               menu.setLocation(pt.x, pt.y);
+                               menu.setVisible(true);
+                       }
+               });
+       }
+
+       public Button getButton()
+       {
+               return button;
+       }
+
+       public static class DropDownEntry
+       {
+               public final String title;
+               public final EntrySelectedListener listener;
+
+               public DropDownEntry(String title, EntrySelectedListener listener)
+               {
+                       super();
+                       this.title = title;
+                       this.listener = listener;
+               }
+       }
+
+       @FunctionalInterface
+       public static interface EntrySelectedListener
+       {
+               public void widgetSelected(SelectionEvent e);
+       }
+}