SCViewer/com.itjw.txviewer.graph/src/com/itjw/txviewer/graph/TxOutlinePage.java

165 lines
5.8 KiB
Java

/*******************************************************************************
* Copyright (c) 2012 IT Just working.
* 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:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.graph;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.ContentOutline;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import com.itjw.txviewer.database.ITrStream;
import com.itjw.txviewer.graph.actions.TxActionFactory;
import com.itjw.txviewer.graph.data.ITrHierNodeFacade;
import com.itjw.txviewer.graph.views.provider.TxDbTreeContentProvider;
import com.itjw.txviewer.graph.views.provider.TxDbTreeLabelProvider;
/**
* Creates an outline pagebook for this editor.
*/
public class TxOutlinePage extends ContentOutlinePage implements ISelectionListener, ISelectionProvider {
private TxEditorPart editor;
public TxOutlinePage(TxEditorPart editor) {
this.editor = editor;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite
* )
*/
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer contentOutlineViewer = getTreeViewer();
contentOutlineViewer.addSelectionChangedListener(this);
// Set up the tree viewer
contentOutlineViewer.setContentProvider(new TxDbTreeContentProvider());
contentOutlineViewer.setLabelProvider(new TxDbTreeLabelProvider());
contentOutlineViewer.setInput(editor.getDatabase());
// initialize context menu depending on the the selectec item
MenuManager menuMgr = new MenuManager();
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
fillContextMenu(manager);
}
});
Menu menu = menuMgr.createContextMenu(contentOutlineViewer.getControl());
contentOutlineViewer.getTree().setMenu(menu);
getSite().registerContextMenu("com.itjw.txviewer.graph.outline.contextmenu", menuMgr, contentOutlineViewer);
// add me as selection listener
getSite().getPage().addSelectionListener((ISelectionListener) this);
//getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);
getSite().setSelectionProvider(this);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.IPage#dispose()
*/
public void dispose() {
// dispose
super.dispose();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.IPage#getControl()
*/
public Control getControl() {
return getTreeViewer().getControl();
}
/**
* @see org.eclipse.ui.part.IPageBookViewPage#init(org.eclipse.ui.part.IPageSite)
*/
public void init(IPageSite pageSite) {
super.init(pageSite);
IActionBars bars = pageSite.getActionBars();
String id = ActionFactory.PASTE.getId();
bars.setGlobalActionHandler(id, editor.getActionRegistry().getAction(id));
id = ActionFactory.DELETE.getId();
bars.setGlobalActionHandler(id, editor.getActionRegistry().getAction(id));
}
private void fillContextMenu(IMenuManager menuMgr) {
// initalize the context menu
getTreeViewer().getSelection();
ISelection selection = getTreeViewer().getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
menuMgr.add(TxActionFactory.getAction(TxActionFactory.ADD_TO_WAVE, obj instanceof ITrStream));
menuMgr.add(TxActionFactory.getAction(TxActionFactory.ADD_ALL_TO_WAVE, true));
menuMgr.add(TxActionFactory.getAction(TxActionFactory.REMOVE_FROM_WAVE, obj instanceof ITrStream));
menuMgr.add(TxActionFactory.getAction(TxActionFactory.REMOVE_ALL_FROM_WAVE, true));
}
//ISelectionListener methods
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if(!(part instanceof ContentOutline) && selection instanceof TrHierNodeSelection){
System.out.println("Something selected");
}
}
/**
* Returns the current selection for this provider.
*
* @return the current selection
*/
public ISelection getSelection() {
if (getTreeViewer() == null) {
return StructuredSelection.EMPTY;
}
return getTreeViewer().getSelection();
}
public void setSelection(ISelection selection){
if (getTreeViewer() != null) {
getTreeViewer().setSelection(selection);
}
}
/**
* @see org.eclipse.jface.viewers.ISelectionProvider#selectionChanged(SelectionChangedEvent)
*/
public void selectionChanged(SelectionChangedEvent anEvent) {
// translate the tree selection
ISelection selection = anEvent.getSelection();
if (!selection.isEmpty()) {
Object tmp = ((IStructuredSelection) selection).getFirstElement();
if (tmp instanceof ITrHierNodeFacade) {
fireSelectionChanged(new TrHierNodeSelection((ITrHierNodeFacade) tmp));
}
}
}
}