DatatypesActionBarContributor.java
Go to the documentation of this file.
00001 
00007 package org.best_of_robotics.model.datatypes.presentation;
00008 
00009 import java.util.ArrayList;
00010 import java.util.Collection;
00011 
00012 import org.eclipse.emf.common.ui.viewer.IViewerProvider;
00013 
00014 import org.eclipse.emf.edit.domain.EditingDomain;
00015 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
00016 
00017 import org.eclipse.emf.edit.ui.action.ControlAction;
00018 import org.eclipse.emf.edit.ui.action.CreateChildAction;
00019 import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
00020 import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
00021 import org.eclipse.emf.edit.ui.action.LoadResourceAction;
00022 import org.eclipse.emf.edit.ui.action.ValidateAction;
00023 
00024 import org.eclipse.jface.action.Action;
00025 import org.eclipse.jface.action.ActionContributionItem;
00026 import org.eclipse.jface.action.IAction;
00027 import org.eclipse.jface.action.IContributionItem;
00028 import org.eclipse.jface.action.IContributionManager;
00029 import org.eclipse.jface.action.IMenuListener;
00030 import org.eclipse.jface.action.IMenuManager;
00031 import org.eclipse.jface.action.IToolBarManager;
00032 import org.eclipse.jface.action.MenuManager;
00033 import org.eclipse.jface.action.Separator;
00034 import org.eclipse.jface.action.SubContributionItem;
00035 
00036 import org.eclipse.jface.viewers.ISelection;
00037 import org.eclipse.jface.viewers.ISelectionChangedListener;
00038 import org.eclipse.jface.viewers.ISelectionProvider;
00039 import org.eclipse.jface.viewers.IStructuredSelection;
00040 import org.eclipse.jface.viewers.SelectionChangedEvent;
00041 import org.eclipse.jface.viewers.Viewer;
00042 
00043 import org.eclipse.ui.IEditorPart;
00044 import org.eclipse.ui.PartInitException;
00045 
00052 public class DatatypesActionBarContributor
00053         extends EditingDomainActionBarContributor
00054         implements ISelectionChangedListener {
00061         protected IEditorPart activeEditorPart;
00062 
00069         protected ISelectionProvider selectionProvider;
00070 
00077         protected IAction showPropertiesViewAction =
00078                 new Action(DataTypesEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
00079                         @Override
00080                         public void run() {
00081                                 try {
00082                                         getPage().showView("org.eclipse.ui.views.PropertySheet");
00083                                 }
00084                                 catch (PartInitException exception) {
00085                                         DataTypesEditorPlugin.INSTANCE.log(exception);
00086                                 }
00087                         }
00088                 };
00089 
00097         protected IAction refreshViewerAction =
00098                 new Action(DataTypesEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
00099                         @Override
00100                         public boolean isEnabled() {
00101                                 return activeEditorPart instanceof IViewerProvider;
00102                         }
00103 
00104                         @Override
00105                         public void run() {
00106                                 if (activeEditorPart instanceof IViewerProvider) {
00107                                         Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
00108                                         if (viewer != null) {
00109                                                 viewer.refresh();
00110                                         }
00111                                 }
00112                         }
00113                 };
00114 
00122         protected Collection<IAction> createChildActions;
00123 
00130         protected IMenuManager createChildMenuManager;
00131 
00139         protected Collection<IAction> createSiblingActions;
00140 
00147         protected IMenuManager createSiblingMenuManager;
00148 
00155         public DatatypesActionBarContributor() {
00156                 super(ADDITIONS_LAST_STYLE);
00157                 loadResourceAction = new LoadResourceAction();
00158                 validateAction = new ValidateAction();
00159                 controlAction = new ControlAction();
00160         }
00161 
00168         @Override
00169         public void contributeToToolBar(IToolBarManager toolBarManager) {
00170                 toolBarManager.add(new Separator("datatypes-settings"));
00171                 toolBarManager.add(new Separator("datatypes-additions"));
00172         }
00173 
00181         @Override
00182         public void contributeToMenu(IMenuManager menuManager) {
00183                 super.contributeToMenu(menuManager);
00184 
00185                 IMenuManager submenuManager = new MenuManager(DataTypesEditorPlugin.INSTANCE.getString("_UI_DatatypesEditor_menu"), "org.best_of_robotics.model.datatypesMenuID");
00186                 menuManager.insertAfter("additions", submenuManager);
00187                 submenuManager.add(new Separator("settings"));
00188                 submenuManager.add(new Separator("actions"));
00189                 submenuManager.add(new Separator("additions"));
00190                 submenuManager.add(new Separator("additions-end"));
00191 
00192                 // Prepare for CreateChild item addition or removal.
00193                 //
00194                 createChildMenuManager = new MenuManager(DataTypesEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
00195                 submenuManager.insertBefore("additions", createChildMenuManager);
00196 
00197                 // Prepare for CreateSibling item addition or removal.
00198                 //
00199                 createSiblingMenuManager = new MenuManager(DataTypesEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
00200                 submenuManager.insertBefore("additions", createSiblingMenuManager);
00201 
00202                 // Force an update because Eclipse hides empty menus now.
00203                 //
00204                 submenuManager.addMenuListener
00205                         (new IMenuListener() {
00206                                  public void menuAboutToShow(IMenuManager menuManager) {
00207                                          menuManager.updateAll(true);
00208                                  }
00209                          });
00210 
00211                 addGlobalActions(submenuManager);
00212         }
00213 
00220         @Override
00221         public void setActiveEditor(IEditorPart part) {
00222                 super.setActiveEditor(part);
00223                 activeEditorPart = part;
00224 
00225                 // Switch to the new selection provider.
00226                 //
00227                 if (selectionProvider != null) {
00228                         selectionProvider.removeSelectionChangedListener(this);
00229                 }
00230                 if (part == null) {
00231                         selectionProvider = null;
00232                 }
00233                 else {
00234                         selectionProvider = part.getSite().getSelectionProvider();
00235                         selectionProvider.addSelectionChangedListener(this);
00236 
00237                         // Fake a selection changed event to update the menus.
00238                         //
00239                         if (selectionProvider.getSelection() != null) {
00240                                 selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
00241                         }
00242                 }
00243         }
00244 
00253         public void selectionChanged(SelectionChangedEvent event) {
00254                 // Remove any menu items for old selection.
00255                 //
00256                 if (createChildMenuManager != null) {
00257                         depopulateManager(createChildMenuManager, createChildActions);
00258                 }
00259                 if (createSiblingMenuManager != null) {
00260                         depopulateManager(createSiblingMenuManager, createSiblingActions);
00261                 }
00262 
00263                 // Query the new selection for appropriate new child/sibling descriptors
00264                 //
00265                 Collection<?> newChildDescriptors = null;
00266                 Collection<?> newSiblingDescriptors = null;
00267 
00268                 ISelection selection = event.getSelection();
00269                 if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
00270                         Object object = ((IStructuredSelection)selection).getFirstElement();
00271 
00272                         EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
00273 
00274                         newChildDescriptors = domain.getNewChildDescriptors(object, null);
00275                         newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
00276                 }
00277 
00278                 // Generate actions for selection; populate and redraw the menus.
00279                 //
00280                 createChildActions = generateCreateChildActions(newChildDescriptors, selection);
00281                 createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
00282 
00283                 if (createChildMenuManager != null) {
00284                         populateManager(createChildMenuManager, createChildActions, null);
00285                         createChildMenuManager.update(true);
00286                 }
00287                 if (createSiblingMenuManager != null) {
00288                         populateManager(createSiblingMenuManager, createSiblingActions, null);
00289                         createSiblingMenuManager.update(true);
00290                 }
00291         }
00292 
00300         protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
00301                 Collection<IAction> actions = new ArrayList<IAction>();
00302                 if (descriptors != null) {
00303                         for (Object descriptor : descriptors) {
00304                                 actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
00305                         }
00306                 }
00307                 return actions;
00308         }
00309 
00317         protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
00318                 Collection<IAction> actions = new ArrayList<IAction>();
00319                 if (descriptors != null) {
00320                         for (Object descriptor : descriptors) {
00321                                 actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
00322                         }
00323                 }
00324                 return actions;
00325         }
00326 
00336         protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
00337                 if (actions != null) {
00338                         for (IAction action : actions) {
00339                                 if (contributionID != null) {
00340                                         manager.insertBefore(contributionID, action);
00341                                 }
00342                                 else {
00343                                         manager.add(action);
00344                                 }
00345                         }
00346                 }
00347         }
00348                 
00356         protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
00357                 if (actions != null) {
00358                         IContributionItem[] items = manager.getItems();
00359                         for (int i = 0; i < items.length; i++) {
00360                                 // Look into SubContributionItems
00361                                 //
00362                                 IContributionItem contributionItem = items[i];
00363                                 while (contributionItem instanceof SubContributionItem) {
00364                                         contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
00365                                 }
00366 
00367                                 // Delete the ActionContributionItems with matching action.
00368                                 //
00369                                 if (contributionItem instanceof ActionContributionItem) {
00370                                         IAction action = ((ActionContributionItem)contributionItem).getAction();
00371                                         if (actions.contains(action)) {
00372                                                 manager.remove(contributionItem);
00373                                         }
00374                                 }
00375                         }
00376                 }
00377         }
00378 
00385         @Override
00386         public void menuAboutToShow(IMenuManager menuManager) {
00387                 super.menuAboutToShow(menuManager);
00388                 MenuManager submenuManager = null;
00389 
00390                 submenuManager = new MenuManager(DataTypesEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
00391                 populateManager(submenuManager, createChildActions, null);
00392                 menuManager.insertBefore("edit", submenuManager);
00393 
00394                 submenuManager = new MenuManager(DataTypesEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
00395                 populateManager(submenuManager, createSiblingActions, null);
00396                 menuManager.insertBefore("edit", submenuManager);
00397         }
00398 
00405         @Override
00406         protected void addGlobalActions(IMenuManager menuManager) {
00407                 menuManager.insertAfter("additions-end", new Separator("ui-actions"));
00408                 menuManager.insertAfter("ui-actions", showPropertiesViewAction);
00409 
00410                 refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());                
00411                 menuManager.insertAfter("ui-actions", refreshViewerAction);
00412 
00413                 super.addGlobalActions(menuManager);
00414         }
00415 
00422         @Override
00423         protected boolean removeAllReferencesOnDelete() {
00424                 return true;
00425         }
00426 
00427 }


bride_plugin_source
Author(s): Alexander Bubeck
autogenerated on Sun Oct 5 2014 22:38:34