From c6806c7c38252b1d782581599efecff3930aa395 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Fri, 27 Mar 2020 20:06:54 +0100 Subject: [PATCH] Restructured the Preferences system --- .../mograsim/logic/model/editor/Editor.java | 4 + .../logic/model/editor/EditorUserInput.java | 5 +- .../logic/model/editor/ui/EditorCanvas.java | 5 +- .../logic/model/editor/ui/EditorGUI.java | 8 +- .../META-INF/MANIFEST.MF | 1 + .../logic/model}/BitVectorFormatter.java | 27 ++- .../mograsim/logic/model/LogicUICanvas.java | 52 +++-- .../mograsim/logic/model/LogicUIRenderer.java | 16 +- .../logic/model/LogicUIStandaloneGUI.java | 15 +- .../logic/model/SimpleLogicUIStandalone.java | 3 +- .../model/components/ModelComponent.java | 17 +- .../components/atomic/ModelBitDisplay.java | 13 +- .../model/components/atomic/ModelClock.java | 11 +- .../components/atomic/ModelFixedOutput.java | 13 +- .../components/atomic/ModelManualSwitch.java | 13 +- .../components/atomic/ModelSplitter.java | 24 ++- .../components/atomic/ModelTextComponent.java | 8 +- .../atomic/ModelTriStateBuffer.java | 8 +- ...pleRectangularHardcodedModelComponent.java | 9 +- .../atomic/SimpleRectangularModelGate.java | 11 +- .../submodels/SubmodelComponent.java | 31 +-- .../submodels/SubmodelInterface.java | 3 +- .../logic/model/model/wires/ModelWire.java | 17 +- .../model/wires/ModelWireCrossPoint.java | 7 +- .../preferences/DefaultRenderPreferences.java | 86 ++++++++ .../model/preferences/RenderPreferences.java | 28 +++ .../logic/model/snippets/Renderer.java | 3 +- .../DefaultOutlineRenderer.java | 8 +- .../CenteredTextSymbolRenderer.java | 8 +- .../DefaultSymbolRenderer.java | 8 +- .../PinNamesSymbolRenderer.java | 10 +- .../SimpleRectangularLikeSymbolRenderer.java | 8 +- .../src/net/mograsim/machine/ModelMemory.java | 7 +- .../META-INF/MANIFEST.MF | 2 + .../mograsim/plugin/EclipsePreferences.java | 72 ------- .../mograsim/plugin/MograsimActivator.java | 34 +++- .../mograsim/plugin/SimulationPreview.java | 16 +- .../plugin/launch/MachineRegister.java | 2 +- .../launch/MainMemoryBlockExtension.java | 6 +- .../preferences/DefaultPluginPreferences.java | 53 +++++ .../preferences/EclipsePluginPreferences.java | 12 ++ .../preferences/EclipsePreferences.java | 189 ++++++++++++++++++ .../preferences/EclipseRenderPreferences.java | 15 ++ .../plugin/preferences/PluginPreferences.java | 13 ++ .../plugin/tables/mi/InstructionTable.java | 7 +- .../mograsim/plugin/views/SimulationView.java | 19 +- .../preferences/DefaultPreferences.java | 97 ++------- .../net/mograsim/preferences/Preferences.java | 38 ++-- .../mograsim/logic/model/am2900/TestGCD.java | 3 +- .../model/am2900/am2904/Am2904Testbench.java | 3 +- .../am2900/util/TestEnvironmentHelper.java | 3 +- 51 files changed, 725 insertions(+), 346 deletions(-) rename plugins/{net.mograsim.logic.core/src/net/mograsim/logic/core/types => net.mograsim.logic.model/src/net/mograsim/logic/model}/BitVectorFormatter.java (69%) create mode 100755 plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/DefaultRenderPreferences.java create mode 100755 plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/RenderPreferences.java delete mode 100644 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/EclipsePreferences.java create mode 100755 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/DefaultPluginPreferences.java create mode 100755 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePluginPreferences.java create mode 100755 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePreferences.java create mode 100755 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipseRenderPreferences.java create mode 100755 plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/PluginPreferences.java diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java index 8c602578..b58c9470 100644 --- a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java @@ -22,6 +22,8 @@ import net.mograsim.logic.model.editor.ui.EditorGUI; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.ModelWire; +import net.mograsim.logic.model.preferences.DefaultRenderPreferences; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler; @@ -35,6 +37,7 @@ public final class Editor public final DeserializedSubmodelComponent toBeEdited; public final HandleManager handleManager; public final EditorGUI gui; + public final RenderPreferences renderPrefs; public final StateManager stateManager; private final SaveLoadManager saveManager; private Snapping snapping = Snapping.ABSOLUTE; @@ -46,6 +49,7 @@ public final class Editor { this.toBeEdited = toBeEdited; handleManager = new HandleManager(this); + renderPrefs = new DefaultRenderPreferences(); gui = new EditorGUI(this); userInput = new EditorUserInput(this); stateManager = new StateManager(this); diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java index 154a81f4..4de86832 100644 --- a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/EditorUserInput.java @@ -1,10 +1,11 @@ package net.mograsim.logic.model.editor; +import static net.mograsim.logic.model.preferences.RenderPreferences.ACTION_BUTTON; + import org.eclipse.swt.SWT; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.mograsim.logic.model.editor.ui.EditorGUI; -import net.mograsim.preferences.Preferences; public class EditorUserInput { @@ -16,7 +17,7 @@ public class EditorUserInput gui.logicCanvas.addListener(SWT.MouseDown, e -> { Point clicked = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y); - if (e.button == Preferences.current().getInt("net.mograsim.logic.model.button.action")) + if (e.button == editor.renderPrefs.getInt(ACTION_BUTTON)) editor.handleManager.click(clicked, e.stateMask); }); diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorCanvas.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorCanvas.java index 3030103b..5db38c08 100644 --- a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorCanvas.java +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorCanvas.java @@ -17,7 +17,7 @@ public class EditorCanvas extends LogicUICanvas public EditorCanvas(Composite parent, int style, Editor editor) { - super(parent, style, editor.toBeEdited.submodel); + super(parent, style, editor.toBeEdited.submodel, editor.renderPrefs); handles = editor.handleManager.getHandles(); editor.handleManager.addHandleAddedListener(h -> @@ -37,7 +37,8 @@ public class EditorCanvas extends LogicUICanvas Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom); TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false); - editor.toBeEdited.getOutlineRenderer().render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom)); + editor.toBeEdited.getOutlineRenderer().render(tgc, renderPrefs, + new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom)); handles.forEach(h -> h.render(gc, visibleRegion)); }); diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java index 3dfd62e9..6e61b1bc 100644 --- a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/ui/EditorGUI.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.editor.ui; +import static net.mograsim.logic.model.preferences.RenderPreferences.DRAG_BUTTON; +import static net.mograsim.logic.model.preferences.RenderPreferences.ZOOM_BUTTON; + import java.io.IOException; import org.eclipse.swt.SWT; @@ -21,7 +24,6 @@ import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInpu import net.mograsim.logic.model.editor.Editor; import net.mograsim.logic.model.editor.SaveLoadManager; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; -import net.mograsim.preferences.Preferences; public class EditorGUI { @@ -74,8 +76,8 @@ public class EditorGUI setupBottomToolBar(innerComp); ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(logicCanvas); - userInput.buttonDrag = Preferences.current().getInt("net.mograsim.logic.model.button.drag"); - userInput.buttonZoom = Preferences.current().getInt("net.mograsim.logic.model.button.zoom"); + userInput.buttonDrag = editor.renderPrefs.getInt(DRAG_BUTTON); + userInput.buttonZoom = editor.renderPrefs.getInt(ZOOM_BUTTON); userInput.enableUserInput(); new ZoomableCanvasOverlay(logicCanvas, null).enableScale(); } diff --git a/plugins/net.mograsim.logic.model/META-INF/MANIFEST.MF b/plugins/net.mograsim.logic.model/META-INF/MANIFEST.MF index e6b077ab..6a57b8fb 100644 --- a/plugins/net.mograsim.logic.model/META-INF/MANIFEST.MF +++ b/plugins/net.mograsim.logic.model/META-INF/MANIFEST.MF @@ -12,6 +12,7 @@ Export-Package: net.mograsim.logic.model, net.mograsim.logic.model.model.wires, net.mograsim.logic.model.modeladapter, net.mograsim.logic.model.modeladapter.componentadapters, + net.mograsim.logic.model.preferences, net.mograsim.logic.model.serializing, net.mograsim.logic.model.snippets, net.mograsim.logic.model.snippets.highlevelstatehandlers, diff --git a/plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/BitVectorFormatter.java similarity index 69% rename from plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java rename to plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/BitVectorFormatter.java index a369b051..4836ed1b 100644 --- a/plugins/net.mograsim.logic.core/src/net/mograsim/logic/core/types/BitVectorFormatter.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/BitVectorFormatter.java @@ -1,11 +1,18 @@ -package net.mograsim.logic.core.types; +package net.mograsim.logic.model; + +import static net.mograsim.logic.model.preferences.RenderPreferences.BIT_ONE_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.BIT_U_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.BIT_X_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.BIT_ZERO_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.BIT_Z_COLOR; import java.math.BigInteger; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorDefinition.BuiltInColor; -import net.mograsim.preferences.Preferences; public class BitVectorFormatter { @@ -70,12 +77,12 @@ public class BitVectorFormatter } // TODO doesn't this belong to logic.model? - public static ColorDefinition formatAsColor(ReadEnd end) + public static ColorDefinition formatAsColor(RenderPreferences renderPrefs, ReadEnd end) { - return formatAsColor(end == null ? null : end.getValues()); + return formatAsColor(renderPrefs, end == null ? null : end.getValues()); } - public static ColorDefinition formatAsColor(BitVector bitVector) + public static ColorDefinition formatAsColor(RenderPreferences renderPrefs, BitVector bitVector) { // TODO maybe find a color assignment for multiple-bit bit vectors? if (bitVector == null || bitVector.length() != 1) @@ -83,15 +90,15 @@ public class BitVectorFormatter switch (bitVector.getLSBit(0)) { case ONE: - return Preferences.current().getColorDefinition("net.mograsim.logic.model.color.bit.one"); + return renderPrefs.getColorDefinition(BIT_ONE_COLOR); case U: - return Preferences.current().getColorDefinition("net.mograsim.logic.model.color.bit.u"); + return renderPrefs.getColorDefinition(BIT_U_COLOR); case X: - return Preferences.current().getColorDefinition("net.mograsim.logic.model.color.bit.x"); + return renderPrefs.getColorDefinition(BIT_X_COLOR); case Z: - return Preferences.current().getColorDefinition("net.mograsim.logic.model.color.bit.z"); + return renderPrefs.getColorDefinition(BIT_Z_COLOR); case ZERO: - return Preferences.current().getColorDefinition("net.mograsim.logic.model.color.bit.zero"); + return renderPrefs.getColorDefinition(BIT_ZERO_COLOR); default: throw new IllegalArgumentException("Unknown enum constant: " + bitVector.getLSBit(0)); } diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java index 3a70dcd1..aabe0194 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java @@ -1,5 +1,11 @@ package net.mograsim.logic.model; +import static net.mograsim.logic.model.preferences.RenderPreferences.ACTION_BUTTON; +import static net.mograsim.logic.model.preferences.RenderPreferences.BACKGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEBUG_HLSSHELL_DEPTH; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEBUG_OPEN_HLSSHELL; +import static net.mograsim.logic.model.preferences.RenderPreferences.IMPROVE_TEXT; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -25,12 +31,11 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModel; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler; -import net.mograsim.preferences.Preferences; /** * Simulation visualizer canvas. @@ -39,20 +44,25 @@ import net.mograsim.preferences.Preferences; */ public class LogicUICanvas extends ZoomableCanvas { - private final LogicModel model; + protected final LogicModel model; + protected final RenderPreferences renderPrefs; - public LogicUICanvas(Composite parent, int style, LogicModel model) + public LogicUICanvas(Composite parent, int style, LogicModel model, RenderPreferences renderPrefs) { - super(parent, style, Preferences.current().getBoolean("net.mograsim.logic.model.improvetext")); + // TODO add a listener + super(parent, style, renderPrefs.getBoolean(IMPROVE_TEXT)); + this.renderPrefs = renderPrefs; this.model = model; - Color background = Preferences.current().getColor("net.mograsim.logic.model.color.background"); + // TODO add listeners for the render prefs + + Color background = renderPrefs.getColor(BACKGROUND_COLOR); if (background != null) setBackground(background); LogicUIRenderer renderer = new LogicUIRenderer(model); - addZoomedRenderer(gc -> renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom))); + addZoomedRenderer(gc -> renderer.render(gc, renderPrefs, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom))); model.setRedrawHandler(() -> { if (!isDisposed()) @@ -61,13 +71,13 @@ public class LogicUICanvas extends ZoomableCanvas addListener(SWT.MouseDown, this::mouseDown); - if (Preferences.current().getBoolean("net.mograsim.logic.model.debug.openhlsshell")) - openDebugSetHighLevelStateShell(model); + if (renderPrefs.getBoolean(DEBUG_OPEN_HLSSHELL)) + openDebugSetHighLevelStateShell(model, renderPrefs.getInt(DEBUG_HLSSHELL_DEPTH) - 1); } private void mouseDown(Event e) { - if (e.button == Preferences.current().getInt("net.mograsim.logic.model.button.action")) + if (e.button == renderPrefs.getInt(ACTION_BUTTON)) { Point click = canvasToWorldCoords(e.x, e.y); for (ModelComponent component : model.getComponentsByName().values()) @@ -79,7 +89,7 @@ public class LogicUICanvas extends ZoomableCanvas } } - private void openDebugSetHighLevelStateShell(LogicModel model) + private void openDebugSetHighLevelStateShell(LogicModel model, int depth) { Shell debugShell = new Shell(); debugShell.setLayout(new GridLayout(2, false)); @@ -94,16 +104,16 @@ public class LogicUICanvas extends ZoomableCanvas @SuppressWarnings("unchecked") Consumer[] compRemoved = new Consumer[1]; compAdded[0] = c -> compsChanged(compAdded[0], compRemoved[0], c, models, componentsByItemIndex, componentSelector, model, - recalculateQueued, true); + recalculateQueued, depth, true); compRemoved[0] = c -> compsChanged(compAdded[0], compRemoved[0], c, models, componentsByItemIndex, componentSelector, model, - recalculateQueued, false); + recalculateQueued, depth, false); iterateModelTree(compAdded[0], compRemoved[0], model, models, true); debugShell.addListener(SWT.Dispose, e -> models.forEach(m -> { m.removeComponentAddedListener(compAdded[0]); m.removeComponentRemovedListener(compRemoved[0]); })); - queueRecalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model); + queueRecalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model, depth); new Label(debugShell, SWT.NONE).setText("Target state ID: "); Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER); stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); @@ -237,10 +247,10 @@ public class LogicUICanvas extends ZoomableCanvas private void compsChanged(Consumer compAdded, Consumer compRemoved, ModelComponent c, List models, List componentsByItemIndex, Combo componentSelector, LogicModel model, - AtomicBoolean recalculateQueued, boolean add) + AtomicBoolean recalculateQueued, int depth, boolean add) { iterateSubmodelTree(compAdded, compRemoved, c, models, add); - queueRecalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model); + queueRecalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model, depth); } private void iterateSubmodelTree(Consumer compAdded, Consumer compRemoved, @@ -272,20 +282,20 @@ public class LogicUICanvas extends ZoomableCanvas } private void queueRecalculateComponentSelector(AtomicBoolean recalculateQueued, List componentsByItemIndex, - Combo componentSelector, LogicModel model) + Combo componentSelector, LogicModel model, int depth) { if (recalculateQueued.compareAndSet(false, true)) - getDisplay().asyncExec(() -> recalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model)); + getDisplay().asyncExec( + () -> recalculateComponentSelector(recalculateQueued, componentsByItemIndex, componentSelector, model, depth)); } private void recalculateComponentSelector(AtomicBoolean recalculateQueued, List componentsByItemIndex, - Combo componentSelector, LogicModel model) + Combo componentSelector, LogicModel model, int depth) { recalculateQueued.set(false); componentsByItemIndex.clear(); componentSelector.setItems(); - addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model, - Preferences.current().getInt("net.mograsim.logic.model.debug.hlsshelldepth") - 1); + addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model, depth); } private void addComponentSelectorItems(List componentsByItemIndex, String base, Combo componentSelector, diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java index 1df2f7b7..6f4e0e83 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java @@ -1,5 +1,7 @@ package net.mograsim.logic.model; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH; + import org.eclipse.swt.SWT; import net.haspamelodica.swt.helper.gcs.GeneralGC; @@ -8,7 +10,7 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.LogicModel; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; -import net.mograsim.preferences.Preferences; +import net.mograsim.logic.model.preferences.RenderPreferences; public class LogicUIRenderer { @@ -21,28 +23,28 @@ public class LogicUIRenderer this.model = model; } - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { gc.setAntialias(SWT.ON); gc.setClipping(visibleRegion); - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH)); model.getWiresByName().values().forEach(w -> { Rectangle bounds = w.getBounds(); double lw = gc.getLineWidth(); if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw)) - w.render(gc); + w.render(gc, renderPrefs); }); - model.getComponentsByName().values().forEach(c -> renderComponent(gc, c, visibleRegion)); + model.getComponentsByName().values().forEach(c -> renderComponent(gc, renderPrefs, c, visibleRegion)); } - private static void renderComponent(GeneralGC gc, ModelComponent component, Rectangle visibleRegion) + private static void renderComponent(GeneralGC gc, RenderPreferences renderPrefs, ModelComponent component, Rectangle visibleRegion) { Rectangle bounds = component.getBounds(); double lw = gc.getLineWidth(); if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw)) { - component.render(gc, visibleRegion); + component.render(gc, renderPrefs, visibleRegion); if (DRAW_PINS) { gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN)); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java index 55a96a51..e803c264 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIStandaloneGUI.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model; +import static net.mograsim.logic.model.preferences.RenderPreferences.DRAG_BUTTON; +import static net.mograsim.logic.model.preferences.RenderPreferences.ZOOM_BUTTON; + import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; @@ -8,7 +11,7 @@ import org.eclipse.swt.widgets.Shell; import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay; import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; import net.mograsim.logic.model.model.LogicModel; -import net.mograsim.preferences.Preferences; +import net.mograsim.logic.model.preferences.RenderPreferences; /** * Standalone simulation visualizer graphical user interface. @@ -21,16 +24,18 @@ public class LogicUIStandaloneGUI implements Runnable private final Shell shell; private final LogicUICanvas ui; - public LogicUIStandaloneGUI(LogicModel model) + public LogicUIStandaloneGUI(LogicModel model, RenderPreferences renderPrefs) { display = new Display(); shell = new Shell(display); shell.setLayout(new FillLayout()); - ui = new LogicUICanvas(shell, SWT.NONE, model); + ui = new LogicUICanvas(shell, SWT.NONE, model, renderPrefs); ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui); - userInput.buttonDrag = Preferences.current().getInt("net.mograsim.logic.model.button.drag"); - userInput.buttonZoom = Preferences.current().getInt("net.mograsim.logic.model.button.zoom"); + // TODO add a listener + userInput.buttonDrag = renderPrefs.getInt(DRAG_BUTTON); + // TODO add a listener + userInput.buttonZoom = renderPrefs.getInt(ZOOM_BUTTON); userInput.enableUserInput(); new ZoomableCanvasOverlay(ui, null).enableScale(); } diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java index b84877e5..829abaa5 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java @@ -6,6 +6,7 @@ import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.modeladapter.CoreModelParameters; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; +import net.mograsim.logic.model.preferences.DefaultRenderPreferences; public class SimpleLogicUIStandalone { @@ -39,7 +40,7 @@ public class SimpleLogicUIStandalone Timeline timeline = LogicCoreAdapter.convert(logicModel, params); // initialize UI and executer - LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel); + LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel, new DefaultRenderPreferences()); LogicExecuter exec = new LogicExecuter(timeline); if (beforeRun != null) diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java index b4d89282..0a9816a4 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/ModelComponent.java @@ -11,6 +11,7 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.JSONSerializable; import net.mograsim.logic.model.snippets.HighLevelStateHandler; @@ -98,13 +99,6 @@ public abstract class ModelComponent implements JSONSerializable model.componentCreated(this, this::destroyed); } - // basic getters - - public String getName() - { - return name; - } - /** * Destroys this component. This method is called from {@link LogicModelModifiable#componentDestroyed(ModelComponent) * destroyComponent()} of the model this component is a part of.
@@ -117,6 +111,13 @@ public abstract class ModelComponent implements JSONSerializable pinsByName.values().forEach(this::removePinWithoutRedraw); } + // basic getters + + public String getName() + { + return name; + } + // pins /** @@ -344,7 +345,7 @@ public abstract class ModelComponent implements JSONSerializable * * @author Daniel Kirschten */ - public abstract void render(GeneralGC gc, Rectangle visibleRegion); + public abstract void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion); // serializing diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelBitDisplay.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelBitDisplay.java index 68e8d456..37ab427b 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelBitDisplay.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelBitDisplay.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import org.eclipse.swt.graphics.Color; import net.haspamelodica.swt.helper.gcs.GeneralGC; @@ -7,17 +10,17 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.CoreBitDisplay; -import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.BitDisplayAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.util.TextRenderingHelper; -import net.mograsim.preferences.Preferences; public class ModelBitDisplay extends ModelComponent { @@ -50,9 +53,9 @@ public class ModelBitDisplay extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); gc.drawRectangle(getBounds()); @@ -60,7 +63,7 @@ public class ModelBitDisplay extends ModelComponent Font oldFont = gc.getFont(); Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); gc.setFont(labelFont); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelClock.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelClock.java index 3c4eec61..e22ca826 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelClock.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelClock.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -23,11 +26,11 @@ import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.ClockAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.snippets.HighLevelStateHandler; import net.mograsim.logic.model.util.JsonHandler; -import net.mograsim.preferences.Preferences; public class ModelClock extends ModelComponent { @@ -140,9 +143,9 @@ public class ModelClock extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); gc.drawRectangle(getBounds()); @@ -151,7 +154,7 @@ public class ModelClock extends ModelComponent Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); gc.setFont(labelFont); Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); gc.drawText(label, getPosX() + (oc.width() - textExtent.x) / 2, getPosY() + (oc.height() - textExtent.y) / 2, true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelFixedOutput.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelFixedOutput.java index 1d704583..86b21bcc 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelFixedOutput.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelFixedOutput.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.Objects; import org.eclipse.swt.graphics.Color; @@ -8,18 +11,18 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.FixedOutputAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.util.JsonHandler; import net.mograsim.logic.model.util.TextRenderingHelper; -import net.mograsim.preferences.Preferences; public class ModelFixedOutput extends ModelComponent { @@ -53,9 +56,9 @@ public class ModelFixedOutput extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); gc.drawRectangle(getBounds()); @@ -63,7 +66,7 @@ public class ModelFixedOutput extends ModelComponent Font oldFont = gc.getFont(); Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); gc.setFont(labelFont); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelManualSwitch.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelManualSwitch.java index 78979825..ef3c817e 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelManualSwitch.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelManualSwitch.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -13,18 +16,18 @@ import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.CoreManualSwitch; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.ManualSwitchAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.snippets.HighLevelStateHandler; import net.mograsim.logic.model.util.TextRenderingHelper; -import net.mograsim.preferences.Preferences; public class ModelManualSwitch extends ModelComponent { @@ -137,9 +140,9 @@ public class ModelManualSwitch extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); gc.drawRectangle(getBounds()); @@ -147,7 +150,7 @@ public class ModelManualSwitch extends ModelComponent Font oldFont = gc.getFont(); Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); gc.setFont(labelFont); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelSplitter.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelSplitter.java index b47f50ba..b2c3ba1a 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelSplitter.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelSplitter.java @@ -1,11 +1,16 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.WIRE_WIDTH_MULTIBIT; +import static net.mograsim.logic.model.preferences.RenderPreferences.WIRE_WIDTH_SINGLEBIT; + import org.eclipse.swt.SWT; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; -import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.components.Orientation; @@ -14,12 +19,12 @@ import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.SplitterAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.util.JsonHandler; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; public class ModelSplitter extends ModelComponent { @@ -57,30 +62,29 @@ public class ModelSplitter extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { double posX = getPosX(); double posY = getPosY(); - ColorDefinition c = BitVectorFormatter.formatAsColor(inputEnd); + ColorDefinition c = BitVectorFormatter.formatAsColor(renderPrefs, inputEnd); if (c != null) gc.setForeground(ColorManager.current().toColor(c)); - gc.setLineWidth( - Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire." + (logicWidth == 1 ? "singlebit" : "multibit"))); + gc.setLineWidth(renderPrefs.getDouble(logicWidth == 1 ? WIRE_WIDTH_SINGLEBIT : WIRE_WIDTH_MULTIBIT)); double inLineY = heightWithoutOC / 2; gc.drawLine(posX + oc.newX(0, inLineY), posY + oc.newY(0, inLineY), posX + oc.newX(width / 2, inLineY), posY + oc.newY(width / 2, inLineY)); - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire.singlebit")); + gc.setLineWidth(renderPrefs.getDouble(WIRE_WIDTH_SINGLEBIT)); double outputHeight = 0; for (int i = 0; i < logicWidth; i++, outputHeight += 10) { - c = BitVectorFormatter.formatAsColor(outputEnds[i]); + c = BitVectorFormatter.formatAsColor(renderPrefs, outputEnds[i]); if (c != null) gc.setForeground(ColorManager.current().toColor(c)); gc.drawLine(posX + oc.newX(width / 2, outputHeight), posY + oc.newY(width / 2, outputHeight), posX + oc.newX(width, outputHeight), posY + oc.newY(width, outputHeight)); } - gc.setForeground(Preferences.current().getColor("net.mograsim.logic.model.color.foreground")); + gc.setForeground(renderPrefs.getColor(FOREGROUND_COLOR)); int oldLineCap = gc.getLineCap(); int lineJoin = gc.getLineJoin(); // TODO find better "replacement" for JOIN_BEVEL @@ -88,7 +92,7 @@ public class ModelSplitter extends ModelComponent gc.setLineCap(lineJoin == SWT.JOIN_MITER ? SWT.CAP_SQUARE : lineJoin == SWT.JOIN_ROUND ? SWT.CAP_ROUND : SWT.CAP_SQUARE); gc.drawLine(posX + oc.newX(width / 2, 0), posY + oc.newY(width / 2, 0), posX + oc.newX(width / 2, heightWithoutOC), posY + oc.newY(width / 2, heightWithoutOC)); - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH)); gc.setLineCap(oldLineCap); } diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTextComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTextComponent.java index ac0f64d7..c3a43a1f 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTextComponent.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTextComponent.java @@ -1,5 +1,7 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import org.eclipse.swt.graphics.Color; import net.haspamelodica.swt.helper.gcs.GeneralGC; @@ -9,9 +11,9 @@ import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.NoLogicAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; -import net.mograsim.preferences.Preferences; //TODO clean size calculation mess public class ModelTextComponent extends ModelComponent @@ -36,7 +38,7 @@ public class ModelTextComponent extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { if (!calculatedSize) { @@ -45,7 +47,7 @@ public class ModelTextComponent extends ModelComponent setSize(textExtent.x, textExtent.y); } - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); gc.drawText(text, getPosX(), getPosY(), true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTriStateBuffer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTriStateBuffer.java index 93bff320..9bd1dde0 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTriStateBuffer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/ModelTriStateBuffer.java @@ -1,5 +1,7 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; + import org.eclipse.swt.graphics.Color; import com.google.gson.JsonSyntaxException; @@ -14,10 +16,10 @@ import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.TriStateBufferAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.util.JsonHandler; -import net.mograsim.preferences.Preferences; public class ModelTriStateBuffer extends ModelComponent { @@ -78,9 +80,9 @@ public class ModelTriStateBuffer extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); double x = getPosX(); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularHardcodedModelComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularHardcodedModelComponent.java index 427a1792..6f78a47e 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularHardcodedModelComponent.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularHardcodedModelComponent.java @@ -15,6 +15,7 @@ import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.SimpleRectangularHardcodedModelComponentAdapter; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.HighLevelStateHandler; import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; @@ -176,11 +177,11 @@ public abstract class SimpleRectangularHardcodedModelComponent extends ModelComp // "graphical" operations @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - outlineRenderer.render(gc, visibleRegion); - centerTextRenderer.render(gc, visibleRegion); - pinNamesRenderer.render(gc, visibleRegion); + outlineRenderer.render(gc, renderPrefs, visibleRegion); + centerTextRenderer.render(gc, renderPrefs, visibleRegion); + pinNamesRenderer.render(gc, renderPrefs, visibleRegion); } // serializing diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularModelGate.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularModelGate.java index 89366013..1a39dc10 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularModelGate.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/SimpleRectangularModelGate.java @@ -1,5 +1,8 @@ package net.mograsim.logic.model.model.components.atomic; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.ArrayList; import java.util.List; @@ -16,8 +19,8 @@ import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.MovablePin; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; -import net.mograsim.preferences.Preferences; public class SimpleRectangularModelGate extends ModelComponent { @@ -80,9 +83,9 @@ public class SimpleRectangularModelGate extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground"); + Color foreground = renderPrefs.getColor(FOREGROUND_COLOR); if (foreground != null) gc.setForeground(foreground); double height = (getPins().size() - 1) * pinDistance; @@ -93,7 +96,7 @@ public class SimpleRectangularModelGate extends ModelComponent Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle()); gc.setFont(labelFont); Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); gc.drawText(label, getPosX() + (rectWidth - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java index f647cb74..8b087aac 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java @@ -1,5 +1,9 @@ package net.mograsim.logic.model.model.components.submodels; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH; +import static net.mograsim.logic.model.preferences.RenderPreferences.SUBMODEL_ZOOM_ALPHA_0; +import static net.mograsim.logic.model.preferences.RenderPreferences.SUBMODEL_ZOOM_ALPHA_1; + import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -17,13 +21,13 @@ import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.MovablePin; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.serializing.SubmodelComponentParams; import net.mograsim.logic.model.serializing.SubmodelComponentSerializer; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.util.JsonHandler; -import net.mograsim.preferences.Preferences; /** * A {@link ModelComponent} consisting of another model. A SubmodelComponent can have so-called "interface pins" connecting the @@ -357,7 +361,7 @@ public abstract class SubmodelComponent extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { GCConfig conf = new GCConfig(gc); GeneralGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true); @@ -367,12 +371,14 @@ public abstract class SubmodelComponent extends ModelComponent * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel * starts to be visible. */ - double maxVisibleRegionFillRatioForAlpha0 = Preferences.current().getDouble("net.mograsim.logic.model.submodel.zoomalpha0"); + // TODO add a listener + double maxVisibleRegionFillRatioForAlpha0 = renderPrefs.getDouble(SUBMODEL_ZOOM_ALPHA_0); /** * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is * fully visible. */ - double minVisibleRegionFillRatioForAlpha1 = Preferences.current().getDouble("net.mograsim.logic.model.submodel.zoomalpha1"); + // TODO add a listener + double minVisibleRegionFillRatioForAlpha1 = renderPrefs.getDouble(SUBMODEL_ZOOM_ALPHA_1); double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1); alphaFactor = Math.max(0, Math.min(1, alphaFactor)); // we need to take the old alpha into account to support nested submodules better. @@ -382,18 +388,19 @@ public abstract class SubmodelComponent extends ModelComponent if (submodelAlpha != 0) { gc.setAlpha(submodelAlpha); - renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale)); + renderer.render(tgc, renderPrefs, + visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale)); } if (labelAlpha != 0) { gc.setAlpha(labelAlpha); - renderSymbol(gc, visibleRegion); + renderSymbol(gc, renderPrefs, visibleRegion); } conf.reset(gc); // reset line width explicitly to avoid rounding errors causing weird glitches - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH)); // draw the outline after all other operations to make interface pins look better - renderOutline(gc, visibleRegion); + renderOutline(gc, renderPrefs, visibleRegion); } /** @@ -401,10 +408,10 @@ public abstract class SubmodelComponent extends ModelComponent * * @author Daniel Kirschten */ - private void renderSymbol(GeneralGC gc, Rectangle visibleRegion) + private void renderSymbol(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { if (symbolRenderer != null) - symbolRenderer.render(gc, visibleRegion); + symbolRenderer.render(gc, renderPrefs, visibleRegion); } /** @@ -412,10 +419,10 @@ public abstract class SubmodelComponent extends ModelComponent * * @author Daniel Kirschten */ - private void renderOutline(GeneralGC gc, Rectangle visibleRegion) + private void renderOutline(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { if (outlineRenderer != null) - outlineRenderer.render(gc, visibleRegion); + outlineRenderer.render(gc, renderPrefs, visibleRegion); } private static double map(double val, double valMin, double valMax, double mapMin, double mapMax) diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java index 331db123..233c371c 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelInterface.java @@ -5,6 +5,7 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; public class SubmodelInterface extends ModelComponent @@ -15,7 +16,7 @@ public class SubmodelInterface extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) {// nothing to do here } diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWire.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWire.java index 8d3cbded..813f06dd 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWire.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWire.java @@ -1,5 +1,9 @@ package net.mograsim.logic.model.model.wires; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH; +import static net.mograsim.logic.model.preferences.RenderPreferences.WIRE_WIDTH_MULTIBIT; +import static net.mograsim.logic.model.preferences.RenderPreferences.WIRE_WIDTH_SINGLEBIT; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -12,13 +16,13 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.CoreWire; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; /** * A wire connecting exactly two {@link Pin}s. @@ -363,15 +367,14 @@ public class ModelWire * * @author Daniel Kirschten */ - public void render(GeneralGC gc) + public void render(GeneralGC gc, RenderPreferences renderPrefs) { - ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end); + ColorDefinition wireColor = BitVectorFormatter.formatAsColor(renderPrefs, end); if (wireColor != null) gc.setForeground(ColorManager.current().toColor(wireColor)); - gc.setLineWidth( - Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire." + (logicWidth == 1 ? "singlebit" : "multibit"))); + gc.setLineWidth(renderPrefs.getDouble(logicWidth == 1 ? WIRE_WIDTH_SINGLEBIT : WIRE_WIDTH_MULTIBIT)); gc.drawPolyline(effectivePath); - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH)); } // operations concerning the path diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWireCrossPoint.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWireCrossPoint.java index b9a5ccc6..5594bdbf 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWireCrossPoint.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/wires/ModelWireCrossPoint.java @@ -3,10 +3,11 @@ package net.mograsim.logic.model.model.wires; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.LogicObserver; -import net.mograsim.logic.core.types.BitVectorFormatter; import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.preferences.ColorDefinition; @@ -83,9 +84,9 @@ public class ModelWireCrossPoint extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end); + ColorDefinition wireColor = BitVectorFormatter.formatAsColor(renderPrefs, end); if (wireColor != null) gc.setBackground(ColorManager.current().toColor(wireColor)); gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/DefaultRenderPreferences.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/DefaultRenderPreferences.java new file mode 100755 index 00000000..9a97ae1e --- /dev/null +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/DefaultRenderPreferences.java @@ -0,0 +1,86 @@ +package net.mograsim.logic.model.preferences; + +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.ColorDefinition.BuiltInColor; +import net.mograsim.preferences.DefaultPreferences; + +public class DefaultRenderPreferences extends DefaultPreferences implements RenderPreferences +{ + @Override + public boolean getBoolean(String name) + { + switch (name) + { + case IMPROVE_TEXT: + return true; + case DEBUG_OPEN_HLSSHELL: + return false; + default: + throw new IllegalArgumentException("Unknown boolean preference name: " + name); + } + } + + @Override + public int getInt(String name) + { + switch (name) + { + case DEBUG_HLSSHELL_DEPTH: + return 0; + case ACTION_BUTTON: + return 1; + case DRAG_BUTTON: + return 3; + case ZOOM_BUTTON: + return 2; + default: + throw new IllegalArgumentException("Unknown int preference name: " + name); + } + } + + @Override + public double getDouble(String name) + { + switch (name) + { + case DEFAULT_LINE_WIDTH: + return 0.5; + case WIRE_WIDTH_SINGLEBIT: + return 0.5; + case WIRE_WIDTH_MULTIBIT: + return 0.85; + case SUBMODEL_ZOOM_ALPHA_0: + return 0.1; + case SUBMODEL_ZOOM_ALPHA_1: + return 0.2; + default: + throw new IllegalArgumentException("Unknown double preference name: " + name); + } + } + + @Override + public ColorDefinition getColorDefinition(String name) + { + switch (name) + { + case BIT_ONE_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_GREEN); + case BIT_U_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_CYAN); + case BIT_X_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_RED); + case BIT_Z_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_YELLOW); + case BIT_ZERO_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_GRAY); + case BACKGROUND_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_WHITE); + case FOREGROUND_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_BLACK); + case TEXT_COLOR: + return new ColorDefinition(BuiltInColor.COLOR_BLACK); + default: + throw new IllegalArgumentException("Unknown color preference name: " + name); + } + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/RenderPreferences.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/RenderPreferences.java new file mode 100755 index 00000000..fd325c3b --- /dev/null +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/preferences/RenderPreferences.java @@ -0,0 +1,28 @@ +package net.mograsim.logic.model.preferences; + +import net.mograsim.preferences.Preferences; + +public interface RenderPreferences extends Preferences +{ + public static final String PREFIX = "net.mograsim.logic.model."; + + public static final String IMPROVE_TEXT = PREFIX + "improvetext"; + public static final String TEXT_COLOR = PREFIX + "color.text"; + public static final String FOREGROUND_COLOR = PREFIX + "color.foreground"; + public static final String BACKGROUND_COLOR = PREFIX + "color.background"; + public static final String BIT_ZERO_COLOR = PREFIX + "color.bit.zero"; + public static final String BIT_Z_COLOR = PREFIX + "color.bit.z"; + public static final String BIT_X_COLOR = PREFIX + "color.bit.x"; + public static final String BIT_U_COLOR = PREFIX + "color.bit.u"; + public static final String BIT_ONE_COLOR = PREFIX + "color.bit.one"; + public static final String SUBMODEL_ZOOM_ALPHA_1 = PREFIX + "submodel.zoomalpha1"; + public static final String SUBMODEL_ZOOM_ALPHA_0 = PREFIX + "submodel.zoomalpha0"; + public static final String WIRE_WIDTH_MULTIBIT = PREFIX + "linewidth.wire.multibit"; + public static final String WIRE_WIDTH_SINGLEBIT = PREFIX + "linewidth.wire.singlebit"; + public static final String DEFAULT_LINE_WIDTH = PREFIX + "linewidth.default"; + public static final String ZOOM_BUTTON = PREFIX + "button.zoom"; + public static final String DRAG_BUTTON = PREFIX + "button.drag"; + public static final String ACTION_BUTTON = PREFIX + "button.action"; + public static final String DEBUG_OPEN_HLSSHELL = PREFIX + "debug.openhlsshell"; + public static final String DEBUG_HLSSHELL_DEPTH = PREFIX + "debug.hlsshelldepth"; +} diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/Renderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/Renderer.java index 5ed33bdc..9dff925c 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/Renderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/Renderer.java @@ -2,9 +2,10 @@ package net.mograsim.logic.model.snippets; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.JSONSerializable; public interface Renderer extends JSONSerializable { - public void render(GeneralGC gc, Rectangle visibleRegion); + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion); } \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/outlinerenderers/DefaultOutlineRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/outlinerenderers/DefaultOutlineRenderer.java index 90f25a41..31366a76 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/outlinerenderers/DefaultOutlineRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/outlinerenderers/DefaultOutlineRenderer.java @@ -1,15 +1,17 @@ package net.mograsim.logic.model.snippets.outlinerenderers; +import static net.mograsim.logic.model.preferences.RenderPreferences.FOREGROUND_COLOR; + import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.SnippetDefinintion; import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; public class DefaultOutlineRenderer implements Renderer { @@ -26,9 +28,9 @@ public class DefaultOutlineRenderer implements Renderer } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.model.color.foreground"); + ColorDefinition fg = renderPrefs.getColorDefinition(FOREGROUND_COLOR); if (fg != null) gc.setForeground(ColorManager.current().toColor(fg)); gc.drawRectangle(component.getBounds()); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java index 9a6599a6..e122cdf5 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java @@ -1,17 +1,19 @@ package net.mograsim.logic.model.snippets.symbolrenderers; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.SnippetDefinintion; import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; /** * Renders a text ("text") with a given font height ("height") in the center of the component. @@ -33,11 +35,11 @@ public class CenteredTextSymbolRenderer implements Renderer } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { Font oldFont = gc.getFont(); gc.setFont(new Font(oldFont.getName(), fontHeight, oldFont.getStyle())); - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.model.color.text"); + ColorDefinition fg = renderPrefs.getColorDefinition(TEXT_COLOR); if (fg != null) gc.setForeground(ColorManager.current().toColor(fg)); Point idSize = gc.textExtent(text); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/DefaultSymbolRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/DefaultSymbolRenderer.java index 28ad8a86..eb883e22 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/DefaultSymbolRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/DefaultSymbolRenderer.java @@ -1,16 +1,18 @@ package net.mograsim.logic.model.snippets.symbolrenderers; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.SnippetDefinintion; import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; public class DefaultSymbolRenderer implements Renderer { @@ -29,9 +31,9 @@ public class DefaultSymbolRenderer implements Renderer } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.model.color.text"); + ColorDefinition fg = renderPrefs.getColorDefinition(TEXT_COLOR); if (fg != null) gc.setForeground(ColorManager.current().toColor(fg)); Point idSize = gc.textExtent(id); diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/PinNamesSymbolRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/PinNamesSymbolRenderer.java index ede87105..06d97e6e 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/PinNamesSymbolRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/PinNamesSymbolRenderer.java @@ -1,14 +1,19 @@ package net.mograsim.logic.model.snippets.symbolrenderers; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.HashMap; import java.util.Map; +import org.eclipse.swt.graphics.Color; + import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.SnippetDefinintion; @@ -47,8 +52,11 @@ public class PinNamesSymbolRenderer implements Renderer } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { + Color textColor = renderPrefs.getColor(TEXT_COLOR); + if (textColor != null) + gc.setForeground(textColor); Font oldFont = gc.getFont(); gc.setFont(new Font(oldFont.getName(), pinLabelHeight, oldFont.getStyle())); for (Pin pin : component.getPins().values()) diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java index d57203ab..b61bca95 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java @@ -1,5 +1,7 @@ package net.mograsim.logic.model.snippets.symbolrenderers; +import static net.mograsim.logic.model.preferences.RenderPreferences.TEXT_COLOR; + import java.util.Map.Entry; import org.eclipse.swt.graphics.Color; @@ -10,11 +12,11 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.SnippetDefinintion; import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; -import net.mograsim.preferences.Preferences; /** * Renders a text ("centerText") with a given font height ("centerTextHeight") in the center of the component and @@ -44,7 +46,7 @@ public class SimpleRectangularLikeSymbolRenderer implements Renderer } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { double posX = component.getPosX(); double posY = component.getPosY(); @@ -54,7 +56,7 @@ public class SimpleRectangularLikeSymbolRenderer implements Renderer Font oldFont = gc.getFont(); gc.setFont(new Font(oldFont.getName(), centerTextHeight, oldFont.getStyle())); Point textExtent = gc.textExtent(centerText); - Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text"); + Color textColor = renderPrefs.getColor(TEXT_COLOR); if (textColor != null) gc.setForeground(textColor); gc.drawText(centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true); diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java index 72fe4377..9b820eb6 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/ModelMemory.java @@ -4,6 +4,7 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer; @@ -34,9 +35,9 @@ public abstract class ModelMemory extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { - symbolRenderer.render(gc, visibleRegion); - outlineRenderer.render(gc, visibleRegion); + symbolRenderer.render(gc, renderPrefs, visibleRegion); + outlineRenderer.render(gc, renderPrefs, visibleRegion); } } \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/META-INF/MANIFEST.MF b/plugins/net.mograsim.plugin.core/META-INF/MANIFEST.MF index a5add49c..c735a0ac 100644 --- a/plugins/net.mograsim.plugin.core/META-INF/MANIFEST.MF +++ b/plugins/net.mograsim.plugin.core/META-INF/MANIFEST.MF @@ -11,6 +11,8 @@ Export-Package: net.mograsim.plugin;uses:="org.eclipse.ui.themes,org.eclipse.swt net.mograsim.plugin.launch, net.mograsim.plugin.nature, net.mograsim.plugin.nature.properties, + net.mograsim.plugin.perspectives, + net.mograsim.plugin.preferences, net.mograsim.plugin.tables, net.mograsim.plugin.tables.memory, net.mograsim.plugin.tables.mi, diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/EclipsePreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/EclipsePreferences.java deleted file mode 100644 index 445cf209..00000000 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/EclipsePreferences.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.mograsim.plugin; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.resource.ColorRegistry; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.ui.statushandlers.StatusManager; -import org.eclipse.ui.themes.ITheme; - -import net.mograsim.preferences.ColorDefinition; -import net.mograsim.preferences.DefaultPreferences; -import net.mograsim.preferences.Preferences; - -public class EclipsePreferences extends Preferences -{ - private final ITheme theme; - private final IPreferenceStore prefs; - private final Preferences defaultPrefs; - - public EclipsePreferences(ITheme theme, IPreferenceStore prefs) - { - this.theme = theme; - this.prefs = prefs; - this.defaultPrefs = new DefaultPreferences(); - } - - @Override - public boolean getBoolean(String name) - { - prefs.setDefault(name, defaultPrefs.getBoolean(name)); - return prefs.getBoolean(name); - } - - @Override - public int getInt(String name) - { - prefs.setDefault(name, defaultPrefs.getInt(name)); - return prefs.getInt(name); - } - - @Override - public double getDouble(String name) - { - prefs.setDefault(name, defaultPrefs.getDouble(name)); - return prefs.getDouble(name); - } - - @Override - public ColorDefinition getColorDefinition(String name) - { - RGB rgb = getColorRegistry().getRGB(name); - if (rgb == null) - { - StatusManager.getManager().handle(new Status(IStatus.ERROR, MograsimActivator.PLUGIN_ID, "No color for name " + name)); - return null; - } - return new ColorDefinition(rgb.red, rgb.green, rgb.blue); - } - - @Override - public Color getColor(String name) - { - return getColorRegistry().get(name); - } - - private ColorRegistry getColorRegistry() - { - return theme.getColorRegistry(); - } -} \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/MograsimActivator.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/MograsimActivator.java index 765a63a5..64586b07 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/MograsimActivator.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/MograsimActivator.java @@ -1,9 +1,15 @@ package net.mograsim.plugin; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.ui.themes.ITheme; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.machine.MachineRegistry; +import net.mograsim.plugin.preferences.EclipsePluginPreferences; +import net.mograsim.plugin.preferences.EclipseRenderPreferences; +import net.mograsim.plugin.preferences.PluginPreferences; import net.mograsim.preferences.Preferences; public final class MograsimActivator extends AbstractUIPlugin @@ -12,20 +18,36 @@ public final class MograsimActivator extends AbstractUIPlugin private static MograsimActivator instance; + public static MograsimActivator instance() + { + if (instance == null) + throw new IllegalStateException("MograsimActivator not yet created!"); + return instance; + } + + private final RenderPreferences renderPrefs; + private final PluginPreferences pluginPrefs; + public MograsimActivator() { if (instance != null) throw new IllegalStateException("MograsimActivator already created!"); instance = this; + MachineRegistry.initialize(); - Preferences.setPreferences(new EclipsePreferences(PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(), - MograsimActivator.instance().getPreferenceStore())); + ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); + IPreferenceStore preferenceStore = getPreferenceStore(); + renderPrefs = new EclipseRenderPreferences(currentTheme, preferenceStore); + pluginPrefs = new EclipsePluginPreferences(currentTheme, preferenceStore); } - public static MograsimActivator instance() + public RenderPreferences getRenderPrefs() { - if (instance == null) - throw new IllegalStateException("MograsimActivator not yet created!"); - return instance; + return renderPrefs; + } + + public Preferences getPluginPrefs() + { + return pluginPrefs; } } \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/SimulationPreview.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/SimulationPreview.java index 746433b1..03a0e34e 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/SimulationPreview.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/SimulationPreview.java @@ -17,24 +17,20 @@ import net.mograsim.logic.model.model.wires.ModelWire; import net.mograsim.logic.model.model.wires.ModelWireCrossPoint; import net.mograsim.logic.model.modeladapter.CoreModelParameters; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; -import net.mograsim.preferences.Preferences; +import net.mograsim.logic.model.preferences.RenderPreferences; +import net.mograsim.plugin.preferences.EclipseRenderPreferences; public class SimulationPreview implements IThemePreview { private LogicUICanvas ui; private LogicExecuter exec; - private Preferences oldPreferences; - private Preferences currentThemePreferences; @Override @SuppressWarnings("unused") public void createControl(Composite parent, ITheme currentTheme) { - oldPreferences = Preferences.current(); - - currentThemePreferences = new EclipsePreferences(currentTheme, MograsimActivator.instance().getPreferenceStore()); - // TODO this will change the global preferences; so if another LogicUICanvas redraws, it will use the "new" colors too. - Preferences.setPreferences(currentThemePreferences); + RenderPreferences currentThemeRenderPrefs = new EclipseRenderPreferences(currentTheme, + MograsimActivator.instance().getPreferenceStore()); LogicModelModifiable model = new LogicModelModifiable(); CoreModelParameters params = new CoreModelParameters(); @@ -86,7 +82,7 @@ public class SimulationPreview implements IThemePreview rIn.clicked(0, 0); - ui = new LogicUICanvas(parent, SWT.NONE, model); + ui = new LogicUICanvas(parent, SWT.NONE, model, currentThemeRenderPrefs); ui.zoom(3.5, 10, 10); exec.startLiveExecution(); @@ -98,7 +94,5 @@ public class SimulationPreview implements IThemePreview public void dispose() { exec.stopLiveExecution(); - if (Preferences.current() == currentThemePreferences) - Preferences.setPreferences(oldPreferences); } } diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegister.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegister.java index 88c6ba7d..f8d22650 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegister.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegister.java @@ -18,7 +18,7 @@ import org.eclipse.debug.core.model.IValue; import org.eclipse.swt.SWT; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.model.BitVectorFormatter; import net.mograsim.machine.Machine; import net.mograsim.machine.registers.Register; import net.mograsim.plugin.MograsimActivator; diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java index 5d4cf5de..16c6db0a 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MainMemoryBlockExtension.java @@ -1,5 +1,7 @@ package net.mograsim.plugin.launch; +import static net.mograsim.plugin.preferences.PluginPreferences.MAX_MEMORY_CHANGE_INTERVAL; + import java.math.BigInteger; import java.util.HashSet; import java.util.Set; @@ -21,7 +23,6 @@ import net.mograsim.machine.MainMemory; import net.mograsim.machine.MainMemoryDefinition; import net.mograsim.machine.Memory.MemoryCellModifiedListener; import net.mograsim.plugin.MograsimActivator; -import net.mograsim.preferences.Preferences; public class MainMemoryBlockExtension extends PlatformObject implements IMemoryBlockExtension { @@ -80,7 +81,8 @@ public class MainMemoryBlockExtension extends PlatformObject implements IMemoryB this.memListener = a -> queueFireContentChangeEvent(); this.memListenerRegistered = new AtomicBoolean(); - this.maxContentChangeInterval = Preferences.current().getInt("net.mograsim.plugin.core.maxmemchangeinterval"); + // TODO add a listener + this.maxContentChangeInterval = MograsimActivator.instance().getPluginPrefs().getInt(MAX_MEMORY_CHANGE_INTERVAL); this.contentChangeLock = new Object(); this.nextContentChangeAllowedMillis = System.currentTimeMillis() - maxContentChangeInterval - 1; } diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/DefaultPluginPreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/DefaultPluginPreferences.java new file mode 100755 index 00000000..e3dcc72b --- /dev/null +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/DefaultPluginPreferences.java @@ -0,0 +1,53 @@ +package net.mograsim.plugin.preferences; + +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.DefaultPreferences; + +public class DefaultPluginPreferences extends DefaultPreferences implements PluginPreferences +{ + @Override + public boolean getBoolean(String name) + { + switch (name) + { + case MPM_EDITOR_BITS_AS_COLUMN_NAME: + return false; + default: + throw new IllegalArgumentException("Unknown boolean preference name: " + name); + } + } + + @Override + public int getInt(String name) + { + switch (name) + { + case SIMULATION_SPEED_PRECISION: + return 6; + case MAX_MEMORY_CHANGE_INTERVAL: + return 1000; + default: + throw new IllegalArgumentException("Unknown int preference name: " + name); + } + } + + @Override + public double getDouble(String name) + { + switch (name) + { + default: + throw new IllegalArgumentException("Unknown double preference name: " + name); + } + } + + @Override + public ColorDefinition getColorDefinition(String name) + { + switch (name) + { + default: + throw new IllegalArgumentException("Unknown color preference name: " + name); + } + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePluginPreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePluginPreferences.java new file mode 100755 index 00000000..193471d7 --- /dev/null +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePluginPreferences.java @@ -0,0 +1,12 @@ +package net.mograsim.plugin.preferences; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.ui.themes.ITheme; + +public class EclipsePluginPreferences extends EclipsePreferences implements PluginPreferences +{ + public EclipsePluginPreferences(ITheme theme, IPreferenceStore prefs) + { + super(theme, prefs, new DefaultPluginPreferences()); + } +} diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePreferences.java new file mode 100755 index 00000000..c57c443e --- /dev/null +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipsePreferences.java @@ -0,0 +1,189 @@ +package net.mograsim.plugin.preferences; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.resource.ColorRegistry; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.ui.statushandlers.StatusManager; +import org.eclipse.ui.themes.ITheme; + +import net.mograsim.plugin.MograsimActivator; +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.Preferences; + +public class EclipsePreferences implements Preferences +{ + private final ITheme theme; + private final IPreferenceStore prefs; + private final Preferences defaultPrefs; + + private final ListenerManager booleanListeners; + private final ListenerManager intListeners; + private final ListenerManager doubleListeners; + private final ListenerManager colorDefinitionListeners; + + protected EclipsePreferences(ITheme theme, IPreferenceStore prefs, Preferences defaultPrefs) + { + this.theme = theme; + this.prefs = prefs; + this.defaultPrefs = defaultPrefs; + + this.booleanListeners = new ListenerManager<>(this::getBoolean); + this.intListeners = new ListenerManager<>(this::getInt); + this.doubleListeners = new ListenerManager<>(this::getDouble); + this.colorDefinitionListeners = new ListenerManager<>(this::getColorDefinition); + } + + @Override + public boolean getBoolean(String name) + { + prefs.setDefault(name, defaultPrefs.getBoolean(name)); + return prefs.getBoolean(name); + } + + @Override + public int getInt(String name) + { + prefs.setDefault(name, defaultPrefs.getInt(name)); + return prefs.getInt(name); + } + + @Override + public double getDouble(String name) + { + prefs.setDefault(name, defaultPrefs.getDouble(name)); + return prefs.getDouble(name); + } + + @Override + public ColorDefinition getColorDefinition(String name) + { + RGB rgb = getColorRegistry().getRGB(name); + if (rgb == null) + { + StatusManager.getManager().handle(new Status(IStatus.ERROR, MograsimActivator.PLUGIN_ID, "No color for name " + name)); + return null; + } + return new ColorDefinition(rgb.red, rgb.green, rgb.blue); + } + + @Override + public Color getColor(String name) + { + return getColorRegistry().get(name); + } + + private ColorRegistry getColorRegistry() + { + return theme.getColorRegistry(); + } + + @Override + public void addBooleanListener(String name, Consumer listener) + { + booleanListeners.addListener(name, listener); + } + + @Override + public void removeBooleanListener(String name, Consumer listener) + { + booleanListeners.removeListener(name, listener); + } + + @Override + public void addIntListener(String name, Consumer listener) + { + intListeners.addListener(name, listener); + } + + @Override + public void removeIntListener(String name, Consumer listener) + { + intListeners.removeListener(name, listener); + } + + @Override + public void addDoubleListener(String name, Consumer listener) + { + doubleListeners.addListener(name, listener); + } + + @Override + public void removeDoubleListener(String name, Consumer listener) + { + doubleListeners.removeListener(name, listener); + } + + @Override + public void addColorDefinitionListener(String name, Consumer listener) + { + colorDefinitionListeners.addListener(name, listener); + } + + @Override + public void removeColorDefinitionListener(String name, Consumer listener) + { + colorDefinitionListeners.removeListener(name, listener); + } + + private class ListenerManager

+ { + private final Map>> listenersPerName; + private final IPropertyChangeListener eclipseListener; + + public ListenerManager(Function preferenceGetter) + { + this.listenersPerName = new HashMap<>(); + this.eclipseListener = e -> + { + String name = e.getProperty(); + synchronized (listenersPerName) + { + Set> listenersThisName = listenersPerName.get(name); + if (listenersThisName != null) + { + P p = preferenceGetter.apply(name); + listenersThisName.forEach(l -> l.accept(p)); + } + } + }; + } + + public void addListener(String name, Consumer

listener) + { + synchronized (listenersPerName) + { + boolean wasEmpty = listenersPerName.isEmpty(); + listenersPerName.computeIfAbsent(name, n -> new HashSet<>()).add(listener); + if (wasEmpty) + prefs.addPropertyChangeListener(eclipseListener); + } + } + + public void removeListener(String name, Consumer

listener) + { + synchronized (listenersPerName) + { + Set> listenersThisName = listenersPerName.get(name); + if (listenersThisName != null) + { + listenersThisName.remove(listener); + if (listenersThisName.isEmpty()) + listenersPerName.remove(name); + } + if (listenersPerName.isEmpty()) + prefs.addPropertyChangeListener(eclipseListener); + } + } + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipseRenderPreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipseRenderPreferences.java new file mode 100755 index 00000000..f976ccc0 --- /dev/null +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/EclipseRenderPreferences.java @@ -0,0 +1,15 @@ +package net.mograsim.plugin.preferences; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.ui.themes.ITheme; + +import net.mograsim.logic.model.preferences.DefaultRenderPreferences; +import net.mograsim.logic.model.preferences.RenderPreferences; + +public class EclipseRenderPreferences extends EclipsePreferences implements RenderPreferences +{ + public EclipseRenderPreferences(ITheme theme, IPreferenceStore prefs) + { + super(theme, prefs, new DefaultRenderPreferences()); + } +} diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/PluginPreferences.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/PluginPreferences.java new file mode 100755 index 00000000..3378e66f --- /dev/null +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/preferences/PluginPreferences.java @@ -0,0 +1,13 @@ +package net.mograsim.plugin.preferences; + +import net.mograsim.preferences.Preferences; + +public interface PluginPreferences extends Preferences +{ + public static final String PREFIX = "net.mograsim.plugin.core."; + + public static final String MAX_MEMORY_CHANGE_INTERVAL = "net.mograsim.plugin.core.maxmemchangeinterval"; + public static final String SIMULATION_SPEED_PRECISION = "net.mograsim.plugin.core.simspeedprecision"; + public static final String MPM_EDITOR_BITS_AS_COLUMN_NAME = "net.mograsim.plugin.core.editors.mpm.bitsascolumnname"; + +} diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java index 81e0f16e..25c0f717 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/mi/InstructionTable.java @@ -1,5 +1,7 @@ package net.mograsim.plugin.tables.mi; +import static net.mograsim.plugin.preferences.PluginPreferences.MPM_EDITOR_BITS_AS_COLUMN_NAME; + import java.util.Arrays; import org.eclipse.jface.viewers.ColumnLabelProvider; @@ -25,10 +27,10 @@ import net.mograsim.machine.mi.MicroInstructionDefinition; import net.mograsim.machine.mi.MicroInstructionMemory; import net.mograsim.machine.mi.parameters.MnemonicFamily; import net.mograsim.machine.mi.parameters.ParameterClassification; +import net.mograsim.plugin.MograsimActivator; import net.mograsim.plugin.tables.AddressLabelProvider; import net.mograsim.plugin.tables.DisplaySettings; import net.mograsim.plugin.tables.LazyTableViewer; -import net.mograsim.preferences.Preferences; public class InstructionTable { @@ -134,7 +136,8 @@ public class InstructionTable String columnTitle; String bitString = startBit == endBit ? Integer.toString(startBit) : startBit + "..." + endBit; - if (Preferences.current().getBoolean("net.mograsim.plugin.core.editors.mpm.bitsascolumnname")) + // TODO add a listener + if (MograsimActivator.instance().getPluginPrefs().getBoolean(MPM_EDITOR_BITS_AS_COLUMN_NAME)) columnTitle = bitString; else columnTitle = miDef.getParameterTitle(i).orElse(bitString); diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/views/SimulationView.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/views/SimulationView.java index f81fb4b0..210e9de7 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/views/SimulationView.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/views/SimulationView.java @@ -1,5 +1,9 @@ package net.mograsim.plugin.views; +import static net.mograsim.logic.model.preferences.RenderPreferences.DRAG_BUTTON; +import static net.mograsim.logic.model.preferences.RenderPreferences.ZOOM_BUTTON; +import static net.mograsim.plugin.preferences.PluginPreferences.SIMULATION_SPEED_PRECISION; + import java.util.HashSet; import java.util.Optional; import java.util.Set; @@ -26,16 +30,17 @@ import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInpu import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.CoreClock; import net.mograsim.logic.model.LogicUICanvas; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.machine.Machine; import net.mograsim.machine.Memory.MemoryCellModifiedListener; import net.mograsim.machine.mi.AssignableMicroInstructionMemory; +import net.mograsim.plugin.MograsimActivator; import net.mograsim.plugin.launch.MachineDebugContextListener; import net.mograsim.plugin.launch.MachineDebugTarget; import net.mograsim.plugin.tables.DisplaySettings; import net.mograsim.plugin.tables.mi.ActiveInstructionPreviewContentProvider; import net.mograsim.plugin.tables.mi.InstructionTable; import net.mograsim.plugin.util.OverlappingFillLayout; -import net.mograsim.preferences.Preferences; public class SimulationView extends ViewPart { @@ -153,7 +158,8 @@ public class SimulationView extends ViewPart simSpeedInput = new DoubleInput(c, SWT.NONE); controlsToDisableWhenNoMachinePresent.add(simSpeedInput); - simSpeedInput.setPrecision(Preferences.current().getInt("net.mograsim.plugin.core.simspeedprecision")); + // TODO add a listener + simSpeedInput.setPrecision(MograsimActivator.instance().getPluginPrefs().getInt(SIMULATION_SPEED_PRECISION)); simSpeedInput.addChangeListener(speed -> { if (speed != 0) @@ -220,11 +226,14 @@ public class SimulationView extends ViewPart Machine machine = debugTarget.getMachine(); - canvas = new LogicUICanvas(canvasParent, SWT.NONE, machine.getModel()); + RenderPreferences renderPrefs = MograsimActivator.instance().getRenderPrefs(); + canvas = new LogicUICanvas(canvasParent, SWT.NONE, machine.getModel(), renderPrefs); canvas.addListener(SWT.MouseDown, e -> canvas.setFocus()); ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(canvas); - userInput.buttonDrag = Preferences.current().getInt("net.mograsim.logic.model.button.drag"); - userInput.buttonZoom = Preferences.current().getInt("net.mograsim.logic.model.button.zoom"); + // TODO add a listener + userInput.buttonDrag = renderPrefs.getInt(DRAG_BUTTON); + // TODO add a listener + userInput.buttonZoom = renderPrefs.getInt(ZOOM_BUTTON); userInput.enableUserInput(); if (zoom > 0) { diff --git a/plugins/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java b/plugins/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java index 67bb46a3..d51acab3 100644 --- a/plugins/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java +++ b/plugins/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java @@ -1,90 +1,19 @@ package net.mograsim.preferences; -import net.mograsim.preferences.ColorDefinition.BuiltInColor; +import java.util.function.Consumer; -public class DefaultPreferences extends Preferences +public abstract class DefaultPreferences implements Preferences { - @Override - public boolean getBoolean(String name) - { - switch (name) - { - case "net.mograsim.logic.model.improvetext": - return true; - case "net.mograsim.logic.model.debug.openhlsshell": - return false; - case "net.mograsim.plugin.core.editors.mpm.bitsascolumnname": - return false; - default: - throw new IllegalArgumentException("Unknown boolean preference name: " + name); - } - } + // Adding / removing listeners. All are no-ops, since DefaultPreferences are immutable. - @Override - public int getInt(String name) - { - switch (name) - { - case "net.mograsim.logic.model.debug.hlsshelldepth": - return 0; - case "net.mograsim.logic.model.button.action": - return 3; - case "net.mograsim.logic.model.button.drag": - return 1; - case "net.mograsim.logic.model.button.zoom": - return 2; - case "net.mograsim.plugin.core.simspeedprecision": - return 6; - case "net.mograsim.plugin.core.maxmemchangeinterval": - return 1000; - default: - throw new IllegalArgumentException("Unknown int preference name: " + name); - } - } - - @Override - public double getDouble(String name) - { - switch (name) - { - case "net.mograsim.logic.model.linewidth.default": - return 0.5; - case "net.mograsim.logic.model.linewidth.wire.singlebit": - return 0.5; - case "net.mograsim.logic.model.linewidth.wire.multibit": - return 0.85; - case "net.mograsim.logic.model.submodel.zoomalpha0": - return 0.1; - case "net.mograsim.logic.model.submodel.zoomalpha1": - return 0.2; - default: - throw new IllegalArgumentException("Unknown double preference name: " + name); - } - } - - @Override - public ColorDefinition getColorDefinition(String name) - { - switch (name) - { - case "net.mograsim.logic.model.color.bit.one": - return new ColorDefinition(BuiltInColor.COLOR_GREEN); - case "net.mograsim.logic.model.color.bit.u": - return new ColorDefinition(BuiltInColor.COLOR_CYAN); - case "net.mograsim.logic.model.color.bit.x": - return new ColorDefinition(BuiltInColor.COLOR_RED); - case "net.mograsim.logic.model.color.bit.z": - return new ColorDefinition(BuiltInColor.COLOR_YELLOW); - case "net.mograsim.logic.model.color.bit.zero": - return new ColorDefinition(BuiltInColor.COLOR_GRAY); - case "net.mograsim.logic.model.color.background": - return new ColorDefinition(BuiltInColor.COLOR_WHITE); - case "net.mograsim.logic.model.color.foreground": - return new ColorDefinition(BuiltInColor.COLOR_BLACK); - case "net.mograsim.logic.model.color.text": - return new ColorDefinition(BuiltInColor.COLOR_BLACK); - default: - throw new IllegalArgumentException("Unknown color preference name: " + name); - } - } + //@formatter:off + @Override public void addBooleanListener(String name, Consumer listener) {/**/} + @Override public void removeBooleanListener(String name, Consumer listener) {/**/} + @Override public void addIntListener(String name, Consumer listener) {/**/} + @Override public void removeIntListener(String name, Consumer listener) {/**/} + @Override public void addDoubleListener(String name, Consumer listener) {/**/} + @Override public void removeDoubleListener(String name, Consumer listener) {/**/} + @Override public void addColorDefinitionListener(String name, Consumer listener) {/**/} + @Override public void removeColorDefinitionListener(String name, Consumer listener) {/**/} + //@formatter:on } \ No newline at end of file diff --git a/plugins/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java b/plugins/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java index f2498564..f19ae65c 100644 --- a/plugins/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java +++ b/plugins/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java @@ -1,34 +1,36 @@ package net.mograsim.preferences; -import java.util.Objects; +import java.util.function.Consumer; import org.eclipse.swt.graphics.Color; -public abstract class Preferences +public interface Preferences { - private static Preferences currentPreferences; + public boolean getBoolean(String name); - public static void setPreferences(Preferences preferences) - { - currentPreferences = Objects.requireNonNull(preferences); - } + public void addBooleanListener(String name, Consumer listener); - public static Preferences current() - { - if (currentPreferences == null) - currentPreferences = new DefaultPreferences(); - return currentPreferences; - } + public void removeBooleanListener(String name, Consumer listener); + + public int getInt(String name); + + public void addIntListener(String name, Consumer listener); + + public void removeIntListener(String name, Consumer listener); + + public double getDouble(String name); + + public void addDoubleListener(String name, Consumer listener); - public abstract boolean getBoolean(String name); + public void removeDoubleListener(String name, Consumer listener); - public abstract int getInt(String name); + public ColorDefinition getColorDefinition(String name); - public abstract double getDouble(String name); + public void addColorDefinitionListener(String name, Consumer listener); - public abstract ColorDefinition getColorDefinition(String name); + public void removeColorDefinitionListener(String name, Consumer listener); - public Color getColor(String name) + public default Color getColor(String name) { return ColorManager.current().toColor(getColorDefinition(name)); } diff --git a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/TestGCD.java b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/TestGCD.java index 622aa693..080e6f33 100644 --- a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/TestGCD.java +++ b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/TestGCD.java @@ -24,6 +24,7 @@ import net.mograsim.logic.model.am2900.machine.Am2900MicroInstructionDefinition; import net.mograsim.logic.model.am2900.machine.Am2900MicroInstructionMemoryDefinition; import net.mograsim.logic.model.am2900.machine.StrictAm2900MachineDefinition; import net.mograsim.logic.model.am2900.machine.registers.am2901.NumberedRegister; +import net.mograsim.logic.model.preferences.DefaultRenderPreferences; import net.mograsim.machine.MainMemory; import net.mograsim.machine.mi.MicroInstruction; import net.mograsim.machine.mi.MicroInstructionDefinition; @@ -99,7 +100,7 @@ public class TestGCD private void startGUI() { - new Thread(() -> new LogicUIStandaloneGUI(mach.getModel()).run(), "GUI thread").start(); + new Thread(() -> new LogicUIStandaloneGUI(mach.getModel(), new DefaultRenderPreferences()).run(), "GUI thread").start(); } @Test diff --git a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/am2904/Am2904Testbench.java b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/am2904/Am2904Testbench.java index e46561d5..1f527502 100644 --- a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/am2904/Am2904Testbench.java +++ b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/am2904/Am2904Testbench.java @@ -10,6 +10,7 @@ import net.mograsim.logic.model.am2900.Am2900Loader; import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.logic.model.model.components.atomic.ModelManualSwitch; import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; @@ -44,7 +45,7 @@ public class Am2904Testbench } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { // do nothing } diff --git a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/util/TestEnvironmentHelper.java b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/util/TestEnvironmentHelper.java index 51833be8..54321cb2 100644 --- a/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/util/TestEnvironmentHelper.java +++ b/tests/net.mograsim.logic.model.am2900.tests/src/net/mograsim/logic/model/am2900/util/TestEnvironmentHelper.java @@ -29,6 +29,7 @@ import net.mograsim.logic.model.model.wires.ModelWire; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.modeladapter.CoreModelParameters; import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; +import net.mograsim.logic.model.preferences.DefaultRenderPreferences; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.util.ModellingTool; @@ -261,7 +262,7 @@ public class TestEnvironmentHelper { try { - new LogicUIStandaloneGUI(logicModel).run(); + new LogicUIStandaloneGUI(logicModel, new DefaultRenderPreferences()).run(); logicModel.setRedrawHandler(null); } catch (Exception e) -- 2.17.1