re-organize layout and fix drawing errors

This commit is contained in:
2020-10-17 12:44:33 +02:00
parent 675b2ed972
commit 664e99d09e
15 changed files with 142 additions and 704 deletions

View File

@ -3,11 +3,8 @@
<children xsi:type="basic:TrimmedWindow" xmi:id="_95PfsXNmEeWBq8z1Dv39LA" label="SC Viewer" bindingContexts="_95PfunNmEeWBq8z1Dv39LA" width="1280" height="700">
<children xsi:type="advanced:PerspectiveStack" xmi:id="_95QGxnNmEeWBq8z1Dv39LA">
<children xsi:type="advanced:Perspective" xmi:id="_95QGx3NmEeWBq8z1Dv39LA">
<children xsi:type="basic:PartSashContainer" xmi:id="_uT9BIHgtEeWwZ-9vrAR2UQ" elementId="" containerData="8000">
<children xsi:type="basic:PartStack" xmi:id="_95QGyXNmEeWBq8z1Dv39LA" elementId="org.eclipse.editorss" containerData="7500">
<tags>NoAutoCollapse</tags>
</children>
<children xsi:type="basic:Part" xmi:id="_vtfm8HgtEeWwZ-9vrAR2UQ" elementId="com.minres.scviewer.e4.application.parts.WaveformDetails" containerData="2500" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.parts.TransactionDetails" label="Waveform Details"/>
<children xsi:type="basic:PartStack" xmi:id="_95QGyXNmEeWBq8z1Dv39LA" elementId="org.eclipse.editorss" containerData="7500">
<tags>NoAutoCollapse</tags>
</children>
</children>
</children>

View File

@ -22,6 +22,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.e4.application.parts.WaveformViewer;
public class MoveWaveformHandler {
@ -33,7 +34,7 @@ public class MoveWaveformHandler {
Object sel = selectionService.getSelection();
if( sel instanceof IStructuredSelection) {
Object o= ((IStructuredSelection)sel).getFirstElement();
return o instanceof IWaveform || o instanceof ITx;
return o instanceof IWaveform || o instanceof ITx | o instanceof TrackEntry;
}
return false;
}

View File

@ -23,6 +23,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.ui.GotoDirection;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.e4.application.parts.WaveformViewer;
public class NavigateEvent {
@ -34,7 +35,7 @@ public class NavigateEvent {
Object sel = selectionService.getSelection();
if( sel instanceof IStructuredSelection) {
Object o= ((IStructuredSelection)sel).getFirstElement();
return o instanceof IWaveform || o instanceof ITx;
return o instanceof IWaveform || o instanceof ITx || o instanceof TrackEntry;
}
return false;
}

View File

@ -46,7 +46,8 @@ public class OpenHandler {
for(File f: files)
inputs.add(f.getAbsolutePath());
ctx.modify("input", inputs);
ctx.modify("config", ""); //$NON-NLS-1$
ctx.modify("config", ""); //$NON-NLS-1$
partStack.setSelectedElement(part);
}
}

View File

@ -1,575 +0,0 @@
/*******************************************************************************
* 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.e4.application.internal.ui;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.services.EMenuService;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreePathContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.wb.swt.ResourceManager;
import org.eclipse.wb.swt.SWTResourceManager;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IHierNode;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.e4.application.Messages;
import com.minres.scviewer.e4.application.parts.LoadingWaveformDb;
import com.minres.scviewer.e4.application.provider.TxDbContentProvider;
import com.minres.scviewer.e4.application.provider.TxDbLabelProvider;
/**
* The Class DesignBrowser. It contains the design tree, a list of Streams & signals and a few buttons to
* add them them to the waveform view
*/
public abstract class AbstractDesignBrowser {
public TreeViewer getDbTreeViewer() {
return dbTreeViewer;
}
public TableViewer getStreamTableViewer() {
return streamTableViewer;
}
/** The Constant POPUP_ID. */
private static final String POPUP_ID="com.minres.scviewer.e4.application.parts.DesignBrowser.popupmenu"; //$NON-NLS-1$
/** The event broker. */
@Inject IEventBroker eventBroker;
/** The selection service. */
@Inject ESelectionService selectionService;
/** The menu service. */
@Inject EMenuService menuService;
/** The eclipse ctx. */
@Inject IEclipseContext eclipseCtx;
/** The sash form. */
private SashForm sashForm;
/** The top. */
Composite top;
/** The bottom. */
private Composite bottom;
/** The tree viewer. */
private TreeViewer dbTreeViewer;
/** The name filter of the design browser tree. */
private Text treeNameFilter;
/** The attribute filter. */
StreamTTreeFilter treeAttributeFilter;
/** The name filter. */
private Text tableNameFilter;
/** The attribute filter. */
StreamTableFilter tableAttributeFilter;
/** The tx table viewer. */
protected TableViewer streamTableViewer;
/** The append all item. */
protected ToolItem appendItem, insertItem;
/** The other selection count. */
int thisSelectionCount=0, otherSelectionCount=0;
IWaveformDb waveformDb=null;
/** The tree viewer pcl. */
private PropertyChangeListener treeViewerPCL = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if("CHILDS".equals(evt.getPropertyName())){ //$NON-NLS-1$
dbTreeViewer.getTree().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
dbTreeViewer.refresh();
}
});
}
}
};
/** The sash paint listener. */
protected PaintListener sashPaintListener=new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
int size=Math.min(e.width, e.height)-1;
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_DARK_GRAY));
e.gc.setFillRule(SWT.FILL_EVEN_ODD);
if(e.width>e.height)
e.gc.drawArc(e.x+(e.width-size)/2, e.y, size, size, 0, 360);
else
e.gc.drawArc(e.x, e.y+(e.height-size)/2, size, size, 0, 360);
}
};
/**
* Creates the composite.
*
* @param parent the parent
*/
@PostConstruct
public void createComposite(Composite parent) {
sashForm = new SashForm(parent, SWT.BORDER | SWT.SMOOTH | SWT.VERTICAL);
top = new Composite(sashForm, SWT.NONE);
createTreeViewerComposite(top);
bottom = new Composite(sashForm, SWT.NONE);
createTableComposite(bottom);
sashForm.setWeights(new int[] {100, 100});
sashForm.SASH_WIDTH=5;
top.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
sashForm.getChildren()[2].addPaintListener(sashPaintListener);
top.removeControlListener(this);
}
});
}
/**
* Creates the tree viewer composite.
*
* @param parent the parent
*/
public void createTreeViewerComposite(Composite parent) {
parent.setLayout(new GridLayout(1, false));
treeNameFilter = new Text(parent, SWT.BORDER);
treeNameFilter.setMessage(Messages.DesignBrowser_3);
treeNameFilter.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
treeAttributeFilter.setSearchText(((Text) e.widget).getText());
dbTreeViewer.refresh();
}
});
treeNameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
treeAttributeFilter = new StreamTTreeFilter();
dbTreeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
dbTreeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
dbTreeViewer.setContentProvider(new TxDbContentProvider());
dbTreeViewer.setLabelProvider(new TxDbLabelProvider());
dbTreeViewer.addFilter(treeAttributeFilter);
dbTreeViewer.setUseHashlookup(true);
dbTreeViewer.setAutoExpandLevel(2);
dbTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection=event.getSelection();
if( selection instanceof IStructuredSelection) {
Object object= ((IStructuredSelection)selection).getFirstElement();
if(object instanceof IHierNode && ((IHierNode)object).getChildNodes().size()!=0){
streamTableViewer.setInput(object);
updateButtons();
}
else { //if selection is changed but empty
streamTableViewer.setInput(null);
updateButtons();
}
}
}
});
}
/**
* Creates the table composite.
*
* @param parent the parent
*/
public void createTableComposite(Composite parent) {
parent.setLayout(new GridLayout(1, false));
tableNameFilter = new Text(parent, SWT.BORDER);
tableNameFilter.setMessage(Messages.DesignBrowser_2);
tableNameFilter.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
tableAttributeFilter.setSearchText(((Text) e.widget).getText());
updateButtons();
streamTableViewer.refresh();
}
});
tableNameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
tableAttributeFilter = new StreamTableFilter();
streamTableViewer = new TableViewer(parent);
streamTableViewer.setContentProvider(new TxDbContentProvider(true));
streamTableViewer.setLabelProvider(new TxDbLabelProvider());
streamTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
streamTableViewer.addFilter(tableAttributeFilter);
streamTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
selectionService.setSelection(event.getSelection());
updateButtons();
}
});
menuService.registerContextMenu(streamTableViewer.getControl(), POPUP_ID);
ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
toolBar.setBounds(0, 0, 87, 20);
appendItem = new ToolItem(toolBar, SWT.NONE);
appendItem.setToolTipText(Messages.DesignBrowser_4);
appendItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_wave.png")); //$NON-NLS-1$ //$NON-NLS-2$
appendItem.setEnabled(false);
insertItem = new ToolItem(toolBar, SWT.NONE);
insertItem.setToolTipText(Messages.DesignBrowser_8);
insertItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_wave.png")); //$NON-NLS-1$ //$NON-NLS-2$
insertItem.setEnabled(false);
}
public IWaveformDb getWaveformDb() {
return waveformDb;
}
@SuppressWarnings("unchecked")
public void setWaveformDb(IWaveformDb waveformDb) {
this.waveformDb = waveformDb;
Object input = dbTreeViewer.getInput();
if(input!=null && input instanceof List<?>){
IWaveformDb db = ((List<IWaveformDb>)input).get(0);
if(db==waveformDb) return; // do nothing if old and new database is the same
((List<IWaveformDb>)input).get(0).removePropertyChangeListener(treeViewerPCL);
}
dbTreeViewer.setInput(Arrays.asList(waveformDb.isLoaded()?new IWaveformDb[]{waveformDb}:new IWaveformDb[]{new LoadingWaveformDb()}));
// Set up the tree viewer
waveformDb.addPropertyChangeListener(treeViewerPCL);
}
/**
* Sets the focus.
*/
@Focus
public void setFocus() {
if(streamTableViewer!=null) {
streamTableViewer.getTable().setFocus();
IStructuredSelection selection = (IStructuredSelection)streamTableViewer.getSelection();
if(selection.size()==0){
appendItem.setEnabled(false);
}
selectionService.setSelection(selection);
thisSelectionCount=selection.toList().size();
}
updateButtons();
}
/**
* reset tree viewer and tableviewer after every closed tab
*/
protected void resetTreeViewer() {
//reset tree- and tableviewer
dbTreeViewer.setInput(null);
streamTableViewer.setInput(null);
streamTableViewer.setSelection(null);
}
public void selectAllWaveforms() {
int itemCount = streamTableViewer.getTable().getItemCount();
ArrayList<Object> list = new ArrayList<>();
for(int i=0; i<itemCount; i++) {
list.add(streamTableViewer.getElementAt(i));
}
StructuredSelection sel = new StructuredSelection(list);
streamTableViewer.setSelection(sel);
}
/**
* Sets the selection.
*
* @param selection the selection
* @param partService the part service
*/
@Inject
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional IStructuredSelection selection, EPartService partService){
MPart part = partService.getActivePart();
if(part!=null && part.getObject() != this && selection!=null){
if( selection instanceof IStructuredSelection) {
Object object= ((IStructuredSelection)selection).getFirstElement();
if(object instanceof IHierNode&& ((IHierNode)object).getChildNodes().size()!=0)
streamTableViewer.setInput(object);
otherSelectionCount = (object instanceof IWaveform || object instanceof ITx)?1:0;
}
}
updateButtons();
}
/**
* Initialize the listeners for the buttons.
*/
protected abstract void initializeButtonListeners();
/**
* Update buttons.
*/
protected abstract void updateButtons();
/**
* The Class StreamTableFilter.
*/
public class StreamTableFilter extends ViewerFilter {
/** The search string. */
private String searchString;
private Pattern pattern;
/**
* Sets the search text.
*
* @param s the new search text
*/
public void setSearchText(String s) {
try {
pattern = Pattern.compile(".*" + s + ".*"); //$NON-NLS-1$ //$NON-NLS-2$
this.searchString = ".*" + s + ".*"; //$NON-NLS-1$ //$NON-NLS-2$
} catch (PatternSyntaxException e) {}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (searchString == null || searchString.length() == 0) {
return true;
}
if(element instanceof IWaveform) {
if (pattern.matcher(((IWaveform) element).getName()).matches())
return true;
}
return false;
}
}
public class StreamTTreeFilter extends ViewerFilter {
/** The search string. */
private String searchString;
private Pattern pattern;
/**
* Sets the search text.
*
* @param s the new search text
*/
public void setSearchText(String s) {
try {
pattern = Pattern.compile(".*" + s + ".*");
this.searchString = ".*" + s + ".*"; //$NON-NLS-1$ //$NON-NLS-2$
} catch (PatternSyntaxException e) {}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return selectTreePath(viewer, new TreePath(new Object[] { parentElement }), element);
}
private boolean selectTreePath(Viewer viewer, TreePath parentPath, Object element) {
// Cut off children of elements that are shown repeatedly.
for (int i = 0; i < parentPath.getSegmentCount() - 1; i++) {
if (element.equals(parentPath.getSegment(i))) {
return false;
}
}
if (!(viewer instanceof TreeViewer)) {
return true;
}
if (searchString == null || searchString.length() == 0) {
return true;
}
TreeViewer treeViewer = (TreeViewer) viewer;
Boolean matchingResult = isMatchingOrNull(element);
if (matchingResult != null) {
return matchingResult;
}
return hasUnfilteredChild(treeViewer, parentPath, element);
}
Boolean isMatchingOrNull(Object element) {
if(element instanceof IWaveform) {
if (pattern.matcher(((IWaveform) element).getName()).matches())
return Boolean.TRUE;
} else if(element instanceof IWaveformDb) {
return Boolean.TRUE;
} else if(element instanceof HierNode) {
HierNode n = (HierNode) element;
try {
if (pattern.matcher(n.getFullName()).matches())
return Boolean.TRUE;
} catch (PatternSyntaxException e) {
return Boolean.TRUE;
}
} else {
return Boolean.FALSE;
}
/* maybe children are matching */
return null;
}
private boolean hasUnfilteredChild(TreeViewer viewer, TreePath parentPath, Object element) {
TreePath elementPath = parentPath.createChildPath(element);
IContentProvider contentProvider = viewer.getContentProvider();
Object[] children = contentProvider instanceof ITreePathContentProvider
? ((ITreePathContentProvider) contentProvider).getChildren(elementPath)
: ((ITreeContentProvider) contentProvider).getChildren(element);
/* avoid NPE + guard close */
if (children == null || children.length == 0) {
return false;
}
for (int i = 0; i < children.length; i++) {
if (selectTreePath(viewer, elementPath, children[i])) {
return true;
}
}
return false;
}
}
/**
* Gets the filtered children.
*
* @param viewer the viewer
* @return the filtered children
*/
protected Object[] getFilteredChildren(TableViewer viewer){
Object parent = viewer.getInput();
if(parent==null) return new Object[0];
Object[] result = null;
if (parent != null) {
IStructuredContentProvider cp = (IStructuredContentProvider) viewer.getContentProvider();
if (cp != null) {
result = cp.getElements(parent);
if(result==null) return new Object[0];
for (int i = 0, n = result.length; i < n; ++i) {
if(result[i]==null) return new Object[0];
}
}
}
ViewerFilter[] filters = viewer.getFilters();
if (filters != null) {
for (ViewerFilter f:filters) {
Object[] filteredResult = f.filter(viewer, parent, result);
result = filteredResult;
}
}
return result;
}
/**
* Gets the filtered children.
*
* @return the filtered children
*/
public Object[] getFilteredChildren() {
return getFilteredChildren(streamTableViewer);
}
/**
* The Class DBState.
*/
class DBState {
/**
* Instantiates a new DB state.
*/
public DBState() {
this.expandedElements=dbTreeViewer.getExpandedElements();
this.treeSelection=dbTreeViewer.getSelection();
this.tableSelection=streamTableViewer.getSelection();
}
/**
* Apply.
*/
public void apply() {
dbTreeViewer.setExpandedElements(expandedElements);
dbTreeViewer.setSelection(treeSelection, true);
streamTableViewer.setSelection(tableSelection, true);
}
/** The expanded elements. */
private Object[] expandedElements;
/** The tree selection. */
private ISelection treeSelection;
/** The table selection. */
private ISelection tableSelection;
}
};

View File

@ -64,6 +64,7 @@ import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
@ -149,6 +150,14 @@ public class DesignBrowser {
treeViewer.refresh();
}
});
} else if("WAVEFORMS".equals(evt.getPropertyName())) {
treeViewer.getTree().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
IWaveformDb database = waveformViewerPart.getDatabase();
treeViewer.setInput(Arrays.asList(database.isLoaded()?new IWaveformDb[]{database}:new IWaveformDb[]{new LoadingWaveformDb()}));
}
});
}
}
};
@ -177,7 +186,8 @@ public class DesignBrowser {
* @param parent the parent
*/
@PostConstruct
public void createComposite(Composite parent) {
public void createComposite(Composite parent, @Optional WaveformViewer waveformViewerPart) {
parent.setLayout(new FillLayout(SWT.HORIZONTAL));
sashForm = new SashForm(parent, SWT.BORDER | SWT.SMOOTH | SWT.VERTICAL);
top = new Composite(sashForm, SWT.NONE);
@ -193,6 +203,8 @@ public class DesignBrowser {
top.removeControlListener(this);
}
});
if(waveformViewerPart!=null)
setWaveformViewer(waveformViewerPart);
}
/**
@ -366,13 +378,11 @@ public class DesignBrowser {
* @param waveformViewerPart the waveform viewer part
* @return the status event
*/
@SuppressWarnings("unchecked")
@Inject @Optional
public void getActiveWaveformViewerEvent(@UIEventTopic(WaveformViewer.ACTIVE_WAVEFORMVIEW) WaveformViewer waveformViewerPart) {
if(this.waveformViewerPart!=null) {
this.waveformViewerPart.storeDesignBrowerState(new DBState());
}
if( this.waveformViewerPart == null || this.waveformViewerPart != waveformViewerPart ) {
if(this.waveformViewerPart!=null)
this.waveformViewerPart.storeDesignBrowerState(new DBState());
waveformViewerPart.addDisposeListener( new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
@ -384,7 +394,12 @@ public class DesignBrowser {
}
}
} );
setWaveformViewer(waveformViewerPart);
}
}
@SuppressWarnings("unchecked")
public void setWaveformViewer(WaveformViewer waveformViewerPart) {
this.waveformViewerPart=waveformViewerPart;
IWaveformDb database = waveformViewerPart.getDatabase();
Object input = treeViewer.getInput();

View File

@ -381,16 +381,12 @@ public class FileBrowserDialog extends TrayDialog {
class FileTreeLabelProvider implements ILabelProvider {
private List<ILabelProviderListener> listeners;
private Image file;
private Image dir;
public FileTreeLabelProvider() {
listeners = new ArrayList<ILabelProviderListener>();
}
public Image getImage(Object arg0) {
return ((File) arg0).isDirectory() ? folderImage : file;
return ((File) arg0).isDirectory() ? folderImage : fileImage;
}
public String getText(Object arg0) {
@ -402,16 +398,12 @@ public class FileBrowserDialog extends TrayDialog {
listeners.add(arg0);
}
@Override
public void dispose() {
// Dispose the images
if (dir != null)
dir.dispose();
if (file != null)
file.dispose();
}
public boolean isLabelProperty(Object arg0, String arg1) {
return false;
return true;
}
public void removeListener(ILabelProviderListener arg0) {

View File

@ -120,7 +120,9 @@ public class TransactionDetails {
* @param parent the parent
*/
@PostConstruct
public void createComposite(final Composite parent) {
public void createComposite(final Composite parent, @Optional WaveformViewer waveformViewerPart) {
this.waveformViewerPart=waveformViewerPart;
parent.setLayout(new GridLayout(1, false));
nameFilter = new Text(parent, SWT.BORDER);

View File

@ -41,6 +41,8 @@ import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.di.extensions.Preference;
import org.eclipse.e4.core.services.events.IEventBroker;
@ -60,6 +62,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.FocusListener;
@ -69,6 +72,7 @@ import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
@ -96,20 +100,17 @@ import com.minres.scviewer.database.ui.IWaveformView;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.database.ui.TrackEntry.ValueDisplay;
import com.minres.scviewer.database.ui.TrackEntry.WaveDisplay;
import com.minres.scviewer.database.ui.WaveformColors;
import com.minres.scviewer.database.ui.swt.Constants;
import com.minres.scviewer.database.ui.swt.ToolTipContentProvider;
import com.minres.scviewer.database.ui.swt.ToolTipHelpTextProvider;
import com.minres.scviewer.database.ui.swt.WaveformViewFactory;
import com.minres.scviewer.database.ui.WaveformColors;
import com.minres.scviewer.e4.application.Messages;
import com.minres.scviewer.e4.application.internal.status.WaveStatusBarControl;
import com.minres.scviewer.e4.application.internal.ui.AbstractDesignBrowser;
import com.minres.scviewer.e4.application.internal.util.FileMonitor;
import com.minres.scviewer.e4.application.internal.util.IFileChangeListener;
import com.minres.scviewer.e4.application.internal.util.IModificationChecker;
import com.minres.scviewer.e4.application.preferences.PreferenceConstants;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
/**
* The Class WaveformViewerPart.
@ -169,20 +170,10 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
/** The factory. */
WaveformViewFactory factory = new WaveformViewFactory();
AbstractDesignBrowser browser = new AbstractDesignBrowser() {
@Override
protected void updateButtons() {
// TODO Auto-generated method stub
}
@Override
protected void initializeButtonListeners() {
// TODO Auto-generated method stub
}
};
DesignBrowser browser = null;
TransactionDetails detailsView = null;
/** The waveform pane. */
private IWaveformView waveformPane;
@ -280,19 +271,31 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
}
});
parent.setLayout(new FillLayout(SWT.HORIZONTAL));
SashForm sashFormTop = new SashForm(parent, SWT.NONE);
SashForm sashFormTop = new SashForm(parent, SWT.BORDER | SWT.SMOOTH);
Composite left = new Composite(sashFormTop, SWT.NONE);
left.setLayout(new FillLayout(SWT.HORIZONTAL));
browser.createComposite(left);
browser.setWaveformDb(database);
IEclipseContext ctx = myPart.getContext();
ctx.set(WaveformViewer.class, this);
ctx.set(IWaveformDb.class, database);
ctx.set(Composite.class, left);
browser = ContextInjectionFactory.make(DesignBrowser.class, ctx);
Composite right = new Composite(sashFormTop, SWT.NONE);
waveformPane = factory.createPanel(right);
//Composite right = new Composite(sashFormTop, SWT.NONE);
SashForm sashFormRight = new SashForm(sashFormTop, SWT.BORDER | SWT.SMOOTH | SWT.VERTICAL);
sashFormTop.setWeights(new int[] {25, 75});
Composite rightTop = new Composite(sashFormRight, SWT.NONE);
Composite rightBottom = new Composite(sashFormRight, SWT.NONE);
sashFormRight.setWeights(new int[] {80, 20});
waveformPane = factory.createPanel(rightTop);
ctx.set(Composite.class, rightBottom);
detailsView = ContextInjectionFactory.make(TransactionDetails.class, ctx);
waveformPane.setMaxTime(0);
setupColors();
//set selection to empty selection when opening a new waveformPane
@ -765,10 +768,10 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
// get selected transaction of a stream
ISelection selection = waveformPane.getSelection();
if (!selection.isEmpty()) {
List<Object> t = getISelection(selection);
if(t.get(0) instanceof ITx) {
ITx tx = (ITx) t.get(0);
TrackEntry te = (TrackEntry) t.get(1);
List<Object> sel = getISelection(selection);
if(sel.size()>1 && sel.get(0) instanceof ITx && sel.get(1) instanceof TrackEntry) {
ITx tx = (ITx) sel.get(0);
TrackEntry te = (TrackEntry) sel.get(1);
// get transaction id
persistedState.put(SELECTED_TX_ID, Long.toString(tx.getId()));
//get TrackEntry name

View File

@ -63,12 +63,6 @@ public class TxDbLabelProvider implements ILabelProvider {
*/
@Override
public void dispose() {
if(loadinDatabase!=null) database.dispose();
if(database!=null) database.dispose();
if(stream!=null) stream.dispose();
if(folder!=null) folder.dispose();
if(signal!=null) signal.dispose();
if(wave!=null) wave.dispose();
}
/* (non-Javadoc)