+++ /dev/null
-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);
- }
-}