Java tutorial
/* * Debrief - the Open Source Maritime Analysis Application * http://debrief.info * * (C) 2000-2014, PlanetMayo Ltd * * This library is free software; you can redistribute it and/or * modify it under the terms of the Eclipse Public License v1.0 * (http://www.eclipse.org/legal/epl-v10.html) * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ package org.mwc.cmap.grideditor.table.actons; import java.util.Iterator; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IActionBars; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.actions.ActionGroup; import org.mwc.cmap.core.property_support.RightClickSupport; import org.mwc.cmap.grideditor.GridEditorActionContext; import org.mwc.cmap.grideditor.GridEditorView; import org.mwc.cmap.grideditor.data.GriddableWrapper; import org.mwc.cmap.grideditor.table.GridEditorTable; import MWC.GUI.Editable; import MWC.GUI.Layer; import MWC.GUI.Layers; public class GridEditorActionGroup extends ActionGroup { private final GridEditorView myView; private boolean myActionsInitialized; private InsertRowAction myInsertRowAction; private DeleteRowAction myDeleteRowAction; private TrackSelectionAction myTrackSelectionAction; private InterpolateAction myInterpolateAction; private OnlyShowVisibleAction myShowVisItemsAction; private ExportToClipboardAction myExportAction; public GridEditorActionGroup(final GridEditorView view, final GridEditorActionContext context) { myView = view; super.setContext(context); getContext().setListener(new GridEditorActionContext.Listener() { public void tableInputChanged() { myView.refreshUndoContext(); contextChanged(); } public void selectionChanged() { contextChanged(); } public void chartInputChanged() { contextChanged(); } }); } @Override public void setContext(final ActionContext context) { throw new UnsupportedOperationException("I am managing my context myself"); } @Override public GridEditorActionContext getContext() { return (GridEditorActionContext) super.getContext(); } @Override public void fillActionBars(final IActionBars actionBars) { initActions(); final IToolBarManager toolbar = actionBars.getToolBarManager(); toolbar.add(myInsertRowAction); toolbar.add(myDeleteRowAction); toolbar.add(myInterpolateAction); toolbar.add(new Separator()); toolbar.add(myExportAction); toolbar.add(new Separator()); toolbar.add(myShowVisItemsAction); toolbar.add(myTrackSelectionAction); } @Override public void fillContextMenu(final IMenuManager menu) { initActions(); menu.add(myInsertRowAction); menu.add(myDeleteRowAction); menu.add(myInterpolateAction); menu.add(new Separator()); menu.add(myExportAction); menu.add(new Separator()); menu.add(myShowVisItemsAction); menu.add(myTrackSelectionAction); menu.add(new Separator()); // right, find the selection final StructuredSelection sel = (StructuredSelection) myView.getUI().getTable().getTableViewer() .getSelection(); // do we have something? if (sel.size() > 0) { // create an array of the items being edited final Editable[] items = new Editable[sel.size()]; int index = 0; @SuppressWarnings("rawtypes") final Iterator iter = sel.iterator(); while (iter.hasNext()) { items[index++] = (Editable) iter.next(); } // collate the other metadata final GriddableWrapper wrapper = (GriddableWrapper) myView.getUI().getTable().getTableViewer() .getInput(); // fill the layers objects final Layer[] topLayers = new Layer[sel.size()]; final Layer[] parentLayers = new Layer[sel.size()]; for (int i = 0; i < sel.size(); i++) { topLayers[i] = wrapper.getWrapper().getTopLevelLayer(); parentLayers[i] = wrapper.getWrapper().getTopLevelLayer(); } final Layers theLayers = wrapper.getWrapper().getLayers(); // create a drop-down menu for this item RightClickSupport.getDropdownListFor(menu, items, topLayers, parentLayers, theLayers, true); } } private void initActions() { if (myActionsInitialized) { return; } if (myView.getUI() == null) { return; } final GridEditorTable tableUI = myView.getUI().getTable(); myTrackSelectionAction = new TrackSelectionAction(tableUI); myShowVisItemsAction = new OnlyShowVisibleAction(tableUI); myInsertRowAction = new InsertRowAction(); myDeleteRowAction = new DeleteRowAction(); myExportAction = new ExportToClipboardAction(tableUI); myInterpolateAction = new InterpolateAction(); myActionsInitialized = true; } private void contextChanged() { if (!myActionsInitialized) { return; } myTrackSelectionAction.refreshWithTableUI(); myShowVisItemsAction.refreshWithTableUI(); final GridEditorActionContext contextImpl = getContext(); myInsertRowAction.refreshWithActionContext(contextImpl); myExportAction.refreshWithTableUI(); myDeleteRowAction.refreshWithActionContext(contextImpl); myInterpolateAction.refreshWithActionContext(contextImpl); } }