/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * All rights reserved. This program and the accompanying materials are made available under * the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package gov.redhawk.ide.sad.internal.ui.editor; import gov.redhawk.ide.sad.internal.ui.properties.PropertiesViewer; import gov.redhawk.ide.sad.internal.ui.properties.PropertiesViewerEditingSupport; import gov.redhawk.ide.sad.internal.ui.properties.PropertiesViewerLabelProvider; import gov.redhawk.ide.sad.internal.ui.properties.model.SadPropertiesAdapterFactory; import gov.redhawk.ide.sad.ui.SadUiActivator; import gov.redhawk.ui.editor.SCAFormEditor; import gov.redhawk.ui.editor.ScaFormPage; import mil.jpeojtrs.sca.sad.SoftwareAssembly; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.nebula.widgets.xviewer.edit.XViewerEditAdapter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.menus.IMenuService; import org.eclipse.ui.plugin.AbstractUIPlugin; /** * */ public class SadPropertiesPage extends ScaFormPage { private static final String TOOLBAR_ID = "gov.redhawk.ide.sad.internal.ui.editor.properties.toolbar"; private PropertiesViewer viewer; private IAction expandAllAction = new Action() { { setToolTipText("Expand All"); final ImageDescriptor expandAllImageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(SadUiActivator.PLUGIN_ID, "icons/full/elcl16/expandall.gif"); setImageDescriptor(expandAllImageDescriptor); // setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ADD)); } @Override public void run() { viewer.expandAll(); } }; private IAction collapseAllAction = new Action() { { setToolTipText("Collapse All"); setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_COLLAPSEALL)); setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_COLLAPSEALL_DISABLED)); } @Override public void run() { viewer.collapseAll(); } }; private SadPropertiesAdapterFactory adapterFactory = null; /** * @param editor * @param id * @param title */ public SadPropertiesPage(SCAFormEditor editor, String id, String title) { super(editor, id, title); } /** * @param editor * @param id * @param title * @param newStyleHeader */ public SadPropertiesPage(SCAFormEditor editor, String id, String title, boolean newStyleHeader) { super(editor, id, title, newStyleHeader); } @Override public void dispose() { super.dispose(); if (viewer != null) { viewer.dispose(); viewer = null; } if (adapterFactory != null) { adapterFactory.dispose(); adapterFactory = null; } } @Override protected void createFormContent(IManagedForm managedForm) { final ScrolledForm form = managedForm.getForm(); form.setText("Properties"); createViewer(managedForm, managedForm.getForm().getBody()); addActions(managedForm.getForm().getToolBarManager()); viewer.getControl().setFocus(); super.createFormContent(managedForm); final ToolBarManager manager = (ToolBarManager) form.getToolBarManager(); final IMenuService service = (IMenuService) getSite().getService(IMenuService.class); service.populateContributionManager(manager, "toolbar:" + SadPropertiesPage.TOOLBAR_ID); manager.update(true); } private void addActions(IToolBarManager toolBarManager) { toolBarManager.add(new Separator("Action")); toolBarManager.add(expandAllAction); toolBarManager.add(collapseAllAction); if (viewer != null) { IAction configureAction = viewer.getCustomizeAction(); toolBarManager.add(configureAction); } } private void createViewer(IManagedForm managedForm, Composite parent) { parent.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).create()); viewer = new PropertiesViewer(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION); viewer.getTree().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); adapterFactory = new SadPropertiesAdapterFactory(); viewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); PropertiesViewerLabelProvider labelProvider = new PropertiesViewerLabelProvider(viewer); viewer.setLabelProvider(labelProvider); Resource resource = getInput(); if (resource != null) { SoftwareAssembly sad = SoftwareAssembly.Util.getSoftwareAssembly(getInput()); viewer.setInput(sad); } PropertiesViewerEditingSupport editingSupport = new PropertiesViewerEditingSupport(); viewer.setXViewerEditAdapter(new XViewerEditAdapter(editingSupport, editingSupport)); } /* (non-Javadoc) * @see gov.redhawk.ui.editor.ScaFormPage#refresh(org.eclipse.emf.ecore.resource.Resource) */ @Override protected void refresh(Resource resource) { SoftwareAssembly sad = SoftwareAssembly.Util.getSoftwareAssembly(resource); if (viewer != null) { viewer.setInput(sad); } } @Override public void updateFormSelection() { super.updateFormSelection(); viewer.refresh(); viewer.expandToLevel(2); } @Override public void setFocus() { if (viewer != null) { viewer.getControl().setFocus(); } } @Override protected Control getFocusControl() { if (viewer != null) { return viewer.getControl(); } return super.getFocusControl(); } }