[WIP ]reorganized dir structure

This commit is contained in:
2020-06-01 17:26:56 +02:00
parent 3e5ab7b0ac
commit 97693cd0c4
374 changed files with 43 additions and 390 deletions

View File

@ -0,0 +1,109 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IMarkSelection;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
/**
* This view simply mirrors the current selection in the workbench window.
* It works for both, element and text selection.
*/
public class SelectionTableView extends ViewPart {
private PageBook pagebook;
private TableViewer tableviewer;
private TextViewer textviewer;
// the listener we register with the selection service
private ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
// we ignore our own selections
if (sourcepart != SelectionTableView.this) {
showSelection(sourcepart, selection);
}
}
};
/**
* Shows the given selection in this view.
*/
public void showSelection(IWorkbenchPart sourcepart, ISelection selection) {
setContentDescription(sourcepart.getTitle() + " (" + selection.getClass().getName() + ")");
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss = (IStructuredSelection) selection;
showItems(ss.toArray());
}
if (selection instanceof ITextSelection) {
ITextSelection ts = (ITextSelection) selection;
showText(ts.getText());
}
if (selection instanceof IMarkSelection) {
IMarkSelection ms = (IMarkSelection) selection;
try {
showText(ms.getDocument().get(ms.getOffset(), ms.getLength()));
} catch (BadLocationException ble) { }
}
}
private void showItems(Object[] items) {
tableviewer.setInput(items);
pagebook.showPage(tableviewer.getControl());
}
private void showText(String text) {
textviewer.setDocument(new Document(text));
pagebook.showPage(textviewer.getControl());
}
public void createPartControl(Composite parent) {
// the PageBook allows simple switching between two viewers
pagebook = new PageBook(parent, SWT.NONE);
tableviewer = new TableViewer(pagebook, SWT.NONE);
tableviewer.setLabelProvider(new WorkbenchLabelProvider());
tableviewer.setContentProvider(new ArrayContentProvider());
// we're cooperative and also provide our selection
// at least for the tableviewer
getSite().setSelectionProvider(tableviewer);
textviewer = new TextViewer(pagebook, SWT.H_SCROLL | SWT.V_SCROLL);
textviewer.setEditable(false);
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
}
public void setFocus() {
pagebook.setFocus();
}
public void dispose() {
// important: We need do unregister our listener when the view is disposed
getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
super.dispose();
}
}

View File

@ -0,0 +1,27 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.properties.PropertySheet;
public class TransactionPropertySheet extends PropertySheet {
public TransactionPropertySheet() {
super();
}
@Override
protected boolean isImportant(IWorkbenchPart part) {
return part.getSite().getId().equals("com.minres.scviewer.ui.TxEditorPart");
}
}

View File

@ -0,0 +1,220 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.LinkedList;
import org.eclipse.jface.action.Action;
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.ISelectionListener;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import com.minres.scviewer.database.IHierNode;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.ui.TxEditorPart;
import com.minres.scviewer.ui.views.provider.TxDbTreeContentProvider;
import com.minres.scviewer.ui.views.provider.TxDbTreeLabelProvider;
/**
* Creates an outline pagebook for this editor.
*/
public class TxOutlinePage extends ContentOutlinePage implements ISelectionListener, ISelectionProvider, PropertyChangeListener {
public static final int ADD_TO_WAVE = 0;
public static final int ADD_ALL_TO_WAVE = 1;
public static final int REMOVE_FROM_WAVE = 2;
public static final int REMOVE_ALL_FROM_WAVE = 3;
private TxEditorPart editor;
TreeViewer contentOutlineViewer ;
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);
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.minres.scviewer.ui.outline.contextmenu", menuMgr, contentOutlineViewer);
// add me as selection listener
getSite().getPage().addSelectionListener((ISelectionListener) this);
//getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);
getSite().setSelectionProvider(this);
editor.getDatabase().addPropertyChangeListener(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();
}
private void fillContextMenu(IMenuManager menuMgr) {
// initalize the context menu
getTreeViewer().getSelection();
ISelection selection = getTreeViewer().getSelection();
if(selection instanceof IStructuredSelection){
IStructuredSelection sel = (IStructuredSelection) selection;
Object obj = sel.getFirstElement();
menuMgr.add(makeStreamAction("Add to Wave", ISharedImages.IMG_OBJ_ADD, sel, obj instanceof IWaveform, false));
menuMgr.add(makeStreamAction("Add all to Wave", ISharedImages.IMG_OBJ_ADD, sel, true, false));
// menuMgr.add(makeStreamAction("Remove from Wave", ISharedImages.IMG_TOOL_DELETE, sel, obj instanceof IWaveform, true));
// menuMgr.add(makeStreamAction("Remove all from Wave", ISharedImages.IMG_TOOL_DELETE, sel, true, true));
}
}
//ISelectionListener methods
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// if(!(part instanceof ContentOutline) && selection instanceof IStructuredSelection){
// if(((IStructuredSelection)selection).getFirstElement() instanceof ITransaction){
// System.out.println("Transaction with id "+((ITransaction)((IStructuredSelection)selection).getFirstElement()).getId() +" selected");
// } else if(((IStructuredSelection)selection).getFirstElement() != null)
// System.out.println("Something else 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 IHierNode) {
fireSelectionChanged(new StructuredSelection((IHierNode) tmp));
}
}
}
private Action makeStreamAction(String text, String imgDescriptor, final IStructuredSelection selection, boolean enabled, final boolean remove) {
Action action = new Action() {
public void run() {
if(selection!=null)
for(Object obj :selection.toArray()){
if(obj instanceof IWaveform){
if(remove)
editor.removeStreamFromList((IWaveform) obj);
else
editor.addStreamToList((IWaveform) obj);
} else if(obj instanceof IHierNode){
LinkedList<IHierNode> queue = new LinkedList<IHierNode>();
LinkedList<IWaveform> streams = new LinkedList<IWaveform>();
queue.add((IHierNode)obj);
while(queue.size()>0){
IHierNode n = queue.poll();
if(n instanceof IWaveform) streams.add((IWaveform) n);
queue.addAll(n.getChildNodes());
}
if(remove)
editor.removeStreamsFromList(streams.toArray(new IWaveform[]{}));
else
editor.addStreamsToList(streams.toArray(new IWaveform[]{}));
}
}
}
};
action.setText(text);
action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(imgDescriptor));
if(selection.getFirstElement() instanceof IWaveform && editor.getStreamList().contains(selection.getFirstElement()))
action.setEnabled(false);
else
action.setEnabled(true);
return action;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if("CHILDS".equals(evt.getPropertyName())) {
contentOutlineViewer.refresh();
}
}
}

View File

@ -0,0 +1,55 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views.provider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.database.IHierNode;
public class TxDbTreeContentProvider implements ITreeContentProvider {
private IWaveformDb database;
@Override
public void dispose() { }
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
database=(IWaveformDb)newInput;
}
@Override
public Object[] getElements(Object inputElement) {
return database.getChildNodes().toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof IHierNode){
return ((IHierNode)parentElement).getChildNodes().toArray();
}
return null;
}
@Override
public Object getParent(Object element) {
return null;
}
@Override
public boolean hasChildren(Object element) {
Object[] obj = getChildren(element);
return obj == null ? false : obj.length > 0;
}
}

View File

@ -0,0 +1,88 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views.provider;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import com.minres.scviewer.database.ISignal;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.database.IHierNode;
import com.minres.scviewer.database.ITxStream;
import com.minres.scviewer.ui.TxEditorPlugin;
public class TxDbTreeLabelProvider implements ILabelProvider {
private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();
private Image database;
private Image stream;
private Image signal;
private Image folder;
public TxDbTreeLabelProvider() {
super();
database=TxEditorPlugin.createImage("database");
stream=TxEditorPlugin.createImage("stream");
folder=TxEditorPlugin.createImage("folder");
signal=TxEditorPlugin.createImage("signal");
}
@Override
public void addListener(ILabelProviderListener listener) {
listeners.add(listener);
}
@Override
public void dispose() {
if(database!=null) database.dispose();
if(stream!=null) stream.dispose();
if(folder!=null) folder.dispose();
if(signal!=null) signal.dispose();
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
listeners.remove(listener);
}
@Override
public Image getImage(Object element) {
if(element instanceof IWaveformDb){
return database;
}else if(element instanceof ITxStream){
return stream;
}else if(element instanceof ISignal<?>){
return signal;
}else if(element instanceof IHierNode){
return folder;
} else
return null;
}
@Override
public String getText(Object element) {
return ((IHierNode)element).getName();
}
}

View File

@ -0,0 +1,271 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views.sections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeMap;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.ITxAttribute;
import com.minres.scviewer.database.ITx;
public class AttributeProperty extends AbstractPropertySection implements ISelectionProvider {
private final String[] titles = { "Location", "Name", "Type", "Value" };
private ListenerList<ISelectionChangedListener> listeners = new ListenerList<ISelectionChangedListener>();
private ITx iTr;
private ISelection currentSelection;
private TreeViewer treeViewer;
public AttributeProperty() {
}
public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
super.createControls(parent, aTabbedPropertySheetPage);
Composite composite = getWidgetFactory().createFlatFormComposite(parent);
Tree tree = new Tree(composite, SWT.BORDER | SWT.FULL_SELECTION);
tree.setHeaderVisible(true);
treeViewer = new TreeViewer(tree);
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
tree.setLinesVisible(true);
column1.setAlignment(SWT.LEFT);
column1.setText(titles[0]);
column1.setWidth(75);
TreeColumn column2 = new TreeColumn(tree, SWT.RIGHT);
column2.setAlignment(SWT.LEFT);
column2.setText(titles[1]);
column2.setWidth(150);
TreeColumn column3 = new TreeColumn(tree, SWT.LEFT);
tree.setLinesVisible(true);
column3.setAlignment(SWT.LEFT);
column3.setText(titles[2]);
column3.setWidth(100);
TreeColumn column4 = new TreeColumn(tree, SWT.RIGHT);
column4.setAlignment(SWT.LEFT);
column4.setText(titles[3]);
column4.setWidth(150);
Object layoutData = parent.getLayoutData();
if (layoutData instanceof GridData) {
GridData gridData = (GridData) layoutData;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = SWT.FILL;
}
FormData formData = new FormData();
formData.left = new FormAttachment(0);
formData.top = new FormAttachment(0);
formData.right = new FormAttachment(100);
formData.bottom = new FormAttachment(100);
tree.setLayoutData(formData);
treeViewer.setAutoExpandLevel(2);
treeViewer.setContentProvider(new ITreeContentProvider() {
TreeMap<String, List<ITxAttribute>> hier = new TreeMap<String, List<ITxAttribute>>();
HashMap<ITxAttribute, String> parents = new HashMap<ITxAttribute, String>();
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (newInput instanceof ITx) {
List<ITxAttribute> attributes = ((ITx)newInput).getAttributes();
hier.clear();
parents.clear();
String location="Begin";
List<ITxAttribute> childs=new LinkedList<ITxAttribute>();
for (ITxAttribute attr : attributes)
if (attr != null && attr.getType()==AssociationType.BEGIN){
childs.add(attr);
parents.put(attr, location);
}
if(childs.size()>0) hier.put(location, childs);
location="Transaction";
childs=new LinkedList<ITxAttribute>();
for (ITxAttribute attr : attributes)
if (attr != null && attr.getType()==AssociationType.RECORD){
childs.add(attr);
parents.put(attr, location);
}
if(childs.size()>0) hier.put(location, childs);
location="End";
childs=new LinkedList<ITxAttribute>();
for (ITxAttribute attr : attributes)
if (attr != null && attr.getType()==AssociationType.END){
childs.add(attr);
parents.put(attr, location);
}
if(childs.size()>0) hier.put(location, childs);
}
}
@Override
public void dispose() { }
@Override
public boolean hasChildren(Object element) {
Object[] childs = getChildren(element);
return childs != null && childs.length > 0;
}
@Override
public Object getParent(Object element) {
if (element instanceof ITxAttribute)
return parents.get(element);
else
return null;
}
@Override
public Object[] getElements(Object inputElement) {
return hier.keySet().toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof String)
return hier.get((String) parentElement).toArray();
else
return null;
}
});
treeViewer.setLabelProvider(new ITableLabelProvider() {
@Override
public void removeListener(ILabelProviderListener listener) { }
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void dispose() { }
@Override
public void addListener(ILabelProviderListener listener) { }
@Override
public String getColumnText(Object element, int columnIndex) {
if (columnIndex == 0 && element instanceof String)
return element.toString();
else if(element instanceof ITxAttribute){
ITxAttribute attr = (ITxAttribute)element;
if (columnIndex == 1 )
return attr.getName();
else if (columnIndex == 2 )
return attr.getDataType().name();
else if (columnIndex == 3){
String value = attr.getValue().toString();
if((DataType.UNSIGNED == attr.getDataType() || DataType.INTEGER==attr.getDataType()) && !"0".equals(value)) {
try {
value = attr.getValue().toString() + "(0x"+Long.toHexString(Long.parseLong(attr.getValue().toString()))+")";
} catch(NumberFormatException e) { }
}
return value;
}
}
return null;
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
});
MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager mgr) {
ISelection selection = treeViewer.getSelection();
if (selection instanceof IStructuredSelection) {
// System.out.println(((IStructuredSelection)selection).getFirstElement().toString());
}
}
});
Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
treeViewer.getControl().setMenu(menu);
aTabbedPropertySheetPage.getSite().setSelectionProvider(this);
}
public void setInput(IWorkbenchPart part, ISelection selection) {
super.setInput(part, selection);
currentSelection = null;
Assert.isTrue(selection instanceof IStructuredSelection);
Object input = ((IStructuredSelection) selection).getFirstElement();
Assert.isTrue(input instanceof ITx);
iTr = (ITx) input;
}
public void refresh() {
treeViewer.setInput(iTr);
}
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
listeners.add(listener);
}
@Override
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
listeners.remove(listener);
}
public ISelection getSelection() {
return currentSelection != null ? currentSelection : super.getSelection();
}
@Override
public void setSelection(ISelection selection) {
currentSelection = selection;
Object[] list = listeners.getListeners();
for (int i = 0; i < list.length; i++) {
((ISelectionChangedListener) list[i]).selectionChanged(new SelectionChangedEvent(this, selection));
}
}
}

View File

@ -0,0 +1,293 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH 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:
* MINRES Technologies GmbH - initial API and implementation
*******************************************************************************/
package com.minres.scviewer.ui.views.sections;
import java.util.Collection;
import java.util.HashMap;
import java.util.TreeMap;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.ITxRelation;
public class RelatedProperty extends AbstractPropertySection implements ISelectionProvider, ISelectionChangedListener {
private final String[] titles = { "Relation type", "Relation Name", "Tx Id" };
private ListenerList<ISelectionChangedListener> listeners = new ListenerList<ISelectionChangedListener>();
private ITx iTr;
private ISelection currentSelection;
private TreeViewer treeViewer;
public RelatedProperty() {
}
public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
super.createControls(parent, aTabbedPropertySheetPage);
Composite composite = getWidgetFactory().createFlatFormComposite(parent);
Tree tree = new Tree(composite, SWT.BORDER | SWT.FULL_SELECTION);
tree.setHeaderVisible(true);
treeViewer = new TreeViewer(tree);
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
tree.setLinesVisible(true);
column1.setAlignment(SWT.LEFT);
column1.setText(titles[0]);
column1.setWidth(150);
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
column2.setAlignment(SWT.LEFT);
column2.setText(titles[1]);
column2.setWidth(150);
TreeColumn column3 = new TreeColumn(tree, SWT.RIGHT);
column3.setAlignment(SWT.LEFT);
column3.setText(titles[2]);
column3.setWidth(150);
Object layoutData = parent.getLayoutData();
if (layoutData instanceof GridData) {
GridData gridData = (GridData) layoutData;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = SWT.FILL;
}
FormData formData = new FormData();
formData.left = new FormAttachment(0);
formData.top = new FormAttachment(0);
formData.right = new FormAttachment(100);
formData.bottom = new FormAttachment(100);
tree.setLayoutData(formData);
treeViewer.setAutoExpandLevel(2);
treeViewer.setContentProvider(new ITreeContentProvider() {
TreeMap<String, Collection<ITxRelation>> hier = new TreeMap<String, Collection<ITxRelation>>();
HashMap<ITxRelation, String> parents = new HashMap<ITxRelation, String>();
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (newInput instanceof ITx) {
hier.clear();
parents.clear();
String relName = "incoming";
Collection<ITxRelation> relSet = ((ITx)newInput).getIncomingRelations();
if (relSet != null && relSet.size() > 0) {
hier.put(relName, relSet);
for (ITxRelation rel : relSet)
parents.put(rel, relName);
}
relName = "outgoing";
relSet = ((ITx)newInput).getOutgoingRelations();
if (relSet != null && relSet.size() > 0) {
hier.put(relName, relSet);
for (ITxRelation rel : relSet)
parents.put(rel, relName);
}
}
}
@Override
public void dispose() { }
@Override
public boolean hasChildren(Object element) {
Object[] childs = getChildren(element);
return childs != null && childs.length > 0;
}
@Override
public Object getParent(Object element) {
if (element instanceof ITx)
return parents.get(element);
else
return null;
}
@Override
public Object[] getElements(Object inputElement) {
return hier.keySet().toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof String)
return hier.get((String) parentElement).toArray();
else
return null;
}
});
treeViewer.setLabelProvider(new ITableLabelProvider() {
@Override
public void removeListener(ILabelProviderListener listener) { }
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void dispose() { }
@Override
public void addListener(ILabelProviderListener listener) { }
@Override
public String getColumnText(Object element, int columnIndex) {
if (columnIndex == 0 && element instanceof String)
return element.toString();
else if (columnIndex == 1 && element instanceof ITxRelation)
return ((ITxRelation) element).getRelationType().getName();
else if (columnIndex == 2 && element instanceof ITxRelation){
ITxRelation rel = (ITxRelation) element;
if(rel.getTarget()==iTr)
return ((ITxRelation) element).getSource().getId().toString();
else
return ((ITxRelation) element).getTarget().getId().toString();
}
else
return null;
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
});
treeViewer.addSelectionChangedListener(this);
MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager mgr) {
ISelection selection = treeViewer.getSelection();
if (selection instanceof IStructuredSelection) {
Object obj = ((IStructuredSelection) selection).getFirstElement();
mgr.add(makeTransactionAction(obj, iTr));
}
}
});
Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
treeViewer.getControl().setMenu(menu);
// aTabbedPropertySheetPage.getSite().setSelectionProvider(this);
// if(getPart()!=null){
// getPart().getSite().setSelectionProvider(this);
// }
}
private Action makeTransactionAction(final Object obj, final ITx transaction) {
Action action = new Action() {
public void run() {
if(obj instanceof ITxRelation){
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
ITx targetTransaction = ((ITxRelation)obj).getSource()==transaction?
((ITxRelation)obj).getTarget():((ITxRelation)obj).getSource();
for(IEditorReference editorRef: page.getEditorReferences()){
IWorkbenchPart part =editorRef.getPart(false);
if(editorRef.getPage().isPartVisible(part)){
part.getSite().getSelectionProvider().setSelection(new StructuredSelection(targetTransaction));
part.setFocus();
}
}
}
}
};
action.setText("Jump to Transaction");
action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ADD));
action.setEnabled(true);
return action;
}
public void setInput(IWorkbenchPart part, ISelection selection) {
super.setInput(part, selection);
currentSelection = null;
Assert.isTrue(selection instanceof IStructuredSelection);
Object input = ((IStructuredSelection) selection).getFirstElement();
Assert.isTrue(input instanceof ITx);
iTr = (ITx) input;
}
public void refresh() {
treeViewer.setInput(iTr);
}
public void aboutToBeShown() {
treeViewer.expandAll();
}
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
listeners.add(listener);
}
@Override
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
listeners.remove(listener);
}
public ISelection getSelection() {
return currentSelection != null ? currentSelection : super.getSelection();
}
@Override
public void setSelection(ISelection selection) {
currentSelection = selection;
Object[] list = listeners.getListeners();
for (int i = 0; i < list.length; i++) {
((ISelectionChangedListener) list[i]).selectionChanged(new SelectionChangedEvent(this, selection));
}
}
@Override
public void selectionChanged(SelectionChangedEvent event) {
// ISelection selection = event.getSelection();
// if(selection instanceof IStructuredSelection){
// IStructuredSelection treeSelection =(IStructuredSelection)selection;
// Object elem = treeSelection.getFirstElement();
// if(elem instanceof ITransaction){
// currentSelection = new StructuredSelection(elem);
// }
// }
}
}