1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-23 07:01:39 +00:00

Completed the conversion wo objp with the conversion of PyDupeGuru. I had to temporarily disable error handling though.

--HG--
branch : objp
This commit is contained in:
Virgil Dupras
2012-01-13 14:43:43 -05:00
parent 937ea73c87
commit 950cd0c341
35 changed files with 425 additions and 548 deletions

View File

@@ -16,11 +16,11 @@ http://www.hardcoded.net/licenses/bsd_license
@interface AppDelegateBase : NSObject
{
IBOutlet PyDupeGuruBase *py;
IBOutlet NSMenu *recentResultsMenu;
IBOutlet NSMenu *actionsMenu;
IBOutlet NSMenu *columnsMenu;
PyDupeGuru *model;
ResultWindowBase *_resultWindow;
DirectoryPanel *_directoryPanel;
DetailsPanel *_detailsPanel;
@@ -30,7 +30,7 @@ http://www.hardcoded.net/licenses/bsd_license
}
/* Virtual */
- (PyDupeGuruBase *)py;
- (PyDupeGuru *)model;
- (ResultWindowBase *)createResultWindow;
- (DirectoryPanel *)createDirectoryPanel;
- (DetailsPanel *)createDetailsPanel;

View File

@@ -25,7 +25,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)awakeFromNib
{
[py bindCocoa:self];
model = [[PyDupeGuru alloc] init];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
/* Because the pref pane is lazily loaded, we have to manually do the update check if the
preference is set.
@@ -45,7 +45,10 @@ http://www.hardcoded.net/licenses/bsd_license
/* Virtual */
- (PyDupeGuruBase *)py { return py; }
- (PyDupeGuru *)model
{
return model;
}
- (ResultWindowBase *)createResultWindow
{
@@ -104,7 +107,7 @@ http://www.hardcoded.net/licenses/bsd_license
[op setTitle:TR(@"Select a results file to load")];
if ([op runModal] == NSOKButton) {
NSString *filename = [[op filenames] objectAtIndex:0];
[py loadResultsFrom:filename];
[model loadResultsFrom:filename];
[[self recentResults] addFile:filename];
}
}
@@ -125,7 +128,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)showAboutBox:(id)sender
{
if (_aboutBox == nil) {
_aboutBox = [[HSAboutBox alloc] initWithApp:py];
_aboutBox = [[HSAboutBox alloc] initWithApp:model];
}
[[_aboutBox window] makeKeyAndOrderFront:sender];
}
@@ -157,9 +160,9 @@ http://www.hardcoded.net/licenses/bsd_license
/* Delegate */
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[ProgressController mainProgressController] setWorker:py];
[py initialRegistrationSetup];
[py loadSession];
[[ProgressController mainProgressController] setWorker:model];
[model initialRegistrationSetup];
[model loadSession];
}
- (void)applicationWillBecomeActive:(NSNotification *)aNotification
@@ -171,7 +174,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
if ([py resultsAreModified]) {
if ([model resultsAreModified]) {
NSString *msg = TR(@"You have unsaved results, do you really want to quit?");
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) { // NO
return NSTerminateCancel;
@@ -186,10 +189,10 @@ http://www.hardcoded.net/licenses/bsd_license
NSInteger sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"];
if (sc >= 10) {
sc = -1;
[py purgeIgnoreList];
[model purgeIgnoreList];
}
sc++;
[py saveSession];
[model saveSession];
[ud setInteger:sc forKey:@"sessionCountSinceLastIgnorePurge"];
// NSApplication does not release nib instances objects, we must do it manually
// Well, it isn't needed because the memory is freed anyway (we are quitting the application
@@ -200,7 +203,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)recentFileClicked:(NSString *)path
{
[py loadResultsFrom:path];
[model loadResultsFrom:path];
}
@@ -226,11 +229,11 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)showFairwareNagWithPrompt:(NSString *)prompt
{
[HSFairwareReminder showFairwareNagWithApp:[self py] prompt:prompt];
[HSFairwareReminder showFairwareNagWithApp:[self model] prompt:prompt];
}
- (void)showDemoNagWithPrompt:(NSString *)prompt
{
[HSFairwareReminder showDemoNagWithApp:[self py] prompt:prompt];
[HSFairwareReminder showDemoNagWithApp:[self model] prompt:prompt];
}
@end

View File

@@ -7,8 +7,6 @@ http://www.hardcoded.net/licenses/bsd_license
*/
#import <Cocoa/Cocoa.h>
#import "HSWindowController.h"
#import "PyApp.h"
#import "PyDetailsPanel.h"
@interface DetailsPanel : NSWindowController

View File

@@ -7,12 +7,12 @@ http://www.hardcoded.net/licenses/bsd_license
*/
#import <Cocoa/Cocoa.h>
#import "HSOutline2.h"
#import "HSOutline.h"
#import "PyDirectoryOutline.h"
#define DGAddedFoldersNotification @"DGAddedFoldersNotification"
@interface DirectoryOutline : HSOutline2 {}
@interface DirectoryOutline : HSOutline {}
- (id)initWithOutlineView:(HSOutlineView *)aOutlineView;
- (PyDirectoryOutline *)py;
@end;

View File

@@ -22,7 +22,7 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSButton *removeButton;
AppDelegateBase *_app;
PyDupeGuruBase *_py;
PyDupeGuru *model;
HSRecentFiles *_recentDirectories;
DirectoryOutline *outline;
BOOL _alwaysShowPopUp;

View File

@@ -18,8 +18,8 @@ http://www.hardcoded.net/licenses/bsd_license
self = [super initWithWindowNibName:@"DirectoryPanel"];
[self window];
_app = aParentApp;
_py = [_app py];
[[self window] setTitle:[_py appName]];
model = [_app model];
[[self window] setTitle:[model appName]];
_alwaysShowPopUp = NO;
[self fillPopUpMenu];
_recentDirectories = [[HSRecentFiles alloc] initWithName:@"recentDirectories" menu:[addButtonPopUp menu]];
@@ -107,7 +107,7 @@ http://www.hardcoded.net/licenses/bsd_license
/* Public */
- (void)addDirectory:(NSString *)directory
{
NSInteger r = [[_py addDirectory:directory] intValue];
NSInteger r = [model addDirectory:directory];
if (r) {
NSString *m = @"";
if (r == 1) {

View File

@@ -8,8 +8,6 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h>
#import "PyExtraFairwareReminder.h"
#import "HSWindowController.h"
#import "PyApp.h"
@interface ExtraFairwareReminder : NSWindowController
{

View File

@@ -7,10 +7,9 @@ http://www.hardcoded.net/licenses/bsd_license
*/
#import <Cocoa/Cocoa.h>
#import "PyApp.h"
#import "PyPrioritizeDialog.h"
#import "HSPopUpList2.h"
#import "HSSelectableList2.h"
#import "HSPopUpList.h"
#import "HSSelectableList.h"
#import "PrioritizeList.h"
@interface PrioritizeDialog : NSWindowController
@@ -20,8 +19,8 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSTableView *prioritizationTableView;
PyPrioritizeDialog *py;
HSPopUpList2 *categoryPopUp;
HSSelectableList2 *criteriaList;
HSPopUpList *categoryPopUp;
HSSelectableList *criteriaList;
PrioritizeList *prioritizationList;
}
- (id)init;

View File

@@ -16,8 +16,8 @@ http://www.hardcoded.net/licenses/bsd_license
[self window];
py = [[PyPrioritizeDialog alloc] initWithModel:findHackishModel(@"prioritize_dialog")];
[py bindCallback:createCallback(@"PrioritizeDialogView", self)];
categoryPopUp = [[HSPopUpList2 alloc] initWithPyRef:[[self py] categoryList] popupView:categoryPopUpView];
criteriaList = [[HSSelectableList2 alloc] initWithPyRef:[[self py] criteriaList] tableView:criteriaTableView];
categoryPopUp = [[HSPopUpList alloc] initWithPyRef:[[self py] categoryList] popupView:categoryPopUpView];
criteriaList = [[HSSelectableList alloc] initWithPyRef:[[self py] criteriaList] tableView:criteriaTableView];
prioritizationList = [[PrioritizeList alloc] initWithPyRef:[[self py] prioritizationList] tableView:prioritizationTableView];
[py connect];
return self;

View File

@@ -7,10 +7,10 @@ http://www.hardcoded.net/licenses/bsd_license
*/
#import <Cocoa/Cocoa.h>
#import "HSSelectableList2.h"
#import "HSSelectableList.h"
#import "PyPrioritizeList.h"
@interface PrioritizeList : HSSelectableList2 {}
@interface PrioritizeList : HSSelectableList {}
- (id)initWithPyRef:(PyObject *)aPyRef tableView:(NSTableView *)aTableView;
- (PyPrioritizeList *)model;
@end

View File

@@ -8,14 +8,14 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h>
#import "PyProblemDialog.h"
#import "HSTable2.h"
#import "HSTable.h"
@interface ProblemDialog : NSWindowController
{
IBOutlet NSTableView *problemTableView;
PyProblemDialog *model;
HSTable2 *problemTable;
HSTable *problemTable;
}
- (id)init;

View File

@@ -15,7 +15,7 @@ http://www.hardcoded.net/licenses/bsd_license
self = [super initWithWindowNibName:@"ProblemDialog"];
[self window]; //So the detailsTable is initialized.
model = [[PyProblemDialog alloc] initWithModel:findHackishModel(@"problem_dialog")];
problemTable = [[HSTable2 alloc] initWithPyRef:[model problemTable] tableView:problemTableView];
problemTable = [[HSTable alloc] initWithPyRef:[model problemTable] tableView:problemTableView];
[self initializeColumns];
[model connect];
[[problemTable model] connect];

View File

@@ -1,61 +0,0 @@
/*
Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
This software is licensed under the "BSD" License as described in the "LICENSE" file,
which should be included with this package. The terms are also available at
http://www.hardcoded.net/licenses/bsd_license
*/
#import <Cocoa/Cocoa.h>
#import "PyResultTable.h"
#import "PyStatsLabel.h"
#import "PyApp.h"
@interface PyDupeGuruBase : PyApp
- (void)bindCocoa:(id)cocoa;
- (PyResultTable *)resultTable;
- (PyStatsLabel *)statsLabel;
//Actions
- (NSNumber *)addDirectory:(NSString *)name;
- (void)loadResultsFrom:(NSString *)filename;
- (void)saveResultsAs:(NSString *)filename;
- (void)loadSession;
- (void)saveSession;
- (void)clearIgnoreList;
- (void)purgeIgnoreList;
- (NSString *)exportToXHTML;
- (void)invokeCommand:(NSString *)cmd;
- (void)doScan;
- (void)toggleSelectedMark;
- (void)markAll;
- (void)markInvert;
- (void)markNone;
- (void)addSelectedToIgnoreList;
- (void)openSelected;
- (void)revealSelected;
- (void)makeSelectedReference;
- (void)applyFilter:(NSString *)filter;
- (void)copyOrMove:(NSNumber *)aCopy markedTo:(NSString *)destination recreatePath:(NSNumber *)aRecreateType;
- (void)deleteMarked;
- (void)hardlinkMarked;
- (void)removeMarked;
//Data
- (NSNumber *)getIgnoreListCount;
- (NSNumber *)getMarkCount;
- (BOOL)scanWasProblematic;
- (BOOL)resultsAreModified;
//Scanning options
- (void)setScanType:(NSNumber *)scan_type;
- (void)setMinMatchPercentage:(NSNumber *)percentage;
- (void)setMixFileKind:(BOOL)mix_file_kind;
- (void)setEscapeFilterRegexp:(BOOL)escape_filter_regexp;
- (void)setRemoveEmptyFolders:(BOOL)remove_empty_folders;
- (void)setIgnoreHardlinkMatches:(BOOL)ignore_hardlink_matches;
- (void)setSizeThreshold:(NSInteger)size_threshold;
@end

View File

@@ -8,10 +8,10 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>
#import "HSTable2.h"
#import "HSTable.h"
#import "PyResultTable.h"
@interface ResultTable : HSTable2 <QLPreviewPanelDataSource, QLPreviewPanelDelegate>
@interface ResultTable : HSTable <QLPreviewPanelDataSource, QLPreviewPanelDelegate>
{
NSSet *_deltaColumns;
}

View File

@@ -12,7 +12,7 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Consts.h"
#import "HSQuicklook.h"
@interface HSTable2 (private)
@interface HSTable (private)
- (void)setPySelection;
- (void)setViewSelection;
@end

View File

@@ -25,7 +25,7 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSSearchField *filterField;
AppDelegateBase *app;
PyDupeGuruBase *py;
PyDupeGuru *model;
NSMenu *columnsMenu;
ResultTable *table;
StatsLabel *statsLabel;

View File

@@ -19,8 +19,8 @@ http://www.hardcoded.net/licenses/bsd_license
{
self = [super initWithWindowNibName:@"ResultWindow"];
app = aApp;
py = [app py];
[[self window] setTitle:fmt(@"%@ Results", [py appName])];
model = [app model];
[[self window] setTitle:fmt(@"%@ Results", [model appName])];
columnsMenu = [app columnsMenu];
/* Put a cute iTunes-like bottom bar */
[[self window] setContentBorderThickness:28 forEdge:NSMinYEdge];
@@ -76,7 +76,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted
{
NSInteger mark_count = [[py getMarkCount] intValue];
NSInteger mark_count = [model getMarkCount];
if (!mark_count) {
return;
}
@@ -88,12 +88,12 @@ http://www.hardcoded.net/licenses/bsd_license
return;
}
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
if (hardlinkDeleted) {
[py hardlinkMarked];
[model hardlinkMarked];
}
else {
[py deleteMarked];
[model deleteMarked];
}
}
@@ -107,13 +107,13 @@ http://www.hardcoded.net/licenses/bsd_license
/* Actions */
- (IBAction)clearIgnoreList:(id)sender
{
NSInteger i = n2i([py getIgnoreListCount]);
NSInteger i = [model getIgnoreListCount];
if (!i)
return;
NSString *msg = [NSString stringWithFormat:TR(@"Do you really want to remove all %d items from the ignore list?"),i];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return;
[py clearIgnoreList];
[model clearIgnoreList];
}
- (IBAction)changeOptions:(id)sender
@@ -132,7 +132,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)copyMarked:(id)sender
{
NSInteger mark_count = [[py getMarkCount] intValue];
NSInteger mark_count = [model getMarkCount];
if (!mark_count)
return;
NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -144,7 +144,7 @@ http://www.hardcoded.net/licenses/bsd_license
if ([op runModal] == NSOKButton) {
NSString *directory = [[op filenames] objectAtIndex:0];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py copyOrMove:b2n(YES) markedTo:directory recreatePath:[ud objectForKey:@"recreatePathType"]];
[model copyOrMove:YES markedTo:directory recreatePath:n2b([ud objectForKey:@"recreatePathType"])];
}
}
@@ -160,15 +160,15 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)exportToXHTML:(id)sender
{
NSString *exported = [py exportToXHTML];
NSString *exported = [model exportToXHTML];
[[NSWorkspace sharedWorkspace] openFile:exported];
}
- (IBAction)filter:(id)sender
{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])];
[py applyFilter:[filterField stringValue]];
[model setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])];
[model applyFilter:[filterField stringValue]];
}
- (IBAction)ignoreSelected:(id)sender
@@ -179,7 +179,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSString *msg = [NSString stringWithFormat:TR(@"All selected %d matches are going to be ignored in all subsequent scans. Continue?"),selectedDupeCount];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return;
[py addSelectedToIgnoreList];
[model addSelectedToIgnoreList];
}
- (IBAction)invokeCustomCommand:(id)sender
@@ -187,7 +187,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *cmd = [ud stringForKey:@"CustomCommand"];
if ((cmd != nil) && ([cmd length] > 0)) {
[py invokeCommand:cmd];
[model invokeCommand:cmd];
}
else {
[Dialogs showMessage:TR(@"You have no custom command set up. Set it up in your preferences.")];
@@ -196,27 +196,27 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)markAll:(id)sender
{
[py markAll];
[model markAll];
}
- (IBAction)markInvert:(id)sender
{
[py markInvert];
[model markInvert];
}
- (IBAction)markNone:(id)sender
{
[py markNone];
[model markNone];
}
- (IBAction)markSelected:(id)sender
{
[py toggleSelectedMark];
[model toggleSelectedMark];
}
- (IBAction)moveMarked:(id)sender
{
NSInteger mark_count = [[py getMarkCount] intValue];
NSInteger mark_count = [model getMarkCount];
if (!mark_count)
return;
NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -228,8 +228,8 @@ http://www.hardcoded.net/licenses/bsd_license
if ([op runModal] == NSOKButton) {
NSString *directory = [[op filenames] objectAtIndex:0];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
[py copyOrMove:b2n(NO) markedTo:directory recreatePath:[ud objectForKey:@"recreatePathType"]];
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
[model copyOrMove:NO markedTo:directory recreatePath:n2b([ud objectForKey:@"recreatePathType"])];
}
}
@@ -239,23 +239,23 @@ http://www.hardcoded.net/licenses/bsd_license
return;
}
[matches selectRowIndexes:[NSIndexSet indexSetWithIndex:[matches clickedRow]] byExtendingSelection:NO];
[py openSelected];
[model openSelected];
}
- (IBAction)openSelected:(id)sender
{
[py openSelected];
[model openSelected];
}
- (IBAction)removeMarked:(id)sender
{
int mark_count = [[py getMarkCount] intValue];
int mark_count = [model getMarkCount];
if (!mark_count)
return;
NSString *msg = [NSString stringWithFormat:@"You are about to remove %d files from results. Continue?",mark_count];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return;
[py removeMarked];
[model removeMarked];
}
- (IBAction)removeSelected:(id)sender
@@ -288,7 +288,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)revealSelected:(id)sender
{
[py revealSelected];
[model revealSelected];
}
- (IBAction)saveResults:(id)sender
@@ -298,24 +298,24 @@ http://www.hardcoded.net/licenses/bsd_license
[sp setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
[sp setTitle:TR(@"Select a file to save your results to")];
if ([sp runModal] == NSOKButton) {
[py saveResultsAs:[sp filename]];
[model saveResultsAs:[sp filename]];
[[app recentResults] addFile:[sp filename]];
}
}
- (IBAction)startDuplicateScan:(id)sender
{
if ([py resultsAreModified]) {
if ([model resultsAreModified]) {
if ([Dialogs askYesNo:TR(@"You have unsaved results, do you really want to continue?")] == NSAlertSecondButtonReturn) // NO
return;
}
[self setScanOptions];
[py doScan];
[model doScan];
}
- (IBAction)switchSelected:(id)sender
{
[py makeSelectedReference];
[model makeSelectedReference];
}
- (IBAction)toggleColumn:(id)sender
@@ -382,7 +382,7 @@ http://www.hardcoded.net/licenses/bsd_license
{
id lastAction = [[ProgressController mainProgressController] jobId];
if ([lastAction isEqualTo:jobCopy]) {
if ([py scanWasProblematic]) {
if ([model scanWasProblematic]) {
[problemDialog showWindow:self];
}
else {
@@ -390,7 +390,7 @@ http://www.hardcoded.net/licenses/bsd_license
}
}
else if ([lastAction isEqualTo:jobMove]) {
if ([py scanWasProblematic]) {
if ([model scanWasProblematic]) {
[problemDialog showWindow:self];
}
else {
@@ -398,7 +398,7 @@ http://www.hardcoded.net/licenses/bsd_license
}
}
else if ([lastAction isEqualTo:jobDelete]) {
if ([py scanWasProblematic]) {
if ([model scanWasProblematic]) {
[problemDialog showWindow:self];
}
else {

View File

@@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">11B26</string>
<string key="IBDocument.InterfaceBuilderVersion">1617</string>
<string key="IBDocument.AppKitVersion">1138</string>
<string key="IBDocument.HIToolboxVersion">566.00</string>
<string key="IBDocument.SystemVersion">11C74</string>
<string key="IBDocument.InterfaceBuilderVersion">1938</string>
<string key="IBDocument.AppKitVersion">1138.23</string>
<string key="IBDocument.HIToolboxVersion">567.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">1617</string>
<string key="NS.object.0">1938</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSMenu</string>
@@ -18,7 +18,10 @@
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="248533267">
<object class="NSCustomObject" id="77446904">
<string key="NSClassName">NSApplication</string>
@@ -668,31 +671,12 @@
<object class="NSCustomObject" id="91622651">
<string key="NSClassName">AppDelegate</string>
</object>
<object class="NSCustomObject" id="875360857">
<string key="NSClassName">PyDupeGuru</string>
</object>
<object class="NSCustomObject" id="23220930">
<string key="NSClassName">SUUpdater</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="1033736835"/>
</object>
<int key="connectionID">37</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">arrangeInFront:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="941358624"/>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
@@ -725,14 +709,6 @@
</object>
<int key="connectionID">153</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="781972485"/>
</object>
<int key="connectionID">198</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
@@ -742,20 +718,28 @@
<int key="connectionID">207</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="133452984"/>
<reference key="destination" ref="91622651"/>
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="1033736835"/>
</object>
<int key="connectionID">208</int>
<int key="connectionID">37</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">py</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="875360857"/>
<object class="IBActionConnection" key="connection">
<string key="label">arrangeInFront:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="941358624"/>
</object>
<int key="connectionID">614</int>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="781972485"/>
</object>
<int key="connectionID">198</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
@@ -765,14 +749,6 @@
</object>
<int key="connectionID">925</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">checkForUpdates:</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="688262014"/>
</object>
<int key="connectionID">951</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">cut:</string>
@@ -797,46 +773,6 @@
</object>
<int key="connectionID">1005</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openWebsite:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="440547877"/>
</object>
<int key="connectionID">1024</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="91622651"/>
</object>
<int key="connectionID">1175</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showAboutBox:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="436112936"/>
</object>
<int key="connectionID">1232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openHelp:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="914881560"/>
</object>
<int key="connectionID">1233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">recentResultsMenu</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="782784943"/>
</object>
<int key="connectionID">1242</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">clearIgnoreList:</string>
@@ -1013,6 +949,70 @@
</object>
<int key="connectionID">1266</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">reprioritizeResults:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="200019883"/>
</object>
<int key="connectionID">1278</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">removeMarked:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="733607971"/>
</object>
<int key="connectionID">1279</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleQuicklookPanel:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="343354529"/>
</object>
<int key="connectionID">1282</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="133452984"/>
<reference key="destination" ref="91622651"/>
</object>
<int key="connectionID">208</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openWebsite:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="440547877"/>
</object>
<int key="connectionID">1024</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showAboutBox:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="436112936"/>
</object>
<int key="connectionID">1232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openHelp:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="914881560"/>
</object>
<int key="connectionID">1233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">recentResultsMenu</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="782784943"/>
</object>
<int key="connectionID">1242</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">columnsMenu</string>
@@ -1063,27 +1063,19 @@
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">reprioritizeResults:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="200019883"/>
<string key="label">checkForUpdates:</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="688262014"/>
</object>
<int key="connectionID">1278</int>
<int key="connectionID">951</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">removeMarked:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="733607971"/>
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="91622651"/>
</object>
<int key="connectionID">1279</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleQuicklookPanel:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="343354529"/>
</object>
<int key="connectionID">1282</int>
<int key="connectionID">1175</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
@@ -1508,12 +1500,6 @@
<reference key="parent" ref="0"/>
<string key="objectName">AppDelegate</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">613</int>
<reference key="object" ref="875360857"/>
<reference key="parent" ref="0"/>
<string key="objectName">PyDupeGuru</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">949</int>
<reference key="object" ref="23220930"/>
@@ -1654,7 +1640,6 @@
<string key="603.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="604.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="605.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="613.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="618.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="619.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="707.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1772,6 +1757,25 @@
<string key="minorKey">./Classes/AppDelegateBase.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">HSOutlineView</string>
<string key="superclassName">NSOutlineView</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">copy:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">copy:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">copy:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HSOutlineView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">HSTableView</string>
<string key="superclassName">NSTableView</string>
@@ -1780,17 +1784,9 @@
<string key="minorKey">./Classes/HSTableView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">HSWindowController</string>
<string key="superclassName">NSWindowController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HSWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PrioritizeDialog</string>
<string key="superclassName">HSWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="addSelected:">id</string>
<string key="cancel:">id</string>
@@ -1841,7 +1837,7 @@
</object>
<object class="IBPartialClassDescription">
<string key="className">ProblemDialog</string>
<string key="superclassName">HSWindowController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">revealSelected:</string>
<string key="NS.object.0">id</string>
@@ -1869,38 +1865,6 @@
<string key="minorKey">./Classes/ProblemDialog.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyApp</string>
<string key="superclassName">PyFairware</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyApp.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyDupeGuru</string>
<string key="superclassName">PyDupeGuruBase</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyDupeGuru.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyDupeGuruBase</string>
<string key="superclassName">PyApp</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyDupeGuruBase.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyFairware</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyFairware.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">ResultWindowBase</string>
<string key="superclassName">NSWindowController</string>
@@ -2127,7 +2091,7 @@
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
<real value="1060" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>