From 950cd0c341dc10874c70af82e49c67364666730b Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Fri, 13 Jan 2012 14:43:43 -0500 Subject: [PATCH] Completed the conversion wo objp with the conversion of PyDupeGuru. I had to temporarily disable error handling though. --HG-- branch : objp --- build.py | 14 +- cocoa/base/AppDelegate.h | 4 +- cocoa/base/AppDelegate.m | 29 +- cocoa/base/DetailsPanel.h | 2 - cocoa/base/DirectoryOutline.h | 4 +- cocoa/base/DirectoryPanel.h | 2 +- cocoa/base/DirectoryPanel.m | 6 +- cocoa/base/ExtraFairwareReminder.h | 2 - cocoa/base/PrioritizeDialog.h | 9 +- cocoa/base/PrioritizeDialog.m | 4 +- cocoa/base/PrioritizeList.h | 4 +- cocoa/base/ProblemDialog.h | 4 +- cocoa/base/ProblemDialog.m | 2 +- cocoa/base/PyDupeGuru.h | 61 ----- cocoa/base/ResultTable.h | 4 +- cocoa/base/ResultTable.m | 2 +- cocoa/base/ResultWindow.h | 2 +- cocoa/base/ResultWindow.m | 68 ++--- cocoa/base/en.lproj/MainMenu.xib | 280 +++++++++----------- cocoa/inter/app.py | 149 ++++++----- cocoa/inter/app_se.py | 32 +++ cocoa/inter/details_panel.py | 4 +- cocoa/inter/directory_outline.py | 4 +- cocoa/inter/extra_fairware_reminder.py | 4 +- cocoa/inter/prioritize_dialog.py | 4 +- cocoa/inter/prioritize_list.py | 4 +- cocoa/inter/problem_dialog.py | 4 +- cocoa/inter/result_table.py | 4 +- cocoa/inter/stats_label.py | 4 +- cocoa/se/AppDelegate.h | 1 - cocoa/se/AppDelegate.m | 2 - cocoa/se/PyDupeGuru.h | 16 -- cocoa/se/ResultWindow.m | 15 +- cocoa/se/dg_cocoa.py | 44 +-- cocoa/se/dupeguru.xcodeproj/project.pbxproj | 179 ++++++------- 35 files changed, 425 insertions(+), 548 deletions(-) delete mode 100644 cocoa/base/PyDupeGuru.h delete mode 100644 cocoa/se/PyDupeGuru.h diff --git a/build.py b/build.py index ee4f00a3..5da7bcc2 100644 --- a/build.py +++ b/build.py @@ -179,8 +179,8 @@ def build_cocoa_bridging_interfaces(): import objp.p2o add_to_pythonpath('cocoa') add_to_pythonpath('cocoalib') - from cocoa.inter2 import (PyGUIObject2, GUIObjectView, PyColumns2, ColumnsView, PyOutline2, - OutlineView, PySelectableList2, SelectableListView, PyTable2, TableView) + from cocoa.inter2 import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline, + OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyFairware) from inter.details_panel import PyDetailsPanel, DetailsPanelView from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView from inter.extra_fairware_reminder import PyExtraFairwareReminder, ExtraFairwareReminderView @@ -189,14 +189,16 @@ def build_cocoa_bridging_interfaces(): from inter.problem_dialog import PyProblemDialog from inter.result_table import PyResultTable, ResultTableView from inter.stats_label import PyStatsLabel, StatsLabelView - allclasses = [PyGUIObject2, PyColumns2, PyOutline2, PySelectableList2, PyTable2, PyDetailsPanel, - PyDirectoryOutline, PyExtraFairwareReminder, PyPrioritizeDialog, PyPrioritizeList, - PyProblemDialog, PyResultTable, PyStatsLabel] + from inter.app import PyDupeGuruBase, DupeGuruView + from inter.app_se import PyDupeGuru + allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware, + PyDetailsPanel, PyDirectoryOutline, PyExtraFairwareReminder, PyPrioritizeDialog, + PyPrioritizeList, PyProblemDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase, PyDupeGuru] for class_ in allclasses: objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True) allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView, DetailsPanelView, DirectoryOutlineView, ExtraFairwareReminderView, PrioritizeDialogView, - PrioritizeListView, ResultTableView, StatsLabelView] + PrioritizeListView, ResultTableView, StatsLabelView, DupeGuruView] for class_ in allclasses: clsspec = objp.o2p.spec_from_python_class(class_) clsname = class_.__name__ diff --git a/cocoa/base/AppDelegate.h b/cocoa/base/AppDelegate.h index 9fc2a93d..9501a4fb 100644 --- a/cocoa/base/AppDelegate.h +++ b/cocoa/base/AppDelegate.h @@ -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; diff --git a/cocoa/base/AppDelegate.m b/cocoa/base/AppDelegate.m index b3afbfc9..a96f7d39 100644 --- a/cocoa/base/AppDelegate.m +++ b/cocoa/base/AppDelegate.m @@ -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 diff --git a/cocoa/base/DetailsPanel.h b/cocoa/base/DetailsPanel.h index b9dc867d..b2e8f292 100644 --- a/cocoa/base/DetailsPanel.h +++ b/cocoa/base/DetailsPanel.h @@ -7,8 +7,6 @@ http://www.hardcoded.net/licenses/bsd_license */ #import -#import "HSWindowController.h" -#import "PyApp.h" #import "PyDetailsPanel.h" @interface DetailsPanel : NSWindowController diff --git a/cocoa/base/DirectoryOutline.h b/cocoa/base/DirectoryOutline.h index d50f1d3a..d1552a02 100644 --- a/cocoa/base/DirectoryOutline.h +++ b/cocoa/base/DirectoryOutline.h @@ -7,12 +7,12 @@ http://www.hardcoded.net/licenses/bsd_license */ #import -#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; \ No newline at end of file diff --git a/cocoa/base/DirectoryPanel.h b/cocoa/base/DirectoryPanel.h index c67542f5..6729ef2a 100644 --- a/cocoa/base/DirectoryPanel.h +++ b/cocoa/base/DirectoryPanel.h @@ -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; diff --git a/cocoa/base/DirectoryPanel.m b/cocoa/base/DirectoryPanel.m index 18334bb7..28187046 100644 --- a/cocoa/base/DirectoryPanel.m +++ b/cocoa/base/DirectoryPanel.m @@ -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) { diff --git a/cocoa/base/ExtraFairwareReminder.h b/cocoa/base/ExtraFairwareReminder.h index 808a2699..90b27209 100644 --- a/cocoa/base/ExtraFairwareReminder.h +++ b/cocoa/base/ExtraFairwareReminder.h @@ -8,8 +8,6 @@ http://www.hardcoded.net/licenses/bsd_license #import #import "PyExtraFairwareReminder.h" -#import "HSWindowController.h" -#import "PyApp.h" @interface ExtraFairwareReminder : NSWindowController { diff --git a/cocoa/base/PrioritizeDialog.h b/cocoa/base/PrioritizeDialog.h index 3003da72..7c3ca852 100644 --- a/cocoa/base/PrioritizeDialog.h +++ b/cocoa/base/PrioritizeDialog.h @@ -7,10 +7,9 @@ http://www.hardcoded.net/licenses/bsd_license */ #import -#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; diff --git a/cocoa/base/PrioritizeDialog.m b/cocoa/base/PrioritizeDialog.m index 2e32af1b..9f06b24e 100644 --- a/cocoa/base/PrioritizeDialog.m +++ b/cocoa/base/PrioritizeDialog.m @@ -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; diff --git a/cocoa/base/PrioritizeList.h b/cocoa/base/PrioritizeList.h index bc3c1eee..24f5ac59 100644 --- a/cocoa/base/PrioritizeList.h +++ b/cocoa/base/PrioritizeList.h @@ -7,10 +7,10 @@ http://www.hardcoded.net/licenses/bsd_license */ #import -#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 \ No newline at end of file diff --git a/cocoa/base/ProblemDialog.h b/cocoa/base/ProblemDialog.h index 7ca11712..4359081e 100644 --- a/cocoa/base/ProblemDialog.h +++ b/cocoa/base/ProblemDialog.h @@ -8,14 +8,14 @@ http://www.hardcoded.net/licenses/bsd_license #import #import "PyProblemDialog.h" -#import "HSTable2.h" +#import "HSTable.h" @interface ProblemDialog : NSWindowController { IBOutlet NSTableView *problemTableView; PyProblemDialog *model; - HSTable2 *problemTable; + HSTable *problemTable; } - (id)init; diff --git a/cocoa/base/ProblemDialog.m b/cocoa/base/ProblemDialog.m index 2cd79e62..d356a404 100644 --- a/cocoa/base/ProblemDialog.m +++ b/cocoa/base/ProblemDialog.m @@ -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]; diff --git a/cocoa/base/PyDupeGuru.h b/cocoa/base/PyDupeGuru.h deleted file mode 100644 index afbac3af..00000000 --- a/cocoa/base/PyDupeGuru.h +++ /dev/null @@ -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 -#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 diff --git a/cocoa/base/ResultTable.h b/cocoa/base/ResultTable.h index e60b2da8..3b6fd43c 100644 --- a/cocoa/base/ResultTable.h +++ b/cocoa/base/ResultTable.h @@ -8,10 +8,10 @@ http://www.hardcoded.net/licenses/bsd_license #import #import -#import "HSTable2.h" +#import "HSTable.h" #import "PyResultTable.h" -@interface ResultTable : HSTable2 +@interface ResultTable : HSTable { NSSet *_deltaColumns; } diff --git a/cocoa/base/ResultTable.m b/cocoa/base/ResultTable.m index d35531ee..095ba859 100644 --- a/cocoa/base/ResultTable.m +++ b/cocoa/base/ResultTable.m @@ -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 diff --git a/cocoa/base/ResultWindow.h b/cocoa/base/ResultWindow.h index de7215c9..4e0f4455 100644 --- a/cocoa/base/ResultWindow.h +++ b/cocoa/base/ResultWindow.h @@ -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; diff --git a/cocoa/base/ResultWindow.m b/cocoa/base/ResultWindow.m index b934ab6d..f9e6431f 100644 --- a/cocoa/base/ResultWindow.m +++ b/cocoa/base/ResultWindow.m @@ -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 { diff --git a/cocoa/base/en.lproj/MainMenu.xib b/cocoa/base/en.lproj/MainMenu.xib index bcea99c8..0640310c 100644 --- a/cocoa/base/en.lproj/MainMenu.xib +++ b/cocoa/base/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 11B26 - 1617 - 1138 - 566.00 + 11C74 + 1938 + 1138.23 + 567.00 com.apple.InterfaceBuilder.CocoaPlugin - 1617 + 1938 NSMenu @@ -18,7 +18,10 @@ com.apple.InterfaceBuilder.CocoaPlugin - + + PluginDependencyRecalculationVersion + + NSApplication @@ -668,31 +671,12 @@ AppDelegate - - PyDupeGuru - SUUpdater - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - terminate: @@ -725,14 +709,6 @@ 153 - - - performZoom: - - - - 198 - delegate @@ -742,20 +718,28 @@ 207 - - delegate - - + + performMiniaturize: + + - 208 + 37 - - py - - + + arrangeInFront: + + - 614 + 39 + + + + performZoom: + + + + 198 @@ -765,14 +749,6 @@ 925 - - - checkForUpdates: - - - - 951 - cut: @@ -797,46 +773,6 @@ 1005 - - - openWebsite: - - - - 1024 - - - - delegate - - - - 1175 - - - - showAboutBox: - - - - 1232 - - - - openHelp: - - - - 1233 - - - - recentResultsMenu - - - - 1242 - clearIgnoreList: @@ -1013,6 +949,70 @@ 1266 + + + reprioritizeResults: + + + + 1278 + + + + removeMarked: + + + + 1279 + + + + toggleQuicklookPanel: + + + + 1282 + + + + delegate + + + + 208 + + + + openWebsite: + + + + 1024 + + + + showAboutBox: + + + + 1232 + + + + openHelp: + + + + 1233 + + + + recentResultsMenu + + + + 1242 + columnsMenu @@ -1063,27 +1063,19 @@ - reprioritizeResults: - - + checkForUpdates: + + - 1278 + 951 - - removeMarked: - - + + delegate + + - 1279 - - - - toggleQuicklookPanel: - - - - 1282 + 1175 @@ -1508,12 +1500,6 @@ AppDelegate - - 613 - - - PyDupeGuru - 949 @@ -1654,7 +1640,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1772,6 +1757,25 @@ ./Classes/AppDelegateBase.h + + HSOutlineView + NSOutlineView + + copy: + id + + + copy: + + copy: + id + + + + IBProjectSource + ./Classes/HSOutlineView.h + + HSTableView NSTableView @@ -1780,17 +1784,9 @@ ./Classes/HSTableView.h - - HSWindowController - NSWindowController - - IBProjectSource - ./Classes/HSWindowController.h - - PrioritizeDialog - HSWindowController + NSWindowController id id @@ -1841,7 +1837,7 @@ ProblemDialog - HSWindowController + NSWindowController revealSelected: id @@ -1869,38 +1865,6 @@ ./Classes/ProblemDialog.h - - PyApp - PyFairware - - IBProjectSource - ./Classes/PyApp.h - - - - PyDupeGuru - PyDupeGuruBase - - IBProjectSource - ./Classes/PyDupeGuru.h - - - - PyDupeGuruBase - PyApp - - IBProjectSource - ./Classes/PyDupeGuruBase.h - - - - PyFairware - NSObject - - IBProjectSource - ./Classes/PyFairware.h - - ResultWindowBase NSWindowController @@ -2127,7 +2091,7 @@ com.apple.InterfaceBuilder.CocoaPlugin.macosx - + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 diff --git a/cocoa/inter/app.py b/cocoa/inter/app.py index b1237570..97893301 100644 --- a/cocoa/inter/app.py +++ b/cocoa/inter/app.py @@ -1,14 +1,13 @@ import logging +from objp.util import pyref, dontwrap from jobprogress import job import cocoa from cocoa import install_exception_hook, proxy -from cocoa.inter import signature, subproxy, PyFairware +from cocoa.inter2 import PyFairware, FairwareView from hscommon.trans import trget from core.app import JobType -from .result_table import PyResultTable -from .stats_label import PyStatsLabel tr = trget('ui') @@ -20,129 +19,138 @@ JOBID2TITLE = { JobType.Delete: tr("Sending to Trash"), } +class DupeGuruView(FairwareView): + def showExtraFairwareReminder(self): pass + class PyDupeGuruBase(PyFairware): + FOLLOW_PROTOCOLS = ['Worker'] + def _init(self, modelclass): logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s') install_exception_hook() appdata = proxy.getAppdataPath() - self.py = modelclass(self, appdata) + self.model = modelclass(self, appdata) self.progress = cocoa.ThreadedJobPerformer() - def bindCocoa_(self, cocoa): - self.cocoa = cocoa + #---Sub-proxies + def detailsPanel(self) -> pyref: + return self.model.details_panel - resultTable = subproxy('resultTable', 'result_table', PyResultTable) - statsLabel = subproxy('statsLabel', 'stats_label', PyStatsLabel) + def directoryTree(self) -> pyref: + return self.model.directory_tree + + def extraFairwareReminder(self) -> pyref: + return self.model.extra_fairware_reminder + + def prioritizeDialog(self) -> pyref: + return self.model.prioritize_dialog + + def statsLabel(self) -> pyref: + return self.model.stats_label + + def resultTable(self) -> pyref: + return self.model.result_table #---Directories - def addDirectory_(self, directory): - return self.py.add_directory(directory) + def addDirectory_(self, directory: str) -> int: + return self.model.add_directory(directory) #---Results def clearIgnoreList(self): - self.py.scanner.ignore_list.Clear() + self.model.scanner.ignore_list.Clear() def doScan(self): - self.py.start_scanning() + self.model.start_scanning() - def exportToXHTML(self): - return self.py.export_to_xhtml() + def exportToXHTML(self) -> str: + return self.model.export_to_xhtml() def loadSession(self): - self.py.load() + self.model.load() - def loadResultsFrom_(self, filename): - self.py.load_from(filename) + def loadResultsFrom_(self, filename: str): + self.model.load_from(filename) def markAll(self): - self.py.mark_all() + self.model.mark_all() def markNone(self): - self.py.mark_none() + self.model.mark_none() def markInvert(self): - self.py.mark_invert() + self.model.mark_invert() def purgeIgnoreList(self): - self.py.purge_ignore_list() + self.model.purge_ignore_list() def toggleSelectedMark(self): - self.py.toggle_selected_mark_state() + self.model.toggle_selected_mark_state() def saveSession(self): - self.py.save() + self.model.save() - def saveResultsAs_(self, filename): - self.py.save_as(filename) + def saveResultsAs_(self, filename: str): + self.model.save_as(filename) #---Actions def addSelectedToIgnoreList(self): - self.py.add_selected_to_ignore_list() + self.model.add_selected_to_ignore_list() def deleteMarked(self): - self.py.delete_marked() + self.model.delete_marked() def hardlinkMarked(self): - self.py.delete_marked(replace_with_hardlinks=True) + self.model.delete_marked(replace_with_hardlinks=True) - def applyFilter_(self, filter): - self.py.apply_filter(filter) + def applyFilter_(self, filter: str): + self.model.apply_filter(filter) def makeSelectedReference(self): - self.py.make_selected_reference() + self.model.make_selected_reference() - def copyOrMove_markedTo_recreatePath_(self, copy, destination, recreate_path): - self.py.copy_or_move_marked(copy, destination, recreate_path) + def copyOrMove_markedTo_recreatePath_(self, copy: bool, destination: str, recreate_path: bool): + self.model.copy_or_move_marked(copy, destination, recreate_path) def openSelected(self): - self.py.open_selected() + self.model.open_selected() def removeMarked(self): - self.py.remove_marked() - - def renameSelected_(self,newname): - return self.py.rename_selected(newname) + self.model.remove_marked() def revealSelected(self): - self.py.reveal_selected() + self.model.reveal_selected() - def invokeCommand_(self, cmd): - self.py.invoke_command(cmd) + def invokeCommand_(self, cmd: str): + self.model.invoke_command(cmd) #---Information - def getIgnoreListCount(self): - return len(self.py.scanner.ignore_list) + def getIgnoreListCount(self) -> int: + return len(self.model.scanner.ignore_list) - def getMarkCount(self): - return self.py.results.mark_count + def getMarkCount(self) -> int: + return self.model.results.mark_count - @signature('i@:') - def scanWasProblematic(self): - return bool(self.py.results.problems) + def scanWasProblematic(self) -> bool: + return bool(self.model.results.problems) - @signature('i@:') - def resultsAreModified(self): - return self.py.results.is_modified + def resultsAreModified(self) -> bool: + return self.model.results.is_modified #---Properties - @signature('v@:c') - def setMixFileKind_(self, mix_file_kind): - self.py.scanner.mix_file_kind = mix_file_kind + def setMixFileKind_(self, mix_file_kind: bool): + self.model.scanner.mix_file_kind = mix_file_kind - @signature('v@:c') - def setEscapeFilterRegexp_(self, escape_filter_regexp): - self.py.options['escape_filter_regexp'] = escape_filter_regexp + def setEscapeFilterRegexp_(self, escape_filter_regexp: bool): + self.model.options['escape_filter_regexp'] = escape_filter_regexp - @signature('v@:c') - def setRemoveEmptyFolders_(self, remove_empty_folders): - self.py.options['clean_empty_dirs'] = remove_empty_folders + def setRemoveEmptyFolders_(self, remove_empty_folders: bool): + self.model.options['clean_empty_dirs'] = remove_empty_folders - @signature('v@:c') - def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches): - self.py.options['ignore_hardlink_matches'] = ignore_hardlink_matches + def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches: bool): + self.model.options['ignore_hardlink_matches'] = ignore_hardlink_matches #---Worker - def getJobProgress(self): + def getJobProgress(self) -> object: # NSNumber try: return self.progress.last_progress except AttributeError: @@ -151,7 +159,7 @@ class PyDupeGuruBase(PyFairware): # is sent), but it happens anyway, so there we go. ref: #106 return -1 - def getJobDesc(self): + def getJobDesc(self) -> str: try: return self.progress.last_desc except AttributeError: @@ -161,16 +169,19 @@ class PyDupeGuruBase(PyFairware): def cancelJob(self): self.progress.job_cancelled = True - def jobCompleted_(self, jobid): - self.py._job_completed(jobid) + def jobCompleted_(self, jobid: str): + self.model._job_completed(jobid) #--- model --> view + @dontwrap def open_path(self, path): proxy.openPath_(str(path)) + @dontwrap def reveal_path(self, path): proxy.revealPath_(str(path)) + @dontwrap def start_job(self, jobid, func, args=()): try: j = self.progress.create_job() @@ -182,9 +193,7 @@ class PyDupeGuruBase(PyFairware): ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid} proxy.postNotification_userInfo_('JobStarted', ud) + @dontwrap def show_extra_fairware_reminder(self): self.cocoa.showExtraFairwareReminder() - def show_message(self, msg): - self.cocoa.showMessage_(msg) - diff --git a/cocoa/inter/app_se.py b/cocoa/inter/app_se.py index c5779c2c..3ac3de6d 100644 --- a/cocoa/inter/app_se.py +++ b/cocoa/inter/app_se.py @@ -13,9 +13,11 @@ from hscommon import io from hscommon.path import Path from cocoa import proxy +from core.scanner import ScanType from core import fs from core.directories import Directories as DirectoriesBase, DirectoryState from core_se.app import DupeGuru as DupeGuruBase +from .app import PyDupeGuruBase def is_bundle(str_path): uti = proxy.getUTI_(str_path) @@ -70,3 +72,33 @@ class DupeGuru(DupeGuruBase): DupeGuruBase.__init__(self, view, appdata) self.directories = Directories() + +class PyDupeGuru(PyDupeGuruBase): + def __init__(self): + self._init(DupeGuru) + import __main__ + __main__.APP_INSTANCE = self.model + + #---Properties + def setMinMatchPercentage_(self, percentage: int): + self.model.scanner.min_match_percentage = int(percentage) + + def setScanType_(self, scan_type: int): + try: + self.model.scanner.scan_type = [ + ScanType.Filename, + ScanType.Contents, + ScanType.Folders, + ][scan_type] + except IndexError: + pass + + def setWordWeighting_(self, words_are_weighted: bool): + self.model.scanner.word_weighting = words_are_weighted + + def setMatchSimilarWords_(self, match_similar_words: bool): + self.model.scanner.match_similar_words = match_similar_words + + def setSizeThreshold_(self, size_threshold: int): + self.model.scanner.size_threshold = size_threshold + diff --git a/cocoa/inter/details_panel.py b/cocoa/inter/details_panel.py index b2d17851..4ac39d9a 100644 --- a/cocoa/inter/details_panel.py +++ b/cocoa/inter/details_panel.py @@ -1,9 +1,9 @@ -from cocoa.inter2 import PyGUIObject2, GUIObjectView +from cocoa.inter2 import PyGUIObject, GUIObjectView class DetailsPanelView(GUIObjectView): pass -class PyDetailsPanel(PyGUIObject2): +class PyDetailsPanel(PyGUIObject): def numberOfRows(self) -> int: return self.model.row_count() diff --git a/cocoa/inter/directory_outline.py b/cocoa/inter/directory_outline.py index 57832b25..127f6640 100644 --- a/cocoa/inter/directory_outline.py +++ b/cocoa/inter/directory_outline.py @@ -1,10 +1,10 @@ from objp.util import dontwrap -from cocoa.inter2 import PyOutline2, GUIObjectView +from cocoa.inter2 import PyOutline, GUIObjectView class DirectoryOutlineView(GUIObjectView): pass -class PyDirectoryOutline(PyOutline2): +class PyDirectoryOutline(PyOutline): def addDirectory_(self, path: str): self.model.add_directory(path) diff --git a/cocoa/inter/extra_fairware_reminder.py b/cocoa/inter/extra_fairware_reminder.py index af87e557..47b9871c 100644 --- a/cocoa/inter/extra_fairware_reminder.py +++ b/cocoa/inter/extra_fairware_reminder.py @@ -1,5 +1,5 @@ from objp.util import dontwrap -from cocoa.inter2 import PyGUIObject2 +from cocoa.inter2 import PyGUIObject class ExtraFairwareReminderView: def startTimer(self): pass @@ -7,7 +7,7 @@ class ExtraFairwareReminderView: def setButtonText_(self, text: str): pass; def enableButton(self): pass -class PyExtraFairwareReminder(PyGUIObject2): +class PyExtraFairwareReminder(PyGUIObject): def start(self): self.model.start() diff --git a/cocoa/inter/prioritize_dialog.py b/cocoa/inter/prioritize_dialog.py index 769bc026..63da1de2 100644 --- a/cocoa/inter/prioritize_dialog.py +++ b/cocoa/inter/prioritize_dialog.py @@ -1,10 +1,10 @@ from objp.util import pyref -from cocoa.inter2 import PyGUIObject2, GUIObjectView +from cocoa.inter2 import PyGUIObject, GUIObjectView class PrioritizeDialogView(GUIObjectView): pass -class PyPrioritizeDialog(PyGUIObject2): +class PyPrioritizeDialog(PyGUIObject): def categoryList(self) -> pyref: return self.model.category_list diff --git a/cocoa/inter/prioritize_list.py b/cocoa/inter/prioritize_list.py index 5d525bc9..171c2a23 100644 --- a/cocoa/inter/prioritize_list.py +++ b/cocoa/inter/prioritize_list.py @@ -1,8 +1,8 @@ -from cocoa.inter2 import PySelectableList2, SelectableListView +from cocoa.inter2 import PySelectableList, SelectableListView class PrioritizeListView(SelectableListView): pass -class PyPrioritizeList(PySelectableList2): +class PyPrioritizeList(PySelectableList): def moveIndexes_toIndex_(self, indexes: list, dest_index: int): self.model.move_indexes(indexes, dest_index) diff --git a/cocoa/inter/problem_dialog.py b/cocoa/inter/problem_dialog.py index 7d9374ad..b5fabaa5 100644 --- a/cocoa/inter/problem_dialog.py +++ b/cocoa/inter/problem_dialog.py @@ -1,7 +1,7 @@ from objp.util import pyref -from cocoa.inter2 import PyGUIObject2 +from cocoa.inter2 import PyGUIObject -class PyProblemDialog(PyGUIObject2): +class PyProblemDialog(PyGUIObject): def problemTable(self) -> pyref: return self.model.problem_table diff --git a/cocoa/inter/result_table.py b/cocoa/inter/result_table.py index 5ae424a9..2b8701ed 100644 --- a/cocoa/inter/result_table.py +++ b/cocoa/inter/result_table.py @@ -1,10 +1,10 @@ from objp.util import dontwrap -from cocoa.inter2 import PyTable2, TableView +from cocoa.inter2 import PyTable, TableView class ResultTableView(TableView): def invalidateMarkings(self): pass -class PyResultTable(PyTable2): +class PyResultTable(PyTable): def powerMarkerMode(self) -> bool: return self.model.power_marker diff --git a/cocoa/inter/stats_label.py b/cocoa/inter/stats_label.py index f484d7be..b36fbcb0 100644 --- a/cocoa/inter/stats_label.py +++ b/cocoa/inter/stats_label.py @@ -1,9 +1,9 @@ -from cocoa.inter2 import PyGUIObject2, GUIObjectView +from cocoa.inter2 import PyGUIObject, GUIObjectView class StatsLabelView(GUIObjectView): pass -class PyStatsLabel(PyGUIObject2): +class PyStatsLabel(PyGUIObject): def display(self) -> str: return self.model.display diff --git a/cocoa/se/AppDelegate.h b/cocoa/se/AppDelegate.h index 669b49e2..7d95cf6d 100644 --- a/cocoa/se/AppDelegate.h +++ b/cocoa/se/AppDelegate.h @@ -11,5 +11,4 @@ http://www.hardcoded.net/licenses/bsd_license #import "PyDupeGuru.h" @interface AppDelegate : AppDelegateBase {} -- (PyDupeGuru *)py; @end diff --git a/cocoa/se/AppDelegate.m b/cocoa/se/AppDelegate.m index aac9482c..47c0589b 100644 --- a/cocoa/se/AppDelegate.m +++ b/cocoa/se/AppDelegate.m @@ -62,6 +62,4 @@ http://www.hardcoded.net/licenses/bsd_license { return [[ResultWindow alloc] initWithParentApp:self]; } - -- (PyDupeGuru *)py { return (PyDupeGuru *)py; } @end diff --git a/cocoa/se/PyDupeGuru.h b/cocoa/se/PyDupeGuru.h deleted file mode 100644 index 17e8a826..00000000 --- a/cocoa/se/PyDupeGuru.h +++ /dev/null @@ -1,16 +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 -#import "../base/PyDupeGuru.h" - -@interface PyDupeGuru : PyDupeGuruBase -//Scanning options -- (void)setWordWeighting:(NSNumber *)words_are_weighted; -- (void)setMatchSimilarWords:(NSNumber *)match_similar_words; -@end diff --git a/cocoa/se/ResultWindow.m b/cocoa/se/ResultWindow.m index 43cc3e40..ac767a0f 100644 --- a/cocoa/se/ResultWindow.m +++ b/cocoa/se/ResultWindow.m @@ -39,15 +39,14 @@ http://www.hardcoded.net/licenses/bsd_license - (void)setScanOptions { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - PyDupeGuru *_py = (PyDupeGuru *)py; - [_py setScanType:[ud objectForKey:@"scanType"]]; - [_py setMinMatchPercentage:[ud objectForKey:@"minMatchPercentage"]]; - [_py setWordWeighting:[ud objectForKey:@"wordWeighting"]]; - [_py setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; - [_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; - [_py setMatchSimilarWords:[ud objectForKey:@"matchSimilarWords"]]; + [model setScanType:n2b([ud objectForKey:@"scanType"])]; + [model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])]; + [model setWordWeighting:n2b([ud objectForKey:@"wordWeighting"])]; + [model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; + [model setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; + [model setMatchSimilarWords:n2b([ud objectForKey:@"matchSimilarWords"])]; int smallFileThreshold = [ud integerForKey:@"smallFileThreshold"]; // In KB int sizeThreshold = [ud boolForKey:@"ignoreSmallFiles"] ? smallFileThreshold * 1024 : 0; // The py side wants bytes - [_py setSizeThreshold:sizeThreshold]; + [model setSizeThreshold:sizeThreshold]; } @end diff --git a/cocoa/se/dg_cocoa.py b/cocoa/se/dg_cocoa.py index dfb8dd63..a40ecf16 100644 --- a/cocoa/se/dg_cocoa.py +++ b/cocoa/se/dg_cocoa.py @@ -7,12 +7,8 @@ from hscommon.trans import install_gettext_trans_under_cocoa install_gettext_trans_under_cocoa() -from cocoa.inter import signature -from cocoa.inter2 import PySelectableList2, PyColumns2, PyTable2 +from cocoa.inter2 import PySelectableList, PyColumns, PyTable -from core.scanner import ScanType - -from inter.app import PyDupeGuruBase from inter.details_panel import PyDetailsPanel from inter.directory_outline import PyDirectoryOutline from inter.extra_fairware_reminder import PyExtraFairwareReminder @@ -21,40 +17,4 @@ from inter.prioritize_list import PyPrioritizeList from inter.problem_dialog import PyProblemDialog from inter.result_table import PyResultTable from inter.stats_label import PyStatsLabel -from inter.app_se import DupeGuru - -# XXX temporary hack -APP_INSTANCE = None - -class PyDupeGuru(PyDupeGuruBase): - def init(self): - self = super(PyDupeGuru,self).init() - self._init(DupeGuru) - global APP_INSTANCE - APP_INSTANCE = self.py - return self - - #---Properties - def setMinMatchPercentage_(self,percentage): - self.py.scanner.min_match_percentage = int(percentage) - - def setScanType_(self,scan_type): - try: - self.py.scanner.scan_type = [ - ScanType.Filename, - ScanType.Contents, - ScanType.Folders, - ][scan_type] - except IndexError: - pass - - def setWordWeighting_(self,words_are_weighted): - self.py.scanner.word_weighting = words_are_weighted - - def setMatchSimilarWords_(self,match_similar_words): - self.py.scanner.match_similar_words = match_similar_words - - @signature('v@:i') - def setSizeThreshold_(self, size_threshold): - self.py.scanner.size_threshold = size_threshold - +from inter.app_se import PyDupeGuru \ No newline at end of file diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 5e1d6710..f1d549c5 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -16,10 +16,8 @@ CE19BC6411199231007CCEB0 /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE19BC6111199231007CCEB0 /* progress.xib */; }; CE1D091814BE0C6400CA6B8C /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D091514BE0C6400CA6B8C /* ObjP.m */; }; CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */; }; - CE275C5014BF6C5600265960 /* HSColumns2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C4D14BF6C5600265960 /* HSColumns2.m */; }; - CE275C5114BF6C5600265960 /* HSOutline2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C4F14BF6C5600265960 /* HSOutline2.m */; }; CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5514BF712B00265960 /* PyDirectoryOutline.m */; }; - CE275C5A14BF71DF00265960 /* PyColumns2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5914BF71DF00265960 /* PyColumns2.m */; }; + CE275C5A14BF71DF00265960 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5914BF71DF00265960 /* PyColumns.m */; }; CE27D3C412CCA43800859E67 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE27D3C312CCA43800859E67 /* HSAboutBox.m */; }; CE31819D13D85D9B00B6D649 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819913D85D9B00B6D649 /* about.xib */; }; CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819B13D85D9B00B6D649 /* ErrorReportWindow.xib */; }; @@ -31,12 +29,10 @@ CE4746D314C09C12001A66DE /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4746D214C09C12001A66DE /* PyProblemDialog.m */; }; CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5335FB142BBFAF008E5374 /* HSQuicklook.m */; }; CE533603142BC034008E5374 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE533602142BC034008E5374 /* Quartz.framework */; }; - CE548CC014BF902000D180CB /* HSPopUpList2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CBD14BF902000D180CB /* HSPopUpList2.m */; }; - CE548CC114BF902000D180CB /* HSSelectableList2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CBF14BF902000D180CB /* HSSelectableList2.m */; }; CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */; }; CE548CC714BF903D00D180CB /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC514BF903D00D180CB /* PyPrioritizeList.m */; }; - CE587E9A14C07BCF004CA031 /* PyOutline2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9814C07BCF004CA031 /* PyOutline2.m */; }; - CE587E9E14C0801F004CA031 /* PySelectableList2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9D14C0801F004CA031 /* PySelectableList2.m */; }; + CE587E9A14C07BCF004CA031 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9814C07BCF004CA031 /* PyOutline.m */; }; + CE587E9E14C0801F004CA031 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9D14C0801F004CA031 /* PySelectableList.m */; }; CE647E571173024A006D28BA /* ProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE647E551173024A006D28BA /* ProblemDialog.m */; }; CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */; }; CE665B3313225AF8003F5CFB /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE665B3113225AF8003F5CFB /* ExtraFairwareReminder.xib */; }; @@ -62,15 +58,22 @@ CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */; }; CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */; }; CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */; }; - CE9FC22D14C080CF005C31FD /* PyGUIObject2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22C14C080CF005C31FD /* PyGUIObject2.m */; }; - CE9FC23014C08622005C31FD /* PyTable2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22F14C08622005C31FD /* PyTable2.m */; }; + CE9FC22D14C080CF005C31FD /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22C14C080CF005C31FD /* PyGUIObject.m */; }; + CE9FC23014C08622005C31FD /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22F14C08622005C31FD /* PyTable.m */; }; CE9FC23314C0866F005C31FD /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC23214C0866F005C31FD /* PyResultTable.m */; }; - CE9FC23614C08A7E005C31FD /* HSTable2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC23514C08A7E005C31FD /* HSTable2.m */; }; - CE9FC23914C08A92005C31FD /* HSGUIController2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC23814C08A92005C31FD /* HSGUIController2.m */; }; CEA175CA1461E8E600776591 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA175C91461E8E600776591 /* locale */; }; CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */; }; CEE7EA130FE675C80004E467 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7EA120FE675C80004E467 /* DetailsPanel.m */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; + CEEF2A1814C0A5A60082545A /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */; }; + CEEF2A1D14C0A8480082545A /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */; }; + CEEF2A1E14C0A8480082545A /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1C14C0A8480082545A /* PyFairware.m */; }; + CEEF2A3C14C0B9050082545A /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3114C0B9050082545A /* HSColumns.m */; }; + CEEF2A3D14C0B9050082545A /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3314C0B9050082545A /* HSGUIController.m */; }; + CEEF2A3E14C0B9050082545A /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3514C0B9050082545A /* HSOutline.m */; }; + CEEF2A3F14C0B9050082545A /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3714C0B9050082545A /* HSPopUpList.m */; }; + CEEF2A4014C0B9050082545A /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3914C0B9050082545A /* HSSelectableList.m */; }; + CEEF2A4114C0B9050082545A /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3B14C0B9050082545A /* HSTable.m */; }; CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */; }; CEFC294609C89E3D00D9F998 /* folder32.png in Resources */ = {isa = PBXBuildFile; fileRef = CEFC294509C89E3D00D9F998 /* folder32.png */; }; CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8B0FC9517500CD5728 /* Dialogs.m */; }; @@ -140,14 +143,10 @@ CE1D091514BE0C6400CA6B8C /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = ""; }; CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = ""; }; CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = ""; }; - CE275C4C14BF6C5600265960 /* HSColumns2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns2.h; sourceTree = ""; }; - CE275C4D14BF6C5600265960 /* HSColumns2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns2.m; sourceTree = ""; }; - CE275C4E14BF6C5600265960 /* HSOutline2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline2.h; sourceTree = ""; }; - CE275C4F14BF6C5600265960 /* HSOutline2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline2.m; sourceTree = ""; }; CE275C5414BF712B00265960 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = ""; }; CE275C5514BF712B00265960 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = ""; }; - CE275C5814BF71DF00265960 /* PyColumns2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns2.h; sourceTree = ""; }; - CE275C5914BF71DF00265960 /* PyColumns2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns2.m; sourceTree = ""; }; + CE275C5814BF71DF00265960 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = ""; }; + CE275C5914BF71DF00265960 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = ""; }; CE27D3C212CCA43800859E67 /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; }; CE27D3C312CCA43800859E67 /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; }; CE31819A13D85D9B00B6D649 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../en.lproj/about.xib; sourceTree = ""; }; @@ -169,18 +168,14 @@ CE5335FA142BBFAF008E5374 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = ""; }; CE5335FB142BBFAF008E5374 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = ""; }; CE533602142BC034008E5374 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; - CE548CBC14BF902000D180CB /* HSPopUpList2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList2.h; sourceTree = ""; }; - CE548CBD14BF902000D180CB /* HSPopUpList2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList2.m; sourceTree = ""; }; - CE548CBE14BF902000D180CB /* HSSelectableList2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList2.h; sourceTree = ""; }; - CE548CBF14BF902000D180CB /* HSSelectableList2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList2.m; sourceTree = ""; }; CE548CC214BF903D00D180CB /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = ""; }; CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = ""; }; CE548CC414BF903D00D180CB /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = ""; }; CE548CC514BF903D00D180CB /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = ""; }; - CE587E9714C07BCF004CA031 /* PyOutline2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline2.h; sourceTree = ""; }; - CE587E9814C07BCF004CA031 /* PyOutline2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline2.m; sourceTree = ""; }; - CE587E9C14C0801F004CA031 /* PySelectableList2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList2.h; sourceTree = ""; }; - CE587E9D14C0801F004CA031 /* PySelectableList2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList2.m; sourceTree = ""; }; + CE587E9714C07BCF004CA031 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = ""; }; + CE587E9814C07BCF004CA031 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = ""; }; + CE587E9C14C0801F004CA031 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = ""; }; + CE587E9D14C0801F004CA031 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = ""; }; CE647E541173024A006D28BA /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; CE647E551173024A006D28BA /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; @@ -202,7 +197,6 @@ CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; CE76FDF5111EE561006618EA /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; CE76FDF6111EE561006618EA /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; - CE79638212536C6E008D405B /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; }; CE79638512536C94008D405B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE79638A12536F4E008D405B /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE79638B12536F4E008D405B /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; @@ -241,16 +235,12 @@ CE9777D0141F8CB400C13FB5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = ""; }; CE9D842814BE2AE900184165 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = ""; }; CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = ""; }; - CE9FC22B14C080CF005C31FD /* PyGUIObject2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject2.h; sourceTree = ""; }; - CE9FC22C14C080CF005C31FD /* PyGUIObject2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject2.m; sourceTree = ""; }; - CE9FC22E14C08622005C31FD /* PyTable2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable2.h; sourceTree = ""; }; - CE9FC22F14C08622005C31FD /* PyTable2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable2.m; sourceTree = ""; }; + CE9FC22B14C080CF005C31FD /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = ""; }; + CE9FC22C14C080CF005C31FD /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = ""; }; + CE9FC22E14C08622005C31FD /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = ""; }; + CE9FC22F14C08622005C31FD /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = ""; }; CE9FC23114C0866F005C31FD /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = ""; }; CE9FC23214C0866F005C31FD /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = ""; }; - CE9FC23414C08A73005C31FD /* HSTable2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable2.h; sourceTree = ""; }; - CE9FC23514C08A7E005C31FD /* HSTable2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable2.m; sourceTree = ""; }; - CE9FC23714C08A92005C31FD /* HSGUIController2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController2.h; sourceTree = ""; }; - CE9FC23814C08A92005C31FD /* HSGUIController2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController2.m; sourceTree = ""; }; CEA175C91461E8E600776591 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = ""; }; CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = ""; }; CEB57990146ADC5100EDF7D7 /* HSConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSConsts.h; path = ../../cocoalib/HSConsts.h; sourceTree = ""; }; @@ -274,11 +264,25 @@ CEE7EA110FE675C80004E467 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; }; CEE7EA120FE675C80004E467 /* DetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DetailsPanel.m; path = ../base/DetailsPanel.m; sourceTree = SOURCE_ROOT; }; CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = ""; }; - CEEF2A1114C09EDF0082545A /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = ""; }; - CEEF2A1214C09EDF0082545A /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = ""; }; - CEEF2A1314C09EDF0082545A /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = ""; }; - CEEF2A1414C09EDF0082545A /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = ""; }; - CEEF2A1514C09EDF0082545A /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = ""; }; + CEEF2A1614C0A5A60082545A /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = ""; }; + CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = ""; }; + CEEF2A1914C0A8480082545A /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = ""; }; + CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = ""; }; + CEEF2A1B14C0A8480082545A /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = ""; }; + CEEF2A1C14C0A8480082545A /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = ""; }; + CEEF2A3014C0B9050082545A /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = ""; }; + CEEF2A3114C0B9050082545A /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = ""; }; + CEEF2A3214C0B9050082545A /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = ""; }; + CEEF2A3314C0B9050082545A /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = ""; }; + CEEF2A3414C0B9050082545A /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = ""; }; + CEEF2A3514C0B9050082545A /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = ""; }; + CEEF2A3614C0B9050082545A /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = ""; }; + CEEF2A3714C0B9050082545A /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = ""; }; + CEEF2A3814C0B9050082545A /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = ""; }; + CEEF2A3914C0B9050082545A /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = ""; }; + CEEF2A3A14C0B9050082545A /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = ""; }; + CEEF2A3B14C0B9050082545A /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = ""; }; + CEEF2A4214C0BB430082545A /* Worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Worker.h; path = ../../cocoalib/Worker.h; sourceTree = ""; }; CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; CEF27A9C1423EAD90048ADFA /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = ""; }; @@ -291,7 +295,6 @@ CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; }; CEFC7F900FC9517500CD5728 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; CEFC7F910FC9517500CD5728 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; - CEFC7F920FC9517500CD5728 /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; }; CEFC7F9A0FC9517500CD5728 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; CEFC7F9B0FC9517500CD5728 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; @@ -301,10 +304,8 @@ CEFC7FB30FC951A700CD5728 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; CEFC7FB40FC951A700CD5728 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; - CEFC7FB60FC951A700CD5728 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; }; CEFC7FB70FC951A700CD5728 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; CEFC7FB80FC951A700CD5728 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; - CEFF18A009A4D387005E6321 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -327,7 +328,6 @@ children = ( CE381C9509914ACE003581CE /* AppDelegate.h */, CE381C9409914ACE003581CE /* AppDelegate.m */, - CEFF18A009A4D387005E6321 /* PyDupeGuru.h */, CE381C9B09914ADF003581CE /* ResultWindow.h */, CE381C9A09914ADF003581CE /* ResultWindow.m */, 29B97316FDCFA39411CA2CEA /* main.m */, @@ -418,16 +418,16 @@ CE1D091314BE0C6400CA6B8C /* autogen */ = { isa = PBXGroup; children = ( - CE9FC22B14C080CF005C31FD /* PyGUIObject2.h */, - CE9FC22C14C080CF005C31FD /* PyGUIObject2.m */, - CE275C5814BF71DF00265960 /* PyColumns2.h */, - CE275C5914BF71DF00265960 /* PyColumns2.m */, - CE587E9714C07BCF004CA031 /* PyOutline2.h */, - CE587E9814C07BCF004CA031 /* PyOutline2.m */, - CE587E9C14C0801F004CA031 /* PySelectableList2.h */, - CE587E9D14C0801F004CA031 /* PySelectableList2.m */, - CE9FC22E14C08622005C31FD /* PyTable2.h */, - CE9FC22F14C08622005C31FD /* PyTable2.m */, + CE9FC22B14C080CF005C31FD /* PyGUIObject.h */, + CE9FC22C14C080CF005C31FD /* PyGUIObject.m */, + CE275C5814BF71DF00265960 /* PyColumns.h */, + CE275C5914BF71DF00265960 /* PyColumns.m */, + CE587E9714C07BCF004CA031 /* PyOutline.h */, + CE587E9814C07BCF004CA031 /* PyOutline.m */, + CE587E9C14C0801F004CA031 /* PySelectableList.h */, + CE587E9D14C0801F004CA031 /* PySelectableList.m */, + CE9FC22E14C08622005C31FD /* PyTable.h */, + CE9FC22F14C08622005C31FD /* PyTable.m */, CE3A3B4714BF19B8007898AB /* PyDetailsPanel.h */, CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */, CE9D842814BE2AE900184165 /* PyExtraFairwareReminder.h */, @@ -446,6 +446,12 @@ CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */, CE1D091414BE0C6400CA6B8C /* ObjP.h */, CE1D091514BE0C6400CA6B8C /* ObjP.m */, + CEEF2A1614C0A5A60082545A /* PyDupeGuru.h */, + CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */, + CEEF2A1914C0A8480082545A /* PyDupeGuruBase.h */, + CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */, + CEEF2A1B14C0A8480082545A /* PyFairware.h */, + CEEF2A1C14C0A8480082545A /* PyFairware.m */, ); name = autogen; path = ../autogen; @@ -470,36 +476,23 @@ CE76FDC7111EE38E006618EA /* controllers */ = { isa = PBXGroup; children = ( - CE275C4C14BF6C5600265960 /* HSColumns2.h */, - CE275C4D14BF6C5600265960 /* HSColumns2.m */, - CE275C4E14BF6C5600265960 /* HSOutline2.h */, - CE275C4F14BF6C5600265960 /* HSOutline2.m */, - CE9FC23714C08A92005C31FD /* HSGUIController2.h */, - CE9FC23814C08A92005C31FD /* HSGUIController2.m */, - CE9FC23414C08A73005C31FD /* HSTable2.h */, - CE9FC23514C08A7E005C31FD /* HSTable2.m */, - CE548CBC14BF902000D180CB /* HSPopUpList2.h */, - CE548CBD14BF902000D180CB /* HSPopUpList2.m */, - CE548CBE14BF902000D180CB /* HSSelectableList2.h */, - CE548CBF14BF902000D180CB /* HSSelectableList2.m */, + CEEF2A3014C0B9050082545A /* HSColumns.h */, + CEEF2A3114C0B9050082545A /* HSColumns.m */, + CEEF2A3214C0B9050082545A /* HSGUIController.h */, + CEEF2A3314C0B9050082545A /* HSGUIController.m */, + CEEF2A3414C0B9050082545A /* HSOutline.h */, + CEEF2A3514C0B9050082545A /* HSOutline.m */, + CEEF2A3614C0B9050082545A /* HSPopUpList.h */, + CEEF2A3714C0B9050082545A /* HSPopUpList.m */, + CEEF2A3814C0B9050082545A /* HSSelectableList.h */, + CEEF2A3914C0B9050082545A /* HSSelectableList.m */, + CEEF2A3A14C0B9050082545A /* HSTable.h */, + CEEF2A3B14C0B9050082545A /* HSTable.m */, ); name = controllers; path = ../../cocoalib/controllers; sourceTree = SOURCE_ROOT; }; - CEEF2A1014C09EDF0082545A /* proxies */ = { - isa = PBXGroup; - children = ( - CEEF2A1114C09EDF0082545A /* PyColumns.h */, - CEEF2A1214C09EDF0082545A /* PyGUI.h */, - CEEF2A1314C09EDF0082545A /* PyOutline.h */, - CEEF2A1414C09EDF0082545A /* PySelectableList.h */, - CEEF2A1514C09EDF0082545A /* PyTable.h */, - ); - name = proxies; - path = ../../cocoalib/proxies; - sourceTree = ""; - }; CEEFC0CA10943849001F3A39 /* xib */ = { isa = PBXGroup; children = ( @@ -526,7 +519,6 @@ CEFC7F890FC9513600CD5728 /* cocoalib */ = { isa = PBXGroup; children = ( - CEEF2A1014C09EDF0082545A /* proxies */, CE76FDF5111EE561006618EA /* NSEventAdditions.h */, CE76FDF6111EE561006618EA /* NSEventAdditions.m */, CE76FDC7111EE38E006618EA /* controllers */, @@ -539,16 +531,15 @@ CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */, CE79638A12536F4E008D405B /* HSFairwareReminder.h */, CE79638B12536F4E008D405B /* HSFairwareReminder.m */, - CE79638212536C6E008D405B /* PyFairware.h */, CE27D3C212CCA43800859E67 /* HSAboutBox.h */, CE27D3C312CCA43800859E67 /* HSAboutBox.m */, CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */, CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */, CE5335FA142BBFAF008E5374 /* HSQuicklook.h */, CE5335FB142BBFAF008E5374 /* HSQuicklook.m */, + CEEF2A4214C0BB430082545A /* Worker.h */, CEFC7F900FC9517500CD5728 /* ProgressController.h */, CEFC7F910FC9517500CD5728 /* ProgressController.m */, - CEFC7F920FC9517500CD5728 /* PyApp.h */, CEFC7F9A0FC9517500CD5728 /* Utils.h */, CEFC7F9B0FC9517500CD5728 /* Utils.m */, CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */, @@ -576,7 +567,6 @@ CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */, CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */, CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */, - CEFC7FB60FC951A700CD5728 /* PyDupeGuru.h */, CEFC7FB70FC951A700CD5728 /* ResultWindow.h */, CEFC7FB80FC951A700CD5728 /* ResultWindow.m */, CE647E541173024A006D28BA /* ProblemDialog.h */, @@ -713,22 +703,25 @@ CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */, CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */, CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */, - CE275C5014BF6C5600265960 /* HSColumns2.m in Sources */, - CE275C5114BF6C5600265960 /* HSOutline2.m in Sources */, CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */, - CE275C5A14BF71DF00265960 /* PyColumns2.m in Sources */, - CE548CC014BF902000D180CB /* HSPopUpList2.m in Sources */, - CE548CC114BF902000D180CB /* HSSelectableList2.m in Sources */, + CE275C5A14BF71DF00265960 /* PyColumns.m in Sources */, CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */, CE548CC714BF903D00D180CB /* PyPrioritizeList.m in Sources */, - CE587E9A14C07BCF004CA031 /* PyOutline2.m in Sources */, - CE587E9E14C0801F004CA031 /* PySelectableList2.m in Sources */, - CE9FC22D14C080CF005C31FD /* PyGUIObject2.m in Sources */, - CE9FC23014C08622005C31FD /* PyTable2.m in Sources */, + CE587E9A14C07BCF004CA031 /* PyOutline.m in Sources */, + CE587E9E14C0801F004CA031 /* PySelectableList.m in Sources */, + CE9FC22D14C080CF005C31FD /* PyGUIObject.m in Sources */, + CE9FC23014C08622005C31FD /* PyTable.m in Sources */, CE9FC23314C0866F005C31FD /* PyResultTable.m in Sources */, - CE9FC23614C08A7E005C31FD /* HSTable2.m in Sources */, - CE9FC23914C08A92005C31FD /* HSGUIController2.m in Sources */, CE4746D314C09C12001A66DE /* PyProblemDialog.m in Sources */, + CEEF2A1814C0A5A60082545A /* PyDupeGuru.m in Sources */, + CEEF2A1D14C0A8480082545A /* PyDupeGuruBase.m in Sources */, + CEEF2A1E14C0A8480082545A /* PyFairware.m in Sources */, + CEEF2A3C14C0B9050082545A /* HSColumns.m in Sources */, + CEEF2A3D14C0B9050082545A /* HSGUIController.m in Sources */, + CEEF2A3E14C0B9050082545A /* HSOutline.m in Sources */, + CEEF2A3F14C0B9050082545A /* HSPopUpList.m in Sources */, + CEEF2A4014C0B9050082545A /* HSSelectableList.m in Sources */, + CEEF2A4114C0B9050082545A /* HSTable.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };