mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-02-06 19:30:01 +00:00
Restored duplicate functionality
This commit is contained in:
parent
8f1974def9
commit
b4d7c60495
@ -15,9 +15,10 @@ import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import com.bytezone.diskbrowser.gui.DuplicateAction.DiskTableSelectionListener;
|
||||
import com.bytezone.diskbrowser.gui.RootDirectoryChangeListener;
|
||||
import com.bytezone.diskbrowser.utilities.Utility;
|
||||
|
||||
public class RootFolderData
|
||||
public class RootFolderData implements RootDirectoryChangeListener
|
||||
{
|
||||
private static final String header =
|
||||
" type uncmp .gz .zip total";
|
||||
@ -63,7 +64,6 @@ public class RootFolderData
|
||||
dialogTotals.add (progressPanel, BorderLayout.CENTER);
|
||||
southPanel.add (btnCancel); // needs to be here for the pack()
|
||||
dialogTotals.add (southPanel, BorderLayout.SOUTH);
|
||||
// dialogTotals.setTitle ("Disk Totals");
|
||||
dialogTotals.pack ();
|
||||
dialogTotals.setLocationRelativeTo (null);
|
||||
|
||||
@ -125,13 +125,6 @@ public class RootFolderData
|
||||
dialogTotals.repaint ();
|
||||
}
|
||||
|
||||
public void setRootFolder (File rootFolder)
|
||||
{
|
||||
this.rootFolder = rootFolder;
|
||||
rootFolderNameLength = rootFolder.getAbsolutePath ().length ();
|
||||
disksWindow = null; // force a recount
|
||||
}
|
||||
|
||||
String getRootFolderPathText ()
|
||||
{
|
||||
String text = rootFolder.getAbsolutePath ();
|
||||
@ -251,6 +244,18 @@ public class RootFolderData
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString ()
|
||||
{
|
||||
StringBuilder text = new StringBuilder ();
|
||||
|
||||
text.append (String.format ("Root folder ....... %s%n", rootFolder));
|
||||
text.append (String.format ("Disks ............. %,d%n", totalDisks));
|
||||
text.append (String.format ("Folders ........... %,d", totalFolders));
|
||||
|
||||
return text.toString ();
|
||||
}
|
||||
|
||||
class ProgressPanel extends JPanel
|
||||
{
|
||||
public volatile boolean cancelled;
|
||||
@ -293,10 +298,6 @@ public class RootFolderData
|
||||
|
||||
if (doChecksums)
|
||||
{
|
||||
// line = String.format ("Unique checksums: %,7d%n",
|
||||
// checksumMap.size ());
|
||||
// y += lineHeight;
|
||||
// g.drawString (line, x, y);
|
||||
line = String.format ("duplicates ... %,7d%n",
|
||||
totalDisks - checksumMap.size ());
|
||||
y += lineHeight + 10;
|
||||
@ -304,4 +305,12 @@ public class RootFolderData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rootDirectoryChanged (File rootFolder)
|
||||
{
|
||||
this.rootFolder = rootFolder;
|
||||
rootFolderNameLength = rootFolder.getAbsolutePath ().length ();
|
||||
disksWindow = null; // force a recount
|
||||
}
|
||||
}
|
@ -30,11 +30,9 @@ import com.bytezone.diskbrowser.applefile.AppleFileSource;
|
||||
import com.bytezone.diskbrowser.disk.DualDosDisk;
|
||||
import com.bytezone.diskbrowser.disk.FormattedDisk;
|
||||
import com.bytezone.diskbrowser.duplicates.DiskDetails;
|
||||
import com.bytezone.diskbrowser.duplicates.RootFolderData;
|
||||
import com.bytezone.diskbrowser.gui.DuplicateAction.DiskTableSelectionListener;
|
||||
import com.bytezone.diskbrowser.gui.RedoHandler.RedoEvent;
|
||||
import com.bytezone.diskbrowser.gui.RedoHandler.RedoListener;
|
||||
import com.bytezone.diskbrowser.gui.RootDirectoryAction.RootDirectoryChangeListener;
|
||||
import com.bytezone.diskbrowser.gui.TreeBuilder.FileNode;
|
||||
|
||||
class CatalogPanel extends JTabbedPane
|
||||
@ -45,7 +43,6 @@ class CatalogPanel extends JTabbedPane
|
||||
private static final String prefsLastDosUsed = "Last dos used";
|
||||
private static final String prefsLastFileUsed = "Last file used";
|
||||
private static final String prefsLastSectorsUsed = "Last sectors used";
|
||||
private static final String prefsRootDirectory = "Root directory";
|
||||
|
||||
private Font font;
|
||||
private FileSystemTab fileTab;
|
||||
@ -53,7 +50,7 @@ class CatalogPanel extends JTabbedPane
|
||||
private final DiskAndFileSelector selector = new DiskAndFileSelector ();
|
||||
private final RedoHandler redoHandler;
|
||||
private CloseTabAction closeTabAction;
|
||||
private final RootFolderData rootFolderData = new RootFolderData ();
|
||||
private File rootFolder;
|
||||
|
||||
public CatalogPanel (RedoHandler redoHandler)
|
||||
{
|
||||
@ -63,24 +60,8 @@ class CatalogPanel extends JTabbedPane
|
||||
setPreferredSize (new Dimension (360, 802)); // width, height
|
||||
}
|
||||
|
||||
RootFolderData getRootFolderData ()
|
||||
{
|
||||
return rootFolderData;
|
||||
}
|
||||
|
||||
private void createTabs (Preferences prefs)
|
||||
{
|
||||
String rootDirectory = prefs.get (prefsRootDirectory, "");
|
||||
|
||||
File rootDirectoryFile = new File (rootDirectory);
|
||||
if (!rootDirectoryFile.exists () || !rootDirectoryFile.isDirectory ())
|
||||
{
|
||||
System.out.println ("No root directory");
|
||||
return;
|
||||
}
|
||||
|
||||
rootFolderData.setRootFolder (rootDirectoryFile);
|
||||
|
||||
String lastDiskUsed = prefs.get (prefsLastDiskUsed, "");
|
||||
int lastDosUsed = prefs.getInt (prefsLastDosUsed, -1);
|
||||
String lastFileUsed = prefs.get (prefsLastFileUsed, "");
|
||||
@ -146,22 +127,24 @@ class CatalogPanel extends JTabbedPane
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rootDirectoryChanged (RootFolderData rootFolderData)
|
||||
public void rootDirectoryChanged (File rootFolder)
|
||||
{
|
||||
assert rootFolderData == this.rootFolderData;
|
||||
this.rootFolder = rootFolder;
|
||||
if (fileTab == null) // still restoring last session
|
||||
return;
|
||||
|
||||
// is the user replacing an existing root folder?
|
||||
if (fileTab != null)
|
||||
{
|
||||
removeTabAt (0);
|
||||
|
||||
insertFileSystemTab (null);
|
||||
setSelectedIndex (0);
|
||||
insertFileSystemTab (null);
|
||||
setSelectedIndex (0);
|
||||
}
|
||||
}
|
||||
|
||||
private void insertFileSystemTab (DiskSelectedEvent diskEvent)
|
||||
{
|
||||
fileTab = new FileSystemTab (rootFolderData.getRootFolder (), selector, redoHandler,
|
||||
font, diskEvent);
|
||||
fileTab = new FileSystemTab (rootFolder, selector, redoHandler, font, diskEvent);
|
||||
fileTab.addTreeMouseListener (new MouseListener ()); // listen for disk selection
|
||||
insertTab ("Disk Tree", null, fileTab, "Display Apple disks", 0);
|
||||
}
|
||||
@ -248,7 +231,6 @@ class CatalogPanel extends JTabbedPane
|
||||
{
|
||||
if (fileTab == null)
|
||||
{
|
||||
prefs.put (prefsRootDirectory, "");
|
||||
prefs.put (prefsLastDiskUsed, "");
|
||||
prefs.putInt (prefsLastDosUsed, -1);
|
||||
prefs.put (prefsLastFileUsed, "");
|
||||
@ -256,8 +238,6 @@ class CatalogPanel extends JTabbedPane
|
||||
}
|
||||
else
|
||||
{
|
||||
prefs.put (prefsRootDirectory, fileTab.rootFolder.getAbsolutePath ());
|
||||
|
||||
if (diskTabs.size () == 0)
|
||||
{
|
||||
RedoEvent redoEvent = fileTab.redoData.getCurrentEvent ();
|
||||
@ -382,20 +362,6 @@ class CatalogPanel extends JTabbedPane
|
||||
((AppleDiskTab) tab).tree.setSelectionPath (null);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void preferenceChange (PreferenceChangeEvent evt)
|
||||
// {
|
||||
// if (evt.getKey ().equals (PreferencesDialog.prefsCatalogFont))
|
||||
// font = new Font (evt.getNewValue (), Font.PLAIN, font.getSize ());
|
||||
// if (evt.getKey ().equals (PreferencesDialog.prefsCatalogFontSize))
|
||||
// font = new Font (font.getFontName (),
|
||||
// Font.PLAIN, Integer.parseInt (evt.getNewValue ()));
|
||||
// if (fileTab != null)
|
||||
// fileTab.setTreeFont (font);
|
||||
// for (AppleDiskTab tab : diskTabs)
|
||||
// tab.setTreeFont (font);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void changeFont (FontChangeEvent fontChangeEvent)
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ public class CloseTabAction extends AbstractAction
|
||||
super ("Close Tab");
|
||||
putValue (Action.SHORT_DESCRIPTION, "Close the current disk tab");
|
||||
// putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("ctrl W"));
|
||||
int mask = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask ();
|
||||
int mask = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx ();
|
||||
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke (KeyEvent.VK_W, mask));
|
||||
// putValue (Action.MNEMONIC_KEY, KeyEvent.VK_W);
|
||||
this.catalogPanel = catalogPanel;
|
||||
|
@ -24,6 +24,8 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
||||
private static final String OS = System.getProperty ("os.name").toLowerCase ();
|
||||
private static final boolean MAC = OS.startsWith ("mac os");
|
||||
|
||||
private final RootFolderData rootFolderData = new RootFolderData ();
|
||||
|
||||
public DiskBrowser ()
|
||||
{
|
||||
super (windowTitle);
|
||||
@ -56,11 +58,8 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
||||
addPanel (diskLayoutPanel, "Disk layout", BorderLayout.EAST);
|
||||
|
||||
// create actions
|
||||
RootFolderData rootFolderData = catalogPanel.getRootFolderData ();
|
||||
DuplicateAction duplicateAction = new DuplicateAction (rootFolderData);
|
||||
RootDirectoryAction rootDirectoryAction = new RootDirectoryAction (rootFolderData);
|
||||
rootDirectoryAction.addListener (catalogPanel);
|
||||
rootDirectoryAction.addListener (duplicateAction);
|
||||
RootDirectoryAction rootDirectoryAction = new RootDirectoryAction ();
|
||||
|
||||
RefreshTreeAction refreshTreeAction = new RefreshTreeAction (catalogPanel);
|
||||
// PreferencesAction preferencesAction = new PreferencesAction (this, prefs);
|
||||
@ -82,6 +81,10 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
||||
// toolBar.add (aboutAction);
|
||||
|
||||
// set the listeners
|
||||
rootDirectoryAction.addListener (rootFolderData);
|
||||
rootDirectoryAction.addListener (catalogPanel);
|
||||
rootDirectoryAction.addListener (duplicateAction);
|
||||
|
||||
catalogPanel.addDiskSelectionListener (this);
|
||||
catalogPanel.addDiskSelectionListener (dataPanel);
|
||||
catalogPanel.addDiskSelectionListener (diskLayoutPanel);
|
||||
@ -121,6 +124,7 @@ public class DiskBrowser extends JFrame implements DiskSelectionListener, QuitLi
|
||||
menuHandler.duplicateItem.setAction (duplicateAction);
|
||||
menuHandler.closeTabItem.setAction (closeTabAction);
|
||||
|
||||
addQuitListener (rootDirectoryAction);
|
||||
addQuitListener (menuHandler);
|
||||
addQuitListener (catalogPanel);
|
||||
addQuitListener (this);
|
||||
|
@ -3,6 +3,7 @@ package com.bytezone.diskbrowser.gui;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.File;
|
||||
|
||||
import javax.swing.Action;
|
||||
import javax.swing.JOptionPane;
|
||||
@ -11,7 +12,6 @@ import javax.swing.KeyStroke;
|
||||
import com.bytezone.common.DefaultAction;
|
||||
import com.bytezone.diskbrowser.duplicates.DiskDetails;
|
||||
import com.bytezone.diskbrowser.duplicates.RootFolderData;
|
||||
import com.bytezone.diskbrowser.gui.RootDirectoryAction.RootDirectoryChangeListener;
|
||||
|
||||
public class DuplicateAction extends DefaultAction implements RootDirectoryChangeListener
|
||||
{
|
||||
@ -26,15 +26,15 @@ public class DuplicateAction extends DefaultAction implements RootDirectoryChang
|
||||
|
||||
setIcon (Action.SMALL_ICON, "save_delete_16.png");
|
||||
setIcon (Action.LARGE_ICON_KEY, "save_delete_32.png");
|
||||
int mask = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask ();
|
||||
int mask = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMaskEx ();
|
||||
putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke (KeyEvent.VK_L, mask));
|
||||
setEnabled (rootFolderData.getRootFolder () != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rootDirectoryChanged (RootFolderData rootFolderData)
|
||||
public void rootDirectoryChanged (File rootFolder)
|
||||
{
|
||||
assert rootFolderData == this.rootFolderData;
|
||||
assert rootFolderData.getRootFolder () == rootFolder;
|
||||
setEnabled (rootFolderData.getRootFolder () != null);
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import java.awt.event.KeyEvent;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
import javax.swing.Action;
|
||||
import javax.swing.JFileChooser;
|
||||
@ -12,15 +13,14 @@ import javax.swing.KeyStroke;
|
||||
|
||||
import com.bytezone.common.DefaultAction;
|
||||
import com.bytezone.common.Platform;
|
||||
import com.bytezone.diskbrowser.duplicates.RootFolderData;
|
||||
|
||||
class RootDirectoryAction extends DefaultAction
|
||||
public class RootDirectoryAction extends DefaultAction implements QuitListener
|
||||
{
|
||||
private final RootFolderData rootFolderData;
|
||||
private final List<RootDirectoryChangeListener> listeners =
|
||||
new ArrayList<RootDirectoryAction.RootDirectoryChangeListener> ();
|
||||
private static final String prefsRootDirectory = "Root directory";
|
||||
private final List<RootDirectoryChangeListener> listeners = new ArrayList<> ();
|
||||
private File rootFolder;
|
||||
|
||||
public RootDirectoryAction (RootFolderData rootFolderData)
|
||||
public RootDirectoryAction ()
|
||||
{
|
||||
super ("Set HOME folder...", "Defines root folder where the disk images are kept",
|
||||
"/com/bytezone/diskbrowser/icons/");
|
||||
@ -29,8 +29,6 @@ class RootDirectoryAction extends DefaultAction
|
||||
|
||||
setIcon (Action.SMALL_ICON, "folder_explore_16.png");
|
||||
setIcon (Action.LARGE_ICON_KEY, "folder_explore_32.png");
|
||||
|
||||
this.rootFolderData = rootFolderData;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -39,8 +37,8 @@ class RootDirectoryAction extends DefaultAction
|
||||
JFileChooser chooser = new JFileChooser (Platform.userHome);
|
||||
chooser.setDialogTitle ("Select FOLDER containing disk images");
|
||||
chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY);
|
||||
if (rootFolderData.getRootFolder () != null)
|
||||
chooser.setSelectedFile (rootFolderData.getRootFolder ());
|
||||
if (rootFolder != null)
|
||||
chooser.setSelectedFile (rootFolder);
|
||||
|
||||
int result = chooser.showDialog (null, "Accept");
|
||||
if (result == JFileChooser.APPROVE_OPTION)
|
||||
@ -50,9 +48,8 @@ class RootDirectoryAction extends DefaultAction
|
||||
file = file.getParentFile ();
|
||||
if (file != null)
|
||||
{
|
||||
rootFolderData.setRootFolder (file);
|
||||
for (RootDirectoryChangeListener listener : listeners)
|
||||
listener.rootDirectoryChanged (rootFolderData);
|
||||
listener.rootDirectoryChanged (file);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -63,8 +60,28 @@ class RootDirectoryAction extends DefaultAction
|
||||
listeners.add (listener);
|
||||
}
|
||||
|
||||
interface RootDirectoryChangeListener
|
||||
@Override
|
||||
public void quit (Preferences prefs)
|
||||
{
|
||||
public void rootDirectoryChanged (RootFolderData rootFolderData);
|
||||
if (rootFolder == null)
|
||||
prefs.put (prefsRootDirectory, "");
|
||||
else
|
||||
prefs.put (prefsRootDirectory, rootFolder.getAbsolutePath ());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore (Preferences prefs)
|
||||
{
|
||||
String rootDirectory = prefs.get (prefsRootDirectory, "");
|
||||
|
||||
File rootDirectoryFile = new File (rootDirectory);
|
||||
if (!rootDirectoryFile.exists () || !rootDirectoryFile.isDirectory ())
|
||||
{
|
||||
System.out.println ("No root directory");
|
||||
return;
|
||||
}
|
||||
this.rootFolder = rootDirectoryFile;
|
||||
for (RootDirectoryChangeListener listener : listeners)
|
||||
listener.rootDirectoryChanged (rootDirectoryFile);
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.bytezone.diskbrowser.gui;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface RootDirectoryChangeListener
|
||||
{
|
||||
public void rootDirectoryChanged (File rootFolder);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user