From 0b304d52c6a4d383f424660a749bb8651f4db37f Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Mon, 22 Feb 2016 21:58:15 +1100 Subject: [PATCH] allow monochrome toggle --- .../diskbrowser/applefile/HiResImage.java | 27 +++++++++++++---- .../bytezone/diskbrowser/gui/DataPanel.java | 11 +++++++ .../bytezone/diskbrowser/gui/MenuHandler.java | 7 +++++ .../diskbrowser/gui/MonochromeAction.java | 29 +++++++++++++++++++ 4 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 src/com/bytezone/diskbrowser/gui/MonochromeAction.java diff --git a/src/com/bytezone/diskbrowser/applefile/HiResImage.java b/src/com/bytezone/diskbrowser/applefile/HiResImage.java index 2b34f08..283894d 100755 --- a/src/com/bytezone/diskbrowser/applefile/HiResImage.java +++ b/src/com/bytezone/diskbrowser/applefile/HiResImage.java @@ -21,7 +21,7 @@ public class HiResImage extends AbstractFile private static boolean colourQuirks; private static boolean matchColourBits = true; - private static boolean drawColour = true; + private static boolean monochrome; private final int[] line = new int[280]; private final int[] colourBits = new int[280]; @@ -39,10 +39,10 @@ public class HiResImage extends AbstractFile if (isGif (buffer)) makeGif (); - else if (drawColour) - drawColour (buffer); - else + else if (monochrome) drawMonochrome (buffer); + else + drawColour (buffer); } public HiResImage (String name, byte[] buffer, int fileType, int auxType) @@ -66,15 +66,32 @@ public class HiResImage extends AbstractFile colourQuirks = value; } + public static void setDefaultMonochrome (boolean value) + { + monochrome = value; + } + public void setColourQuirks (boolean value) { - if (colourQuirks == value || !drawColour) + if (colourQuirks == value || monochrome) return; colourQuirks = value; drawColour (buffer); } + public void setMonochrome (boolean value) + { + if (monochrome == value) + return; + + monochrome = value; + if (monochrome) + drawMonochrome (buffer); + else + drawColour (buffer); + } + private void drawMonochrome (byte[] buffer) { int rows = buffer.length <= 8192 ? 192 : 384; diff --git a/src/com/bytezone/diskbrowser/gui/DataPanel.java b/src/com/bytezone/diskbrowser/gui/DataPanel.java index 193edee..6236af9 100755 --- a/src/com/bytezone/diskbrowser/gui/DataPanel.java +++ b/src/com/bytezone/diskbrowser/gui/DataPanel.java @@ -125,6 +125,7 @@ class DataPanel extends JTabbedPane mh.lineWrapItem.setAction (new LineWrapAction (formattedText)); mh.colourQuirksItem.setAction (new ColourQuirksAction (this)); + mh.monochromeItem.setAction (new MonochromeAction (this)); } public void setColourQuirks (boolean value) @@ -137,6 +138,16 @@ class DataPanel extends JTabbedPane } } + public void setMonochrome (boolean value) + { + if (currentDataSource instanceof HiResImage) + { + HiResImage image = (HiResImage) currentDataSource; + image.setMonochrome (value); + imagePanel.setImage (image.getImage ()); + } + } + private void setTabsFont (Font font) { formattedText.setFont (font); diff --git a/src/com/bytezone/diskbrowser/gui/MenuHandler.java b/src/com/bytezone/diskbrowser/gui/MenuHandler.java index 29b4cec..4547583 100755 --- a/src/com/bytezone/diskbrowser/gui/MenuHandler.java +++ b/src/com/bytezone/diskbrowser/gui/MenuHandler.java @@ -24,6 +24,7 @@ public class MenuHandler private static final String PREFS_SHOW_LAYOUT = "show layout"; private static final String PREFS_SHOW_FREE_SECTORS = "show free sectors"; private static final String PREFS_COLOUR_QUIRKS = "colour quirks"; + private static final String PREFS_MONOCHROME = "monochrome"; FormattedDisk currentDisk; @@ -59,6 +60,7 @@ public class MenuHandler JMenuItem interleave3Item = new JRadioButtonMenuItem (new InterleaveAction (3)); JMenuItem colourQuirksItem = new JCheckBoxMenuItem ("Colour quirks"); + JMenuItem monochromeItem = new JCheckBoxMenuItem ("Monochrome"); public MenuHandler (Preferences prefs) { @@ -107,6 +109,7 @@ public class MenuHandler formatMenu.add (sector512Item); formatMenu.addSeparator (); formatMenu.add (colourQuirksItem); + formatMenu.add (monochromeItem); helpMenu.add (new JMenuItem (new EnvironmentAction ())); @@ -133,7 +136,10 @@ public class MenuHandler showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true)); showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false)); colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false)); + monochromeItem.setSelected (prefs.getBoolean (PREFS_MONOCHROME, false)); + HiResImage.setDefaultColourQuirks (colourQuirksItem.isSelected ()); + HiResImage.setDefaultMonochrome (monochromeItem.isSelected ()); } void addHelpMenuAction (Action action, String functionName) @@ -188,6 +194,7 @@ public class MenuHandler prefs.putBoolean (PREFS_SHOW_CATALOG, showCatalogItem.isSelected ()); prefs.putBoolean (PREFS_SHOW_FREE_SECTORS, showFreeSectorsItem.isSelected ()); prefs.putBoolean (PREFS_COLOUR_QUIRKS, colourQuirksItem.isSelected ()); + prefs.putBoolean (PREFS_MONOCHROME, monochromeItem.isSelected ()); } @Override diff --git a/src/com/bytezone/diskbrowser/gui/MonochromeAction.java b/src/com/bytezone/diskbrowser/gui/MonochromeAction.java new file mode 100644 index 0000000..774e6af --- /dev/null +++ b/src/com/bytezone/diskbrowser/gui/MonochromeAction.java @@ -0,0 +1,29 @@ +package com.bytezone.diskbrowser.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; + +public class MonochromeAction extends AbstractAction +{ + private final DataPanel owner; + + public MonochromeAction (DataPanel owner) + { + super ("Monochrome"); + putValue (Action.SHORT_DESCRIPTION, "Display image in monochrome or color"); + putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("alt M")); + putValue (Action.MNEMONIC_KEY, KeyEvent.VK_M); + this.owner = owner; + } + + @Override + public void actionPerformed (ActionEvent e) + { + owner.setMonochrome (((JMenuItem) e.getSource ()).isSelected ()); + } +} \ No newline at end of file