From 77302521b22f2b91699275fe8347a84c6128dd1a Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Wed, 11 Mar 2020 23:11:42 +0100 Subject: [PATCH 1/6] add another fix for #27 'parser doesn't handle truncated input files' --- .../src/com/minres/scviewer/database/text/TextDbLoader.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy index 21145ed..a5adb3b 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy @@ -88,6 +88,8 @@ public class TextDbLoader implements IWaveformDbLoader{ } } catch (IndexOutOfBoundsException e) { return false + } catch (IllegalArgumentException e) { + return false } catch (NumberFormatException e) { return false } catch(EOFException e) { From 18f2a110f0b24244804acfa828af5c9fad2e2f86 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 13 Mar 2020 18:40:22 +0100 Subject: [PATCH 2/6] add shortcuts for zoom --- .../Application.e4xmi | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/com.minres.scviewer.e4.application/Application.e4xmi b/com.minres.scviewer.e4.application/Application.e4xmi index f02d07f..1bc8147 100644 --- a/com.minres.scviewer.e4.application/Application.e4xmi +++ b/com.minres.scviewer.e4.application/Application.e4xmi @@ -1,10 +1,10 @@ - + - + @@ -25,19 +25,19 @@ - - + + NoAutoCollapse - + - + - + @@ -88,7 +88,9 @@ - + + + @@ -155,16 +157,43 @@ - - - - + + type:user + + + + + type:user + + + + type:user + + + + + + type:user + + + + type:user + + + + type:user + + + type:user + - + + + - + categoryTag:General From 2b7c9a240f819f2f3ca9397ef7a6810e8cc35040 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 13 Mar 2020 19:51:07 +0100 Subject: [PATCH 3/6] add drag area to wavefrom view --- .../database/swt/internal/WaveformViewer.java | 52 ++++++++++++++++--- .../e4/application/parts/WaveformViewer.java | 21 +------- 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java index ca5a566..f94976a 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java @@ -40,6 +40,7 @@ import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceAdapter; import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetAdapter; import org.eclipse.swt.dnd.DropTargetEvent; @@ -50,6 +51,9 @@ import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.MouseMoveListener; +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.graphics.Font; @@ -139,14 +143,21 @@ public class WaveformViewer implements IWaveformViewer { } } }; - - protected MouseListener waveformMouseListener = new MouseAdapter(){ - Point start; + + class WaveformMouseListener implements MouseMoveListener, MouseListener, PaintListener { + Point start, end; List initialSelected; + boolean down=false; + + @Override + public void mouseDoubleClick(MouseEvent e) { + } @Override public void mouseDown(MouseEvent e) { start=new Point(e.x, e.y); + end=new Point(e.x, e.y); + down=true; if((e.stateMask&SWT.MODIFIER_MASK)!=0) return; //don't react on modifier if (e.button == 1) { initialSelected = waveformCanvas.getClicked(start); @@ -156,11 +167,35 @@ public class WaveformViewer implements IWaveformViewer { } } + @Override + public void mouseMove(MouseEvent e) { + if(down) { + end=new Point(e.x, e.y); + asyncUpdate(e.widget); + } + } + + @Override + public void paintControl(PaintEvent e) { + if(down) { + GC gc = e.gc; + gc.setAlpha(128); + int minX = Math.min(start.x, end.x); + int maxX = Math.max(start.x, end.x); + int width = maxX - minX; + gc.fillRectangle(minX, 0, width, e.height); + } + } + @Override public void mouseUp(MouseEvent e) { + down=false; if(start==null) return; - if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier - if (e.button == 1 && ((e.stateMask&SWT.SHIFT)==0)) { + if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier except shift + if(!start.equals(end)){ + asyncUpdate(e.widget); + } else if (e.button == 1 && ((e.stateMask&SWT.SHIFT)==0)) { + // set cursor (button 1 and no shift) if(Math.abs(e.x-start.x)<3 && Math.abs(e.y-start.y)<3){ // first set cursor time setCursorTime(snapOffsetToEvent(e)); @@ -169,11 +204,12 @@ public class WaveformViewer implements IWaveformViewer { asyncUpdate(e.widget); } }else if (e.button == 2 ||(e.button==1 && (e.stateMask&SWT.SHIFT)!=0)) { + // set marker (button 1 and shift) setMarkerTime(snapOffsetToEvent(e), selectedMarker); asyncUpdate(e.widget); } } - + protected long snapOffsetToEvent(MouseEvent e) { long time= waveformCanvas.getTimeForOffset(e.x); long scaling=5*waveformCanvas.getScaleFactor(); @@ -209,7 +245,9 @@ public class WaveformViewer implements IWaveformViewer { } return time; } + }; + protected WaveformMouseListener waveformMouseListener = new WaveformMouseListener(); public WaveformViewer(Composite parent) { pcs=new PropertyChangeSupport(this); @@ -309,6 +347,8 @@ public class WaveformViewer implements IWaveformViewer { waveformCanvas.setMaxTime(1); waveformCanvas.addMouseListener(waveformMouseListener); + waveformCanvas.addMouseMoveListener(waveformMouseListener); + waveformCanvas.addPaintListener(waveformMouseListener); nameListScrolled.getVerticalBar().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index 3b60004..8bcf4a4 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -65,16 +65,12 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseTrackListener; -import org.eclipse.swt.events.MouseWheelListener; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.MessageBox; import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.ITxEvent; @@ -281,38 +277,30 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis } } }); + /* waveformPane.getWaveformControl().addMouseTrackListener(new MouseTrackListener() { - @Override public void mouseHover(MouseEvent e) { // TODO Auto-generated method stub - } - @Override public void mouseExit(MouseEvent e) { // TODO Auto-generated method stub - } - @Override public void mouseEnter(MouseEvent e) { // TODO Auto-generated method stub - } }); waveformPane.getWaveformControl().addMouseWheelListener(new MouseWheelListener() { - @Override public void mouseScrolled(MouseEvent e) { // TODO Auto-generated method stub - } }); - + */ waveformPane.getWaveformControl().addListener(SWT.KeyDown, new Listener() { - @SuppressWarnings("null") @Override public void handleEvent(Event e) { @@ -616,8 +604,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis } public void saveState(String fileName){ - - Map persistedState = new HashMap<>(); persistedState.put(DATABASE_FILE + "S", Integer.toString(filesToLoad.size())); //$NON-NLS-1$ Integer index = 0; @@ -634,8 +620,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis FileOutputStream out = new FileOutputStream(fileName); props.store(out, "Written by SCViewer"); //$NON-NLS-1$ out.close(); - - } catch (IOException e) { e.printStackTrace(); } @@ -1043,7 +1027,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis * Sets the zoom fit. */ public void setZoomFit() { - //actual max time of signal long maxTime = waveformPane.getMaxTime(); From 674aa7d3ce820ef4a7e11df2c11f6f6d7358ec37 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 13 Mar 2020 21:06:53 +0100 Subject: [PATCH 4/6] add initial version of drag-zoom --- .../database/swt/internal/WaveformCanvas.java | 12 +++-- .../database/swt/internal/WaveformViewer.java | 51 ++++++++++++++----- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java index 0da478c..35ccff3 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformCanvas.java @@ -229,6 +229,11 @@ public class WaveformCanvas extends Canvas{ } public void setZoomLevel(int level) { + long tc=cursorPainters.get(0).getTime(); // cursor time + setZoomLevel(level, tc); + } + + public void setZoomLevel(int level, long centerTime) { long oldScaleFactor=scaleFactor; if(level0) { origin.x=(int) -originX; // new cursor time offset relative to left border @@ -557,7 +561,7 @@ public class WaveformCanvas extends Canvas{ return (getClientArea().width+origin.x)*scaleFactor; } - long getOriginTime() { + long getMinVisibleTime() { return origin.x * scaleFactor; } } diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java index f94976a..9b959d4 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java @@ -194,26 +194,60 @@ public class WaveformViewer implements IWaveformViewer { if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier except shift if(!start.equals(end)){ asyncUpdate(e.widget); + long startTime = waveformCanvas.getTimeForOffset(start.x); + long endTime = waveformCanvas.getTimeForOffset(end.x); + long targetTimeRange = endTime-startTime; + long currentTimeRange = waveformCanvas.getMaxVisibleTime()-waveformCanvas.getMinVisibleTime(); + if(targetTimeRange==0) return; + long relation = currentTimeRange/targetTimeRange; + long i = 1; + int level=0;//relation>0?0:0; + do { + if(relation<0 ) { + if(-relation floorEntry=null, ceilEntry=null; if(o instanceof TrackEntry){ TrackEntry entry = (TrackEntry) o; @@ -1270,13 +1304,6 @@ public class WaveformViewer implements IWaveformViewer { if(percent<-100) percent=-100; if(percent>100) percent=100; int diff = (waveformCanvas.getWidth()*percent)/100; -// ScrollBar sb = waveformCanvas.getHorizontalBar(); -// int x = sb.getSelection(); -// System.out.println("Setting sb to "+ (x+diff)); -// if((x+diff)>0) -// sb.setSelection(x+diff); -// else -// sb.setSelection(0); Point o = waveformCanvas.getOrigin(); waveformCanvas.setOrigin(o.x-diff, o.y); waveformCanvas.redraw(); From 8e66e5fe0b77493b4dbf6b94d46c8d42c99f1fb2 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 13 Mar 2020 22:06:55 +0100 Subject: [PATCH 5/6] add a select-all key stroke to design browsers stream table --- .../Application.e4xmi | 8 ++- .../handlers/SelectAllHandler.java | 26 +++++++- .../e4/application/parts/DesignBrowser.java | 64 ++++--------------- .../e4/application/parts/WaveformViewer.java | 11 ++-- 4 files changed, 50 insertions(+), 59 deletions(-) diff --git a/com.minres.scviewer.e4.application/Application.e4xmi b/com.minres.scviewer.e4.application/Application.e4xmi index 1bc8147..42c316c 100644 --- a/com.minres.scviewer.e4.application/Application.e4xmi +++ b/com.minres.scviewer.e4.application/Application.e4xmi @@ -4,7 +4,7 @@ - + @@ -187,9 +187,15 @@ type:user + + + type:user + + + diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/SelectAllHandler.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/SelectAllHandler.java index 14d89a1..a641546 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/SelectAllHandler.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/SelectAllHandler.java @@ -11,13 +11,33 @@ package com.minres.scviewer.e4.application.handlers; +import javax.inject.Inject; + import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.e4.ui.workbench.modeling.EPartService; + +import com.minres.scviewer.e4.application.parts.DesignBrowser; public class SelectAllHandler { + @Inject @Optional DesignBrowser designBrowser; + @Execute - public void execute() { - + public void execute(EPartService partService) { + if(designBrowser==null) designBrowser = getListPart(partService); + if(designBrowser!=null){ + designBrowser.selectAllWaveforms(); + } } - + + protected DesignBrowser getListPart(EPartService partService){ + MPart part = partService.getActivePart(); + if(part.getObject() instanceof DesignBrowser) + return (DesignBrowser) part.getObject(); + else + return null; + } + } \ No newline at end of file diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java index 370849b..e49a360 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java @@ -13,9 +13,9 @@ package com.minres.scviewer.e4.application.parts; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.annotation.Annotation; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -133,7 +133,7 @@ public class DesignBrowser { private TableViewer txTableViewer; /** The append all item. */ - ToolItem appendItem, insertItem, insertAllItem, appendAllItem; + ToolItem appendItem, insertItem; /** The other selection count. */ int thisSelectionCount=0, otherSelectionCount=0; @@ -287,7 +287,6 @@ public class DesignBrowser { updateButtons(); } }); - menuService.registerContextMenu(txTableViewer.getControl(), POPUP_ID); ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT); @@ -322,48 +321,6 @@ public class DesignBrowser { ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx); } }); - new ToolItem(toolBar, SWT.SEPARATOR); - - appendAllItem = new ToolItem(toolBar, SWT.NONE); - appendAllItem.setToolTipText(Messages.DesignBrowser_12); - appendAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_all_waves.png")); //$NON-NLS-1$ //$NON-NLS-2$ - appendAllItem.setEnabled(false); - - new ToolItem(toolBar, SWT.SEPARATOR); - appendAllItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - Object[] all = getFilteredChildren(txTableViewer); - if(all.length>0){ - Object oldSel=selectionService.getSelection(); - selectionService.setSelection(new StructuredSelection(all)); - AddWaveformHandler myHandler = new AddWaveformHandler(); - Object result = runCommand(myHandler, CanExecute.class, "after", false); //$NON-NLS-1$ - if(result!=null && (Boolean)result) - ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx); - selectionService.setSelection(oldSel); - } - } - }); - insertAllItem = new ToolItem(toolBar, SWT.NONE); - insertAllItem.setToolTipText(Messages.DesignBrowser_16); - insertAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_all_waves.png")); //$NON-NLS-1$ //$NON-NLS-2$ - insertAllItem.setEnabled(false); - insertAllItem.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - Object[] all = getFilteredChildren(txTableViewer); - if(all.length>0){ - Object oldSel=selectionService.getSelection(); - selectionService.setSelection(new StructuredSelection(all)); - AddWaveformHandler myHandler = new AddWaveformHandler(); - Object result = runCommand(myHandler, CanExecute.class, "before", false); //$NON-NLS-1$ - if(result!=null && (Boolean)result) - ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx); - selectionService.setSelection(oldSel); - } - } - }); } /** @@ -391,6 +348,16 @@ public class DesignBrowser { txTableViewer.setSelection(null); } + public void selectAllWaveforms() { + int itemCount = txTableViewer.getTable().getItemCount(); + ArrayList list = new ArrayList<>(); + for(int i=0; i Date: Fri, 13 Mar 2020 22:11:39 +0100 Subject: [PATCH 6/6] update version numbers --- com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF | 2 +- com.minres.scviewer.database.ui.swt/pom.xml | 2 +- com.minres.scviewer.e4.application/META-INF/MANIFEST.MF | 2 +- com.minres.scviewer.e4.application/pom.xml | 2 +- com.minres.scviewer.e4.product/pom.xml | 2 +- com.minres.scviewer.e4.product/scviewer.product | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF b/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF index 7ee26fb..1e8ad75 100644 --- a/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.database.ui.swt/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: SWT widget Bundle-SymbolicName: com.minres.scviewer.database.ui.swt -Bundle-Version: 2.0.2.qualifier +Bundle-Version: 2.1.0.qualifier Bundle-Vendor: MINRES Technologies GmbH Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.eclipse.swt;bundle-version="3.103.1", diff --git a/com.minres.scviewer.database.ui.swt/pom.xml b/com.minres.scviewer.database.ui.swt/pom.xml index 3c274f8..95ddd22 100644 --- a/com.minres.scviewer.database.ui.swt/pom.xml +++ b/com.minres.scviewer.database.ui.swt/pom.xml @@ -8,5 +8,5 @@ 2.0.0-SNAPSHOT ../com.minres.scviewer.parent - 2.0.2-SNAPSHOT + 2.1.0-SNAPSHOT \ No newline at end of file diff --git a/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF index 3623ad9..c7b3710 100644 --- a/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF @@ -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.6.qualifier +Bundle-Version: 2.2.0.qualifier Bundle-Vendor: %Bundle-Vendor Require-Bundle: javax.inject;bundle-version="1.0.0", org.eclipse.core.runtime;bundle-version="3.11.1", diff --git a/com.minres.scviewer.e4.application/pom.xml b/com.minres.scviewer.e4.application/pom.xml index 255f705..d43c9c9 100644 --- a/com.minres.scviewer.e4.application/pom.xml +++ b/com.minres.scviewer.e4.application/pom.xml @@ -1,7 +1,7 @@ 4.0.0 com.minres.scviewer.e4.application - 2.1.6-SNAPSHOT + 2.2.0-SNAPSHOT com.minres.scviewer com.minres.scviewer.parent diff --git a/com.minres.scviewer.e4.product/pom.xml b/com.minres.scviewer.e4.product/pom.xml index 3de49a1..06d3ffb 100644 --- a/com.minres.scviewer.e4.product/pom.xml +++ b/com.minres.scviewer.e4.product/pom.xml @@ -10,7 +10,7 @@ ../com.minres.scviewer.parent com.minres.scviewer.e4.product - 2.1.6-SNAPSHOT + 2.2.0-SNAPSHOT eclipse-repository com.minres.scviewer diff --git a/com.minres.scviewer.e4.product/scviewer.product b/com.minres.scviewer.e4.product/scviewer.product index f951ede..a22bfa4 100644 --- a/com.minres.scviewer.e4.product/scviewer.product +++ b/com.minres.scviewer.e4.product/scviewer.product @@ -1,7 +1,7 @@ - +