mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-11-25 16:34:00 +00:00
extracted ImagePanel from DataPanel
This commit is contained in:
parent
63fc59accc
commit
9d706d62ef
@ -1,13 +1,7 @@
|
|||||||
package com.bytezone.diskbrowser.gui;
|
package com.bytezone.diskbrowser.gui;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.RenderingHints;
|
|
||||||
import java.awt.geom.AffineTransform;
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
@ -17,7 +11,6 @@ import java.util.List;
|
|||||||
import javax.swing.AbstractButton;
|
import javax.swing.AbstractButton;
|
||||||
import javax.swing.ButtonGroup;
|
import javax.swing.ButtonGroup;
|
||||||
import javax.swing.JCheckBoxMenuItem;
|
import javax.swing.JCheckBoxMenuItem;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
@ -50,7 +43,6 @@ public class DataPanel extends JTabbedPane
|
|||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
private static final int TEXT_WIDTH = 65;
|
private static final int TEXT_WIDTH = 65;
|
||||||
private static final int BACKGROUND = 245;
|
|
||||||
|
|
||||||
private final JTextArea formattedText;
|
private final JTextArea formattedText;
|
||||||
private final JTextArea hexText;
|
private final JTextArea hexText;
|
||||||
@ -77,6 +69,7 @@ public class DataPanel extends JTabbedPane
|
|||||||
DebuggingAction debuggingAction = new DebuggingAction ();
|
DebuggingAction debuggingAction = new DebuggingAction ();
|
||||||
MonochromeAction monochromeAction = new MonochromeAction ();
|
MonochromeAction monochromeAction = new MonochromeAction ();
|
||||||
ColourQuirksAction colourQuirksAction = new ColourQuirksAction ();
|
ColourQuirksAction colourQuirksAction = new ColourQuirksAction ();
|
||||||
|
LineWrapAction lineWrapAction = new LineWrapAction ();
|
||||||
|
|
||||||
enum TabType
|
enum TabType
|
||||||
{
|
{
|
||||||
@ -158,9 +151,8 @@ public class DataPanel extends JTabbedPane
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
LineWrapAction lineWrapAction = new LineWrapAction ();
|
|
||||||
menuHandler.lineWrapItem.setAction (lineWrapAction);
|
menuHandler.lineWrapItem.setAction (lineWrapAction);
|
||||||
lineWrapAction.addListener (formattedText);
|
lineWrapAction.addPropertyChangeListener (this);
|
||||||
|
|
||||||
colourQuirksAction.addPropertyChangeListener (this);
|
colourQuirksAction.addPropertyChangeListener (this);
|
||||||
menuHandler.colourQuirksItem.setAction (colourQuirksAction);
|
menuHandler.colourQuirksItem.setAction (colourQuirksAction);
|
||||||
@ -223,6 +215,8 @@ public class DataPanel extends JTabbedPane
|
|||||||
setMonochrome ((Boolean) evt.getNewValue ());
|
setMonochrome ((Boolean) evt.getNewValue ());
|
||||||
else if (evt.getSource () == colourQuirksAction)
|
else if (evt.getSource () == colourQuirksAction)
|
||||||
setColourQuirks ((Boolean) evt.getNewValue ());
|
setColourQuirks ((Boolean) evt.getNewValue ());
|
||||||
|
else if (evt.getSource () == lineWrapAction)
|
||||||
|
setLineWrap ((Boolean) evt.getNewValue ());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
@ -435,71 +429,6 @@ public class DataPanel extends JTabbedPane
|
|||||||
textArea.setCaretPosition (0);
|
textArea.setCaretPosition (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
|
||||||
private class ImagePanel extends JPanel
|
|
||||||
// ---------------------------------------------------------------------------------//
|
|
||||||
{
|
|
||||||
private BufferedImage image;
|
|
||||||
private double scale = 1;
|
|
||||||
private double userScale = .5;
|
|
||||||
|
|
||||||
public ImagePanel ()
|
|
||||||
{
|
|
||||||
this.setBackground (new Color (BACKGROUND, BACKGROUND, BACKGROUND));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setScale (double scale)
|
|
||||||
{
|
|
||||||
this.userScale = scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setImage (BufferedImage image)
|
|
||||||
{
|
|
||||||
this.image = image;
|
|
||||||
int width, height;
|
|
||||||
|
|
||||||
if (image != null)
|
|
||||||
{
|
|
||||||
Graphics2D g2 = image.createGraphics ();
|
|
||||||
g2.setRenderingHint (RenderingHints.KEY_ANTIALIASING,
|
|
||||||
RenderingHints.VALUE_ANTIALIAS_ON);
|
|
||||||
width = image.getWidth ();
|
|
||||||
height = image.getHeight ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
width = height = 0;
|
|
||||||
|
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
if (width < 400 && width > 0)
|
|
||||||
scale = (400 - 1) / width + 1;
|
|
||||||
else
|
|
||||||
scale = 1;
|
|
||||||
if (scale > 4)
|
|
||||||
scale = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
scale *= userScale;
|
|
||||||
|
|
||||||
setPreferredSize (new Dimension ((int) (width * scale), (int) (height * scale)));
|
|
||||||
repaint ();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void paintComponent (Graphics g)
|
|
||||||
{
|
|
||||||
super.paintComponent (g);
|
|
||||||
|
|
||||||
if (image != null)
|
|
||||||
{
|
|
||||||
Graphics2D g2 = ((Graphics2D) g);
|
|
||||||
g2.transform (AffineTransform.getScaleInstance (scale, scale));
|
|
||||||
g2.drawImage (image,
|
|
||||||
(int) ((getWidth () - image.getWidth () * scale) / 2 / scale), 4, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
@Override
|
@Override
|
||||||
public void diskSelected (DiskSelectedEvent event)
|
public void diskSelected (DiskSelectedEvent event)
|
||||||
|
86
src/com/bytezone/diskbrowser/gui/ImagePanel.java
Normal file
86
src/com/bytezone/diskbrowser/gui/ImagePanel.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
package com.bytezone.diskbrowser.gui;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.RenderingHints;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------//
|
||||||
|
public class ImagePanel extends JPanel
|
||||||
|
// -----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
private static final int BACKGROUND = 245;
|
||||||
|
|
||||||
|
private BufferedImage image;
|
||||||
|
private double scale = 1;
|
||||||
|
private double userScale = .5;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
public ImagePanel ()
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
this.setBackground (new Color (BACKGROUND, BACKGROUND, BACKGROUND));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
void setScale (double scale)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
this.userScale = scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
void setImage (BufferedImage image)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
this.image = image;
|
||||||
|
int width, height;
|
||||||
|
|
||||||
|
if (image != null)
|
||||||
|
{
|
||||||
|
Graphics2D g2 = image.createGraphics ();
|
||||||
|
g2.setRenderingHint (RenderingHints.KEY_ANTIALIASING,
|
||||||
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
width = image.getWidth ();
|
||||||
|
height = image.getHeight ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
width = height = 0;
|
||||||
|
|
||||||
|
if (true)
|
||||||
|
{
|
||||||
|
if (width < 400 && width > 0)
|
||||||
|
scale = (400 - 1) / width + 1;
|
||||||
|
else
|
||||||
|
scale = 1;
|
||||||
|
if (scale > 4)
|
||||||
|
scale = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
scale *= userScale;
|
||||||
|
|
||||||
|
setPreferredSize (new Dimension ((int) (width * scale), (int) (height * scale)));
|
||||||
|
repaint ();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
@Override
|
||||||
|
public void paintComponent (Graphics g)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
super.paintComponent (g);
|
||||||
|
|
||||||
|
if (image != null)
|
||||||
|
{
|
||||||
|
Graphics2D g2 = ((Graphics2D) g);
|
||||||
|
g2.transform (AffineTransform.getScaleInstance (scale, scale));
|
||||||
|
g2.drawImage (image, (int) ((getWidth () - image.getWidth () * scale) / 2 / scale),
|
||||||
|
4, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,45 +2,33 @@ package com.bytezone.diskbrowser.gui;
|
|||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
import javax.swing.JTextArea;
|
|
||||||
import javax.swing.KeyStroke;
|
import javax.swing.KeyStroke;
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
class LineWrapAction extends AbstractAction
|
class LineWrapAction extends AbstractAction
|
||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
List<JTextArea> listeners = new ArrayList<> ();
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
public LineWrapAction ()
|
public LineWrapAction ()
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
super ("Line wrap");
|
super ("Line wrap");
|
||||||
putValue (Action.SHORT_DESCRIPTION, "Print the contents of the output panel");
|
|
||||||
|
putValue (Action.SHORT_DESCRIPTION, "Wrap/don't wrap the text in the output panel");
|
||||||
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("alt W"));
|
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("alt W"));
|
||||||
putValue (Action.MNEMONIC_KEY, KeyEvent.VK_W);
|
putValue (Action.MNEMONIC_KEY, KeyEvent.VK_W);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
|
||||||
public void addListener (JTextArea listener)
|
|
||||||
// ---------------------------------------------------------------------------------//
|
|
||||||
{
|
|
||||||
if (!listeners.contains (listener))
|
|
||||||
listeners.add (listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed (ActionEvent e)
|
public void actionPerformed (ActionEvent e)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
for (JTextArea listener : listeners)
|
firePropertyChange (e.getActionCommand (), null,
|
||||||
listener.setLineWrap (((JMenuItem) e.getSource ()).isSelected ());
|
((JMenuItem) e.getSource ()).isSelected ());
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user