/*******************************************************************************
* 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.selectedfacets;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.reuseware.coconut.description.BrowserState;
import org.reuseware.coconut.description.Facet;
import org.reuseware.coconut.description.FacetType;
import org.reuseware.coconut.description.FacetTypeDecorator;
import org.reuseware.coconut.description.browse.BrowserStateManager;
import org.reuseware.coconut.description.browse.MainBrowserManager;
import org.reuseware.coconut.description.browse.util.DynamicDecorationManager;
import org.reuseware.coconut.description.browse.util.FacetDragListener;
import org.reuseware.coconut.description.browse.views.AbstractBrowserView;
import org.reuseware.coconut.description.classify.UtilityProvider;
import org.reuseware.coconut.description.classify.views.describe.FacetContentProvider;
import org.reuseware.coconut.description.classify.views.describe.FacetLabelProvider;
import org.reuseware.coconut.description.classify.views.describe.FacetSorter;
/**
*
* @author Matthias Schmidt
*
*/
public class SelectedFacetsView extends AbstractBrowserView {
public static final String VIEW_ID = "org.reuseware.coconut.description.browse.views.selectedfacets.SelectedFacetsView";
// private static final ImageDescriptor IMG_DELETE =
// AbstractUIPlugin.imageDescriptorFromPlugin(
// "org.reuseware.coconut.description.browse", "icons/actions/delete.gif");
private SelectedFacetsController myController;
private TableViewer sfViewer;
private Action aDelete;
@Override
public void createPartControl(Composite parent) {
myController = new SelectedFacetsController(this);
controller = myController;
createActions();
contributeToActionBars();
// create facet table
sfViewer = new TableViewer(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.FULL_SELECTION);
// build table
String[] head = { "Facet", "Value(s)" };
int[] widthPercent = { 33, 67 };
Table table = sfViewer.getTable();
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table.setLinesVisible(true);
table.setHeaderVisible(true);
for (int i = 0; i < head.length; i++) {
TableViewerColumn column = new TableViewerColumn(sfViewer, SWT.LEFT);
column.getColumn().setText(head[i]);
column.getColumn().setResizable(true);
column.getColumn().setMoveable(false);
}
UtilityProvider.addResizeSupportToTable(table, widthPercent, 7);
sfViewer.setContentProvider(new FacetContentProvider());
sfViewer.setLabelProvider(new FacetLabelProvider());
sfViewer.setSorter(new FacetSorter());
sfViewer.addDoubleClickListener(new IDoubleClickListener() {
// TODO BUG SelectedFacet double click won't work
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
myController.select((Facet) selection.getFirstElement());
}
});
sfViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) sfViewer.getSelection();
aDelete.setEnabled(selection.getFirstElement() != null);
}
});
int ops = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() };
sfViewer.addDragSupport(ops, transfers, new FacetDragListener(sfViewer));
update();
}
private void createActions() {
aDelete = new Action() {
public void run() {
IStructuredSelection selection = (IStructuredSelection) sfViewer.getSelection();
Facet selected = (Facet) selection.getFirstElement();
if (selected == null)
return;
FacetType type = selected.getType();
System.out.println("Hallo");
// update BrowserState
BrowserStateManager stateManage = MainBrowserManager.getInstance()
.getBrowserStateManager();
BrowserState state = stateManage.getState();
state.getSelectedFacets().remove(selected);
FacetTypeDecorator tDecor = DynamicDecorationManager.buildFacetTypeDecorator(type);
state.getAdditionalFacets().add(tDecor);
stateManage.setState(state, true);
// perform a zoom
DynamicDecorationManager.getZoomLister().zoom(type, false);
}
};
aDelete.setText("Delete");
aDelete.setToolTipText("Detele Facet And Zoom Out");
aDelete.setEnabled(false);
aDelete.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
ISharedImages.IMG_TOOL_DELETE));
// aDelete.setImageDescriptor(IMG_DELETE);
}
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
IToolBarManager manager = bars.getToolBarManager();
manager.add(aDelete);
}
@Override
public void update() {
try {
if (sfViewer.getContentProvider() == null)
sfViewer.setContentProvider(new FacetContentProvider());
if (sfViewer.getControl().isDisposed()) {
return;
}
sfViewer.setInput(myController.getSelectedFacets());
} catch (Exception e) {
e.printStackTrace();
}
}
}