dmolony-DiskBrowser/src/com/bytezone/diskbrowser/gui/DiskLegendPanel.java

97 lines
3.1 KiB
Java

package com.bytezone.diskbrowser.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import com.bytezone.diskbrowser.disk.FormattedDisk;
import com.bytezone.diskbrowser.disk.SectorType;
import com.bytezone.diskbrowser.gui.DiskLayoutPanel.LayoutDetails;
import com.bytezone.diskbrowser.utilities.FontUtility;
import com.bytezone.diskbrowser.utilities.FontUtility.FontSize;
import com.bytezone.diskbrowser.utilities.FontUtility.FontType;
// -----------------------------------------------------------------------------------//
class DiskLegendPanel extends DiskPanel
// -----------------------------------------------------------------------------------//
{
private static final int LEFT = 3;
private static final int TOP = 10;
private final Font font;
// ---------------------------------------------------------------------------------//
public DiskLegendPanel ()
// ---------------------------------------------------------------------------------//
{
font = FontUtility.getFont (FontType.SANS_SERIF, FontSize.BASE);
setBackground (Color.WHITE);
}
// ---------------------------------------------------------------------------------//
@Override
public void setDisk (FormattedDisk disk, LayoutDetails details)
// ---------------------------------------------------------------------------------//
{
super.setDisk (disk, details);
repaint ();
}
// ---------------------------------------------------------------------------------//
@Override
public Dimension getPreferredSize ()
// ---------------------------------------------------------------------------------//
{
return new Dimension (0, 160); // width/height
}
// ---------------------------------------------------------------------------------//
@Override
protected void paintComponent (Graphics g)
// ---------------------------------------------------------------------------------//
{
super.paintComponent (g);
if (formattedDisk == null)
return;
g.setFont (font);
int count = 0;
int lineHeight = 20;
for (SectorType type : formattedDisk.getSectorTypeList ())
{
int x = LEFT + (count % 2 == 0 ? 0 : 155);
int y = TOP + count / 2 * lineHeight;
++count;
// draw border
g.setColor (backgroundColor);
g.drawRect (x + 1, y + 1, blockWidth - 1, blockHeight - 1);
// draw block
g.setColor (type.colour);
g.fillRect (x + 1, y + 1, blockWidth - 1, blockHeight - 1);
// draw text
g.setColor (Color.BLACK);
g.drawString (type.name, x + blockWidth + 4, y + 12);
}
int y = ++count / 2 * lineHeight + TOP * 2 + 5;
int val = formattedDisk.falseNegativeBlocks ();
if (val > 0)
{
g.drawString (val + " unused sector" + (val == 1 ? "" : "s") //
+ " marked as unavailable", 10, y);
y += lineHeight;
}
val = formattedDisk.falsePositiveBlocks ();
if (val > 0)
g.drawString (val + " used sector" + (val == 1 ? "" : "s") //
+ " marked as available", 10, y);
}
}