1 package net.mograsim.plugin.util;
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.events.SelectionEvent;
5 import org.eclipse.swt.events.SelectionListener;
6 import org.eclipse.swt.graphics.Point;
7 import org.eclipse.swt.graphics.Rectangle;
8 import org.eclipse.swt.widgets.Button;
9 import org.eclipse.swt.widgets.Composite;
10 import org.eclipse.swt.widgets.Event;
11 import org.eclipse.swt.widgets.Listener;
12 import org.eclipse.swt.widgets.Menu;
13 import org.eclipse.swt.widgets.MenuItem;
15 public class DropDownMenu
17 private Button button;
19 public DropDownMenu(Composite parent, String label, DropDownEntry... entries)
21 button = new Button(parent, SWT.PUSH);
22 button.setText(label);
23 setupDrowpDownMenu(entries);
26 private void setupDrowpDownMenu(DropDownEntry[] entries)
28 Menu menu = new Menu(button);
29 for (DropDownEntry entry : entries)
31 MenuItem item = new MenuItem(menu, SWT.PUSH);
32 item.addSelectionListener(new SelectionListener()
35 public void widgetSelected(SelectionEvent e)
37 entry.listener.widgetSelected(e);
41 public void widgetDefaultSelected(SelectionEvent e)
46 item.setText(entry.title);
49 button.addListener(SWT.Selection, new Listener()
52 public void handleEvent(Event event)
54 Rectangle rect = button.getBounds();
55 Point pt = new Point(rect.x, rect.y + rect.height);
56 pt = button.getParent().toDisplay(pt);
57 menu.setLocation(pt.x, pt.y);
58 menu.setVisible(true);
63 public Button getButton()
68 public static class DropDownEntry
70 public final String title;
71 public final EntrySelectedListener listener;
73 public DropDownEntry(String title, EntrySelectedListener listener)
77 this.listener = listener;
82 public static interface EntrySelectedListener
84 public void widgetSelected(SelectionEvent e);