diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java index 966dc9f..813824b 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java @@ -126,24 +126,17 @@ public class ArrowPainter implements IPainter { Rectangle correctedTargetRectangle = new Rectangle(txRectangle.x+correctionValue, txRectangle.y, txRectangle.width, txRectangle.height); for (LinkEntry entry : iRect) { Rectangle correctedRectangle = new Rectangle(entry.rectangle.x+correctionValue, entry.rectangle.y, entry.rectangle.width, entry.rectangle.height); - Point target = drawPath(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, + drawArrow(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedRectangle, correctedTargetRectangle); - drawArrow(proj, target); } for (LinkEntry entry : oRect) { Rectangle correctedRectangle = new Rectangle(entry.rectangle.x+correctionValue, entry.rectangle.y, entry.rectangle.width, entry.rectangle.height); - Point target = drawPath(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedTargetRectangle, + drawArrow(proj, highlightType.equals(entry.relationType) ? highliteColor : fgColor, correctedTargetRectangle, correctedRectangle); - drawArrow(proj, target); } } - protected void drawArrow(Projection proj, Point target) { - proj.drawLine(target.x - 8, target.y - 5, target.x, target.y); - proj.drawLine(target.x - 8, target.y + 5, target.x, target.y); - } - - protected Point drawPath(Projection proj, Color fgColor, Rectangle srcRectangle, Rectangle tgtRectangle) { + protected void drawArrow(Projection proj, Color fgColor, Rectangle srcRectangle, Rectangle tgtRectangle) { Point point1 = proj.project(new Point(srcRectangle.x, srcRectangle.y + srcRectangle.height / 2)); Point point2 = proj.project(new Point(tgtRectangle.x, tgtRectangle.y + tgtRectangle.height / 2)); @@ -160,11 +153,15 @@ public class ArrowPainter implements IPainter { path.cubicTo(center.x + xCtrlOffset, center.y, point2.x - xCtrlOffset, point2.y, point2.x, point2.y); } else path.cubicTo(point1.x + xCtrlOffset, point1.y, point2.x - xCtrlOffset, point2.y, point2.x, point2.y); + proj.setAntialias(SWT.ON); proj.setForeground(fgColor); proj.getGC().drawPath(path); path.dispose(); - return point2; + // now draw the arrow head + proj.getGC().drawLine(point2.x - 8, point2.y - 5, point2.x, point2.y); + proj.getGC().drawLine(point2.x - 8, point2.y + 5, point2.x, point2.y); + } class LinkEntry { diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/Projection.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/Projection.java index d13aaca..a85db0a 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/Projection.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/Projection.java @@ -44,10 +44,6 @@ public class Projection { public void setFillRule(int rule) { gc.setFillRule(rule); } - public void fillRectangle(Rectangle rect) { - gc.fillRectangle(rect.x+translation.x, rect.y+translation.y, rect.width, rect.height); - } - public void setLineStyle(int style) { gc.setLineStyle(style); } @@ -69,6 +65,10 @@ public class Projection { return gc; } + public void fillRectangle(Rectangle rect) { + gc.fillRectangle(rect.x+translation.x, rect.y+translation.y, rect.width, rect.height); + } + public void drawRectangle(Rectangle rect) { gc.drawRectangle(rect.x+translation.y, rect.y+translation.y, rect.width, rect.height); } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java index 289e1f8..a746fde 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java @@ -135,9 +135,6 @@ public class StreamPainter extends TrackPainter{ if(bb.x+bb.widtharea.x+area.width) return; if(bb.width==0){ proj.drawLine(bb.x, bb.y, bb.x, bb.y+bb.height); - } else if(bb.width<10){ - proj.fillRectangle(bb); - proj.drawRectangle(bb); } else { if(bb.x < area.x) { bb.width = bb.width-(area.x-bb.x)+5; @@ -149,8 +146,9 @@ public class StreamPainter extends TrackPainter{ bb_x2=area_x2+5; bb.width= bb_x2-bb.x; } - proj.fillRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); - proj.drawRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5); + int arc = bb.width<10?1:5; + proj.fillRoundRectangle(bb.x, bb.y, bb.width, bb.height, arc, arc); + proj.drawRoundRectangle(bb.x, bb.y, bb.width, bb.height, arc, arc); } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java index 1a105e9..7a3fef9 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java @@ -229,10 +229,10 @@ public class WaveformCanvas extends Canvas { } public void setZoomLevel(int level, long centerTime) { + //FIXME: keep center if zoom-out and cursor is not in view long oldScaleFactor=scaleFactor; if(level<0) level = 0; if(level0) { - origin.x=(int) -originX; // new cursor time offset relative to left border - }else { - origin.x=0; - } + long xc=centerTime/oldScaleFactor; // cursor total x-offset + long xoffs=xc+origin.x; // cursor offset relative to left border + long xcn=centerTime/scaleFactor; // new total x-offset + long originX=xcn-xoffs; + if(originX>0) { + origin.x=(int) -originX; // new cursor time offset relative to left border + }else { + origin.x=0; + } syncScrollBars(); arrowPainter.setTx(tx); redraw(); + this.level = level; } } @@ -400,12 +401,13 @@ public class WaveformCanvas extends Canvas { /* Paint function */ private void paint(GC gc) { + Point pt = getSize(); + if(pt.x==0 || pt.y==0) return; Rectangle clientRect = getClientArea(); /* Canvas' painting area */ GC thisGc = gc; Image d_backingImg = null; if(doubleBuffering) { - Point p = getSize(); - d_backingImg = new Image(getDisplay(), p.x, p.y); + d_backingImg = new Image(getDisplay(), pt.x, pt.y); thisGc = new GC(d_backingImg); thisGc.setBackground(gc.getBackground()); thisGc.setForeground(gc.getForeground()); diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java index 68882c2..08e8c76 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java @@ -52,7 +52,6 @@ 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; @@ -170,37 +169,11 @@ public class WaveformView implements IWaveformView { } }; - class WaveformMouseListener implements MouseMoveListener, MouseListener, PaintListener { + class WaveformMouseListener implements PaintListener, Listener { 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.getElementsAt(start); - } else if (e.button == 3) { - Menu topMenu= top.getMenu(); - if(topMenu!=null) topMenu.setVisible(true); - } - } - - @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) { @@ -214,8 +187,7 @@ public class WaveformView implements IWaveformView { } } - @Override - public void mouseUp(MouseEvent e) { + private 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 except shift @@ -307,8 +279,43 @@ public class WaveformView implements IWaveformView { return time; } + @Override + public void handleEvent(Event e) { + switch (e.type) { + case SWT.MouseWheel: + break; + case SWT.MouseDown: + 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.getElementsAt(start); + } else if (e.button == 3) { + Menu topMenu= top.getMenu(); + if(topMenu!=null) topMenu.setVisible(true); + } + break; + case SWT.MouseUp: + mouseUp(new MouseEvent(e)); + break; + //case SWT.MouseDoubleClick: + //mouseDoubleClick(new MouseEvent(e)); + //break; + case SWT.MouseMove: + if(down) { + end=new Point(e.x, e.y); + asyncUpdate(e.widget); + } + break; + default: + break; + } + + } + }; - protected WaveformMouseListener waveformMouseListener = new WaveformMouseListener(); + protected WaveformMouseListener waveformMouseListener = new WaveformMouseListener(); public WaveformView(Composite parent) { pcs=new PropertyChangeSupport(this); @@ -322,7 +329,7 @@ public class WaveformView implements IWaveformView { streams = new ObservableList<>(); streams.addPropertyChangeListener("content", this); - top = new Composite(parent, SWT.NONE); + top = parent; top.setLayout(new FillLayout(SWT.HORIZONTAL)); SashForm topSash = new SashForm(top, SWT.SMOOTH); @@ -407,9 +414,12 @@ public class WaveformView implements IWaveformView { valueListScrolled.setContent(valueList); waveformCanvas.setMaxTime(1); - waveformCanvas.addMouseListener(waveformMouseListener); - waveformCanvas.addMouseMoveListener(waveformMouseListener); - waveformCanvas.addPaintListener(waveformMouseListener); + waveformCanvas.addPaintListener(waveformMouseListener); + waveformCanvas.addListener(SWT.MouseDown,waveformMouseListener); + waveformCanvas.addListener(SWT.MouseUp,waveformMouseListener); + //waveformCanvas.addListener(SWT.MouseDoubleClick,waveformMouseListener); + waveformCanvas.addListener(SWT.MouseMove,waveformMouseListener); + waveformCanvas.addListener(SWT.MouseWheel, waveformMouseListener); nameListScrolled.getVerticalBar().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { @@ -895,7 +905,7 @@ public class WaveformView implements IWaveformView { @Override public void moveCursor(GotoDirection direction) { if(currentWaveformSelection.size()!=1) return; - TrackEntry sel = currentWaveformSelection.get(1); + TrackEntry sel = currentWaveformSelection.get(0); long time = getCursorTime(); NavigableMap map=null; if(sel.isStream()){ diff --git a/plugins/com.minres.scviewer.e4.application/Application.e4xmi b/plugins/com.minres.scviewer.e4.application/Application.e4xmi index 17cd779..81fadd5 100644 --- a/plugins/com.minres.scviewer.e4.application/Application.e4xmi +++ b/plugins/com.minres.scviewer.e4.application/Application.e4xmi @@ -3,11 +3,8 @@ - - - NoAutoCollapse - - + + NoAutoCollapse diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/MoveWaveformHandler.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/MoveWaveformHandler.java index 79bf117..3b5fcce 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/MoveWaveformHandler.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/MoveWaveformHandler.java @@ -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; } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/NavigateEvent.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/NavigateEvent.java index 2144313..971d409 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/NavigateEvent.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/NavigateEvent.java @@ -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; } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/OpenHandler.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/OpenHandler.java index 11fd756..2fc5a9b 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/OpenHandler.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/OpenHandler.java @@ -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); } } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/ui/AbstractDesignBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/ui/AbstractDesignBrowser.java deleted file mode 100644 index e40d6dc..0000000 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/ui/AbstractDesignBrowser.java +++ /dev/null @@ -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)input).get(0); - if(db==waveformDb) return; // do nothing if old and new database is the same - ((List)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 list = new ArrayList<>(); - for(int i=0; i listeners; - private Image file; - - private Image dir; - public FileTreeLabelProvider() { listeners = new ArrayList(); } 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) { diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java index f79fd36..6d4cc71 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java @@ -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); diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index d0375d1..6282533 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -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 t = getISelection(selection); - if(t.get(0) instanceof ITx) { - ITx tx = (ITx) t.get(0); - TrackEntry te = (TrackEntry) t.get(1); + List 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 diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/provider/TxDbLabelProvider.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/provider/TxDbLabelProvider.java index 343ee7e..9a9164f 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/provider/TxDbLabelProvider.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/provider/TxDbLabelProvider.java @@ -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)