From cdb32786f43f7c880186323046c468bb219f12ac Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Mon, 12 Dec 2016 08:32:18 +1100 Subject: [PATCH] Duplicate dialog --- .../bytezone/diskbrowser/disk/AppleDisk.java | 24 ++++----- .../duplicates/DuplicateHandler.java | 37 +++++++++---- .../duplicates/DuplicateWindow.java | 4 +- .../diskbrowser/duplicates/ProgressState.java | 53 ++++++++++++++++--- .../diskbrowser/gui/DuplicateAction.java | 3 +- .../diskbrowser/gui/FileSystemTab.java | 4 -- .../bytezone/diskbrowser/gui/TreeBuilder.java | 22 ++++---- 7 files changed, 99 insertions(+), 48 deletions(-) diff --git a/src/com/bytezone/diskbrowser/disk/AppleDisk.java b/src/com/bytezone/diskbrowser/disk/AppleDisk.java index cf30d79..4be0f0d 100755 --- a/src/com/bytezone/diskbrowser/disk/AppleDisk.java +++ b/src/com/bytezone/diskbrowser/disk/AppleDisk.java @@ -426,6 +426,18 @@ public class AppleDisk implements Disk notifyListeners ("Sector size changed"); } + @Override + public DiskAddress getDiskAddress (int track, int sector) + { + if (!isValidAddress (track, sector)) + { + System.out.println ("Invalid block : " + track + "/" + sector); + return null; + // return new AppleDiskAddress (this, 0); this was looping 26/07/2016 + } + return new AppleDiskAddress (this, track, sector); + } + @Override public DiskAddress getDiskAddress (int block) { @@ -451,18 +463,6 @@ public class AppleDisk implements Disk return addressList; } - @Override - public DiskAddress getDiskAddress (int track, int sector) - { - if (!isValidAddress (track, sector)) - { - System.out.println ("Invalid block : " + track + "/" + sector); - return null; - // return new AppleDiskAddress (this, 0); this was looping 26/07/2016 - } - return new AppleDiskAddress (this, track, sector); - } - @Override public boolean isValidAddress (int block) { diff --git a/src/com/bytezone/diskbrowser/duplicates/DuplicateHandler.java b/src/com/bytezone/diskbrowser/duplicates/DuplicateHandler.java index 27f5c3a..34f64b3 100644 --- a/src/com/bytezone/diskbrowser/duplicates/DuplicateHandler.java +++ b/src/com/bytezone/diskbrowser/duplicates/DuplicateHandler.java @@ -1,11 +1,14 @@ package com.bytezone.diskbrowser.duplicates; +import java.awt.Graphics; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; +import javax.swing.JDialog; +import javax.swing.JPanel; import javax.swing.SwingWorker; import com.bytezone.diskbrowser.utilities.Utility; @@ -15,7 +18,9 @@ public class DuplicateHandler extends SwingWorker private final File rootFolder; private final int rootFolderNameLength; private final ProgressState progressState = new ProgressState (); - DuplicateWindow owner; + private final DuplicateWindow owner; + private final JDialog dialog; + private final ProgressPanel progressPanel; // list of checksum -> DiskDetails private final Map checksumMap = new HashMap (); @@ -29,6 +34,14 @@ public class DuplicateHandler extends SwingWorker this.rootFolder = rootFolder; this.owner = owner; rootFolderNameLength = rootFolder.getAbsolutePath ().length (); + + dialog = new JDialog (owner); + progressPanel = new ProgressPanel (); + dialog.add (progressPanel); + dialog.setSize (500, 400); + dialog.setLocationRelativeTo (null); + dialog.setTitle ("Reading disks"); + dialog.setVisible (true); } public Map getFileNameMap () @@ -41,11 +54,6 @@ public class DuplicateHandler extends SwingWorker return checksumMap; } - public ProgressState getProgressState () - { - return progressState; - } - File getRootFolder () { return rootFolder; @@ -103,6 +111,7 @@ public class DuplicateHandler extends SwingWorker { try { + dialog.setVisible (false); owner.setDuplicateHandler (this); } catch (Exception e) @@ -122,8 +131,18 @@ public class DuplicateHandler extends SwingWorker @Override protected void process (List chunks) { - if (false) - for (ProgressState progressState : chunks) - progressState.print (); + // for (ProgressState progressState : chunks) + // progressState.print (); + progressPanel.repaint (); + } + + class ProgressPanel extends JPanel + { + @Override + protected void paintComponent (Graphics graphics) + { + super.paintComponent (graphics); + progressState.paintComponent (graphics); + } } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/duplicates/DuplicateWindow.java b/src/com/bytezone/diskbrowser/duplicates/DuplicateWindow.java index 8662c82..735ecc5 100644 --- a/src/com/bytezone/diskbrowser/duplicates/DuplicateWindow.java +++ b/src/com/bytezone/diskbrowser/duplicates/DuplicateWindow.java @@ -24,7 +24,7 @@ public class DuplicateWindow extends JFrame private final JButton btnExport = new JButton ("Export"); private final JButton btnHide = new JButton ("Close"); - private DuplicateHandler duplicateHandler; + // private DuplicateHandler duplicateHandler; private final List listeners; public DuplicateWindow (File rootFolder, @@ -71,7 +71,7 @@ public class DuplicateWindow extends JFrame public void setDuplicateHandler (DuplicateHandler duplicateHandler) { - this.duplicateHandler = duplicateHandler; + // this.duplicateHandler = duplicateHandler; table.setModel (new DiskTableModel (duplicateHandler)); diff --git a/src/com/bytezone/diskbrowser/duplicates/ProgressState.java b/src/com/bytezone/diskbrowser/duplicates/ProgressState.java index b68fab1..80f76ee 100644 --- a/src/com/bytezone/diskbrowser/duplicates/ProgressState.java +++ b/src/com/bytezone/diskbrowser/duplicates/ProgressState.java @@ -1,5 +1,9 @@ package com.bytezone.diskbrowser.duplicates; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.io.File; import java.util.List; @@ -7,18 +11,17 @@ import com.bytezone.diskbrowser.utilities.Utility; public class ProgressState { - List suffixes = Utility.suffixes; + private static final String header = " type uncmp .gz .zip"; + private static final String line = "-------------- ------- ------- -------"; + private static final List suffixes = Utility.suffixes; + private static final Font font = new Font ("Monaco", Font.BOLD, 15); + int totalDisks; int totalFolders; // total files for each suffix (uncompressed, .gz, .zip) private final int[][] typeTotals = new int[3][suffixes.size ()]; - public ProgressState () - { - - } - public void incrementFolders () { ++totalFolders; @@ -41,6 +44,41 @@ public class ProgressState System.out.println ("no suffix: " + filename); } + void paintComponent (Graphics graphics) + { + Graphics2D g = (Graphics2D) graphics; + + g.setColor (Color.BLACK); + g.setFont (font); + + int x = 55; + int y = 55; + int lineHeight = 23; + String line; + + g.drawString (header, x, y); + y += lineHeight + 10; + + int grandTotal[] = new int[3]; + + for (int i = 0; i < typeTotals[0].length; i++) + { + line = String.format ("%14.14s %,7d %,7d %,7d", + Utility.suffixes.get (i) + " ...........", typeTotals[0][i], typeTotals[1][i], + typeTotals[2][i]); + g.drawString (line, x, y); + for (int j = 0; j < typeTotals.length; j++) + grandTotal[j] += typeTotals[j][i]; + + y += lineHeight; + } + + line = String.format ("Total %,7d %,7d %,7d%n%n", grandTotal[0], + grandTotal[1], grandTotal[2]); + y += 10; + g.drawString (line, x, y); + } + public void print () { System.out.printf ("%nFolders ...... %,7d%n", totalFolders); @@ -48,8 +86,7 @@ public class ProgressState int grandTotal[] = new int[3]; - String line = "-------------- ------- ------- -------"; - System.out.println (" type uncmp .gz .zip"); + System.out.println (header); System.out.println (line); for (int i = 0; i < typeTotals[0].length; i++) { diff --git a/src/com/bytezone/diskbrowser/gui/DuplicateAction.java b/src/com/bytezone/diskbrowser/gui/DuplicateAction.java index 8c64119..f7fbd97 100644 --- a/src/com/bytezone/diskbrowser/gui/DuplicateAction.java +++ b/src/com/bytezone/diskbrowser/gui/DuplicateAction.java @@ -49,8 +49,7 @@ public class DuplicateAction extends DefaultAction implements RootDirectoryChang if (window == null) { window = new DuplicateWindow (rootFolder, listeners); - DuplicateHandler duplicateHandler = new DuplicateHandler (rootFolder, window); - duplicateHandler.execute (); + new DuplicateHandler (rootFolder, window).execute (); } else window.setVisible (true); diff --git a/src/com/bytezone/diskbrowser/gui/FileSystemTab.java b/src/com/bytezone/diskbrowser/gui/FileSystemTab.java index aa8931c..4620a4e 100755 --- a/src/com/bytezone/diskbrowser/gui/FileSystemTab.java +++ b/src/com/bytezone/diskbrowser/gui/FileSystemTab.java @@ -123,9 +123,6 @@ class FileSystemTab extends AbstractTab void selectDisk (String path) { - File file = new File (rootFolder.getAbsolutePath () + path); - System.out.println (file); - System.out.println (file.exists ()); DefaultMutableTreeNode node = findNode (rootFolder.getAbsolutePath () + path); if (node != null) showNode (node); @@ -162,7 +159,6 @@ class FileSystemTab extends AbstractTab if (fn2.file.isDirectory () && absolutePath.startsWith (path)) { - System.out.println (absolutePath.charAt (path.length ())); if (absolutePath.charAt (path.length ()) == File.separatorChar) { DefaultMutableTreeNode node2 = search (childNode, absolutePath); diff --git a/src/com/bytezone/diskbrowser/gui/TreeBuilder.java b/src/com/bytezone/diskbrowser/gui/TreeBuilder.java index 8a1cc5b..3aa85e0 100755 --- a/src/com/bytezone/diskbrowser/gui/TreeBuilder.java +++ b/src/com/bytezone/diskbrowser/gui/TreeBuilder.java @@ -22,9 +22,9 @@ import com.bytezone.diskbrowser.utilities.Utility; public class TreeBuilder { private static SimpleDateFormat sdf = new SimpleDateFormat ("dd MMM yyyy"); - private static final int DISK_13_SIZE = 116480; - private static final int DISK_16_SIZE = 143360; - private static final int DISK_800K_SIZE = 819264; + // private static final int DISK_13_SIZE = 116480; + // private static final int DISK_16_SIZE = 143360; + // private static final int DISK_800K_SIZE = 819264; private final FileComparator fileComparator = new FileComparator (); private final JTree tree; @@ -75,15 +75,15 @@ public class TreeBuilder continue; } - if (file.length () != DISK_16_SIZE && file.length () != DISK_13_SIZE - && file.length () != DISK_800K_SIZE && file.length () < 200000) - { - String name = file.getName ().toLowerCase (); - if (!name.endsWith (".sdk") && !name.endsWith (".dsk.gz")) - continue; - } + // if (file.length () != DISK_16_SIZE && file.length () != DISK_13_SIZE + // && file.length () != DISK_800K_SIZE && file.length () < 200000) + // { + // String name = file.getName ().toLowerCase (); + // if (!name.endsWith (".sdk") && !name.endsWith (".dsk.gz")) + // continue; + // } - if (Utility.validFileType (file.getAbsolutePath ())) + if (Utility.validFileType (file.getName ()) && file.length () > 0) { FileNode fileNode = new FileNode (file); DefaultMutableTreeNode newNode = new DefaultMutableTreeNode (fileNode);