From 0e8a757d6e831e36507ea1c192e6ab4c9c0dfb96 Mon Sep 17 00:00:00 2001 From: eyck Date: Wed, 25 Mar 2020 23:01:28 +0100 Subject: [PATCH] fix settings handling for this a common workspace is being created. To allow for multiple instances the work space is being unlocked as soon as the application is initialized --- .../database/swt/internal/ToolTipHandler.java | 2 +- .../scviewer/e4/application/E4LifeCycle.java | 17 +++++ .../e4/application/handlers/EnableHover.java | 16 ++--- .../e4/application/parts/WaveformViewer.java | 64 +++++++++++-------- .../preferences/DefaultValuesInitializer.java | 35 +++++----- .../scviewer.product | 10 +++ 6 files changed, 90 insertions(+), 54 deletions(-) diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ToolTipHandler.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ToolTipHandler.java index ea6b0d0..69ed0f7 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ToolTipHandler.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/ToolTipHandler.java @@ -73,7 +73,7 @@ class ToolTipHandler { Point pt = new Point (event.x, event.y); tipPosition = control.toDisplay(pt); if (tip != null && !tip.isDisposed ()) tip.dispose (); - tip = new Shell (parentShell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL); + tip = new Shell (parentShell, SWT.NO_FOCUS | SWT.TOOL); tip.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND)); GridLayout layout = new GridLayout(1, true); layout.verticalSpacing=0; diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java index e0d15fc..7532fb8 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/E4LifeCycle.java @@ -11,10 +11,12 @@ package com.minres.scviewer.e4.application; import java.io.File; +import java.io.IOException; import javax.annotation.PostConstruct; import javax.inject.Inject; +import org.eclipse.core.runtime.Platform; import org.eclipse.e4.core.contexts.ContextInjectionFactory; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.services.events.IEventBroker; @@ -30,6 +32,7 @@ import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.osgi.service.datalocation.Location; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; @@ -91,6 +94,20 @@ public class E4LifeCycle { } } }); + eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler() { + @Override + public void handleEvent(Event event) { + Location instanceLocation = Platform.getInstanceLocation(); + try { + boolean isLocked = instanceLocation.isLocked(); + if(isLocked) + instanceLocation.release(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }); } /** diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java index 557c61a..5e08170 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/EnableHover.java @@ -7,26 +7,23 @@ import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.e4.core.contexts.Active; import org.eclipse.e4.core.di.annotations.Execute; -import org.eclipse.e4.core.di.extensions.Preference; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MWindow; import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem; import org.eclipse.e4.ui.workbench.modeling.EModelService; +import org.eclipse.jface.preference.IPreferenceStore; import com.minres.scviewer.e4.application.preferences.PreferenceConstants; +import com.opcoach.e4.preferences.ScopedPreferenceStore; @SuppressWarnings("restriction") public class EnableHover { static final String TAG_NAME = "EnableHover"; //$NON-NLS-1$ - @Inject - @Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) - IEclipsePreferences prefs; - @Inject MApplication application; @@ -36,14 +33,17 @@ public class EnableHover { tags.add(TAG_NAME); List elements = modelService.findElements(application, null, MHandledItem.class, tags ); // cover initialization stuff, sync it with code + IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); + boolean state = store.getBoolean(PreferenceConstants.SHOW_HOVER); for( MHandledItem hi : elements ){ - hi.setSelected(prefs.getBoolean(PreferenceConstants.SHOW_HOVER, true)); + hi.setSelected(state); } } @Execute public void execute(@Active MPart part, @Active MWindow window, MHandledItem handledItem, EModelService modelService ) { - prefs.putBoolean(PreferenceConstants.SHOW_HOVER, handledItem.isSelected()); + IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); + store.setValue(PreferenceConstants.SHOW_HOVER, handledItem.isSelected()); } } \ No newline at end of file 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 6334d6c..58a8997 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 @@ -43,12 +43,9 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.core.runtime.jobs.JobGroup; import org.eclipse.core.runtime.preferences.ConfigurationScope; -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.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; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.PersistState; @@ -59,7 +56,9 @@ import org.eclipse.e4.ui.services.EMenuService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.StringConverter; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; @@ -112,8 +111,8 @@ import com.minres.scviewer.e4.application.internal.status.WaveStatusBarControl; 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.DefaultValuesInitializer; import com.minres.scviewer.e4.application.preferences.PreferenceConstants; +import com.opcoach.e4.preferences.ScopedPreferenceStore; /** * The Class WaveformViewerPart. @@ -195,10 +194,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis @Inject EPartService ePartService; - /** The prefs. */ - @Inject - @Preference(value = ConfigurationScope.SCOPE, nodePath = PreferenceConstants.PREFERENCES_SCOPE) - protected IEclipsePreferences prefs; + IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); @Inject @Optional DesignBrowser designBrowser; @@ -353,7 +349,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis zoomLevel = waveformPane.getZoomLevels(); setupColors(); - checkForUpdates = prefs.getBoolean(PreferenceConstants.DATABASE_RELOAD, true); + checkForUpdates = store.getBoolean(PreferenceConstants.DATABASE_RELOAD); filesToLoad = new ArrayList(); persistedState = part.getPersistedState(); Integer files = persistedState.containsKey(DATABASE_FILE + "S") //$NON-NLS-1$ @@ -382,7 +378,22 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis } } }); - prefs.addPreferenceChangeListener(this); + store.addPropertyChangeListener(new IPropertyChangeListener() { + @Override + public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { + if (PreferenceConstants.DATABASE_RELOAD.equals(event.getProperty())) { + checkForUpdates = (Boolean)event.getNewValue(); + fileChecker = null; + if (checkForUpdates) + fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, + FILE_CHECK_INTERVAL); + else + fileMonitor.removeFileChangeListener(WaveformViewer.this); + } else if (!PreferenceConstants.SHOW_HOVER.equals(event.getProperty())){ + setupColors(); + } + } + }); waveformPane.addDisposeListener(this); @@ -395,7 +406,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis waveformPane.getWaveformControl().setData(Constants.CONTENT_PROVIDER_TAG, new ToolTipContentProvider() { @Override public boolean createContent(Composite parent, Point pt) { - if(!prefs.getBoolean(PreferenceConstants.SHOW_HOVER, true)) return false; + if(!store.getBoolean(PreferenceConstants.SHOW_HOVER)) return false; List res = waveformPane.getElementsAt(pt); if(res.size()>0) if(res.get(0) instanceof ITx) { @@ -403,9 +414,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis final Display display = parent.getDisplay(); final Font font = new Font(Display.getCurrent(), "Terminal", 10, SWT.NORMAL); - final Label label = new Label(parent, SWT.NONE); -// label.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND)); -// label.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + final Label label = new Label(parent, SWT.SHADOW_IN); + label.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); + label.setBackground(display.getSystemColor(SWT.COLOR_GRAY)); label.setText(tx.toString()); label.setFont(font); GridData labelGridData = new GridData(); @@ -414,12 +425,11 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis label.setLayoutData(labelGridData); final Table table = new Table(parent, SWT.NONE); - table.setHeaderVisible(true); + table.setHeaderVisible(false); table.setLinesVisible(true); table.setFont(font); -// table.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND)); -// table.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); - table.setRedraw(false); + label.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); + label.setBackground(display.getSystemColor(SWT.COLOR_GRAY)); GridData tableGridData = new GridData(); tableGridData.horizontalAlignment = GridData.FILL; tableGridData.grabExcessHorizontalSpace = true; @@ -441,14 +451,15 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis item.setText(0, iTxAttribute.getName()); item.setText(1, value); } - TableItem item = new TableItem(table, SWT.NONE); - item.setText(0, ""); - item.setText(1, ""); + if(table.getHeaderVisible()) { + // add dummy row to get make last row visible + TableItem item = new TableItem(table, SWT.NONE); + item.setText(0, ""); + item.setText(1, ""); + } nameCol.pack(); valueCol.pack(); - table.pack(); - table.setRedraw(true); - + table.setSize(table.computeSize(SWT.DEFAULT, SWT.DEFAULT)); parent.addPaintListener(new PaintListener() { @Override public void paintControl(PaintEvent e) { @@ -462,7 +473,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis return true; } else if(res.get(0) instanceof TrackEntry) { TrackEntry te = (TrackEntry)res.get(0); - final Display display = parent.getDisplay(); final Font font = new Font(Display.getCurrent(), "Terminal", 10, SWT.NORMAL); final Label label = new Label(parent, SWT.NONE); @@ -507,11 +517,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis * Setup colors. */ protected void setupColors() { - DefaultValuesInitializer initializer = new DefaultValuesInitializer(); HashMap colorPref = new HashMap<>(); for (WaveformColors c : WaveformColors.values()) { - String prefValue = prefs.get(c.name() + "_COLOR", //$NON-NLS-1$ - StringConverter.asString(initializer.colors[c.ordinal()].getRGB())); + String prefValue = store.getString(c.name() + "_COLOR"); //$NON-NLS-1$ RGB rgb = StringConverter.asRGB(prefValue); colorPref.put(c, rgb); } diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java index 0a56c96..ca89128 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/preferences/DefaultValuesInitializer.java @@ -12,13 +12,14 @@ package com.minres.scviewer.e4.application.preferences; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.core.runtime.preferences.DefaultScope; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.wb.swt.SWTResourceManager; import com.minres.scviewer.database.ui.WaveformColors; +import com.opcoach.e4.preferences.ScopedPreferenceStore; /** * The Class DefaultValuesInitializer. @@ -63,22 +64,22 @@ public class DefaultValuesInitializer extends AbstractPreferenceInitializer { */ @Override public void initializeDefaultPreferences() { - IEclipsePreferences node = DefaultScope.INSTANCE.getNode(PreferenceConstants.PREFERENCES_SCOPE); - if (node != null) - { - node.putBoolean(PreferenceConstants.DATABASE_RELOAD, true); - node.putBoolean(PreferenceConstants.SHOW_HOVER, true); - for (WaveformColors c : WaveformColors.values()) { - node.put(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ - } - } -// IPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); -// -// store.setDefault(PreferenceConstants.DATABASE_RELOAD, true); -// store.setDefault(PreferenceConstants.SHOW_HOVER, true); -// for (WaveformColors c : WaveformColors.values()) { -// store.setDefault(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ -// } +// IEclipsePreferences node = DefaultScope.INSTANCE.getNode(PreferenceConstants.PREFERENCES_SCOPE); +// if (node != null) +// { +// node.putBoolean(PreferenceConstants.DATABASE_RELOAD, true); +// node.putBoolean(PreferenceConstants.SHOW_HOVER, true); +// for (WaveformColors c : WaveformColors.values()) { +// node.put(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ +// } +// } + IPreferenceStore store = new ScopedPreferenceStore(DefaultScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE); + + store.setDefault(PreferenceConstants.DATABASE_RELOAD, true); + store.setDefault(PreferenceConstants.SHOW_HOVER, true); + for (WaveformColors c : WaveformColors.values()) { + store.setDefault(c.name()+"_COLOR", StringConverter.asString(colors[c.ordinal()].getRGB())); //$NON-NLS-1$ + } } } diff --git a/com.minres.scviewer.e4.product/scviewer.product b/com.minres.scviewer.e4.product/scviewer.product index 163149f..46513c7 100644 --- a/com.minres.scviewer.e4.product/scviewer.product +++ b/com.minres.scviewer.e4.product/scviewer.product @@ -11,6 +11,8 @@ -clearPersistedState -Xmx2G +-Dosgi.instance.area=@user.home/.scviewer +-Dosgi.instance.area.default=@user.home/.scviewer -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts @@ -18,6 +20,7 @@ + @@ -142,4 +145,11 @@ + + + + + + +