mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-12-26 21:30:09 +00:00
colour quirks
This commit is contained in:
parent
98a5d273d1
commit
d0ab7b9a45
@ -11,16 +11,25 @@ import com.bytezone.diskbrowser.HexFormatter;
|
|||||||
|
|
||||||
public class HiResImage extends AbstractFile
|
public class HiResImage extends AbstractFile
|
||||||
{
|
{
|
||||||
private static final int[][] colours = { { 0x000000, 0xBB66FF, 0x00FF00, 0xFFFFFF },
|
private static final int WHITE = 0xFFFFFF;
|
||||||
{ 0x000000, 0x0000FF, 0xFF0000, 0xFFFFFF } };
|
private static final int BLACK = 0x000000;
|
||||||
|
private static final int RED = 0xFF0000;
|
||||||
|
private static final int GREEN = 0x00FF00;
|
||||||
|
private static final int BLUE = 0x0000FF;
|
||||||
|
private static final int VIOLET = 0xBB66FF;
|
||||||
|
private static final int[][] colours = { { VIOLET, GREEN }, { BLUE, RED } };
|
||||||
|
|
||||||
int fileType;
|
private static int[] line = new int[280];
|
||||||
int auxType;
|
|
||||||
byte[] unpackedBuffer;
|
private int fileType;
|
||||||
|
private int auxType;
|
||||||
|
private byte[] unpackedBuffer;
|
||||||
|
private static boolean colourQuirks;
|
||||||
|
|
||||||
public HiResImage (String name, byte[] buffer)
|
public HiResImage (String name, byte[] buffer)
|
||||||
{
|
{
|
||||||
super (name, buffer);
|
super (name, buffer);
|
||||||
|
|
||||||
if (name.equals ("FLY LOGO") || name.equals ("BIGBAT.PAC"))
|
if (name.equals ("FLY LOGO") || name.equals ("BIGBAT.PAC"))
|
||||||
{
|
{
|
||||||
this.buffer = unscrunch (buffer);
|
this.buffer = unscrunch (buffer);
|
||||||
@ -50,6 +59,20 @@ public class HiResImage extends AbstractFile
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setDefaultColourQuirks (boolean value)
|
||||||
|
{
|
||||||
|
colourQuirks = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColourQuirks (boolean value)
|
||||||
|
{
|
||||||
|
if (colourQuirks == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
colourQuirks = value;
|
||||||
|
drawColour (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
private void drawMonochrome (byte[] buffer)
|
private void drawMonochrome (byte[] buffer)
|
||||||
{
|
{
|
||||||
int rows = buffer.length <= 8192 ? 192 : 384;
|
int rows = buffer.length <= 8192 ? 192 : 384;
|
||||||
@ -91,74 +114,6 @@ public class HiResImage extends AbstractFile
|
|||||||
image = new BufferedImage (280, rows, BufferedImage.TYPE_INT_RGB);
|
image = new BufferedImage (280, rows, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
DataBuffer db = image.getRaster ().getDataBuffer ();
|
DataBuffer db = image.getRaster ().getDataBuffer ();
|
||||||
int[][] colours = { { 0xBB66FF, 0x00FF00 }, { 0x0000FF, 0xFF0000 } };
|
|
||||||
|
|
||||||
int element = 0;
|
|
||||||
|
|
||||||
int[] line = new int[280];
|
|
||||||
int linePtr = 0;
|
|
||||||
|
|
||||||
for (int z = 0; z < rows / 192; z++)
|
|
||||||
{
|
|
||||||
int zz = z * 0x2000;
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
int ii = zz + i * 0x28;
|
|
||||||
for (int j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
int jj = ii + j * 0x80;
|
|
||||||
for (int k = 0; k < 8; k++)
|
|
||||||
{
|
|
||||||
int base = jj + k * 0x400;
|
|
||||||
int max = Math.min (base + 40, buffer.length);
|
|
||||||
|
|
||||||
for (int ptr = base; ptr < max; ptr++)
|
|
||||||
{
|
|
||||||
int colourBit = (buffer[ptr] & 0x80) >> 7;
|
|
||||||
int value = buffer[ptr] & 0x7F;
|
|
||||||
|
|
||||||
for (int px = 0; px < 7; px++)
|
|
||||||
{
|
|
||||||
int val = (value >> px) & 0x01;
|
|
||||||
int column = (ptr + px) % 2;
|
|
||||||
line[linePtr++] = val == 0 ? 0 : colours[colourBit][column];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert ALL consecutive ON pixels to white
|
|
||||||
for (int x = 0; x < line.length - 1; x++)
|
|
||||||
if (line[x] != 0 && line[x + 1] != 0)
|
|
||||||
line[x] = line[x + 1] = 0xFFFFFF;
|
|
||||||
|
|
||||||
// convert single coloured pixels to double - this can be ugly
|
|
||||||
if (false)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < line.length - 1; x += 2)
|
|
||||||
if (line[x] != 0 && line[x] != 0xFFFFFF && line[x + 1] == 0)
|
|
||||||
line[x + 1] = line[x];
|
|
||||||
else if (line[x] == 0 && line[x + 1] != 0 && line[x + 1] != 0xFFFFFF)
|
|
||||||
line[x] = line[x + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int pixel : line)
|
|
||||||
db.setElem (element++, pixel);
|
|
||||||
linePtr = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawSolidColour (byte[] buffer)
|
|
||||||
{
|
|
||||||
int rows = buffer.length <= 8192 ? 192 : 384;
|
|
||||||
image = new BufferedImage (280, rows, BufferedImage.TYPE_INT_RGB);
|
|
||||||
|
|
||||||
DataBuffer db = image.getRaster ().getDataBuffer ();
|
|
||||||
int[][] colours = { { 0x000000, 0xBB66FF, 0x00FF00, 0xFFFFFF },
|
|
||||||
{ 0x000000, 0x0000FF, 0xFF0000, 0xFFFFFF } };
|
|
||||||
|
|
||||||
int element = 0;
|
int element = 0;
|
||||||
|
|
||||||
for (int z = 0; z < rows / 192; z++)
|
for (int z = 0; z < rows / 192; z++)
|
||||||
@ -167,35 +122,71 @@ public class HiResImage extends AbstractFile
|
|||||||
for (int k = 0; k < 8; k++)
|
for (int k = 0; k < 8; k++)
|
||||||
{
|
{
|
||||||
int base = i * 0x28 + j * 0x80 + k * 0x400 + z * 0x2000;
|
int base = i * 0x28 + j * 0x80 + k * 0x400 + z * 0x2000;
|
||||||
int max = Math.min (base + 40, buffer.length);
|
element = drawLine (db, element, base);
|
||||||
|
|
||||||
for (int ptr = base; ptr < max; ptr += 2)
|
|
||||||
{
|
|
||||||
int colourBit1 = (buffer[ptr] & 0x80) >> 7;
|
|
||||||
int colourBit2 = (buffer[ptr + 1] & 0x80) >> 7;
|
|
||||||
|
|
||||||
int value = ((buffer[ptr + 1] & 0x7F) << 7) + (buffer[ptr] & 0x7F);
|
|
||||||
|
|
||||||
for (int px = 0; px < 7; px++)
|
|
||||||
{
|
|
||||||
int val = value & 0x03;
|
|
||||||
value >>= 2;
|
|
||||||
int colour = 0;
|
|
||||||
|
|
||||||
if (px <= 2)
|
|
||||||
colour = colours[colourBit1][val];
|
|
||||||
else if (px == 3)
|
|
||||||
colour = colours[val >= 2 ? colourBit1 : colourBit2][val];
|
|
||||||
else
|
|
||||||
colour = colours[colourBit2][val];
|
|
||||||
|
|
||||||
db.setElem (element++, colour);
|
|
||||||
db.setElem (element++, colour);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int drawLine (DataBuffer db, int element, int base)
|
||||||
|
{
|
||||||
|
int max = Math.min (base + 40, buffer.length);
|
||||||
|
int linePtr = 0;
|
||||||
|
|
||||||
|
for (int ptr = base; ptr < max; ptr++)
|
||||||
|
{
|
||||||
|
int colourBit = (buffer[ptr] & 0x80) >> 7;
|
||||||
|
int value = buffer[ptr] & 0x7F;
|
||||||
|
|
||||||
|
for (int px = 0; px < 7; px++)
|
||||||
|
{
|
||||||
|
int val = (value >> px) & 0x01;
|
||||||
|
int column = (ptr + px) % 2;
|
||||||
|
line[linePtr++] = val == 0 ? 0 : colours[colourBit][column];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert ALL consecutive ON pixels to white
|
||||||
|
for (int x = 0; x < line.length - 1; x++)
|
||||||
|
if (line[x] != BLACK && line[x + 1] != BLACK)
|
||||||
|
line[x] = line[x + 1] = WHITE;
|
||||||
|
|
||||||
|
// convert WOZ quirks
|
||||||
|
if (colourQuirks)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < line.length - 4; x++)
|
||||||
|
{
|
||||||
|
if (line[x + 1] == BLACK)
|
||||||
|
{
|
||||||
|
// V-B-V-B -> V-V-V-B
|
||||||
|
if (line[x + 3] == BLACK && line[x] == line[x + 2] && line[x] != BLACK
|
||||||
|
&& line[x] != WHITE)
|
||||||
|
line[x + 1] = line[x];
|
||||||
|
|
||||||
|
// V-B-W-W -> V-V-W-W
|
||||||
|
if (line[x] != BLACK && line[x] != WHITE && line[x + 3] == WHITE
|
||||||
|
&& line[x + 2] == WHITE)
|
||||||
|
line[x + 1] = line[x];
|
||||||
|
}
|
||||||
|
if (line[x + 2] == BLACK)
|
||||||
|
{
|
||||||
|
// B-G-B-G -> B-G-G-G
|
||||||
|
if (line[x] == BLACK && line[x + 1] == line[x + 3] && line[x + 1] != WHITE
|
||||||
|
&& line[x + 1] != BLACK)
|
||||||
|
line[x + 2] = line[x + 1];
|
||||||
|
|
||||||
|
// W-W-B-G -> W-W-G-G
|
||||||
|
if (line[x] == WHITE && line[x + 1] == WHITE && line[x + 3] != BLACK
|
||||||
|
&& line[x + 3] != WHITE)
|
||||||
|
line[x + 2] = line[x + 3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int pixel : line)
|
||||||
|
db.setElem (element++, pixel);
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
private void makeScreen2 (byte[] buffer)
|
private void makeScreen2 (byte[] buffer)
|
||||||
{
|
{
|
||||||
// System.out.println (HexFormatter.format (buffer, 32000, 640));
|
// System.out.println (HexFormatter.format (buffer, 32000, 640));
|
||||||
|
29
src/com/bytezone/diskbrowser/gui/ColourQuirksAction.java
Normal file
29
src/com/bytezone/diskbrowser/gui/ColourQuirksAction.java
Normal file
@ -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 ColourQuirksAction extends AbstractAction
|
||||||
|
{
|
||||||
|
private final DataPanel owner;
|
||||||
|
|
||||||
|
public ColourQuirksAction (DataPanel owner)
|
||||||
|
{
|
||||||
|
super ("Colour quirks");
|
||||||
|
putValue (Action.SHORT_DESCRIPTION, "Display pixels like a TV screen");
|
||||||
|
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("alt Q"));
|
||||||
|
putValue (Action.MNEMONIC_KEY, KeyEvent.VK_Q);
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed (ActionEvent e)
|
||||||
|
{
|
||||||
|
owner.setColourQuirks (((JMenuItem) e.getSource ()).isSelected ());
|
||||||
|
}
|
||||||
|
}
|
@ -1,28 +1,18 @@
|
|||||||
package com.bytezone.diskbrowser.gui;
|
package com.bytezone.diskbrowser.gui;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.*;
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Insets;
|
|
||||||
import java.awt.RenderingHints;
|
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.prefs.Preferences;
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.*;
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTabbedPane;
|
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.ScrollPaneConstants;
|
|
||||||
import javax.swing.SwingConstants;
|
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import com.bytezone.common.FontAction.FontChangeEvent;
|
import com.bytezone.common.FontAction.FontChangeEvent;
|
||||||
import com.bytezone.common.FontAction.FontChangeListener;
|
import com.bytezone.common.FontAction.FontChangeListener;
|
||||||
|
import com.bytezone.diskbrowser.applefile.HiResImage;
|
||||||
import com.bytezone.diskbrowser.disk.DiskAddress;
|
import com.bytezone.diskbrowser.disk.DiskAddress;
|
||||||
import com.bytezone.diskbrowser.disk.SectorList;
|
import com.bytezone.diskbrowser.disk.SectorList;
|
||||||
|
|
||||||
@ -41,7 +31,7 @@ class DataPanel extends JTabbedPane
|
|||||||
JScrollPane imagePane;
|
JScrollPane imagePane;
|
||||||
|
|
||||||
JTextArea formattedText;
|
JTextArea formattedText;
|
||||||
ImagePanel imagePanel;// internal class
|
ImagePanel imagePanel; // internal class
|
||||||
|
|
||||||
boolean imageVisible = false;
|
boolean imageVisible = false;
|
||||||
|
|
||||||
@ -57,10 +47,11 @@ class DataPanel extends JTabbedPane
|
|||||||
public DataPanel (MenuHandler mh, Preferences prefs)
|
public DataPanel (MenuHandler mh, Preferences prefs)
|
||||||
{
|
{
|
||||||
// String dataFontName =
|
// String dataFontName =
|
||||||
// prefs.get (PreferencesDialog.prefsDataFont, PreferencesDialog.defaultFontName);
|
// prefs.get (PreferencesDialog.prefsDataFont, PreferencesDialog.defaultFontName);
|
||||||
// System.out.println (dataFontName);
|
// System.out.println (dataFontName);
|
||||||
// int dataFontSize =
|
// int dataFontSize =
|
||||||
// prefs.getInt (PreferencesDialog.prefsDataFontSize, PreferencesDialog.defaultFontSize);
|
// prefs.getInt (PreferencesDialog.prefsDataFontSize,
|
||||||
|
// PreferencesDialog.defaultFontSize);
|
||||||
// font = new Font (dataFontName, Font.PLAIN, dataFontSize);
|
// font = new Font (dataFontName, Font.PLAIN, dataFontSize);
|
||||||
|
|
||||||
this.menuHandler = mh;
|
this.menuHandler = mh;
|
||||||
@ -133,6 +124,17 @@ class DataPanel extends JTabbedPane
|
|||||||
});
|
});
|
||||||
|
|
||||||
mh.lineWrapItem.setAction (new LineWrapAction (formattedText));
|
mh.lineWrapItem.setAction (new LineWrapAction (formattedText));
|
||||||
|
mh.colourQuirksItem.setAction (new ColourQuirksAction (this));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColourQuirks (boolean value)
|
||||||
|
{
|
||||||
|
if (currentDataSource instanceof HiResImage)
|
||||||
|
{
|
||||||
|
HiResImage image = (HiResImage) currentDataSource;
|
||||||
|
image.setColourQuirks (value);
|
||||||
|
imagePanel.setImage (image.getImage ());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTabsFont (Font font)
|
private void setTabsFont (Font font)
|
||||||
@ -158,7 +160,7 @@ class DataPanel extends JTabbedPane
|
|||||||
JScrollPane outputScrollPane =
|
JScrollPane outputScrollPane =
|
||||||
new JScrollPane (outputPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
|
new JScrollPane (outputPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
|
||||||
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
outputScrollPane.setBorder (null);// remove the ugly default border
|
outputScrollPane.setBorder (null); // remove the ugly default border
|
||||||
add (outputScrollPane, tabName);
|
add (outputScrollPane, tabName);
|
||||||
return outputScrollPane;
|
return outputScrollPane;
|
||||||
}
|
}
|
||||||
@ -171,7 +173,7 @@ class DataPanel extends JTabbedPane
|
|||||||
formattedText.setText ("");
|
formattedText.setText ("");
|
||||||
hexText.setText ("");
|
hexText.setText ("");
|
||||||
disassemblyText.setText ("");
|
disassemblyText.setText ("");
|
||||||
checkImage ();
|
removeImage ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,9 +208,7 @@ class DataPanel extends JTabbedPane
|
|||||||
|
|
||||||
BufferedImage image = dataSource.getImage ();
|
BufferedImage image = dataSource.getImage ();
|
||||||
if (image == null)
|
if (image == null)
|
||||||
{
|
removeImage ();
|
||||||
checkImage ();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
imagePanel.setImage (image);
|
imagePanel.setImage (image);
|
||||||
@ -224,7 +224,7 @@ class DataPanel extends JTabbedPane
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkImage ()
|
private void removeImage ()
|
||||||
{
|
{
|
||||||
if (imageVisible)
|
if (imageVisible)
|
||||||
{
|
{
|
||||||
@ -326,7 +326,8 @@ class DataPanel extends JTabbedPane
|
|||||||
// if (evt.getKey ().equals (PreferencesDialog.prefsDataFont))
|
// if (evt.getKey ().equals (PreferencesDialog.prefsDataFont))
|
||||||
// font = new Font (evt.getNewValue (), Font.PLAIN, font.getSize ());
|
// font = new Font (evt.getNewValue (), Font.PLAIN, font.getSize ());
|
||||||
// if (evt.getKey ().equals (PreferencesDialog.prefsDataFontSize))
|
// if (evt.getKey ().equals (PreferencesDialog.prefsDataFontSize))
|
||||||
// font = new Font (font.getFontName (), Font.PLAIN, Integer.parseInt (evt.getNewValue ()));
|
// font = new Font (font.getFontName (),
|
||||||
|
// Font.PLAIN, Integer.parseInt (evt.getNewValue ()));
|
||||||
// setTabsFont (font);
|
// setTabsFont (font);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -47,18 +47,21 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||||||
|
|
||||||
// create and add the right-hand disk layout panel
|
// create and add the right-hand disk layout panel
|
||||||
DiskLayoutPanel diskLayoutPanel = new DiskLayoutPanel ();
|
DiskLayoutPanel diskLayoutPanel = new DiskLayoutPanel ();
|
||||||
JPanel layoutBorderPanel = addPanel (diskLayoutPanel, "Disk layout", BorderLayout.EAST);
|
JPanel layoutBorderPanel =
|
||||||
|
addPanel (diskLayoutPanel, "Disk layout", BorderLayout.EAST);
|
||||||
|
|
||||||
// create actions
|
// create actions
|
||||||
RootDirectoryAction rootDirectoryAction = new RootDirectoryAction (null, catalogPanel);
|
RootDirectoryAction rootDirectoryAction =
|
||||||
|
new RootDirectoryAction (null, catalogPanel);
|
||||||
RefreshTreeAction refreshTreeAction = new RefreshTreeAction (catalogPanel);
|
RefreshTreeAction refreshTreeAction = new RefreshTreeAction (catalogPanel);
|
||||||
// PreferencesAction preferencesAction = new PreferencesAction (this, prefs);
|
// PreferencesAction preferencesAction = new PreferencesAction (this, prefs);
|
||||||
AbstractAction print = new PrintAction (dataPanel);
|
AbstractAction print = new PrintAction (dataPanel);
|
||||||
AboutAction aboutAction = new AboutAction ();
|
AboutAction aboutAction = new AboutAction ();
|
||||||
HideCatalogAction hideCatalogAction = new HideCatalogAction (this, catalogBorderPanel);
|
HideCatalogAction hideCatalogAction =
|
||||||
|
new HideCatalogAction (this, catalogBorderPanel);
|
||||||
HideLayoutAction hideLayoutAction = new HideLayoutAction (this, layoutBorderPanel);
|
HideLayoutAction hideLayoutAction = new HideLayoutAction (this, layoutBorderPanel);
|
||||||
ShowFreeSectorsAction showFreeAction =
|
ShowFreeSectorsAction showFreeAction =
|
||||||
new ShowFreeSectorsAction (menuHandler, diskLayoutPanel);
|
new ShowFreeSectorsAction (menuHandler, diskLayoutPanel);
|
||||||
DuplicateAction duplicateAction = new DuplicateAction ();
|
DuplicateAction duplicateAction = new DuplicateAction ();
|
||||||
CloseTabAction closeTabAction = new CloseTabAction (catalogPanel);
|
CloseTabAction closeTabAction = new CloseTabAction (catalogPanel);
|
||||||
|
|
||||||
@ -149,8 +152,8 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
|||||||
@Override
|
@Override
|
||||||
public void diskSelected (DiskSelectedEvent e)
|
public void diskSelected (DiskSelectedEvent e)
|
||||||
{
|
{
|
||||||
setTitle (windowTitle + e.getFormattedDisk () == null ? "" : e.getFormattedDisk ()
|
setTitle (windowTitle + e.getFormattedDisk () == null ? ""
|
||||||
.getName ());
|
: e.getFormattedDisk ().getName ());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main (String[] args)
|
public static void main (String[] args)
|
||||||
|
@ -7,17 +7,23 @@ import java.util.prefs.Preferences;
|
|||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
|
||||||
import com.bytezone.common.*;
|
import com.bytezone.common.EnvironmentAction;
|
||||||
|
import com.bytezone.common.FontAction;
|
||||||
|
import com.bytezone.common.OSXAdapter;
|
||||||
|
import com.bytezone.common.Platform;
|
||||||
import com.bytezone.common.QuitAction.QuitListener;
|
import com.bytezone.common.QuitAction.QuitListener;
|
||||||
|
import com.bytezone.diskbrowser.applefile.HiResImage;
|
||||||
import com.bytezone.diskbrowser.disk.DataDisk;
|
import com.bytezone.diskbrowser.disk.DataDisk;
|
||||||
import com.bytezone.diskbrowser.disk.FormattedDisk;
|
import com.bytezone.diskbrowser.disk.FormattedDisk;
|
||||||
|
|
||||||
public class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitListener
|
public class MenuHandler
|
||||||
|
implements DiskSelectionListener, FileSelectionListener, QuitListener
|
||||||
{
|
{
|
||||||
private static final String PREFS_LINE_WRAP = "line wrap";
|
private static final String PREFS_LINE_WRAP = "line wrap";
|
||||||
private static final String PREFS_SHOW_CATALOG = "show catalog";
|
private static final String PREFS_SHOW_CATALOG = "show catalog";
|
||||||
private static final String PREFS_SHOW_LAYOUT = "show layout";
|
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_SHOW_FREE_SECTORS = "show free sectors";
|
||||||
|
private static final String PREFS_COLOUR_QUIRKS = "colour quirks";
|
||||||
|
|
||||||
FormattedDisk currentDisk;
|
FormattedDisk currentDisk;
|
||||||
|
|
||||||
@ -40,8 +46,8 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
FontAction fontAction;
|
FontAction fontAction;
|
||||||
|
|
||||||
// Format menu items
|
// Format menu items
|
||||||
JMenuItem lineWrapItem = new JCheckBoxMenuItem ("Line wrap");
|
final JMenuItem lineWrapItem = new JCheckBoxMenuItem ("Line wrap");
|
||||||
JMenuItem showLayoutItem = new JCheckBoxMenuItem ("Show layout panel");
|
final JMenuItem showLayoutItem = new JCheckBoxMenuItem ("Show layout panel");
|
||||||
JMenuItem showCatalogItem = new JCheckBoxMenuItem ("Show catalog panel");
|
JMenuItem showCatalogItem = new JCheckBoxMenuItem ("Show catalog panel");
|
||||||
JMenuItem showFreeSectorsItem = new JCheckBoxMenuItem ("Show free sectors");
|
JMenuItem showFreeSectorsItem = new JCheckBoxMenuItem ("Show free sectors");
|
||||||
|
|
||||||
@ -52,6 +58,8 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
JMenuItem interleave2Item = new JRadioButtonMenuItem (new InterleaveAction (2));
|
JMenuItem interleave2Item = new JRadioButtonMenuItem (new InterleaveAction (2));
|
||||||
JMenuItem interleave3Item = new JRadioButtonMenuItem (new InterleaveAction (3));
|
JMenuItem interleave3Item = new JRadioButtonMenuItem (new InterleaveAction (3));
|
||||||
|
|
||||||
|
JMenuItem colourQuirksItem = new JCheckBoxMenuItem ("Colour quirks");
|
||||||
|
|
||||||
public MenuHandler (Preferences prefs)
|
public MenuHandler (Preferences prefs)
|
||||||
{
|
{
|
||||||
menuBar.add (fileMenu);
|
menuBar.add (fileMenu);
|
||||||
@ -73,9 +81,9 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
JMenuItem fontItem = new JMenuItem (fontAction);
|
JMenuItem fontItem = new JMenuItem (fontAction);
|
||||||
fileMenu.add (fontItem);
|
fileMenu.add (fontItem);
|
||||||
fontAction.setSampleText ("120 FOR Z = 14 TO 24:\n" + " VTAB 5:\n" + " HTAB Z:\n"
|
fontAction.setSampleText ("120 FOR Z = 14 TO 24:\n" + " VTAB 5:\n" + " HTAB Z:\n"
|
||||||
+ " PRINT AB$:\n" + " FOR TI = 1 TO 50:\n" + " NEXT :\n" + " POKE 0,Z + 40:\n"
|
+ " PRINT AB$:\n" + " FOR TI = 1 TO 50:\n" + " NEXT :\n" + " POKE 0,Z + 40:\n"
|
||||||
+ " POKE 1,9:\n" + " CALL MU:\n" + " VTAB 5:\n" + " HTAB Z:\n"
|
+ " POKE 1,9:\n" + " CALL MU:\n" + " VTAB 5:\n" + " HTAB Z:\n"
|
||||||
+ " PRINT SPC(12):\n" + "NEXT :\n" + "VTAB 5:\n" + "HTAB 24:\n" + "PRINT AB$\n");
|
+ " PRINT SPC(12):\n" + "NEXT :\n" + "VTAB 5:\n" + "HTAB 24:\n" + "PRINT AB$\n");
|
||||||
|
|
||||||
if (false)
|
if (false)
|
||||||
{
|
{
|
||||||
@ -97,6 +105,8 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
formatMenu.addSeparator ();
|
formatMenu.addSeparator ();
|
||||||
formatMenu.add (sector256Item);
|
formatMenu.add (sector256Item);
|
||||||
formatMenu.add (sector512Item);
|
formatMenu.add (sector512Item);
|
||||||
|
formatMenu.addSeparator ();
|
||||||
|
formatMenu.add (colourQuirksItem);
|
||||||
|
|
||||||
helpMenu.add (new JMenuItem (new EnvironmentAction ()));
|
helpMenu.add (new JMenuItem (new EnvironmentAction ()));
|
||||||
|
|
||||||
@ -105,10 +115,6 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
sector512Item.setActionCommand ("512");
|
sector512Item.setActionCommand ("512");
|
||||||
sector512Item.setAccelerator (KeyStroke.getKeyStroke ("alt 5"));
|
sector512Item.setAccelerator (KeyStroke.getKeyStroke ("alt 5"));
|
||||||
|
|
||||||
lineWrapItem.setAccelerator (KeyStroke.getKeyStroke ("alt W"));
|
|
||||||
printItem.setAccelerator (KeyStroke.getKeyStroke ("control P"));
|
|
||||||
|
|
||||||
// ButtonGroup dosGroup = new ButtonGroup ();
|
|
||||||
ButtonGroup sectorGroup = new ButtonGroup ();
|
ButtonGroup sectorGroup = new ButtonGroup ();
|
||||||
ButtonGroup interleaveGroup = new ButtonGroup ();
|
ButtonGroup interleaveGroup = new ButtonGroup ();
|
||||||
|
|
||||||
@ -126,6 +132,8 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
||||||
showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true));
|
showCatalogItem.setSelected (prefs.getBoolean (PREFS_SHOW_CATALOG, true));
|
||||||
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
showFreeSectorsItem.setSelected (prefs.getBoolean (PREFS_SHOW_FREE_SECTORS, false));
|
||||||
|
colourQuirksItem.setSelected (prefs.getBoolean (PREFS_COLOUR_QUIRKS, false));
|
||||||
|
HiResImage.setDefaultColourQuirks (colourQuirksItem.isSelected ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void addHelpMenuAction (Action action, String functionName)
|
void addHelpMenuAction (Action action, String functionName)
|
||||||
@ -135,14 +143,11 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (functionName.equals ("about"))
|
if (functionName.equals ("about"))
|
||||||
OSXAdapter.setAboutHandler (action,
|
OSXAdapter.setAboutHandler (action, action.getClass ()
|
||||||
action.getClass ().getDeclaredMethod (functionName,
|
.getDeclaredMethod (functionName, (Class[]) null));
|
||||||
(Class[]) null));
|
|
||||||
else if (functionName.equals ("prefs"))
|
else if (functionName.equals ("prefs"))
|
||||||
OSXAdapter.setPreferencesHandler (action,
|
OSXAdapter.setPreferencesHandler (action, action.getClass ()
|
||||||
action.getClass ()
|
.getDeclaredMethod (functionName, (Class[]) null));
|
||||||
.getDeclaredMethod (functionName,
|
|
||||||
(Class[]) null));
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -182,6 +187,7 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
prefs.putBoolean (PREFS_SHOW_LAYOUT, showLayoutItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_LAYOUT, showLayoutItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_CATALOG, showCatalogItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_CATALOG, showCatalogItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_FREE_SECTORS, showFreeSectorsItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_FREE_SECTORS, showFreeSectorsItem.isSelected ());
|
||||||
|
prefs.putBoolean (PREFS_COLOUR_QUIRKS, colourQuirksItem.isSelected ());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -247,7 +253,12 @@ public class MenuHandler implements DiskSelectionListener, FileSelectionListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void restore (Preferences preferences)
|
public void restore (Preferences prefs)
|
||||||
{
|
{
|
||||||
|
// lineWrapItem.setSelected (prefs.getBoolean (PREFS_LINE_WRAP, true));
|
||||||
|
// showLayoutItem.setSelected (prefs.getBoolean (PREFS_SHOW_LAYOUT, true));
|
||||||
|
// 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));
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user