Removed some more warnings and cleaned more SWT listeners
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / asm / AsmOpsEdit.java
1 package net.mograsim.plugin.asm;
2
3 import java.util.Arrays;
4 import java.util.stream.Collectors;
5
6 import javax.inject.Inject;
7
8 import org.eclipse.e4.ui.di.Persist;
9 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
10 import org.eclipse.jface.action.Action;
11 import org.eclipse.jface.action.IAction;
12 import org.eclipse.jface.action.IMenuManager;
13 import org.eclipse.jface.action.IToolBarManager;
14 import org.eclipse.jface.action.MenuManager;
15 import org.eclipse.jface.action.Separator;
16 import org.eclipse.jface.viewers.ArrayContentProvider;
17 import org.eclipse.jface.viewers.ITableLabelProvider;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.jface.viewers.TableViewer;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.graphics.Image;
22 import org.eclipse.swt.layout.GridData;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Menu;
26 import org.eclipse.swt.widgets.Text;
27 import org.eclipse.ui.IActionBars;
28 import org.eclipse.ui.ISharedImages;
29 import org.eclipse.ui.IWorkbench;
30 import org.eclipse.ui.IWorkbenchActionConstants;
31 import org.eclipse.ui.PlatformUI;
32 import org.eclipse.ui.part.ViewPart;
33
34 import net.mograsim.plugin.AsmOps;
35
36 /**
37  * This sample class demonstrates how to plug-in a new workbench view. The view shows data obtained from the model. The sample creates a
38  * dummy model on the fly, but a real implementation would connect to the model available either in this or another plug-in (e.g. the
39  * workspace). The view is connected to the model using a content provider.
40  * <p>
41  * The view uses a label provider to define how model objects should be presented in the view. Each view can present the same model objects
42  * using different labels and icons, if needed. Alternatively, a single label provider can be shared between views in order to ensure that
43  * objects of the same type are presented in the same way everywhere.
44  * <p>
45  */
46
47 public class AsmOpsEdit extends ViewPart
48 {
49
50         @Inject
51         private MPart part;
52
53         /**
54          * The ID of the view as specified by the extension.
55          */
56         public static final String ID = "plugintest.views.AsmOpsEdit";
57
58         @Inject
59         IWorkbench workbench;
60
61         private Text txtInput;
62         private TableViewer viewer;
63
64         private IAction saveAction;
65
66         class ViewLabelProvider extends LabelProvider implements ITableLabelProvider
67         {
68                 @Override
69                 public String getColumnText(Object obj, int index)
70                 {
71                         return getText(obj);
72                 }
73
74                 @Override
75                 public Image getColumnImage(Object obj, int index)
76                 {
77                         return getImage(obj);
78                 }
79
80                 @Override
81                 public Image getImage(Object obj)
82                 {
83                         return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
84                 }
85         }
86
87         @Override
88         public void createPartControl(Composite parent)
89         {
90                 parent.setLayout(new GridLayout(1, false));
91
92                 txtInput = new Text(parent, SWT.BORDER);
93                 txtInput.setMessage("Enter new Asm OP");
94                 txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
95                 txtInput.addListener(SWT.KeyDown, e ->
96                 {
97                         if (e.keyCode == SWT.CR || e.keyCode == SWT.LF)
98                         {
99                                 String in = txtInput.getText().toLowerCase();
100                                 if (in.startsWith("-"))
101                                         viewer.remove(in.substring(1).trim());
102                                 else
103                                         viewer.add(in.trim());
104                                 txtInput.setText("");
105                                 part.setDirty(true);
106                                 save();
107                         }
108                 });
109
110                 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
111
112                 viewer.setContentProvider(ArrayContentProvider.getInstance());
113                 viewer.setInput(createInitialDataModel());
114                 viewer.setLabelProvider(new ViewLabelProvider());
115                 viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
116
117                 // Create the help context id for the viewer's control
118                 workbench.getHelpSystem().setHelp(viewer.getControl(), "PluginTest.viewer");
119                 getSite().setSelectionProvider(viewer);
120                 makeActions();
121                 contributeToActionBars();
122                 hookContextMenu();
123         }
124
125         private Object createInitialDataModel()
126         {
127                 return AsmOps.ops;
128         }
129
130         @Override
131         public void setFocus()
132         {
133                 txtInput.setFocus();
134         }
135
136         @Persist
137         public void save()
138         {
139                 AsmOps.setWords(Arrays.stream(viewer.getTable().getItems()).map(i -> (String) i.getData()).collect(Collectors.toList()));
140                 viewer.refresh();
141         }
142
143         private void makeActions()
144         {
145                 saveAction = new Action()
146                 {
147                         @Override
148                         public void run()
149                         {
150                                 save();
151                                 part.setDirty(false);
152                         }
153                 };
154                 saveAction.setText("Save");
155                 saveAction.setToolTipText("Save Changes To ISA");
156                 saveAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
157         }
158
159         private void contributeToActionBars()
160         {
161                 IActionBars bars = getViewSite().getActionBars();
162                 fillLocalPullDown(bars.getMenuManager());
163                 fillLocalToolBar(bars.getToolBarManager());
164         }
165
166         private void fillLocalPullDown(IMenuManager manager)
167         {
168                 manager.add(saveAction);
169         }
170
171         private void fillContextMenu(IMenuManager manager)
172         {
173                 manager.add(saveAction);
174                 // Other plug-ins can contribute there actions here
175                 manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
176         }
177
178         private void fillLocalToolBar(IToolBarManager manager)
179         {
180                 manager.add(saveAction);
181         }
182
183         private void hookContextMenu()
184         {
185                 MenuManager menuMgr = new MenuManager("#PopupMenu");
186                 menuMgr.setRemoveAllWhenShown(true);
187                 menuMgr.addMenuListener(this::fillContextMenu);
188                 Menu menu = menuMgr.createContextMenu(viewer.getControl());
189                 viewer.getControl().setMenu(menu);
190                 getSite().registerContextMenu(menuMgr, viewer);
191         }
192 }