/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * 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 * * Contributors: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.coconut.description.browse.views.content; import java.net.URL; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IActionBars; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.reuseware.coconut.description.FragmentDescription; import org.reuseware.coconut.description.browse.views.AbstractBrowserView; import org.reuseware.coconut.description.classify.DescriptionManager; import org.reuseware.coconut.description.classify.UtilityProvider; import org.reuseware.coconut.ui.eclipse.CoCoNutUIPlugin; public class ContentView extends AbstractBrowserView { public static final String VIEW_ID = "org.reuseware.coconut.description.browse.views.content.ContentView"; private static final ImageDescriptor IMG_RESTART = AbstractUIPlugin.imageDescriptorFromPlugin( "org.reuseware.coconut.description.browse", "icons/actions/restart.gif"); private ContentController myController; private TableViewer contentViewer; private Action aRestart; private Action reuseAction; class NameSorter extends ViewerSorter { } @Override public void createPartControl(Composite parent) { myController = new ContentController(this); controller = myController; createActions(); contributeToActionBars(); parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; parent.setLayout(gridLayout); // create facet table contentViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); // build table String[] head = DescriptionManager.PROPERTY_TYPES; int[] widthPercent = { 30, 15, 10, 45 }; Table table = contentViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setLinesVisible(true); table.setHeaderVisible(true); table.setToolTipText("Double click an entry to add the \nfragment to a composition program."); for (int i = 0; i < head.length; i++) { TableViewerColumn column = new TableViewerColumn(contentViewer, SWT.LEFT); column.getColumn().setText(head[i]); column.getColumn().setResizable(true); column.getColumn().setMoveable(true); } UtilityProvider.addResizeSupportToTable(table, widthPercent, 17); contentViewer.setContentProvider(new BrowserContentProvider()); contentViewer.setLabelProvider(new BrowserLabelProvider()); contentViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); myController.select((FragmentDescription) selection.getFirstElement(), getSite()); myController.test((FragmentDescription) selection.getFirstElement()); } }); contentViewer.setSorter(new NameSorter(){}); update(); } private void createActions() { aRestart = new Action() { public void run() { myController.restartBrowser(); } }; aRestart.setText("Restart"); aRestart.setToolTipText("Restart Fragment Browser"); aRestart.setImageDescriptor(IMG_RESTART); // aRestart.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() // .getImageDescriptor(ISharedImages.IMG_ETOOL_HOME_NAV)); reuseAction = new Action() { public void run() { IStructuredSelection selection = (IStructuredSelection) contentViewer.getSelection(); FragmentDescription element = (FragmentDescription) selection.getFirstElement(); myController.select(element, getSite()); } }; reuseAction.setText("Reuse Fragment"); reuseAction.setToolTipText("Reuse the selected fragment"); reuseAction.setImageDescriptor(useFragmentImage); reuseAction.setEnabled(true); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); IToolBarManager manager = bars.getToolBarManager(); manager.add(reuseAction); manager.add(aRestart); } @Override public void update() { if (contentViewer.getContentProvider() == null) contentViewer.setContentProvider(new BrowserContentProvider()); if (contentViewer.getControl().isDisposed()) return; contentViewer.setInput(myController.getFilteredContent()); updateContentDescription(); } @SuppressWarnings("unchecked") private void updateContentDescription() { int count = ((List) contentViewer.getInput()).size(); setContentDescription("There are " + count + " fragments in this list!"); } public void enableRestartAction(boolean enabled) { if (aRestart != null) aRestart.setEnabled(enabled); } private static ImageDescriptor useFragmentImage; static { URL url = null; url = CoCoNutUIPlugin.getDefault().getBundle().getResource("icons/UseFragment.gif"); useFragmentImage = ImageDescriptor.createFromURL(url); } }