package org.panlab.software.fstoolkit.views.FSDLView; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; import org.eclipse.ui.ide.IGotoMarker; import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.views.properties.IPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor; import org.panlab.software.fstoolkit.Activator; import org.panlab.software.fstoolkit.modules.FSDLSourceCompletion.FSDLSourceCompletion; import org.panlab.software.fstoolkit.providerAdapters.OfficeResourcesContentProvider; import org.panlab.software.fstoolkit.providerAdapters.OfficeTaxonomiesLabelProvider; import FederationOffice.Office; import FederationOffice.provider.FederationOfficeItemProviderAdapterFactory; import FederationOffice.uiObjects.ui_TaxonomyTreeItem; public class OfferedResourcesView extends ViewPart implements ITabbedPropertySheetPageContributor{ //we need this to display the selected item to the Tabbed property sheet editor /** * The ID of the view as specified by the extension. */ public static final String ID = "org.panlab.software.fstoolkit.views.OfferedResourcesView"; private TreeViewer viewer; private DrillDownAdapter drillDownAdapter; private Action AddServiceCodeAction; private Action action2; // private PropertySheetPage propertySheetPage; private ComposedAdapterFactory adapterFactory; public OfferedResourcesView() { } @Override public void createPartControl(Composite parent) { // Just a little bit layout //parent.setLayout(new GridLayout(1, false)); PatternFilter patternFilter = new PatternFilter(); final FilteredTree filter = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, patternFilter, true); viewer = filter.getViewer(); //viewer = new TreeViewer(parent , SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL ); drillDownAdapter = new DrillDownAdapter(viewer); getSite().setSelectionProvider(viewer); // OfficeTaxonomiesContentProvider offProvider = new OfficeTaxonomiesContentProvider( getViewSite(), true, true, false); // offProvider.AddOfficesFromManager( Activator.getDefault().getOfficeManager() ); // viewer.setContentProvider( offProvider ); initializeOfferedResourcesDomain(); FontData[] boldFontData= getModifiedFontData(viewer.getTree().getFont().getFontData(), SWT.BOLD); Font boldFont = new Font(Display.getCurrent(), boldFontData); viewer.setLabelProvider(new OfficeTaxonomiesLabelProvider( boldFont ) ); viewer.setSorter(new NameSorter()); viewer.setInput( getViewSite() ); // Create the help context id for the viewer's control PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), "org.panlab.software.fstoolkit.viewer"); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); //viewer.expandToLevel(2); } public void initializeOfferedResourcesDomain() { // Create an adapter factory that yields item providers. adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); AdapterFactory factory = (AdapterFactory) new FederationOfficeItemProviderAdapterFactory() ; adapterFactory.addAdapterFactory( factory); OfficeResourcesContentProvider offProvider = new OfficeResourcesContentProvider( getViewSite() , false, true); offProvider.AddOfficesFromManager( Activator.getDefault().getOfficeManager() ); viewer.setContentProvider( offProvider ); viewer.expandToLevel(2); } private static FontData[] getModifiedFontData(FontData[] originalData, int additionalStyle) { FontData[] styleData = new FontData[originalData.length]; for (int i = 0; i < styleData.length; i++) { FontData base = originalData[i]; styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | additionalStyle); // System.out.println("FONT = "+ base.getName()); // System.out.println("FONT getHeight= "+ base.getHeight()); } return styleData; } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { OfferedResourcesView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); } private void fillContextMenu(IMenuManager manager) { manager.add(AddServiceCodeAction); manager.add(action2); manager.add(new Separator()); drillDownAdapter.addNavigationActions(manager); // Other plug-ins can contribute there actions here manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } private void makeActions() { action2 = new Action() { public void run() { showMessage("Action 2 executed"); } }; action2.setText("Action 2"); action2.setToolTipText("Action 2 tooltip"); action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); AddServiceCodeAction = new Action() { public void run() { ISelection selection = viewer.getSelection(); Object TreeObj = ((IStructuredSelection)selection).getFirstElement(); FederationOffice.NamedElement obj = (( ui_TaxonomyTreeItem ) TreeObj).getOfficeElement() ; if (!(obj instanceof FederationOffice.services.Service) && !(obj instanceof FederationOffice.resources.Resource )) return; //System.out.println("============ AddServiceCodeAction: "+ obj.toString() ); FSDLSourceCompletion sc = new FSDLSourceCompletion(); sc.AddOfferedService(((Office)obj.eContainer()), (FederationOffice.services.Service)obj); } }; AddServiceCodeAction.setText("Insert selected object"); AddServiceCodeAction.setToolTipText("Insert code for selected object"); AddServiceCodeAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); } private void hookDoubleClickAction() { viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { AddServiceCodeAction.run(); } }); } private void showMessage(String message) { MessageDialog.openInformation( viewer.getControl().getShell(), "Sample View", message); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalPullDown(IMenuManager manager) { manager.add(AddServiceCodeAction); manager.add(new Separator()); manager.add(action2); } private void fillLocalToolBar(IToolBarManager manager) { manager.add(AddServiceCodeAction); manager.add(action2); manager.add(new Separator()); drillDownAdapter.addNavigationActions(manager); } @Override public void setFocus() { } class NameSorter extends ViewerSorter { } //this is used for the Property Tab Sheet /* This is how the framework determines which interfaces we implement. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object getAdapter(@SuppressWarnings("rawtypes") Class key) { if (key.equals(IPropertySheetPage.class)) { OfferedResourcesTabbedPropertySheetPage tp = new OfferedResourcesTabbedPropertySheetPage(this); return tp; // if (key.equals(IPropertySheetPage.class)) { // return getPropertySheetPage(); } else if (key.equals(IGotoMarker.class)) { return this; } else { return super.getAdapter(key); } } public AdapterFactory getAdapterFactory() { return adapterFactory; } @Override public String getContributorId() { return getSite().getId(); } }