1 package net.mograsim.plugin.asm;
3 import java.util.Arrays;
4 import java.util.stream.Collectors;
6 import javax.inject.Inject;
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.IMenuListener;
13 import org.eclipse.jface.action.IMenuManager;
14 import org.eclipse.jface.action.IToolBarManager;
15 import org.eclipse.jface.action.MenuManager;
16 import org.eclipse.jface.action.Separator;
17 import org.eclipse.jface.viewers.ArrayContentProvider;
18 import org.eclipse.jface.viewers.ITableLabelProvider;
19 import org.eclipse.jface.viewers.LabelProvider;
20 import org.eclipse.jface.viewers.TableViewer;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.KeyEvent;
23 import org.eclipse.swt.events.KeyListener;
24 import org.eclipse.swt.graphics.Image;
25 import org.eclipse.swt.layout.GridData;
26 import org.eclipse.swt.layout.GridLayout;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Menu;
29 import org.eclipse.swt.widgets.Text;
30 import org.eclipse.ui.IActionBars;
31 import org.eclipse.ui.ISharedImages;
32 import org.eclipse.ui.IWorkbench;
33 import org.eclipse.ui.IWorkbenchActionConstants;
34 import org.eclipse.ui.PlatformUI;
35 import org.eclipse.ui.part.ViewPart;
37 import net.mograsim.plugin.AsmOps;
40 * This sample class demonstrates how to plug-in a new workbench view. The view shows data obtained from the model. The sample creates a
41 * 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
42 * workspace). The view is connected to the model using a content provider.
44 * 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
45 * using different labels and icons, if needed. Alternatively, a single label provider can be shared between views in order to ensure that
46 * objects of the same type are presented in the same way everywhere.
50 public class AsmOpsEdit extends ViewPart
57 * The ID of the view as specified by the extension.
59 public static final String ID = "plugintest.views.AsmOpsEdit";
64 private Text txtInput;
65 private TableViewer viewer;
67 private IAction saveAction;
69 class ViewLabelProvider extends LabelProvider implements ITableLabelProvider
72 public String getColumnText(Object obj, int index)
78 public Image getColumnImage(Object obj, int index)
84 public Image getImage(Object obj)
86 return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
91 public void createPartControl(Composite parent)
93 parent.setLayout(new GridLayout(1, false));
95 txtInput = new Text(parent, SWT.BORDER);
96 txtInput.setMessage("Enter new Asm OP");
97 txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
98 txtInput.addKeyListener(new KeyListener()
102 public void keyReleased(KeyEvent e)
104 // TODO Auto-generated method stub
109 public void keyPressed(KeyEvent e)
111 if (e.keyCode == SWT.CR || e.keyCode == SWT.LF)
113 String in = txtInput.getText().toLowerCase();
114 if (in.startsWith("-"))
115 viewer.remove(in.substring(1).trim());
117 viewer.add(in.trim());
118 txtInput.setText("");
124 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
126 viewer.setContentProvider(ArrayContentProvider.getInstance());
127 viewer.setInput(createInitialDataModel());
128 viewer.setLabelProvider(new ViewLabelProvider());
129 viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
131 // Create the help context id for the viewer's control
132 workbench.getHelpSystem().setHelp(viewer.getControl(), "PluginTest.viewer");
133 getSite().setSelectionProvider(viewer);
135 contributeToActionBars();
139 private Object createInitialDataModel()
145 public void setFocus()
153 AsmOps.setWords(Arrays.stream(viewer.getTable().getItems()).map(i -> (String) i.getData()).collect(Collectors.toList()));
157 private void makeActions()
159 saveAction = new Action()
164 part.setDirty(false);
167 saveAction.setText("Save");
168 saveAction.setToolTipText("Save Changes To ISA");
169 saveAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
172 private void contributeToActionBars()
174 IActionBars bars = getViewSite().getActionBars();
175 fillLocalPullDown(bars.getMenuManager());
176 fillLocalToolBar(bars.getToolBarManager());
179 private void fillLocalPullDown(IMenuManager manager)
181 manager.add(saveAction);
184 private void fillContextMenu(IMenuManager manager)
186 manager.add(saveAction);
187 // Other plug-ins can contribute there actions here
188 manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
191 private void fillLocalToolBar(IToolBarManager manager)
193 manager.add(saveAction);
196 private void hookContextMenu()
198 MenuManager menuMgr = new MenuManager("#PopupMenu");
199 menuMgr.setRemoveAllWhenShown(true);
200 menuMgr.addMenuListener(new IMenuListener()
202 public void menuAboutToShow(IMenuManager manager)
204 AsmOpsEdit.this.fillContextMenu(manager);
207 Menu menu = menuMgr.createContextMenu(viewer.getControl());
208 viewer.getControl().setMenu(menu);
209 getSite().registerContextMenu(menuMgr, viewer);