/** * 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.frontend.ui.internal.section; import gov.redhawk.frontend.ListenerAllocation; import gov.redhawk.frontend.TunerContainer; import gov.redhawk.frontend.TunerStatus; import gov.redhawk.frontend.UnallocatedTunerContainer; import gov.redhawk.frontend.ui.internal.AllocateAction; import gov.redhawk.frontend.ui.internal.DeallocateAction; import gov.redhawk.frontend.ui.internal.FeiPlotAction; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; public class FrontendSection extends AbstractPropertySection { private TunerStatusProperitesViewer viewer; private EObject theInput; private IAction deallocateAction; private IAction allocateAction; private IAction plotAction; private IWorkbenchPart inputPart; /** * The Property Sheet Page. */ private TabbedPropertySheetPage page; public FrontendSection() { } @Override public void createControls(Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory(); viewer = new TunerStatusProperitesViewer(parent, SWT.None, factory.getOrientation() | factory.getBorderStyle() | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE); factory.adapt(viewer); factory.adapt(viewer.getViewer().getControl(), false, false); allocateAction = new AllocateAction(this); deallocateAction = new DeallocateAction(this); plotAction = new FeiPlotAction(this); page = aTabbedPropertySheetPage; } @Override public boolean shouldUseExtraSpace() { return true; } private IToolBarManager getToolbar() { if (page != null && page.getSite() != null && page.getSite().getActionBars() != null) { return page.getSite().getActionBars().getToolBarManager(); } else { return null; } } @Override public void setInput(IWorkbenchPart part, ISelection selection) { super.setInput(part, selection); inputPart = part; if (page == null) { return; } if (selection instanceof StructuredSelection) { StructuredSelection sel = (StructuredSelection) selection; if (sel.getFirstElement() instanceof EObject) { theInput = (EObject) sel.getFirstElement(); viewer.getViewer().setInput(theInput); if (theInput instanceof TunerStatus) { viewer.setTuner((TunerStatus) theInput); } } else { theInput = null; viewer.getViewer().setInput(null); viewer.setTuner(null); } showRightToolbarButtons(theInput); } } public EObject getInput() { return theInput; } public IWorkbenchPart getInputPart() { return inputPart; } public void unsetPageSelection() { page.selectionChanged(inputPart, StructuredSelection.EMPTY); setInput(null, null); } private void hideAllToolbarButtons() { if (getToolbar() == null) { return; } getToolbar().remove(allocateAction.getId()); getToolbar().remove(deallocateAction.getId()); getToolbar().remove(plotAction.getId()); page.getSite().getActionBars().updateActionBars(); } private void addToToolbar(IAction action) { if (getToolbar() == null) { return; } if (getToolbar().find(action.getId()) == null) { getToolbar().add(action); } } private void setComponentName(IAction action) { ActionContributionItem item = (ActionContributionItem) getToolbar().find(action.getId()); if (item == null) { return; } Widget w = item.getWidget(); if (w != null) { w.setData("TEST_COMP_NAME", action.getId()); } } private void showRightToolbarButtons(Object obj) { if (getToolbar() == null) { return; } if (obj instanceof TunerStatus) { getToolbar().remove(allocateAction.getId()); addToToolbar(deallocateAction); addToToolbar(plotAction); } if (obj instanceof ListenerAllocation) { getToolbar().remove(allocateAction.getId()); getToolbar().remove(plotAction.getId()); addToToolbar(deallocateAction); } if (obj instanceof TunerContainer) { getToolbar().remove(plotAction.getId()); addToToolbar(allocateAction); addToToolbar(deallocateAction); } if (obj instanceof UnallocatedTunerContainer) { getToolbar().remove(plotAction.getId()); getToolbar().remove(deallocateAction.getId()); addToToolbar(allocateAction); } page.getSite().getActionBars().updateActionBars(); setComponentName(allocateAction); setComponentName(deallocateAction); setComponentName(plotAction); } /** * @see org.eclipse.ui.views.properties.tabbed.ISection#refresh() */ @Override public void refresh() { if (this.viewer != null && !this.viewer.getViewer().isCellEditorActive()) { this.viewer.getViewer().refresh(); } } @Override public void dispose() { hideAllToolbarButtons(); super.dispose(); } @Override public void aboutToBeHidden() { hideAllToolbarButtons(); super.aboutToBeHidden(); } @Override public void aboutToBeShown() { showRightToolbarButtons(getInput()); super.aboutToBeShown(); } }