/*******************************************************************************
* Copyright (c) 2005, 2006 Eclipse Foundation
* 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:
* Bjorn Freeman-Benson - initial implementation
* Ward Cunningham - initial implementation
*******************************************************************************/
package org.eclipse.eclipsemonkey.views;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.eclipsemonkey.EclipseMonkeyPlugin;
import org.eclipse.eclipsemonkey.IScriptStoreListener;
import org.eclipse.eclipsemonkey.StoredScript;
import org.eclipse.eclipsemonkey.Subscription;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.ViewPart;
/**
* ScriptsInfoView
*
*/
public class ScriptsInfoView extends ViewPart implements IScriptStoreListener {
private TableViewer viewer;
// private Action action1;
//
// private Action action2;
//
// private Action doubleClickAction;
class ViewContentProvider implements IStructuredContentProvider {
/**
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
/**
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
}
/**
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object parent) {
Map scriptStore = EclipseMonkeyPlugin.getDefault().getScriptStore();
return scriptStore.keySet().toArray();
}
}
class ViewLabelProvider extends LabelProvider implements
ITableLabelProvider {
/**
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object obj, int index) {
if (index == 0)
return getText(obj);
if (index == 1) {
StoredScript stored = (StoredScript) EclipseMonkeyPlugin
.getDefault().getScriptStore().get(obj);
if (stored == null)
return ""; //$NON-NLS-1$
return stored.metadata.getMenuName();
}
if (index == 2) {
StoredScript stored = (StoredScript) EclipseMonkeyPlugin
.getDefault().getScriptStore().get(obj);
if (stored == null)
return ""; //$NON-NLS-1$
List subscriptions = stored.metadata.getSubscriptions();
Iterator iter = subscriptions.iterator();
String s = ""; //$NON-NLS-1$
while (iter.hasNext()) {
Subscription subscription = (Subscription) iter.next();
s += ", " + subscription; //$NON-NLS-1$
}
if (s.length() > 2)
s = s.substring(2);
return s;
}
return "?"; //$NON-NLS-1$
}
/**
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
/**
* @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
*/
public Image getImage(Object obj) {
return null;
}
}
class NameSorter extends ViewerSorter {
}
/**
* ScriptsInfoView
*/
public ScriptsInfoView() {
}
/**
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite parent) {
Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
TableLayout layout = new TableLayout();
table.setLayout(layout);
table.setLinesVisible(true);
table.setHeaderVisible(true);
String[] HEADINGS = { Messages.ScriptsInfoView_TTL_Script, Messages.ScriptsInfoView_TTL_Menu, Messages.ScriptsInfoView_7 };
layout.addColumnData(new ColumnWeightData(20, 100, true));
TableColumn nameCol = new TableColumn(table, SWT.NONE, 0);
nameCol.setText(HEADINGS[0]);
nameCol.setAlignment(SWT.LEFT);
nameCol.setResizable(true);
layout.addColumnData(new ColumnWeightData(20, 100, true));
TableColumn menuCol = new TableColumn(table, SWT.NONE, 1);
menuCol.setText(HEADINGS[1]);
menuCol.setAlignment(SWT.LEFT);
menuCol.setResizable(true);
layout.addColumnData(new ColumnWeightData(20, 100, true));
TableColumn typeCol = new TableColumn(table, SWT.NONE, 2);
typeCol.setText(HEADINGS[2]);
typeCol.setAlignment(SWT.LEFT);
typeCol.setResizable(true);
viewer = new TableViewer(table);
// viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
// | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
EclipseMonkeyPlugin.getDefault().addScriptStoreListener(this);
}
/**
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
public void dispose() {
EclipseMonkeyPlugin.getDefault().removeScriptStoreListener(this);
}
/**
* @see org.eclipse.eclipsemonkey.IScriptStoreListener#storeChanged()
*/
public void storeChanged() {
Display display = viewer.getControl().getDisplay();
if (!display.isDisposed()) {
display.asyncExec(new Runnable() {
public void run() {
if (viewer.getControl().isDisposed())
return;
viewer.refresh();
}
});
}
}
private void hookContextMenu() {
// MenuManager menuMgr = new MenuManager("#PopupMenu");
// menuMgr.setRemoveAllWhenShown(true);
// menuMgr.addMenuListener(new IMenuListener() {
// public void menuAboutToShow(IMenuManager manager) {
// ScriptsView.this.fillContextMenu(manager);
// }
// });
// Menu menu = menuMgr.createContextMenu(viewer.getControl());
// viewer.getControl().setMenu(menu);
// getSite().registerContextMenu(menuMgr, viewer);
}
private void contributeToActionBars() {
// IActionBars bars = getViewSite().getActionBars();
// fillLocalPullDown(bars.getMenuManager());
// fillLocalToolBar(bars.getToolBarManager());
}
// private void fillLocalPullDown(IMenuManager manager) {
// manager.add(action1);
// manager.add(new Separator());
// manager.add(action2);
// }
//
// private void fillContextMenu(IMenuManager manager) {
// manager.add(action1);
// manager.add(action2);
// // Other plug-ins can contribute there actions here
// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// }
//
// private void fillLocalToolBar(IToolBarManager manager) {
// manager.add(action1);
// manager.add(action2);
// }
private void makeActions() {
// action1 = new Action() {
// public void run() {
// showMessage("Action 1 executed");
// }
// };
// action1.setText("Action 1");
// action1.setToolTipText("Action 1 tooltip");
// action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
// .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
//
// action2 = new Action() {
// public void run() {
// showMessage("Action 2 executed");
// }
// };
// action2.setText("Action 2");
// action2.setToolTipText("Action 2 tooltip");
// action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
// .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
// doubleClickAction = new Action() {
// public void run() {
// ISelection selection = viewer.getSelection();
// Object obj = ((IStructuredSelection) selection)
// .getFirstElement();
// showMessage("Double-click detected on " + obj.toString());
// }
// };
}
private void hookDoubleClickAction() {
// viewer.addDoubleClickListener(new IDoubleClickListener() {
// public void doubleClick(DoubleClickEvent event) {
// doubleClickAction.run();
// }
// });
}
// private void showMessage(String message) {
// MessageDialog.openInformation(viewer.getControl().getShell(),
// "Sample View", message);
// }
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
}