Fixed Styling and window system resource handling

This commit is contained in:
Eyck Jentzsch 2015-11-13 18:58:14 +01:00
parent 5680af1b45
commit 41de99dd4b
12 changed files with 286 additions and 338 deletions

View File

@ -14,24 +14,27 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.wb.swt.SWTResourceManager;
public class RulerPainter implements IPainter {
protected WaveformCanvas waveCanvas;
static final int rulerTickMinorC = 10;
static final int rulerTickMajorC = 100;
private Color headerBgColor;
private Color headerFgColor;
public RulerPainter(WaveformCanvas waveCanvas, Color headerFgColor, Color headerBgColor) {
public RulerPainter(WaveformCanvas waveCanvas) {
this.waveCanvas=waveCanvas;
this.headerBgColor=headerBgColor;
this.headerFgColor=headerFgColor;
}
@Override
public void paintArea(GC gc, Rectangle area) {
Color headerFgColor=waveCanvas.getDisplay().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
if(headerFgColor.isDisposed())
headerFgColor=SWTResourceManager.getColor(0,0,0);
Color headerBgColor = waveCanvas.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
if(headerBgColor.isDisposed())
headerBgColor=SWTResourceManager.getColor(255,255,255);
String unit=waveCanvas.getUnitStr();
int unitMultiplier=waveCanvas.getUnitMultiplier();
long scaleFactor=waveCanvas.getScaleFactor();

View File

@ -111,7 +111,7 @@ public class WaveformCanvas extends Canvas {
// order is important: it is bottom to top
trackAreaPainter=new TrackAreaPainter(this);
painterList.add(trackAreaPainter);
rulerPainter=new RulerPainter(this, getDisplay().getSystemColor(SWT.COLOR_BLACK), getDisplay().getSystemColor(SWT.COLOR_WHITE));
rulerPainter=new RulerPainter(this);
painterList.add(rulerPainter);
CursorPainter cp = new CursorPainter(this, scaleFactor * 10, cursorPainters.size()-1);
painterList.add(cp);

View File

@ -96,6 +96,8 @@ public class WaveformViewer implements IWaveformViewer {
private ScrolledComposite valueListScrolled;
private Control namePaneHeader;
private Canvas nameList;
private Canvas valueList;
@ -239,10 +241,11 @@ public class WaveformViewer implements IWaveformViewer {
waveformCanvas = new WaveformCanvas(topSash, SWT.NONE);
SashForm leftSash = new SashForm(composite, SWT.SMOOTH);
leftSash.setBackground(leftSash.getDisplay().getSystemColor(SWT.COLOR_GRAY));
leftSash.setBackground(SWTResourceManager.getColor(SWT.COLOR_GRAY));
Composite namePane = createTextPane(leftSash, "Name");
namePane.setBackground(namePane.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
namePaneHeader= namePane.getChildren()[0];
namePane.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
nameListScrolled = new ScrolledComposite(namePane, SWT.H_SCROLL | SWT.V_SCROLL);
nameListScrolled.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
@ -275,7 +278,7 @@ public class WaveformViewer implements IWaveformViewer {
nameListScrolled.setContent(nameList);
Composite valuePane = createTextPane(leftSash, "Value");
valuePane.setBackground(valuePane.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
valuePane.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
valueListScrolled = new ScrolledComposite(valuePane, SWT.H_SCROLL | SWT.V_SCROLL);
valueListScrolled.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
valueListScrolled.setExpandHorizontal(true);
@ -805,8 +808,8 @@ public class WaveformViewer implements IWaveformViewer {
gc.fillRectangle(subArea.x, subArea.y + yOffset, subArea.width, subArea.height);
gc.setFont(nameFontB);
} else {
gc.setBackground(SWTResourceManager.getColor(SWT.COLOR_LIST_BACKGROUND));
gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_LIST_FOREGROUND));
gc.setBackground(namePaneHeader.getBackground());
gc.setForeground(namePaneHeader.getForeground());
gc.setFont(nameFont);
}
gc.drawText(value, subArea.x + 5, subArea.y + yOffset + (waveformCanvas.getTrackHeight() - size.y) / 2, true);

View File

@ -137,6 +137,7 @@
<handlers xmi:id="_95Pfx3NmEeWBq8z1Dv39LA" elementId="com.minres.scviewer.e4.application.handler.aboutCommand" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.handlers.AboutHandler" command="_95PfxnNmEeWBq8z1Dv39LA"/>
<handlers xmi:id="_3ZZhsHXHEeWwZ-9vrAR2UQ" elementId="com.minres.scviewer.e4.application.handler.selectallCommand" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.handlers.SelectAllHandler" command="_bV-TMHXHEeWwZ-9vrAR2UQ"/>
<handlers xmi:id="_CTcpEIl_EeWxJ_wPkM6yGQ" elementId="com.minres.scviewer.e4.application.handler.preferences" contributionURI="bundleclass://com.opcoach.e4.preferences/com.opcoach.e4.preferences.handlers.E4PreferencesHandler" command="_AxH6sIl_EeWxJ_wPkM6yGQ"/>
<handlers xmi:id="_UUnX8IoNEeWxJ_wPkM6yGQ" elementId="com.minres.scviewer.e4.application.handler.set_them" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.handlers.ThemeSetHandler" command="_KlGlsIoNEeWxJ_wPkM6yGQ"/>
<bindingTables xmi:id="_95PfvnNmEeWBq8z1Dv39LA" bindingContext="_95PfuXNmEeWBq8z1Dv39LA">
<bindings xmi:id="_95Pfv3NmEeWBq8z1Dv39LA" keySequence="M1+Q" command="_95PfvHNmEeWBq8z1Dv39LA"/>
<bindings xmi:id="_95PfwnNmEeWBq8z1Dv39LA" keySequence="M1+O" command="_95PfwHNmEeWBq8z1Dv39LA"/>
@ -212,6 +213,9 @@
<parameters xmi:id="_7T1TcHwIEeWv0Y5uF2QN5w" elementId="com.minres.scviewer.e4.application.command.addwaveform.all" name="all" typeId="" optional="false"/>
</commands>
<commands xmi:id="_AxH6sIl_EeWxJ_wPkM6yGQ" elementId="org.eclipse.ui.window.preferences" commandName="Preferences"/>
<commands xmi:id="_KlGlsIoNEeWxJ_wPkM6yGQ" elementId="com.minres.scviewer.e4.application.command.set_them" commandName="Set Theme">
<parameters xmi:id="_O8Z9IIoNEeWxJ_wPkM6yGQ" elementId="com.minres.scviewer.e4.application.command.theme.parameter.id" name="themeId"/>
</commands>
<addons xmi:id="_95PfsnNmEeWBq8z1Dv39LA" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
<addons xmi:id="_95Pfs3NmEeWBq8z1Dv39LA" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
<addons xmi:id="_95PftHNmEeWBq8z1Dv39LA" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>

View File

@ -30,7 +30,8 @@ Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.e4.core.commands;bundle-version="0.11.0",
org.eclipse.e4.ui.workbench.addons.swt,
com.opcoach.e4.preferences,
org.eclipse.e4.core.di.extensions
org.eclipse.e4.core.di.extensions,
org.eclipse.e4.ui.css.swt.theme;bundle-version="0.10.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.minres.scviewer.database,
javax.inject;version="1.0.0"

View File

@ -5,7 +5,6 @@ bin.includes = META-INF/,\
plugin.xml,\
Application.e4xmi,\
icons/,\
css/default.css,\
OSGI-INF/l10n/bundle.properties,\
css/,\
OSGI-INF/
source.. = src/

View File

@ -1,205 +1,78 @@
/*******************************************************************************
* Copyright (c) 2010, 2014 IBM Corporation 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:
* IBM Corporation - initial API and implementation
* Lars Vogel <Lars.Vogel@gmail.com> - Bug 420836
*******************************************************************************/
/* New ColorDefinitions for the E4 default theme */
ThemesExtension { color-definition:
'#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START',
'#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END',
'#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR',
'#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR',
'#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR',
'#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START',
'#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END',
'#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR',
'#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR',
'#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR';
Label, Button[style~='SWT.CHECK'] {
color: black;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_START')
Composite Label {
color: black;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_UNSELECTED_TABS_COLOR_END');
#SeparatorLabel {
color: #1d659f;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTER_KEYLINE_COLOR');
/*
Text {
font: Verdana 8px;
}
*/
Composite Text {
background-color: white;
color: black;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_INNER_KEYLINE_COLOR');
SashForm {
background-color: #dddddd;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR {
color: #B6BCCC;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=INACTIVE_TAB_OUTLINE_COLOR');
#DetailsView {
background-color: #e8e8e8 #cccccc 60%;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_START');
Table {
/*background-color: #e8e8e8 #cccccc 60%;*/
background-color: #f7f7f7 60%;
color: black;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_UNSELECTED_TABS_COLOR_END');
Tree {
/*background-color: #e8e8e8 #cccccc 60%;*/
background-color: #f7f7f7 60%;
color: black;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR {
color: #CCCCCC;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTER_KEYLINE_COLOR');
.MTrimBar {
background-color: white #dddddd #eeeeee 35% 25% 25%;
color: white;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR {
color: #FFFFFF;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_INNER_KEYLINE_COLOR');
CTabFolder {
/* The tab rendering background for the min/max toolbar pulls
* background from the tabfolder's background (or it's parent?)
* and so the gradient doesn't come through. So just set the
* tabfolder's background to a color */
/*background-color: white #dddddd #eeeeee 35% 25% 25%;*/
background-color: #eeeeee;
color: white;
swt-simple: true;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR {
color: #B6BCCC;
category: '#org-eclipse-ui-presentation-default';
label: url('platform:/plugin/org.eclipse.ui.themes?message=ACTIVE_TAB_OUTLINE_COLOR');
}
/* Already existing ColorDefinitions overridden for the E4 default theme */
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_START {
color: #dddfe5;
}
ColorDefinition#org-eclipse-ui-workbench-INACTIVE_TAB_BG_END {
color: #FFFFFF;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_START{
color: #FFFFFF;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_TAB_BG_END {
color: #FFFFFF;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_START {
color: #FFFFFF;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_END {
color: #FFFFFF;
}
ColorDefinition#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_TEXT_COLOR {
color: #000000;
}
.MTrimmedWindow.topLevel {
margin-top: 3px;
margin-bottom: 3px;
margin-left: 3px;
margin-right: 3px;
}
.MPart.busy {
font-style: italic;
}
.MPart.highlighted {
font-weight: bold;
}
.MPartStack, .MPart {
font-family: '#org-eclipse-ui-workbench-TAB_TEXT_FONT';
CTabItem {
color: black;
}
CTabItem:selected {
color: '#org-eclipse-ui-workbench-ACTIVE_TAB_TEXT_COLOR';
background-color: #cccccc #e8e8e8 60%;
font-weight: normal;
}
.MPartStack {
swt-tab-renderer: url('bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.CTabRendering');
swt-selected-tab-fill: '#org-eclipse-ui-workbench-INACTIVE_TAB_BG_START' '#org-eclipse-ui-workbench-INACTIVE_TAB_BG_END' 100% 100%;
swt-unselected-tabs-color: '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START' '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END' 100% 100%;
swt-outer-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTER_KEYLINE_COLOR';
swt-inner-keyline-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_INNER_KEYLINE_COLOR';
swt-tab-outline: '#org-eclipse-ui-workbench-INACTIVE_TAB_OUTLINE_COLOR';
padding: 0px 2px 2px;
swt-shadow-visible: false;
swt-mru-visible: false;
color: '#org-eclipse-ui-workbench-INACTIVE_TAB_TEXT_COLOR';
CTabItem.active:selected {
background-color: #ffffff #cccccc #dddddd 50% 50%;
color: #1d659f;
font: bold;
}
.MPartStack.active {
swt-selected-tab-fill: '#org-eclipse-ui-workbench-ACTIVE_TAB_BG_START' '#org-eclipse-ui-workbench-ACTIVE_TAB_BG_END' 100% 100%;
swt-unselected-tabs-color: '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START' '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END' 100% 100%;
swt-outer-keyline-color: '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTER_KEYLINE_COLOR';
swt-inner-keyline-color: '#org-eclipse-ui-workbench-ACTIVE_TAB_INNER_KEYLINE_COLOR';
swt-tab-outline: '#org-eclipse-ui-workbench-ACTIVE_TAB_OUTLINE_COLOR';
swt-shadow-visible: false;
}
.MPartStack.active.noFocus {
swt-selected-tab-fill: '#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_START' '#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_END' 100% 100%;
}
.MPartStack.active.noFocus > CTabItem:selected {
color: '#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_TEXT_COLOR';
}
#PerspectiveSwitcher {
eclipse-perspective-keyline-color: #AAB0BF #AAB0BF;
}
.MToolControl.TrimStack {
frame-image: url(./winXPTSFrame.png);
handle-image: url(./winXPHandle.png);
frame-cuts: 5px 1px 5px 16px;
}
.MToolBar.Draggable {
handle-image: url(./dragHandle.png);
}
.MToolControl.Draggable {
handle-image: url(./dragHandle.png);
}
.DragFeedback {
background-color: COLOR-WIDGET-NORMAL-SHADOW;
}
.ModifiedDragFeedback {
background-color: #A0A000;
}
.MPartStack > Composite {
background-color: '#org-eclipse-ui-workbench-INACTIVE_TAB_BG_END';
}
.MPartStack.active > Composite {
background-color: '#org-eclipse-ui-workbench-ACTIVE_TAB_BG_END';
}
.MPartStack.active.noFocus > Composite {
background-color: '#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_BG_END';
Shell {
background-color: #e8e8e8 #cccccc 60%;
swt-background-mode: default;
}

View File

@ -20,6 +20,10 @@
name="windowImages"
value="icons/SCViewer_16x32.png,icons/SCViewer_32x32.png,icons/SCViewer_48x32.png,icons/SCViewer_64x32.png,icons/SCViewer_128x32.png,icons/SCViewer_256x32.png">
</property>
<property
name="applicationCSS"
value="platform:/plugin/com.minres.scviewer.e4.application/css/default.css">
</property>
</product>
</extension>
<extension

View File

@ -0,0 +1,40 @@
/*******************************************************************************
* 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.handlers;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
/*
* see http://www.vogella.com/tutorials/Eclipse4CSS/article.html#tutorial_cssstyling
*/
@SuppressWarnings("restriction")
public class ThemeSetHandler {
final static String PARAMTER_ID = "com.minres.scviewer.e4.application.command.theme.parameter.id";
@CanExecute
public boolean canExecute(EPartService partService) {
return true;
}
@Execute
public void setTheme(@Named(PARAMTER_ID) String param, IThemeEngine engine) {
if (!engine.getActiveTheme().getId().equals(param)) {
// second argument defines that change is
// persisted and restored on restart
engine.setTheme(param, true);
}
}
}

View File

@ -33,6 +33,7 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.wb.swt.ResourceManager;
import org.eclipse.wb.swt.SWTResourceManager;
import org.osgi.service.prefs.Preferences;
/**
@ -128,12 +129,12 @@ public class HeapStatus extends Composite {
disabledGcImage = new Image(display, gcImage, SWT.IMAGE_DISABLE);
}
usedMemCol = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
lowMemCol = new Color(display, 255, 70, 70); // medium red
freeMemCol = new Color(display, 255, 190, 125); // light orange
bgCol = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
sepCol = topLeftCol = armCol = display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
bottomRightCol = display.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
markCol = textCol = display.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
lowMemCol = SWTResourceManager.getColor(255, 70, 70); // medium red
freeMemCol = SWTResourceManager.getColor(255, 190, 125); // light orange
bgCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
sepCol = topLeftCol = armCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
bottomRightCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
markCol = textCol = SWTResourceManager.getColor(SWT.COLOR_INFO_FOREGROUND);
createContextMenu();
@ -273,13 +274,6 @@ public class HeapStatus extends Composite {
if (disabledGcImage != null) {
disabledGcImage.dispose();
}
if (lowMemCol != null) {
lowMemCol.dispose();
}
if (freeMemCol != null) {
freeMemCol.dispose();
}
}
@Override
@ -469,7 +463,9 @@ public class HeapStatus extends Composite {
int tw = (int) (sw * totalMem / maxMem); // current total mem width
int tx = x + 1 + tw; // current total mem right edge
gc.setBackground(bgCol);
if (bgCol != null) {
gc.setBackground(bgCol);
}
gc.fillRectangle(rect);
gc.setForeground(sepCol);
gc.drawLine(dx, y, dx, y + h);

View File

@ -77,16 +77,16 @@ import com.minres.scviewer.e4.application.preferences.PreferenceConstants;
@SuppressWarnings("restriction")
public class WaveformViewerPart implements IFileChangeListener, IPreferenceChangeListener {
public static final String ACTIVE_WAVEFORMVIEW="Active_Waveform_View";
public static final String ACTIVE_WAVEFORMVIEW = "Active_Waveform_View";
public static final String ADD_WAVEFORM="AddWaveform";
public static final String ADD_WAVEFORM = "AddWaveform";
protected static final String DATABASE_FILE = "DATABASE_FILE";
protected static final String SHOWN_WAVEFORM = "SHOWN_WAVEFORM";
protected static final String SHOWN_CURSOR = "SHOWN_CURSOR";
protected static final String ZOOM_LEVEL = "ZOOM_LEVEL";
protected static final long FILE_CHECK_INTERVAL=60000;
protected static final long FILE_CHECK_INTERVAL = 60000;
private String[] zoomLevel;
@ -98,20 +98,26 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
private IWaveformViewer waveformPane;
@Inject private IEventBroker eventBroker;
@Inject
private IEventBroker eventBroker;
@Inject EMenuService menuService;
@Inject
EMenuService menuService;
@Inject ESelectionService selectionService;
@Inject
ESelectionService selectionService;
@Inject EPartService ePartService;
@Inject
EPartService ePartService;
@Inject
@Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE)
IEclipsePreferences prefs;
@Inject @Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) IEclipsePreferences prefs;
private IWaveformDb database;
private boolean checkForUpdates;
private MPart myPart;
private Composite myParent;
@ -126,20 +132,20 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
@PostConstruct
public void createComposite(MPart part, Composite parent, IWaveformDbFactory dbFactory) {
myPart=part;
myParent=parent;
database=dbFactory.getDatabase();
myPart = part;
myParent = parent;
database = dbFactory.getDatabase();
database.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if("WAVEFORMS".equals(evt.getPropertyName())) {
myParent.getDisplay().syncExec(new Runnable() {
if ("WAVEFORMS".equals(evt.getPropertyName())) {
myParent.getDisplay().syncExec(new Runnable() {
@Override
public void run() {
waveformPane.setMaxTime(database.getMaxTime());
}
});
}
}
}
});
waveformPane = factory.createPanel(parent);
@ -149,8 +155,8 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
public void propertyChange(PropertyChangeEvent evt) {
Long time = (Long) evt.getNewValue();
eventBroker.post(WaveStatusBarControl.CURSOR_TIME, waveformPane.getScaledTime(time));
long marker=waveformPane.getSelectedMarkerTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(time-marker));
long marker = waveformPane.getSelectedMarkerTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(time - marker));
}
});
@ -159,37 +165,42 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
public void propertyChange(PropertyChangeEvent evt) {
Long time = (Long) evt.getNewValue();
eventBroker.post(WaveStatusBarControl.MARKER_TIME, waveformPane.getScaledTime(time));
long cursor=waveformPane.getCursorTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(cursor-time));
long cursor = waveformPane.getCursorTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(cursor - time));
}
});
waveformPane.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
if(event.getSelection() instanceof IStructuredSelection)
if (event.getSelection() instanceof IStructuredSelection)
selectionService.setSelection(event.getSelection());
}
});
zoomLevel=waveformPane.getZoomLevels();
zoomLevel = waveformPane.getZoomLevels();
setupColors();
checkForUpdates=prefs.getBoolean(PreferenceConstants.DATABASE_RELOAD, true);
filesToLoad=new ArrayList<File>();
checkForUpdates = prefs.getBoolean(PreferenceConstants.DATABASE_RELOAD, true);
filesToLoad = new ArrayList<File>();
persistedState = part.getPersistedState();
Integer files = persistedState.containsKey(DATABASE_FILE+"S")?Integer.parseInt(persistedState.get(DATABASE_FILE+"S")):0;
for(int i=0; i<files;i++){
filesToLoad.add(new File(persistedState.get(DATABASE_FILE+i)));
Integer files = persistedState.containsKey(DATABASE_FILE + "S")
? Integer.parseInt(persistedState.get(DATABASE_FILE + "S")) : 0;
for (int i = 0; i < files; i++) {
filesToLoad.add(new File(persistedState.get(DATABASE_FILE + i)));
}
if(filesToLoad.size()>0)
if (filesToLoad.size() > 0)
loadDatabase(persistedState);
eventBroker.post(WaveStatusBarControl.ZOOM_LEVEL, zoomLevel[waveformPane.getZoomLevel()]);
menuService.registerContextMenu(waveformPane.getNameControl(), "com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(waveformPane.getValueControl(), "com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(waveformPane.getWaveformControl(), "com.minres.scviewer.e4.application.popupmenu.wavecontext");
ePartService.addPartListener(new PartListener(){
menuService.registerContextMenu(waveformPane.getNameControl(),
"com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(waveformPane.getValueControl(),
"com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(waveformPane.getWaveformControl(),
"com.minres.scviewer.e4.application.popupmenu.wavecontext");
ePartService.addPartListener(new PartListener() {
@Override
public void partActivated(MPart part) {
if (part == myPart) {
if(fileChecker!=null) fileChecker.check();
if (fileChecker != null)
fileChecker.check();
updateAll();
}
}
@ -199,11 +210,12 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
@Override
public void preferenceChange(PreferenceChangeEvent event) {
if(PreferenceConstants.DATABASE_RELOAD.equals(event.getKey())){
if (PreferenceConstants.DATABASE_RELOAD.equals(event.getKey())) {
checkForUpdates = (Boolean) event.getNewValue();
fileChecker=null;
if(checkForUpdates)
fileChecker=fileMonitor.addFileChangeListener(WaveformViewerPart.this,filesToLoad, FILE_CHECK_INTERVAL);
fileChecker = null;
if (checkForUpdates)
fileChecker = fileMonitor.addFileChangeListener(WaveformViewerPart.this, filesToLoad,
FILE_CHECK_INTERVAL);
else
fileMonitor.removeFileChangeListener(this);
} else {
@ -213,13 +225,13 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
protected void setupColors() {
DefaultValuesInitializer initializer = new DefaultValuesInitializer();
HashMap<WaveformColors, RGB> colorPref=new HashMap<>();
HashMap<WaveformColors, RGB> colorPref = new HashMap<>();
for (WaveformColors c : WaveformColors.values()) {
String prefValue=prefs.get(c.name() + "_COLOR",
String prefValue = prefs.get(c.name() + "_COLOR",
StringConverter.asString(initializer.colors[c.ordinal()].getRGB()));
RGB rgb = StringConverter.asRGB(prefValue);
colorPref.put(c, rgb);
}
}
waveformPane.setColors(colorPref);
}
@ -227,21 +239,22 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
fileMonitor.removeFileChangeListener(this);
Job job = new Job(" My Job") {
@Override
protected IStatus run( IProgressMonitor monitor) {
protected IStatus run(IProgressMonitor monitor) {
// convert to SubMonitor and set total number of work units
SubMonitor subMonitor = SubMonitor.convert(monitor, filesToLoad.size());
subMonitor.setTaskName("Loading database");
try {
for(File file: filesToLoad){
//TimeUnit.SECONDS.sleep(2);
for (File file : filesToLoad) {
// TimeUnit.SECONDS.sleep(2);
database.load(file);
database.addPropertyChangeListener(waveformPane);
subMonitor.worked(1);
if(monitor.isCanceled()) return Status.CANCEL_STATUS;
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
}
// sleep a second
} catch (Exception e) {
database=null;
database = null;
e.printStackTrace();
return Status.CANCEL_STATUS;
}
@ -250,18 +263,20 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
return Status.OK_STATUS;
}
};
job.addJobChangeListener(new JobChangeAdapter(){
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if(event.getResult()==Status.OK_STATUS)
myParent.getDisplay().asyncExec(new Runnable() {
if (event.getResult() == Status.OK_STATUS)
myParent.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
waveformPane.setMaxTime(database.getMaxTime());
if(state!=null) restoreWaveformViewerState(state);
fileChecker=null;
if(checkForUpdates) fileChecker=fileMonitor.addFileChangeListener(
WaveformViewerPart.this,filesToLoad, FILE_CHECK_INTERVAL);
if (state != null)
restoreWaveformViewerState(state);
fileChecker = null;
if (checkForUpdates)
fileChecker = fileMonitor.addFileChangeListener(WaveformViewerPart.this, filesToLoad,
FILE_CHECK_INTERVAL);
}
});
}
@ -275,12 +290,14 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
display.asyncExec(new Runnable() {
@Override
public void run() {
if(MessageDialog.openQuestion(display.getActiveShell(), "Database re-load", "Would you like to reload the database?")){
if (MessageDialog.openQuestion(display.getActiveShell(), "Database re-load",
"Would you like to reload the database?")) {
Map<String, String> state = new HashMap<>();
saveWaveformViewerState(state);
waveformPane.getStreamList().clear();
database.clear();
if(filesToLoad.size()>0) loadDatabase(state);
if (filesToLoad.size() > 0)
loadDatabase(state);
}
}
});
@ -288,29 +305,29 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
@Inject
@Optional
public void setPartInput( @Named( "input" ) Object partInput ) {
if(partInput instanceof File){
filesToLoad=new ArrayList<File>();
public void setPartInput(@Named("input") Object partInput) {
if (partInput instanceof File) {
filesToLoad = new ArrayList<File>();
File file = (File) partInput;
if(file.exists()){
if (file.exists()) {
filesToLoad.add(file);
try {
String ext = getFileExtension(file.getName());
if("vcd".equals(ext.toLowerCase())){
if(askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "txdb")))){
if ("vcd".equals(ext.toLowerCase())) {
if (askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "txdb")))) {
filesToLoad.add(new File(renameFileExtension(file.getCanonicalPath(), "txdb")));
}else if(askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "txlog")))){
} else if (askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "txlog")))) {
filesToLoad.add(new File(renameFileExtension(file.getCanonicalPath(), "txlog")));
}
} else if("txdb".equals(ext.toLowerCase()) || "txlog".equals(ext.toLowerCase())){
if(askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "vcd")))){
} else if ("txdb".equals(ext.toLowerCase()) || "txlog".equals(ext.toLowerCase())) {
if (askIfToLoad(new File(renameFileExtension(file.getCanonicalPath(), "vcd")))) {
filesToLoad.add(new File(renameFileExtension(file.getCanonicalPath(), "vcd")));
}
}
} catch (IOException e) { // silently ignore any error
}
}
if(filesToLoad.size()>0)
if (filesToLoad.size() > 0)
loadDatabase(persistedState);
}
}
@ -320,15 +337,14 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
myParent.setFocus();
}
@PersistState
public void saveState(MPart part) {
// save changes
// save changes
Map<String, String> persistedState = part.getPersistedState();
persistedState.put(DATABASE_FILE+"S", Integer.toString(filesToLoad.size()));
Integer index=0;
for(File file:filesToLoad){
persistedState.put(DATABASE_FILE+index, file.getAbsolutePath());
persistedState.put(DATABASE_FILE + "S", Integer.toString(filesToLoad.size()));
Integer index = 0;
for (File file : filesToLoad) {
persistedState.put(DATABASE_FILE + index, file.getAbsolutePath());
index++;
}
saveWaveformViewerState(persistedState);
@ -336,72 +352,75 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
protected void saveWaveformViewerState(Map<String, String> persistedState) {
Integer index;
persistedState.put(SHOWN_WAVEFORM+"S", Integer.toString(waveformPane.getStreamList().size()));
index=0;
for(TrackEntry trackEntry:waveformPane.getStreamList()){
persistedState.put(SHOWN_WAVEFORM+index, trackEntry.waveform.getFullName());
persistedState.put(SHOWN_WAVEFORM + "S", Integer.toString(waveformPane.getStreamList().size()));
index = 0;
for (TrackEntry trackEntry : waveformPane.getStreamList()) {
persistedState.put(SHOWN_WAVEFORM + index, trackEntry.waveform.getFullName());
index++;
}
List<ICursor> cursors = waveformPane.getCursorList();
persistedState.put(SHOWN_CURSOR+"S", Integer.toString(cursors.size()));
index=0;
for(ICursor cursor:cursors){
persistedState.put(SHOWN_CURSOR+index, Long.toString(cursor.getTime()));
persistedState.put(SHOWN_CURSOR + "S", Integer.toString(cursors.size()));
index = 0;
for (ICursor cursor : cursors) {
persistedState.put(SHOWN_CURSOR + index, Long.toString(cursor.getTime()));
index++;
}
persistedState.put(ZOOM_LEVEL, Integer.toString(waveformPane.getZoomLevel()));
}
}
protected void restoreWaveformViewerState(Map<String, String> state) {
updateAll();
Integer waves = state.containsKey(SHOWN_WAVEFORM+"S")?Integer.parseInt(state.get(SHOWN_WAVEFORM+"S")):0;
Integer waves = state.containsKey(SHOWN_WAVEFORM + "S") ? Integer.parseInt(state.get(SHOWN_WAVEFORM + "S")) : 0;
List<TrackEntry> res = new LinkedList<>();
for(int i=0; i<waves;i++){
IWaveform<? extends IWaveformEvent> waveform = database.getStreamByName(state.get(SHOWN_WAVEFORM+i));
if(waveform!=null) res.add(new TrackEntry(waveform));
for (int i = 0; i < waves; i++) {
IWaveform<? extends IWaveformEvent> waveform = database.getStreamByName(state.get(SHOWN_WAVEFORM + i));
if (waveform != null)
res.add(new TrackEntry(waveform));
}
if(res.size()>0) waveformPane.getStreamList().addAll(res);
Integer cursorLength = state.containsKey(SHOWN_CURSOR+"S")?Integer.parseInt(state.get(SHOWN_CURSOR+"S")):0;
if (res.size() > 0)
waveformPane.getStreamList().addAll(res);
Integer cursorLength = state.containsKey(SHOWN_CURSOR + "S") ? Integer.parseInt(state.get(SHOWN_CURSOR + "S"))
: 0;
List<ICursor> cursors = waveformPane.getCursorList();
if(cursorLength==cursors.size()){
for(int i=0; i<cursorLength;i++){
Long time = Long.parseLong(state.get(SHOWN_CURSOR+i));
if (cursorLength == cursors.size()) {
for (int i = 0; i < cursorLength; i++) {
Long time = Long.parseLong(state.get(SHOWN_CURSOR + i));
cursors.get(i).setTime(time);
}
}
if(state.containsKey(ZOOM_LEVEL)){
if (state.containsKey(ZOOM_LEVEL)) {
try {
Integer scale = Integer.parseInt(state.get(ZOOM_LEVEL));
waveformPane.setZoomLevel(scale);
} catch(NumberFormatException e){}
} catch (NumberFormatException e) {
}
}
}
private void updateAll() {
eventBroker.post(ACTIVE_WAVEFORMVIEW, this);
eventBroker.post(WaveStatusBarControl.ZOOM_LEVEL, zoomLevel[waveformPane.getZoomLevel()]);
long cursor=waveformPane.getCursorTime();
long marker=waveformPane.getSelectedMarkerTime();
long cursor = waveformPane.getCursorTime();
long marker = waveformPane.getSelectedMarkerTime();
eventBroker.post(WaveStatusBarControl.CURSOR_TIME, waveformPane.getScaledTime(cursor));
eventBroker.post(WaveStatusBarControl.MARKER_TIME, waveformPane.getScaledTime(marker));
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(cursor-marker));
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, waveformPane.getScaledTime(cursor - marker));
}
@Inject @Optional
public void getAddWaveformEvent(@UIEventTopic(WaveformViewerPart.ADD_WAVEFORM) Object o) {
Object sel = o==null?selectionService.getSelection():o;
if(sel instanceof IStructuredSelection)
for(Object el:((IStructuredSelection)sel).toArray()){
if(el instanceof IWaveform<?>)
@Inject
@Optional
public void getAddWaveformEvent(@UIEventTopic(WaveformViewerPart.ADD_WAVEFORM) Object o) {
Object sel = o == null ? selectionService.getSelection() : o;
if (sel instanceof IStructuredSelection)
for (Object el : ((IStructuredSelection) sel).toArray()) {
if (el instanceof IWaveform<?>)
addStreamToList((IWaveform<?>) el, false);
}
}
protected boolean askIfToLoad(File txFile) {
if(txFile.exists() &&
MessageDialog.openQuestion(myParent.getDisplay().getActiveShell(), "Database open",
"Would you like to open the adjacent database "+txFile.getName()+" as well?")){
if (txFile.exists() && MessageDialog.openQuestion(myParent.getDisplay().getActiveShell(), "Database open",
"Would you like to open the adjacent database " + txFile.getName() + " as well?")) {
return true;
}
return false;
@ -410,10 +429,10 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
protected static String renameFileExtension(String source, String newExt) {
String target;
String currentExt = getFileExtension(source);
if (currentExt.equals("")){
target=source+"."+newExt;
if (currentExt.equals("")) {
target = source + "." + newExt;
} else {
target=source.replaceFirst(Pattern.quote("."+currentExt)+"$", Matcher.quoteReplacement("."+newExt));
target = source.replaceFirst(Pattern.quote("." + currentExt) + "$", Matcher.quoteReplacement("." + newExt));
}
return target;
}
@ -421,7 +440,7 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
protected static String getFileExtension(String f) {
String ext = "";
int i = f.lastIndexOf('.');
if (i > 0 && i < f.length() - 1) {
if (i > 0 && i < f.length() - 1) {
ext = f.substring(i + 1);
}
return ext;
@ -435,34 +454,35 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
return database;
}
public void addStreamToList(IWaveform<? extends IWaveformEvent> obj, boolean insert){
addStreamsToList(new IWaveform<?>[]{obj}, insert);
public void addStreamToList(IWaveform<? extends IWaveformEvent> obj, boolean insert) {
addStreamsToList(new IWaveform<?>[] { obj }, insert);
}
public void addStreamsToList(IWaveform<? extends IWaveformEvent>[] iWaveforms, boolean insert){
List<TrackEntry> streams= new LinkedList<>();
for(IWaveform<? extends IWaveformEvent> stream:iWaveforms)
public void addStreamsToList(IWaveform<? extends IWaveformEvent>[] iWaveforms, boolean insert) {
List<TrackEntry> streams = new LinkedList<>();
for (IWaveform<? extends IWaveformEvent> stream : iWaveforms)
streams.add(new TrackEntry(stream));
IStructuredSelection selection = (IStructuredSelection) waveformPane.getSelection();
if(selection.size()==0){
if (selection.size() == 0) {
waveformPane.getStreamList().addAll(streams);
}else {
Object first=selection.getFirstElement();
IWaveform<?> stream = (first instanceof ITx)?((ITx)first).getStream():(IWaveform<?>)first;
TrackEntry trackEntry=waveformPane.getEntryForStream(stream);
} else {
Object first = selection.getFirstElement();
IWaveform<?> stream = (first instanceof ITx) ? ((ITx) first).getStream() : (IWaveform<?>) first;
TrackEntry trackEntry = waveformPane.getEntryForStream(stream);
int index = waveformPane.getStreamList().indexOf(trackEntry);
if(!insert) index++;
if (!insert)
index++;
waveformPane.getStreamList().addAll(index, streams);
}
}
public void removeStreamFromList(IWaveform<? extends IWaveformEvent> stream){
TrackEntry trackEntry=waveformPane.getEntryForStream(stream);
public void removeStreamFromList(IWaveform<? extends IWaveformEvent> stream) {
TrackEntry trackEntry = waveformPane.getEntryForStream(stream);
waveformPane.getStreamList().remove(trackEntry);
}
public void removeStreamsFromList(IWaveform<? extends IWaveformEvent>[] iWaveforms){
for(IWaveform<? extends IWaveformEvent> stream:iWaveforms)
public void removeStreamsFromList(IWaveform<? extends IWaveformEvent>[] iWaveforms) {
for (IWaveform<? extends IWaveformEvent> stream : iWaveforms)
removeStreamFromList(stream);
}
@ -475,17 +495,22 @@ public class WaveformViewerPart implements IFileChangeListener, IPreferenceChang
}
public void moveCursor(GotoDirection direction) {
waveformPane.moveCursor(direction); }
waveformPane.moveCursor(direction);
}
public void setZoomLevel(Integer level) {
if(level<0) level=0;
if(level>zoomLevel.length-1) level=zoomLevel.length-1;
if (level < 0)
level = 0;
if (level > zoomLevel.length - 1)
level = zoomLevel.length - 1;
waveformPane.setZoomLevel(level);
updateAll(); }
updateAll();
}
public void setZoomFit() {
waveformPane.setZoomLevel(6);
updateAll(); }
waveformPane.setZoomLevel(6);
updateAll();
}
public int getZoomLevel() {
return waveformPane.getZoomLevel();

View File

@ -2,13 +2,13 @@
<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
<booleanAttribute key="append.args" value="true"/>
<stringAttribute key="application" value="org.eclipse.e4.ui.workbench.swt.E4Application"/>
<booleanAttribute key="askclear" value="true"/>
<booleanAttribute key="askclear" value="false"/>
<booleanAttribute key="automaticAdd" value="false"/>
<booleanAttribute key="automaticValidate" value="false"/>
<stringAttribute key="bootstrap" value=""/>
<stringAttribute key="checked" value="[NONE]"/>
<booleanAttribute key="clearConfig" value="false"/>
<booleanAttribute key="clearws" value="false"/>
<booleanAttribute key="clearws" value="true"/>
<booleanAttribute key="clearwslog" value="false"/>
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/SCViewer"/>
<booleanAttribute key="default" value="false"/>
@ -22,7 +22,7 @@
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="com.minres.scviewer.e4.application.product"/>
<stringAttribute key="productFile" value="/com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.product"/>
<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.codehaus.groovy@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.java7@default:false,org.eclipse.core.filesystem.macosx@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt.cocoa@default:false,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.cocoa.macosx.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.cocoa@default:false,org.eclipse.ui.console@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.junit@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.logging@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.codehaus.groovy@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.java7@default:false,org.eclipse.core.filesystem.macosx@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt.cocoa@default:false,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.cocoa.macosx.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.hamcrest.core@default:default,org.junit@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/>
<stringAttribute key="selected_workspace_plugins" value="com.minres.scviewer.database.sqlite@default:default,com.minres.scviewer.database.text@default:default,com.minres.scviewer.database.ui.swt@default:default,com.minres.scviewer.database.ui@default:default,com.minres.scviewer.database.vcd@default:default,com.minres.scviewer.database@default:default,com.minres.scviewer.e4.application@default:default,com.opcoach.e4.preferences@default:default"/>
<booleanAttribute key="show_selected_only" value="false"/>
<booleanAttribute key="tracing" value="false"/>