Compare commits
8 Commits
#27_trunca
...
#28_add_fi
Author | SHA1 | Date | |
---|---|---|---|
27f1e8ca6a | |||
aef4901b2b | |||
b398a07fd7 | |||
732bd82034 | |||
9f4f71046d | |||
d73b01f77d | |||
f89471e14b | |||
4f097e7f59 |
@ -193,7 +193,7 @@ public class TxStream extends HierNode implements ITxStream<ITxEvent> {
|
||||
|
||||
@Override
|
||||
public Boolean equals(IWaveform other) {
|
||||
return(other instanceof TxStream && this.getId()==other.getId());
|
||||
return(other instanceof TxStream && this.getId().equals(other.getId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: SCViewer database tests
|
||||
Bundle-SymbolicName: com.minres.scviewer.database.test
|
||||
Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Version: 1.0.1.qualifier
|
||||
Bundle-Vendor: MINRES Technologies GnbH
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: org.junit,
|
||||
|
@ -2,6 +2,7 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>com.minres.scviewer.database.test</artifactId>
|
||||
<version>1.0.1-SNAPSHOT</version>
|
||||
<parent>
|
||||
<groupId>com.minres.scviewer</groupId>
|
||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||
@ -27,5 +28,4 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</project>
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: Textual transaction database
|
||||
Bundle-SymbolicName: com.minres.scviewer.database.text
|
||||
Bundle-Version: 2.0.1.qualifier
|
||||
Bundle-Version: 2.0.2.qualifier
|
||||
Bundle-Vendor: MINRES Technologies GmbH
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Import-Package: org.osgi.framework;version="1.3.0"
|
||||
|
@ -2,7 +2,7 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>com.minres.scviewer.database.text</artifactId>
|
||||
<version>2.0.1-SNAPSHOT</version>
|
||||
<version>2.0.2-SNAPSHOT</version>
|
||||
<parent>
|
||||
<groupId>com.minres.scviewer</groupId>
|
||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||
|
@ -117,7 +117,7 @@ public class VCDSignal<T> extends HierNode implements ISignal<T> {
|
||||
|
||||
@Override
|
||||
public Boolean equals(IWaveform other) {
|
||||
return(other instanceof VCDSignal<?> && this.getId()==other.getId());
|
||||
return( other instanceof VCDSignal<?> && this.getId().equals(other.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -140,7 +140,7 @@ public class WaveformDb extends HierNode implements IWaveformDb {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(name == hier[hier.length-1]){ //leaf
|
||||
if(name.equals(hier[hier.length-1])){ //leaf
|
||||
if(n1!=null) {
|
||||
if(n1 instanceof HierNode){
|
||||
node.getChildNodes().remove(n1);
|
||||
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: %Bundle-Name
|
||||
Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true
|
||||
Bundle-Version: 2.1.4.qualifier
|
||||
Bundle-Version: 2.1.6.qualifier
|
||||
Bundle-Vendor: %Bundle-Vendor
|
||||
Require-Bundle: javax.inject;bundle-version="1.0.0",
|
||||
org.eclipse.core.runtime;bundle-version="3.11.1",
|
||||
|
@ -1,7 +1,7 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>com.minres.scviewer.e4.application</artifactId>
|
||||
<version>2.1.4-SNAPSHOT</version>
|
||||
<version>2.1.6-SNAPSHOT</version>
|
||||
<parent>
|
||||
<groupId>com.minres.scviewer</groupId>
|
||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||
|
@ -9,6 +9,7 @@ public class Messages extends NLS {
|
||||
public static String DesignBrowser_12;
|
||||
public static String DesignBrowser_16;
|
||||
public static String DesignBrowser_2;
|
||||
public static String DesignBrowser_3;
|
||||
public static String DesignBrowser_4;
|
||||
public static String DesignBrowser_8;
|
||||
public static String LoadingWaveformDb_0;
|
||||
|
@ -3,6 +3,7 @@ AboutDialog_1=\nCopyright (c) 2015, 2019 MINRES Technologies GmbH and others.\n\
|
||||
DesignBrowser_12=Append all after
|
||||
DesignBrowser_16=Insert all before
|
||||
DesignBrowser_2=Enter text to filter waveforms
|
||||
DesignBrowser_3=Enter text to filter hierarchy
|
||||
DesignBrowser_4=Append after
|
||||
DesignBrowser_8=Insert before
|
||||
LoadingWaveformDb_0=Database loading...
|
||||
|
@ -15,6 +15,8 @@ import java.beans.PropertyChangeListener;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
@ -35,14 +37,18 @@ 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.DoubleClickEvent;
|
||||
import org.eclipse.jface.viewers.IContentProvider;
|
||||
import org.eclipse.jface.viewers.IDoubleClickListener;
|
||||
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;
|
||||
@ -68,6 +74,7 @@ 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;
|
||||
@ -110,8 +117,17 @@ public class DesignBrowser {
|
||||
/** The tree viewer. */
|
||||
private TreeViewer treeViewer;
|
||||
|
||||
/** The name filter of the design browser tree. */
|
||||
private Text treeNameFilter;
|
||||
|
||||
/** The attribute filter. */
|
||||
StreamTTreeFilter treeAttributeFilter;
|
||||
|
||||
/** The name filter. */
|
||||
private Text nameFilter;
|
||||
private Text tableNameFilter;
|
||||
|
||||
/** The attribute filter. */
|
||||
StreamTableFilter tableAttributeFilter;
|
||||
|
||||
/** The tx table viewer. */
|
||||
private TableViewer txTableViewer;
|
||||
@ -119,9 +135,6 @@ public class DesignBrowser {
|
||||
/** The append all item. */
|
||||
ToolItem appendItem, insertItem, insertAllItem, appendAllItem;
|
||||
|
||||
/** The attribute filter. */
|
||||
WaveformAttributeFilter attributeFilter;
|
||||
|
||||
/** The other selection count. */
|
||||
int thisSelectionCount=0, otherSelectionCount=0;
|
||||
|
||||
@ -189,10 +202,25 @@ public class DesignBrowser {
|
||||
*/
|
||||
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());
|
||||
treeViewer.refresh();
|
||||
}
|
||||
});
|
||||
treeNameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
|
||||
treeAttributeFilter = new StreamTTreeFilter();
|
||||
|
||||
treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
|
||||
treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
treeViewer.setContentProvider(new TxDbContentProvider());
|
||||
treeViewer.setLabelProvider(new TxDbLabelProvider());
|
||||
treeViewer.addFilter(treeAttributeFilter);
|
||||
treeViewer.setUseHashlookup(true);
|
||||
treeViewer.setAutoExpandLevel(2);
|
||||
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
||||
@ -223,25 +251,25 @@ public class DesignBrowser {
|
||||
public void createTableComposite(Composite parent) {
|
||||
parent.setLayout(new GridLayout(1, false));
|
||||
|
||||
nameFilter = new Text(parent, SWT.BORDER);
|
||||
nameFilter.setMessage(Messages.DesignBrowser_2);
|
||||
nameFilter.addModifyListener(new ModifyListener() {
|
||||
tableNameFilter = new Text(parent, SWT.BORDER);
|
||||
tableNameFilter.setMessage(Messages.DesignBrowser_2);
|
||||
tableNameFilter.addModifyListener(new ModifyListener() {
|
||||
@Override
|
||||
public void modifyText(ModifyEvent e) {
|
||||
attributeFilter.setSearchText(((Text) e.widget).getText());
|
||||
tableAttributeFilter.setSearchText(((Text) e.widget).getText());
|
||||
updateButtons();
|
||||
txTableViewer.refresh();
|
||||
}
|
||||
});
|
||||
nameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
tableNameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
||||
|
||||
attributeFilter = new WaveformAttributeFilter();
|
||||
tableAttributeFilter = new StreamTableFilter();
|
||||
|
||||
txTableViewer = new TableViewer(parent);
|
||||
txTableViewer.setContentProvider(new TxDbContentProvider(true));
|
||||
txTableViewer.setLabelProvider(new TxDbLabelProvider());
|
||||
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
txTableViewer.addFilter(attributeFilter);
|
||||
txTableViewer.addFilter(tableAttributeFilter);
|
||||
txTableViewer.addDoubleClickListener(new IDoubleClickListener() {
|
||||
@Override
|
||||
public void doubleClick(DoubleClickEvent event) {
|
||||
@ -445,12 +473,13 @@ public class DesignBrowser {
|
||||
}
|
||||
|
||||
/**
|
||||
* The Class WaveformAttributeFilter.
|
||||
* The Class StreamTableFilter.
|
||||
*/
|
||||
public class WaveformAttributeFilter extends ViewerFilter {
|
||||
public class StreamTableFilter extends ViewerFilter {
|
||||
|
||||
/** The search string. */
|
||||
private String searchString;
|
||||
private Pattern pattern;
|
||||
|
||||
/**
|
||||
* Sets the search text.
|
||||
@ -458,7 +487,10 @@ public class DesignBrowser {
|
||||
* @param s the new search text
|
||||
*/
|
||||
public void setSearchText(String s) {
|
||||
this.searchString = ".*" + s + ".*"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
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)
|
||||
@ -469,17 +501,103 @@ public class DesignBrowser {
|
||||
if (searchString == null || searchString.length() == 0) {
|
||||
return true;
|
||||
}
|
||||
IWaveform p = (IWaveform) element;
|
||||
try {
|
||||
if (p.getName().matches(searchString))
|
||||
if(element instanceof IWaveform) {
|
||||
if (pattern.matcher(((IWaveform) element).getName()).matches())
|
||||
return true;
|
||||
} catch (PatternSyntaxException e) {
|
||||
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.
|
||||
*
|
||||
|
@ -669,12 +669,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
|
||||
* @param persistedState the persisted state
|
||||
*/
|
||||
protected void saveWaveformViewerState(Map<String, String> persistedState) {
|
||||
Integer index;
|
||||
boolean isStream = false;
|
||||
persistedState.put(SHOWN_WAVEFORM + "S", Integer.toString(waveformPane.getStreamList().size())); //$NON-NLS-1$
|
||||
index = 0;
|
||||
Integer index = 0;
|
||||
for (TrackEntry trackEntry : waveformPane.getStreamList()) {
|
||||
if(trackEntry.isStream()) { isStream=true; }
|
||||
persistedState.put(SHOWN_WAVEFORM + index, trackEntry.waveform.getFullName());
|
||||
persistedState.put(SHOWN_WAVEFORM + index + VALUE_DISPLAY, trackEntry.valueDisplay.toString());
|
||||
persistedState.put(SHOWN_WAVEFORM + index + WAVE_DISPLAY, trackEntry.waveDisplay.toString());
|
||||
@ -693,23 +690,24 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
|
||||
|
||||
// get selected transaction of a stream
|
||||
ISelection selection = waveformPane.getSelection();
|
||||
if (!selection.isEmpty() && isStream) {
|
||||
if (!selection.isEmpty()) {
|
||||
List<Object> t = getISelection(selection);
|
||||
ITx tx = (ITx) t.get(0);
|
||||
TrackEntry te = (TrackEntry) t.get(1);
|
||||
// get transaction id
|
||||
persistedState.put(SELECTED_TX_ID, Long.toString(tx.getId()));
|
||||
//get TrackEntry name
|
||||
String name = te.getStream().getFullName();
|
||||
persistedState.put(SELECTED_TRACKENTRY_NAME, name);
|
||||
if(t.get(0) instanceof ITx) {
|
||||
ITx tx = (ITx) t.get(0);
|
||||
TrackEntry te = (TrackEntry) t.get(1);
|
||||
// get transaction id
|
||||
persistedState.put(SELECTED_TX_ID, Long.toString(tx.getId()));
|
||||
//get TrackEntry name
|
||||
String name = te.getStream().getFullName();
|
||||
persistedState.put(SELECTED_TRACKENTRY_NAME, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected List<Object> getISelection(ISelection selection){
|
||||
List<Object> result = new LinkedList<Object> ();
|
||||
|
||||
if ( selection instanceof IStructuredSelection )
|
||||
{
|
||||
if ( selection instanceof IStructuredSelection ) {
|
||||
Iterator<?> i = ((IStructuredSelection)selection).iterator();
|
||||
while (i.hasNext()){
|
||||
Object o = i.next ();
|
||||
|
@ -10,7 +10,7 @@
|
||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
||||
</parent>
|
||||
<artifactId>com.minres.scviewer.e4.product</artifactId>
|
||||
<version>2.1.4-SNAPSHOT</version>
|
||||
<version>2.1.6-SNAPSHOT</version>
|
||||
<packaging>eclipse-repository</packaging>
|
||||
<groupId>com.minres.scviewer</groupId>
|
||||
<build>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?pde version="3.5"?>
|
||||
|
||||
<product name="SCViewer" uid="scviewer" id="com.minres.scviewer.e4.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="2.1.4.qualifier" useFeatures="false" includeLaunchers="true">
|
||||
<product name="SCViewer" uid="scviewer" id="com.minres.scviewer.e4.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="2.1.6.qualifier" useFeatures="false" includeLaunchers="true">
|
||||
|
||||
<configIni use="default">
|
||||
</configIni>
|
||||
|
Reference in New Issue
Block a user