/*******************************************************************************
* Copyright (c) 2008, 2010 Nokia and others.
* 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:
* Nokia - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.views.executables;
import org.eclipse.cdt.debug.core.executables.Executable;
import org.eclipse.cdt.debug.core.executables.ExecutablesManager;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IWorkbenchActionConstants;
/**
* Displays the list of executables gathered by the ExecutablesManager
*/
public class ExecutablesViewer extends BaseViewer {
private static final String P_COLUMN_ORDER_KEY_EXE = "columnOrderKeyEXE"; //$NON-NLS-1$
private static final String P_SORTED_COLUMN_INDEX_KEY_EXE = "sortedColumnIndexKeyEXE"; //$NON-NLS-1$
private static final String P_COLUMN_SORT_DIRECTION_KEY_EXE = "columnSortDirectionKeyEXE"; //$NON-NLS-1$
private static final String P_VISIBLE_COLUMNS_KEY_EXE = "visibleColumnsKeyEXE"; //$NON-NLS-1$
/**
* Handles dropping executable files into the view
*/
public class ExecutablesDropAdapter extends ViewerDropAdapter {
protected ExecutablesDropAdapter(Viewer viewer) {
super(viewer);
}
@Override
public boolean performDrop(Object data) {
final String[] fileNames = (String[]) data;
ExecutablesViewer.this.getExecutablesView().importExecutables(fileNames);
return true;
}
@Override
public boolean validateDrop(Object target, int operation, TransferData transferType) {
return FileTransfer.getInstance().isSupportedType(transferType);
}
}
public TreeColumn projectColumn;
public ExecutablesViewer(ExecutablesView executablesView, Composite parent, int style) {
super(executablesView, parent, style);
// Setup D&D support
int ops = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_DEFAULT;
Transfer[] transfers = new Transfer[] { FileTransfer.getInstance() };
ExecutablesDropAdapter adapter = new ExecutablesDropAdapter(this);
adapter.setFeedbackEnabled(false);
addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
// Setup content provider
ExecutablesContentProvider exeContentProvider = new ExecutablesContentProvider(this);
setContentProvider(exeContentProvider);
setLabelProvider(exeContentProvider);
getTree().setHeaderVisible(true);
getTree().setLinesVisible(true);
executablesView.getSite().setSelectionProvider(this);
getTree().setData(".uid", "ExecutablesViewerTree"); //$NON-NLS-1$ //$NON-NLS-2$
createColumns();
setInput(ExecutablesManager.getExecutablesManager());
MenuManager popupMenuManager = new MenuManager("#PopupMenu"); //$NON-NLS-1$
IMenuListener listener = new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
manager.add(ExecutablesViewer.this.getExecutablesView().refreshAction);
manager.add(ExecutablesViewer.this.getExecutablesView().importAction);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
};
popupMenuManager.addMenuListener(listener);
popupMenuManager.setRemoveAllWhenShown(true);
getExecutablesView().getSite().registerContextMenu(popupMenuManager, this.getExecutablesView().getSite().getSelectionProvider());
Menu menu = popupMenuManager.createContextMenu(getTree());
getTree().setMenu(menu);
}
private void createColumns() {
nameColumn = new TreeColumn(getTree(), SWT.NONE);
nameColumn.setWidth(100);
nameColumn.setText(Messages.ExecutablesViewer_ExecutableName);
nameColumn.setMoveable(true);
nameColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.NAME));
projectColumn = new TreeColumn(getTree(), SWT.NONE);
projectColumn.setWidth(100);
projectColumn.setMoveable(true);
projectColumn.setText(Messages.ExecutablesViewer_Project);
projectColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.PROJECT));
locationColumn = new TreeColumn(getTree(), SWT.NONE);
locationColumn.setWidth(100);
locationColumn.setText(Messages.ExecutablesViewer_Location);
locationColumn.setMoveable(true);
locationColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.LOCATION));
sizeColumn = new TreeColumn(getTree(), SWT.NONE);
sizeColumn.setWidth(100);
sizeColumn.setText(Messages.ExecutablesViewer_Size);
sizeColumn.setMoveable(true);
sizeColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.SIZE));
modifiedColumn = new TreeColumn(getTree(), SWT.NONE);
modifiedColumn.setWidth(100);
modifiedColumn.setText(Messages.ExecutablesViewer_Modified);
modifiedColumn.setMoveable(true);
modifiedColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.MODIFIED));
typeColumn = new TreeColumn(getTree(), SWT.NONE);
typeColumn.setWidth(100);
typeColumn.setText(Messages.ExecutablesViewer_Type);
typeColumn.setMoveable(true);
typeColumn.addSelectionListener(new ColumnSelectionAdapter(ExecutablesView.TYPE));
}
@Override
protected ViewerComparator getViewerComparator(int sortType) {
if (sortType == ExecutablesView.PROJECT) {
return new ExecutablesViewerComparator(sortType, column_sort_order[ExecutablesView.PROJECT]) {
@Override
@SuppressWarnings("unchecked")
public int compare(Viewer viewer, Object e1, Object e2) {
Executable entry1 = (Executable) e1;
Executable entry2 = (Executable) e2;
return getComparator().compare(entry1.getProject().getName(), entry2.getProject().getName())
* column_sort_order[ExecutablesView.PROJECT];
}
};
}
return new ExecutablesViewerComparator(sortType, column_sort_order[sortType]);
}
@Override
protected String getColumnOrderKey() {
return P_COLUMN_ORDER_KEY_EXE;
}
@Override
protected String getSortedColumnIndexKey() {
return P_SORTED_COLUMN_INDEX_KEY_EXE;
}
@Override
protected String getSortedColumnDirectionKey() {
return P_COLUMN_SORT_DIRECTION_KEY_EXE;
}
@Override
protected String getVisibleColumnsKey() {
return P_VISIBLE_COLUMNS_KEY_EXE;
}
@Override
protected String getDefaultVisibleColumnsValue() {
// default visible columns
return "1,1,1,0,0,0"; //$NON-NLS-1$
}
}