diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index 83736bc2..b139a3d4 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -78,6 +78,11 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP public static final String EXTRA_SPACE_KEY = "extraSpace"; public static final String FAVORITES_KEY = "favorites"; public static final String RENUMBER_ON_PASTE_KEY = "renumberOnPaste"; + public static final String RULER_IN_SUBDIVISION_KEY = "rulerInSubdivision"; + + public static final String RULER_IN_SUBDIVISION_2 = "base of 2"; + public static final String RULER_IN_SUBDIVISION_10 = "base of 10"; + public static final String RULER_IN_SUBDIVISION_DEFAULT = RULER_IN_SUBDIVISION_10; public static final String SNAP_TO_NONE = "None"; public static final String SNAP_TO_GRID = "Grid"; diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index ec5826e0..23937eed 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -2836,6 +2836,22 @@ https://github.com/bancika/diy-layout-creator/releases + + + + 4 + 2 + 0 + + 2020-04-03 00:00:00.000 CET + + + + NEW_FEATURE + Added "Ruler Inch Subdivision" config option that allows inch rulers to be subdivided either using base of 2 (1/4", 1/8, 1/16) or base of 10 (1/10) + + + https://github.com/bancika/diy-layout-creator/releases diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index bac60e4b..47db16b0 100644 Binary files a/diylc/diylc-swing/lib/swing-framework.jar and b/diylc/diylc-swing/lib/swing-framework.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/images/IconLoader.java b/diylc/diylc-swing/src/org/diylc/images/IconLoader.java index 6dee2a23..fdb10d80 100644 --- a/diylc/diylc-swing/src/org/diylc/images/IconLoader.java +++ b/diylc/diylc-swing/src/org/diylc/images/IconLoader.java @@ -64,7 +64,7 @@ public enum IconLoader { "documents_gear.png"), SplashResistor("splash_resistor.png"), SplashCeramic("splash_ceramic.png"), SplashElectrolytic( "splash_electrolytic.png"), SplashFilm("splash_film.png"), Splash("splash.png"), Help("help2.png"), ScrollInformation("scroll_information.png"), Node("node.png"), Web("web.png"), Guitar("guitar.png"), Scientist("scientist.png"), StarGrey("star_grey.png"), StarBlue("star_blue.png"), - JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"); + JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png"); protected String name; diff --git a/diylc/diylc-swing/src/org/diylc/images/tape_measure1.png b/diylc/diylc-swing/src/org/diylc/images/tape_measure1.png new file mode 100644 index 00000000..2253d936 Binary files /dev/null and b/diylc/diylc-swing/src/org/diylc/images/tape_measure1.png differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index 533bd6d2..04da622e 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -78,7 +78,7 @@ import org.diylc.swingframework.ButtonDialog; import org.diylc.swingframework.CheckBoxListDialog; import org.diylc.swingframework.IDrawingProvider; import org.diylc.swingframework.export.DrawingExporter; -import org.diylc.swingframework.text.TextDialog; +import org.diylc.swingframework.TextDialog; import org.diylc.utils.BomEntry; import com.thoughtworks.xstream.XStream; diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index efc7c07b..5964d71c 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -63,12 +63,12 @@ import org.diylc.core.Template; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.images.IconLoader; -import org.diylc.presenter.Presenter; import org.diylc.swing.ActionFactory; import org.diylc.swing.ISwingUI; import org.diylc.swing.plugins.edit.ComponentTransferable; import org.diylc.swing.plugins.file.ProjectDrawingProvider; import org.diylc.swingframework.ruler.IRulerListener; +import org.diylc.swingframework.ruler.Ruler.InchSubdivision; import org.diylc.swingframework.ruler.RulerScrollPane; public class CanvasPlugin implements IPlugIn, ClipboardOwner { @@ -209,6 +209,15 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { updateZeroLocation(); } }); + + ConfigurationManager.getInstance().addConfigListener(IPlugInPort.RULER_IN_SUBDIVISION_KEY, + new IConfigListener() { + + @Override + public void valueChanged(String key, Object value) { + getScrollPane().setInSubdivision(IPlugInPort.RULER_IN_SUBDIVISION_10.equalsIgnoreCase(value == null ? null : value.toString()) ? InchSubdivision.BASE_10 : InchSubdivision.BASE_2); + } + }); getScrollPane().getViewport().setVisible(false); } @@ -311,16 +320,18 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { private RulerScrollPane getScrollPane() { if (scrollPane == null) { + String subdivision = ConfigurationManager.getInstance().readString(IPlugInPort.RULER_IN_SUBDIVISION_KEY, IPlugInPort.RULER_IN_SUBDIVISION_DEFAULT); + scrollPane = new RulerScrollPane(getCanvasPanel(), new ProjectDrawingProvider(plugInPort, true, false, true), - new Size(1d, SizeUnit.cm).convertToPixels(), new Size(1d, SizeUnit.in).convertToPixels()); - boolean metric = ConfigurationManager.getInstance().readBoolean(Presenter.METRIC_KEY, true); + new Size(1d, SizeUnit.cm).convertToPixels(), new Size(1d, SizeUnit.in).convertToPixels(), + IPlugInPort.RULER_IN_SUBDIVISION_10.equalsIgnoreCase(subdivision) ? InchSubdivision.BASE_10 : InchSubdivision.BASE_2); + boolean metric = ConfigurationManager.getInstance().readBoolean(IPlugInPort.METRIC_KEY, true); boolean useHardwareAcceleration = ConfigurationManager.getInstance().readBoolean(IPlugInPort.HARDWARE_ACCELERATION, false); scrollPane.setUseHardwareAcceleration(useHardwareAcceleration); - - scrollPane.setMetric(metric); + scrollPane.setMetric(metric); scrollPane.setWheelScrollingEnabled(true); scrollPane.addUnitListener(new IRulerListener() { diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java index 32933e8b..afc35558 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/config/ConfigPlugin.java @@ -46,6 +46,7 @@ public class ConfigPlugin implements IPlugIn { private static final String CONFIG_MENU = "Config"; private static final String THEME_MENU = "Theme"; + private static final String RULER_MENU = "Ruler Inch Subdivision..."; private static final String SNAP_MENU = "Snap To..."; private static final String COMPONENT_BROWSER_MENU = "Toolbox"; public static final String COMPONENT_BROWSER = "componentBrowser"; @@ -97,13 +98,20 @@ public class ConfigPlugin implements IPlugIn { swingUI.injectMenuAction( ActionFactory.getInstance().createConfigAction(plugInPort, "Renumber On Paste", IPlugInPort.RENUMBER_ON_PASTE_KEY, true), CONFIG_MENU); + + swingUI.injectSubmenu(RULER_MENU, IconLoader.TapeMeasure.getIcon(), CONFIG_MENU); + swingUI.injectMenuAction( + ActionFactory.getInstance().createToggleAction(IPlugInPort.RULER_IN_SUBDIVISION_10, IPlugInPort.RULER_IN_SUBDIVISION_KEY, RULER_MENU, IPlugInPort.RULER_IN_SUBDIVISION_DEFAULT), + RULER_MENU); + swingUI.injectMenuAction( + ActionFactory.getInstance().createToggleAction(IPlugInPort.RULER_IN_SUBDIVISION_2, IPlugInPort.RULER_IN_SUBDIVISION_KEY, RULER_MENU, IPlugInPort.RULER_IN_SUBDIVISION_DEFAULT), + RULER_MENU); + swingUI.injectMenuAction( ActionFactory.getInstance().createConfigAction(plugInPort, "Show Rulers", IPlugInPort.SHOW_RULERS_KEY, true), CONFIG_MENU); - swingUI.injectSubmenu(SNAP_MENU, IconLoader.GraphEdgeDirected.getIcon(), CONFIG_MENU); - swingUI.injectMenuAction( - ActionFactory.getInstance().createConfigAction(plugInPort, "Show Grid", IPlugInPort.SHOW_GRID_KEY, true), - CONFIG_MENU); + + swingUI.injectSubmenu(SNAP_MENU, IconLoader.GraphEdgeDirected.getIcon(), CONFIG_MENU); swingUI.injectMenuAction( ActionFactory.getInstance().createToggleAction(IPlugInPort.SNAP_TO_NONE, IPlugInPort.SNAP_TO_KEY, SNAP_MENU, IPlugInPort.SNAP_TO_DEFAULT), SNAP_MENU); @@ -113,6 +121,11 @@ public class ConfigPlugin implements IPlugIn { swingUI.injectMenuAction( ActionFactory.getInstance().createToggleAction(IPlugInPort.SNAP_TO_COMPONENTS, IPlugInPort.SNAP_TO_KEY, SNAP_MENU, IPlugInPort.SNAP_TO_DEFAULT), SNAP_MENU); + + swingUI.injectMenuAction( + ActionFactory.getInstance().createConfigAction(plugInPort, "Show Grid", IPlugInPort.SHOW_GRID_KEY, true), + CONFIG_MENU); + swingUI.injectMenuAction( ActionFactory.getInstance() .createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU);