ffa18575d660f022905832fa9a38b8b6d22f3207
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / util / DropDownMenu.java
1 package net.mograsim.plugin.util;
2
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;
14
15 public class DropDownMenu
16 {
17         private Button button;
18
19         public DropDownMenu(Composite parent, String label, DropDownEntry... entries)
20         {
21                 button = new Button(parent, SWT.PUSH);
22                 button.setText(label);
23                 setupDrowpDownMenu(entries);
24         }
25
26         private void setupDrowpDownMenu(DropDownEntry[] entries)
27         {
28                 Menu menu = new Menu(button);
29                 for (DropDownEntry entry : entries)
30                 {
31                         MenuItem item = new MenuItem(menu, SWT.PUSH);
32                         item.addSelectionListener(new SelectionListener()
33                         {
34                                 @Override
35                                 public void widgetSelected(SelectionEvent e)
36                                 {
37                                         entry.listener.widgetSelected(e);
38                                 }
39
40                                 @Override
41                                 public void widgetDefaultSelected(SelectionEvent e)
42                                 {
43                                         widgetSelected(e);
44                                 }
45                         });
46                         item.setText(entry.title);
47                 }
48
49                 button.addListener(SWT.Selection, new Listener()
50                 {
51                         @Override
52                         public void handleEvent(Event event)
53                         {
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);
59                         }
60                 });
61         }
62
63         public Button getButton()
64         {
65                 return button;
66         }
67
68         public static class DropDownEntry
69         {
70                 public final String title;
71                 public final EntrySelectedListener listener;
72
73                 public DropDownEntry(String title, EntrySelectedListener listener)
74                 {
75                         super();
76                         this.title = title;
77                         this.listener = listener;
78                 }
79         }
80
81         @FunctionalInterface
82         public static interface EntrySelectedListener
83         {
84                 public void widgetSelected(SelectionEvent e);
85         }
86 }