mirror of
				https://github.com/arsenetar/dupeguru.git
				synced 2025-09-11 17:58:17 +00:00 
			
		
		
		
	Merge with objp branch.
This commit is contained in:
		
						commit
						9a2554d24e
					
				| @ -14,6 +14,7 @@ build | ||||
| dist | ||||
| install | ||||
| installer_tmp-cache | ||||
| cocoa/autogen | ||||
| cocoa/*/Info.plist | ||||
| cocoa/*/build | ||||
| cocoa/*/*.app | ||||
|  | ||||
							
								
								
									
										99
									
								
								build.py
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								build.py
									
									
									
									
									
								
							| @ -6,17 +6,20 @@ | ||||
| # which should be included with this package. The terms are also available at  | ||||
| # http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| import sys | ||||
| import os | ||||
| import os.path as op | ||||
| from optparse import OptionParser | ||||
| import shutil | ||||
| import json | ||||
| import importlib | ||||
| 
 | ||||
| from setuptools import setup, Extension | ||||
| 
 | ||||
| from hscommon import sphinxgen | ||||
| from hscommon.build import (add_to_pythonpath, print_and_do, copy_packages, filereplace, | ||||
|     get_module_version, build_all_cocoa_locs, move_all) | ||||
|     get_module_version, build_all_cocoa_locs, move_all, copy_sysconfig_files_for_embed, copy_all, | ||||
|     move) | ||||
| from hscommon import loc | ||||
| 
 | ||||
| def parse_args(): | ||||
| @ -28,6 +31,8 @@ def parse_args(): | ||||
|         help="Build only the help file") | ||||
|     parser.add_option('--loc', action='store_true', dest='loc', | ||||
|         help="Build only localization") | ||||
|     parser.add_option('--cocoamod', action='store_true', dest='cocoamod', | ||||
|         help="Build only Cocoa modules") | ||||
|     parser.add_option('--updatepot', action='store_true', dest='updatepot', | ||||
|         help="Generate .pot files from source code.") | ||||
|     parser.add_option('--mergepot', action='store_true', dest='mergepot', | ||||
| @ -36,26 +41,35 @@ def parse_args(): | ||||
|     return options | ||||
| 
 | ||||
| def build_cocoa(edition, dev): | ||||
|     from pluginbuilder import build_plugin | ||||
|     build_cocoa_proxy_module() | ||||
|     print("Building dg_cocoa.plugin") | ||||
|     build_cocoa_bridging_interfaces(edition) | ||||
|     print("Building the cocoa layer") | ||||
|     from pluginbuilder import copy_embeddable_python_dylib, get_python_header_folder, collect_dependencies | ||||
|     copy_embeddable_python_dylib('build') | ||||
|     if not op.exists('build/PythonHeaders'): | ||||
|         os.symlink(get_python_header_folder(), 'build/PythonHeaders') | ||||
|     if not op.exists('build/py'): | ||||
|         os.mkdir('build/py') | ||||
|     cocoa_project_path = 'cocoa/{0}'.format(edition) | ||||
|     shutil.copy(op.join(cocoa_project_path, 'dg_cocoa.py'), 'build') | ||||
|     specific_packages = { | ||||
|         'se': ['core_se'], | ||||
|         'me': ['core_me'], | ||||
|         'pe': ['core_pe'], | ||||
|     }[edition] | ||||
|     tocopy = ['core', 'hscommon', 'cocoa/inter', 'cocoalib/cocoa'] + specific_packages | ||||
|     copy_packages(tocopy, 'build', create_links=dev) | ||||
|     cocoa_project_path = 'cocoa/{0}'.format(edition) | ||||
|     shutil.copy(op.join(cocoa_project_path, 'dg_cocoa.py'), 'build') | ||||
|     os.chdir('build') | ||||
|     # We have to exclude PyQt4 specifically because it's conditionally imported in hscommon.trans | ||||
|     build_plugin('dg_cocoa.py', excludes=['PyQt4'], alias=dev) | ||||
|     os.chdir('..') | ||||
|     pluginpath = op.join(cocoa_project_path, 'dg_cocoa.plugin') | ||||
|     if op.exists(pluginpath): | ||||
|         shutil.rmtree(pluginpath) | ||||
|     shutil.move('build/dist/dg_cocoa.plugin', pluginpath) | ||||
|     if dev: | ||||
|         # collect dependencies, then override our own pckages with symlinks | ||||
|         collect_dependencies('build/dg_cocoa.py', 'build/py', excludes=['PyQt4']) | ||||
|         copy_packages(tocopy, 'build/py', create_links=True) | ||||
|     else: | ||||
|         copy_packages(tocopy, 'build') | ||||
|         sys.path.insert(0, 'build') | ||||
|         collect_dependencies('build/dg_cocoa.py', 'build/py', excludes=['PyQt4']) | ||||
|         del sys.path[0] | ||||
|     # Views are not referenced by python code, so they're not found by the collector. | ||||
|     copy_all('build/inter/*.so', 'build/py/inter') | ||||
|     copy_sysconfig_files_for_embed('build/py') | ||||
|     os.chdir(cocoa_project_path) | ||||
|     print('Generating Info.plist') | ||||
|     app_version = get_module_version('core_{}'.format(edition)) | ||||
| @ -155,19 +169,55 @@ def build_mergepot(): | ||||
|     loc.merge_pots_into_pos(op.join('hscommon', 'locale')) | ||||
|     loc.merge_pots_into_pos(op.join('qtlib', 'locale')) | ||||
| 
 | ||||
| def build_cocoa_ext(extname, dest, source_files, extra_frameworks=(), extra_includes=()): | ||||
|     extra_link_args = ["-framework", "CoreFoundation", "-framework", "Foundation"] | ||||
|     for extra in extra_frameworks: | ||||
|         extra_link_args += ['-framework', extra] | ||||
|     ext = Extension(extname, source_files, extra_link_args=extra_link_args, include_dirs=extra_includes) | ||||
|     setup(script_args=['build_ext', '--inplace'], ext_modules=[ext]) | ||||
|     fn = extname + '.so' | ||||
|     assert op.exists(fn) | ||||
|     move(fn, op.join(dest, fn)) | ||||
| 
 | ||||
| def build_cocoa_proxy_module(): | ||||
|     print("Building Cocoa Proxy") | ||||
|     import objp.p2o | ||||
|     objp.p2o.generate_python_proxy_code('cocoalib/cocoa/CocoaProxy.h', 'build/CocoaProxy.m') | ||||
|     exts = [ | ||||
|         Extension("CocoaProxy", ['cocoalib/cocoa/CocoaProxy.m', 'build/CocoaProxy.m', 'build/ObjP.m'], | ||||
|             extra_link_args=["-framework", "CoreFoundation", "-framework", "Foundation", "-framework", "AppKit"]), | ||||
|     ] | ||||
|     setup( | ||||
|         script_args = ['build_ext', '--inplace'], | ||||
|         ext_modules = exts, | ||||
|     ) | ||||
|     move_all('CocoaProxy*', 'cocoalib/cocoa') | ||||
|     build_cocoa_ext("CocoaProxy", 'cocoalib/cocoa', | ||||
|         ['cocoalib/cocoa/CocoaProxy.m', 'build/CocoaProxy.m', 'build/ObjP.m', 'cocoalib/HSErrorReportWindow.m'], | ||||
|         ['AppKit', 'CoreServices'], | ||||
|         ['cocoalib']) | ||||
| 
 | ||||
| def build_cocoa_bridging_interfaces(edition): | ||||
|     print("Building Cocoa Bridging Interfaces") | ||||
|     import objp.o2p | ||||
|     import objp.p2o | ||||
|     add_to_pythonpath('cocoa') | ||||
|     add_to_pythonpath('cocoalib') | ||||
|     from cocoa.inter 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 | ||||
|     from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView | ||||
|     from inter.prioritize_list import PyPrioritizeList, PrioritizeListView | ||||
|     from inter.problem_dialog import PyProblemDialog | ||||
|     from inter.result_table import PyResultTable, ResultTableView | ||||
|     from inter.stats_label import PyStatsLabel, StatsLabelView | ||||
|     from inter.app import PyDupeGuruBase, DupeGuruView | ||||
|     appmod = importlib.import_module('inter.app_{}'.format(edition)) | ||||
|     allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware, | ||||
|         PyDetailsPanel, PyDirectoryOutline, PyExtraFairwareReminder, PyPrioritizeDialog, | ||||
|         PyPrioritizeList, PyProblemDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase, | ||||
|         appmod.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, DupeGuruView] | ||||
|     clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses] | ||||
|     objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m') | ||||
|     build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m']) | ||||
| 
 | ||||
| def build_pe_modules(ui): | ||||
|     print("Building PE Modules") | ||||
| @ -227,6 +277,9 @@ def main(): | ||||
|         build_updatepot() | ||||
|     elif options.mergepot: | ||||
|         build_mergepot() | ||||
|     elif options.cocoamod: | ||||
|         build_cocoa_proxy_module() | ||||
|         build_cocoa_bridging_interfaces(edition) | ||||
|     else: | ||||
|         build_normal(edition, ui, dev) | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -25,7 +25,8 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (void)awakeFromNib | ||||
| { | ||||
|     [py bindCocoa:self]; | ||||
|     model = [[PyDupeGuru alloc] init]; | ||||
|     [model bindCallback:createCallback(@"DupeGuruView", self)]; | ||||
|     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 +46,10 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| /* Virtual */ | ||||
| 
 | ||||
| - (PyDupeGuruBase *)py { return py; } | ||||
| - (PyDupeGuru *)model | ||||
| { | ||||
|     return model; | ||||
| } | ||||
| 
 | ||||
| - (ResultWindowBase *)createResultWindow | ||||
| { | ||||
| @ -59,7 +63,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (DetailsPanel *)createDetailsPanel | ||||
| { | ||||
|     return [[DetailsPanel alloc] initWithPy:py]; | ||||
|     return [[DetailsPanel alloc] initWithPyRef:[model detailsPanel]]; | ||||
| } | ||||
| 
 | ||||
| - (NSString *)homepageURL | ||||
| @ -104,7 +108,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 +129,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 +161,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 +175,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 +190,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,16 +204,17 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (void)recentFileClicked:(NSString *)path | ||||
| { | ||||
|     [py loadResultsFrom:path]; | ||||
|     [model loadResultsFrom:path]; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* model --> view */ | ||||
| - (void)showExtraFairwareReminder | ||||
| { | ||||
|     ExtraFairwareReminder *dialog = [[ExtraFairwareReminder alloc] initWithPy:py]; | ||||
|     ExtraFairwareReminder *dialog = [[ExtraFairwareReminder alloc] initWithApp:model]; | ||||
|     [dialog start]; | ||||
|     [NSApp runModalForWindow:[dialog window]]; | ||||
|     [dialog close]; | ||||
|     [dialog release]; | ||||
| } | ||||
| 
 | ||||
| @ -225,11 +230,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 | ||||
|  | ||||
| @ -7,16 +7,17 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "HSWindowController.h" | ||||
| #import "PyApp.h" | ||||
| #import <Python.h> | ||||
| #import "PyDetailsPanel.h" | ||||
| 
 | ||||
| @interface DetailsPanel : HSWindowController | ||||
| @interface DetailsPanel : NSWindowController | ||||
| { | ||||
|     IBOutlet NSTableView *detailsTable; | ||||
|      | ||||
|     PyDetailsPanel *model; | ||||
| } | ||||
| - (id)initWithPy:(PyApp *)aPy; | ||||
| - (PyDetailsPanel *)py; | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef; | ||||
| - (PyDetailsPanel *)model; | ||||
| 
 | ||||
| - (BOOL)isVisible; | ||||
| - (void)toggleVisibility; | ||||
|  | ||||
| @ -10,23 +10,24 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Utils.h" | ||||
| 
 | ||||
| @implementation DetailsPanel | ||||
| - (id)initWithPy:(PyApp *)aPy | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef | ||||
| { | ||||
|     self = [super initWithNibName:@"DetailsPanel" pyClassName:@"PyDetailsPanel" pyParent:aPy]; | ||||
|     self = [super initWithWindowNibName:@"DetailsPanel"]; | ||||
|     [self window]; //So the detailsTable is initialized. | ||||
|     [self connect]; | ||||
|     model = [[PyDetailsPanel alloc] initWithModel:aPyRef]; | ||||
|     [model bindCallback:createCallback(@"DetailsPanelView", self)]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| { | ||||
|     [self disconnect]; | ||||
|     [model release]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyDetailsPanel *)py | ||||
| - (PyDetailsPanel *)model | ||||
| { | ||||
|     return (PyDetailsPanel *)py; | ||||
|     return (PyDetailsPanel *)model; | ||||
| } | ||||
| 
 | ||||
| - (void)refreshDetails | ||||
| @ -53,12 +54,12 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* NSTableView Delegate */ | ||||
| - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView | ||||
| { | ||||
|     return [[self py] numberOfRows]; | ||||
|     return [[self model] numberOfRows]; | ||||
| } | ||||
| 
 | ||||
| - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)column row:(NSInteger)row | ||||
| { | ||||
|     return [[self py] valueForColumn:[column identifier] row:row]; | ||||
|     return [[self model] valueForColumn:[column identifier] row:row]; | ||||
| } | ||||
| 
 | ||||
| /* Python --> Cocoa */ | ||||
|  | ||||
| @ -7,12 +7,13 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import <Python.h> | ||||
| #import "HSOutline.h" | ||||
| #import "PyDirectoryOutline.h" | ||||
| 
 | ||||
| #define DGAddedFoldersNotification @"DGAddedFoldersNotification" | ||||
| 
 | ||||
| @interface DirectoryOutline : HSOutline {} | ||||
| - (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView; | ||||
| - (PyDirectoryOutline *)py; | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef outlineView:(HSOutlineView *)aOutlineView; | ||||
| - (PyDirectoryOutline *)model; | ||||
| @end; | ||||
| @ -9,23 +9,17 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "DirectoryOutline.h" | ||||
| 
 | ||||
| @implementation DirectoryOutline | ||||
| - (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef outlineView:(HSOutlineView *)aOutlineView | ||||
| { | ||||
|     self = [super initWithPyClassName:@"PyDirectoryOutline" pyParent:aPyParent view:aOutlineView]; | ||||
|     [outlineView registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; | ||||
|     [self connect]; | ||||
|     self = [super initWithPyRef:aPyRef wrapperClass:[PyDirectoryOutline class] | ||||
|         callbackClassName:@"DirectoryOutlineView" view:aOutlineView]; | ||||
|     [[self view] registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| - (PyDirectoryOutline *)model | ||||
| { | ||||
|     [self disconnect]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyDirectoryOutline *)py | ||||
| { | ||||
|     return (PyDirectoryOutline *)py; | ||||
|     return (PyDirectoryOutline *)model; | ||||
| } | ||||
| 
 | ||||
| /* Delegate */ | ||||
| @ -53,7 +47,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|         if (!(sourceDragMask & NSDragOperationLink)) | ||||
|             return NO; | ||||
|         for (NSString *foldername in foldernames) { | ||||
|             [[self py] addDirectory:foldername]; | ||||
|             [[self model] addDirectory:foldername]; | ||||
|         } | ||||
|         NSDictionary *userInfo = [NSDictionary dictionaryWithObject:foldernames forKey:@"foldernames"]; | ||||
|         [[NSNotificationCenter defaultCenter] postNotificationName:DGAddedFoldersNotification | ||||
| @ -67,7 +61,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     if ([cell isKindOfClass:[NSTextFieldCell class]]) { | ||||
|         NSTextFieldCell *textCell = cell; | ||||
|         NSIndexPath *path = item; | ||||
|         BOOL selected = [path isEqualTo:[outlineView selectedPath]]; | ||||
|         BOOL selected = [path isEqualTo:[[self view] selectedPath]]; | ||||
|         if (selected) { | ||||
|             [textCell setTextColor:[NSColor blackColor]]; | ||||
|             return; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -18,13 +18,13 @@ 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]]; | ||||
|     [_recentDirectories setDelegate:self]; | ||||
|     outline = [[DirectoryOutline alloc] initWithPyParent:_py view:outlineView]; | ||||
|     outline = [[DirectoryOutline alloc] initWithPyRef:[model directoryTree] outlineView:outlineView]; | ||||
|     [self refreshRemoveButtonText]; | ||||
|     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(directorySelectionChanged:) | ||||
|         name:NSOutlineViewSelectionDidChangeNotification object:outlineView]; | ||||
| @ -100,14 +100,14 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| - (IBAction)removeSelectedDirectory:(id)sender | ||||
| { | ||||
|     [[self window] makeKeyAndOrderFront:nil]; | ||||
|     [[outline py] removeSelectedDirectory]; | ||||
|     [[outline model] removeSelectedDirectory]; | ||||
|     [self refreshRemoveButtonText]; | ||||
| } | ||||
| 
 | ||||
| /* Public */ | ||||
| - (void)addDirectory:(NSString *)directory | ||||
| { | ||||
|     NSInteger r = [[_py addDirectory:directory] intValue]; | ||||
|     NSInteger r = [model addDirectory:directory]; | ||||
|     if (r) { | ||||
|         NSString *m = @""; | ||||
|         if (r == 1) { | ||||
|  | ||||
| @ -8,17 +8,17 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "PyExtraFairwareReminder.h" | ||||
| #import "HSWindowController.h" | ||||
| #import "PyApp.h" | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface ExtraFairwareReminder : HSWindowController | ||||
| @interface ExtraFairwareReminder : NSWindowController | ||||
| { | ||||
|     IBOutlet NSButton *continueButton; | ||||
|      | ||||
|     PyExtraFairwareReminder *model; | ||||
|     NSTimer *timer; | ||||
| } | ||||
| - (id)initWithPy:(PyApp *)aPy; | ||||
| - (PyExtraFairwareReminder *)py; | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp; | ||||
| - (PyExtraFairwareReminder *)model; | ||||
| 
 | ||||
| - (void)start; | ||||
| - (void)updateButton; | ||||
|  | ||||
| @ -7,35 +7,39 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import "ExtraFairwareReminder.h" | ||||
| #import "Utils.h" | ||||
| 
 | ||||
| @implementation ExtraFairwareReminder | ||||
| - (id)initWithPy:(PyApp *)aPy | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp | ||||
| { | ||||
|     self = [super initWithNibName:@"ExtraFairwareReminder" pyClassName:@"PyExtraFairwareReminder" pyParent:aPy]; | ||||
|     self = [super initWithWindowNibName:@"ExtraFairwareReminder"]; | ||||
|     [self window]; | ||||
|     [continueButton setEnabled:NO]; | ||||
|     model = [[PyExtraFairwareReminder alloc] initWithApp:[aApp pyRef]]; | ||||
|     [model bindCallback:createCallback(@"ExtraFairwareReminderView", self)]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| { | ||||
|     [model release]; | ||||
|     [timer release]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyExtraFairwareReminder *)py | ||||
| - (PyExtraFairwareReminder *)model | ||||
| { | ||||
|     return (PyExtraFairwareReminder *)py; | ||||
|     return (PyExtraFairwareReminder *)model; | ||||
| } | ||||
| 
 | ||||
| - (void)start | ||||
| { | ||||
|     [[self py] start]; | ||||
|     [[self model] start]; | ||||
| } | ||||
| 
 | ||||
| - (void)updateButton | ||||
| { | ||||
|     [[self py] updateButton]; | ||||
|     [[self model] updateButton]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)continue:(id)sender | ||||
|  | ||||
| @ -7,25 +7,25 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "HSWindowController.h" | ||||
| #import "PyApp.h" | ||||
| #import "PyPrioritizeDialog.h" | ||||
| #import "HSPopUpList.h" | ||||
| #import "HSSelectableList.h" | ||||
| #import "PrioritizeList.h" | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface PrioritizeDialog : HSWindowController | ||||
| @interface PrioritizeDialog : NSWindowController | ||||
| { | ||||
|     IBOutlet NSPopUpButton *categoryPopUpView; | ||||
|     IBOutlet NSTableView *criteriaTableView; | ||||
|     IBOutlet NSTableView *prioritizationTableView; | ||||
|      | ||||
|     PyPrioritizeDialog *model; | ||||
|     HSPopUpList *categoryPopUp; | ||||
|     HSSelectableList *criteriaList; | ||||
|     PrioritizeList *prioritizationList; | ||||
| } | ||||
| - (id)initWithPy:(PyApp *)aPy; | ||||
| - (PyPrioritizeDialog *)py; | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp; | ||||
| - (PyPrioritizeDialog *)model; | ||||
| 
 | ||||
| - (IBAction)addSelected:(id)sender; | ||||
| - (IBAction)removeSelected:(id)sender; | ||||
|  | ||||
| @ -7,50 +7,54 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import "PrioritizeDialog.h" | ||||
| #import "Utils.h" | ||||
| 
 | ||||
| @implementation PrioritizeDialog | ||||
| - (id)initWithPy:(PyApp *)aPy | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp | ||||
| { | ||||
|     self = [super initWithNibName:@"PrioritizeDialog" pyClassName:@"PyPrioritizeDialog" pyParent:aPy]; | ||||
|     self = [super initWithWindowNibName:@"PrioritizeDialog"]; | ||||
|     [self window]; | ||||
|     categoryPopUp = [[HSPopUpList alloc] initWithPy:[[self py] categoryList] view:categoryPopUpView]; | ||||
|     criteriaList = [[HSSelectableList alloc] initWithPy:[[self py] criteriaList] view:criteriaTableView]; | ||||
|     prioritizationList = [[PrioritizeList alloc] initWithPy:[[self py] prioritizationList] view:prioritizationTableView]; | ||||
|     [self connect]; | ||||
|     model = [[PyPrioritizeDialog alloc] initWithApp:[aApp pyRef]]; | ||||
|     [model bindCallback:createCallback(@"PrioritizeDialogView", self)]; | ||||
|     categoryPopUp = [[HSPopUpList alloc] initWithPyRef:[[self model] categoryList] popupView:categoryPopUpView]; | ||||
|     criteriaList = [[HSSelectableList alloc] initWithPyRef:[[self model] criteriaList] tableView:criteriaTableView]; | ||||
|     prioritizationList = [[PrioritizeList alloc] initWithPyRef:[[self model] prioritizationList] tableView:prioritizationTableView]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| { | ||||
|     [self disconnect]; | ||||
|     [categoryPopUp release]; | ||||
|     [criteriaList release]; | ||||
|     [prioritizationList release]; | ||||
|     [model release]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyPrioritizeDialog *)py | ||||
| - (PyPrioritizeDialog *)model | ||||
| { | ||||
|     return (PyPrioritizeDialog *)py; | ||||
|     return (PyPrioritizeDialog *)model; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)addSelected:(id)sender | ||||
| { | ||||
|     [[self py] addSelected]; | ||||
|     [[self model] addSelected]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)removeSelected:(id)sender | ||||
| { | ||||
|     [[self py] removeSelected]; | ||||
|     [[self model] removeSelected]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)ok:(id)sender | ||||
| { | ||||
|     [NSApp stopModal]; | ||||
|     [self close]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)cancel:(id)sender | ||||
| { | ||||
|     [NSApp abortModal]; | ||||
|     [self close]; | ||||
| } | ||||
| @end | ||||
| @ -11,5 +11,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "PyPrioritizeList.h" | ||||
| 
 | ||||
| @interface PrioritizeList : HSSelectableList {} | ||||
| - (PyPrioritizeList *)py; | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef tableView:(NSTableView *)aTableView; | ||||
| - (PyPrioritizeList *)model; | ||||
| @end | ||||
| @ -11,9 +11,16 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Consts.h" | ||||
| 
 | ||||
| @implementation PrioritizeList | ||||
| - (PyPrioritizeList *)py | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef tableView:(NSTableView *)aTableView | ||||
| { | ||||
|     return (PyPrioritizeList *)py; | ||||
|     self = [super initWithPyRef:aPyRef wrapperClass:[PyPrioritizeList class] | ||||
|         callbackClassName:@"PrioritizeListView" view:aTableView]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (PyPrioritizeList *)model | ||||
| { | ||||
|     return (PyPrioritizeList *)model; | ||||
| } | ||||
| 
 | ||||
| - (void)setView:(NSTableView *)aTableView | ||||
| @ -45,7 +52,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     NSPasteboard* pboard = [info draggingPasteboard]; | ||||
|     NSData* rowData = [pboard dataForType:DGPrioritizeIndexPasteboardType]; | ||||
|     NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData]; | ||||
|     [[self py] moveIndexes:[Utils indexSet2Array:rowIndexes] toIndex:row]; | ||||
|     [[self model] moveIndexes:[Utils indexSet2Array:rowIndexes] toIndex:row]; | ||||
|     return YES; | ||||
| } | ||||
| @end | ||||
| @ -7,19 +7,17 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| */ | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "HSWindowController.h" | ||||
| #import "PyApp.h" | ||||
| #import "PyProblemDialog.h" | ||||
| #import "HSTable.h" | ||||
| 
 | ||||
| @interface ProblemDialog : HSWindowController | ||||
| @interface ProblemDialog : NSWindowController | ||||
| { | ||||
|     IBOutlet NSTableView *problemTableView; | ||||
|      | ||||
|     PyProblemDialog *model; | ||||
|     HSTable *problemTable; | ||||
| } | ||||
| - (id)initWithPy:(PyApp *)aPy; | ||||
| - (PyProblemDialog *)py; | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef; | ||||
| 
 | ||||
| - (void)initializeColumns; | ||||
| - (IBAction)revealSelected:(id)sender; | ||||
|  | ||||
| @ -10,30 +10,23 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Utils.h" | ||||
| 
 | ||||
| @implementation ProblemDialog | ||||
| - (id)initWithPy:(PyApp *)aPy | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef | ||||
| { | ||||
|     self = [super initWithNibName:@"ProblemDialog" pyClassName:@"PyProblemDialog" pyParent:aPy]; | ||||
|     self = [super initWithWindowNibName:@"ProblemDialog"]; | ||||
|     [self window]; //So the detailsTable is initialized. | ||||
|     problemTable = [[HSTable alloc] initWithPyClassName:@"PyProblemTable" pyParent:[self py] view:problemTableView]; | ||||
|     model = [[PyProblemDialog alloc] initWithModel:aPyRef]; | ||||
|     problemTable = [[HSTable alloc] initWithPyRef:[model problemTable] tableView:problemTableView]; | ||||
|     [self initializeColumns]; | ||||
|     [self connect]; | ||||
|     [problemTable connect]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| { | ||||
|     [problemTable disconnect]; | ||||
|     [self disconnect]; | ||||
|     [problemTable release]; | ||||
|     [model release]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyProblemDialog *)py | ||||
| { | ||||
|     return (PyProblemDialog *)py; | ||||
| } | ||||
| 
 | ||||
| - (void)initializeColumns | ||||
| { | ||||
|     HSColumnDef defs[] = { | ||||
| @ -46,6 +39,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (IBAction)revealSelected:(id)sender | ||||
| { | ||||
|     [[self py] revealSelected]; | ||||
|     [model revealSelected]; | ||||
| } | ||||
| @end | ||||
| @ -1,15 +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 "PyGUI.h" | ||||
| 
 | ||||
| @interface PyDetailsPanel : PyGUI | ||||
| - (NSInteger)numberOfRows; | ||||
| - (id)valueForColumn:(NSString *)column row:(NSInteger)row; | ||||
| @end | ||||
| @ -1,15 +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 "PyOutline.h" | ||||
| 
 | ||||
| @interface PyDirectoryOutline : PyOutline | ||||
| - (void)addDirectory:(NSString *)directoryPath; | ||||
| - (void)removeSelectedDirectory; | ||||
| @end | ||||
| @ -1,59 +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 "PyApp.h" | ||||
| 
 | ||||
| @interface PyDupeGuruBase : PyApp | ||||
| - (void)bindCocoa:(id)cocoa; | ||||
| - (PyResultTable *)resultTable; | ||||
| //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 | ||||
| @ -1,15 +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 "PyGUI.h" | ||||
| 
 | ||||
| @interface PyExtraFairwareReminder : PyGUI | ||||
| - (void)start; | ||||
| - (void)updateButton; | ||||
| @end | ||||
| @ -1,20 +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 "PyGUI.h" | ||||
| #import "PySelectableList.h" | ||||
| 
 | ||||
| @interface PyPrioritizeDialog : PyGUI | ||||
| - (PySelectableList *)categoryList; | ||||
| - (PySelectableList *)criteriaList; | ||||
| - (PySelectableList *)prioritizationList; | ||||
| - (void)addSelected; | ||||
| - (void)removeSelected; | ||||
| - (void)performReprioritization; | ||||
| @end | ||||
| @ -1,14 +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 "PySelectableList.h" | ||||
| 
 | ||||
| @interface PyPrioritizeList : PySelectableList | ||||
| - (void)moveIndexes:(NSArray *)indexes toIndex:(NSInteger)destIndex; | ||||
| @end | ||||
| @ -1,14 +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 "PyGUI.h" | ||||
| 
 | ||||
| @interface PyProblemDialog : PyGUI | ||||
| - (void)revealSelected; | ||||
| @end | ||||
| @ -1,26 +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 "PyTable.h" | ||||
| 
 | ||||
| @interface PyResultTable : PyTable | ||||
| - (BOOL)powerMarkerMode; | ||||
| - (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode; | ||||
| - (BOOL)deltaValuesMode; | ||||
| - (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode; | ||||
| - (NSArray *)deltaColumns; | ||||
| 
 | ||||
| - (NSString *)valueForRow:(NSInteger)rowIndex column:(NSString *)aColumn; | ||||
| - (BOOL)renameSelected:(NSString *)aNewName; | ||||
| - (void)sortBy:(NSString *)aIdentifier ascending:(BOOL)aAscending; | ||||
| - (void)markSelected; | ||||
| - (void)removeSelected; | ||||
| - (NSInteger)selectedDupeCount; | ||||
| - (NSString *)pathAtIndex:(NSInteger)index; | ||||
| @end | ||||
| @ -1,14 +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 "PyGUI.h" | ||||
| 
 | ||||
| @interface PyStatsLabel : PyGUI | ||||
| - (NSString *)display; | ||||
| @end | ||||
| @ -15,8 +15,8 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| { | ||||
|     NSSet *_deltaColumns; | ||||
| } | ||||
| - (id)initWithPy:(id)aPy view:(NSTableView *)aTableView; | ||||
| - (PyResultTable *)py; | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTableView *)aTableView; | ||||
| - (PyResultTable *)model; | ||||
| - (BOOL)powerMarkerMode; | ||||
| - (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode; | ||||
| - (BOOL)deltaValuesMode; | ||||
|  | ||||
| @ -18,24 +18,22 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| @end | ||||
| 
 | ||||
| @implementation ResultTable | ||||
| - (id)initWithPy:(id)aPy view:(NSTableView *)aTableView | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTableView *)aTableView | ||||
| { | ||||
|     self = [super initWithPy:aPy view:aTableView]; | ||||
|     _deltaColumns = [[NSSet setWithArray:[[self py] deltaColumns]] retain]; | ||||
|     [self connect]; | ||||
|     self = [super initWithPyRef:aPyRef wrapperClass:[PyResultTable class] callbackClassName:@"ResultTableView" view:aTableView]; | ||||
|     _deltaColumns = [[NSSet setWithArray:[[self model] deltaColumns]] retain]; | ||||
|     return self; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| { | ||||
|     [self disconnect]; | ||||
|     [_deltaColumns release]; | ||||
|     [super dealloc]; | ||||
| } | ||||
| 
 | ||||
| - (PyResultTable *)py | ||||
| - (PyResultTable *)model | ||||
| { | ||||
|     return (PyResultTable *)py; | ||||
|     return (PyResultTable *)model; | ||||
| } | ||||
| 
 | ||||
| /* Private */ | ||||
| @ -61,27 +59,27 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* Public */ | ||||
| - (BOOL)powerMarkerMode | ||||
| { | ||||
|     return [[self py] powerMarkerMode]; | ||||
|     return [[self model] powerMarkerMode]; | ||||
| } | ||||
| 
 | ||||
| - (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode | ||||
| { | ||||
|     [[self py] setPowerMarkerMode:aPowerMarkerMode]; | ||||
|     [[self model] setPowerMarkerMode:aPowerMarkerMode]; | ||||
| } | ||||
| 
 | ||||
| - (BOOL)deltaValuesMode | ||||
| { | ||||
|     return [[self py] deltaValuesMode]; | ||||
|     return [[self model] deltaValuesMode]; | ||||
| } | ||||
| 
 | ||||
| - (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode | ||||
| { | ||||
|     [[self py] setDeltaValuesMode:aDeltaValuesMode]; | ||||
|     [[self model] setDeltaValuesMode:aDeltaValuesMode]; | ||||
| } | ||||
| 
 | ||||
| - (NSInteger)selectedDupeCount | ||||
| { | ||||
|     return [[self py] selectedDupeCount]; | ||||
|     return [[self model] selectedDupeCount]; | ||||
| } | ||||
| 
 | ||||
| - (void)removeSelected | ||||
| @ -93,7 +91,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     NSString *msg = [NSString stringWithFormat:msgFmt,selectedDupeCount]; | ||||
|     if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO | ||||
|         return; | ||||
|     [[self py] removeSelected]; | ||||
|     [[self model] removeSelected]; | ||||
| } | ||||
| 
 | ||||
| /* Datasource */ | ||||
| @ -101,27 +99,27 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| { | ||||
|     NSString *identifier = [column identifier]; | ||||
|     if ([identifier isEqual:@"marked"]) { | ||||
|         return [[self py] valueForColumn:@"marked" row:row]; | ||||
|         return [[self model] valueForColumn:@"marked" row:row]; | ||||
|     } | ||||
|     return [[self py] valueForRow:row column:identifier]; | ||||
|     return [[self model] valueForRow:row column:identifier]; | ||||
| } | ||||
| 
 | ||||
| - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(NSInteger)row | ||||
| { | ||||
|     NSString *identifier = [column identifier]; | ||||
|     if ([identifier isEqual:@"marked"]) { | ||||
|         [[self py] setValue:object forColumn:identifier row:row]; | ||||
|         [[self model] setValue:object forColumn:identifier row:row]; | ||||
|     } | ||||
|     else if ([identifier isEqual:@"name"]) { | ||||
|         NSString *oldName = [[self py] valueForRow:row column:identifier]; | ||||
|         NSString *oldName = [[self model] valueForRow:row column:identifier]; | ||||
|         NSString *newName = object; | ||||
|         if (![newName isEqual:oldName]) { | ||||
|             BOOL renamed = [[self py] renameSelected:newName]; | ||||
|             BOOL renamed = [[self model] renameSelected:newName]; | ||||
|             if (!renamed) { | ||||
|                 [Dialogs showMessage:[NSString stringWithFormat:TR(@"The name '%@' already exists."), newName]]; | ||||
|             } | ||||
|             else { | ||||
|                 [tableView setNeedsDisplay:YES]; | ||||
|                 [[self view] setNeedsDisplay:YES]; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -130,16 +128,16 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* Delegate */ | ||||
| - (void)tableView:(NSTableView *)aTableView didClickTableColumn:(NSTableColumn *)tableColumn | ||||
| { | ||||
|     if ([[tableView sortDescriptors] count] < 1) | ||||
|     if ([[[self view] sortDescriptors] count] < 1) | ||||
|         return; | ||||
|     NSSortDescriptor *sd = [[tableView sortDescriptors] objectAtIndex:0]; | ||||
|     [[self py] sortBy:[sd key] ascending:[sd ascending]]; | ||||
|     NSSortDescriptor *sd = [[[self view] sortDescriptors] objectAtIndex:0]; | ||||
|     [[self model] sortBy:[sd key] ascending:[sd ascending]]; | ||||
| } | ||||
| 
 | ||||
| - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)column row:(NSInteger)row | ||||
| { | ||||
|     BOOL isSelected = [tableView isRowSelected:row]; | ||||
|     BOOL isMarkable = n2b([[self py] valueForColumn:@"markable" row:row]); | ||||
|     BOOL isSelected = [[self view] isRowSelected:row]; | ||||
|     BOOL isMarkable = n2b([[self model] valueForColumn:@"markable" row:row]); | ||||
|     if ([[column identifier] isEqual:@"marked"]) { | ||||
|         [cell setEnabled:isMarkable]; | ||||
|         // Low-tech solution, for indentation, but it works... | ||||
| @ -173,21 +171,21 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (BOOL)tableViewHadSpacePressed:(NSTableView *)tableView | ||||
| { | ||||
|     [[self py] markSelected]; | ||||
|     [[self model] markSelected]; | ||||
|     return YES; | ||||
| } | ||||
| 
 | ||||
| /* Quicklook */ | ||||
| - (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel | ||||
| { | ||||
|     return [[[self py] selectedRows] count]; | ||||
|     return [[[self model] selectedRows] count]; | ||||
| } | ||||
| 
 | ||||
| - (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index | ||||
| { | ||||
|     NSArray *selectedRows = [[self py] selectedRows]; | ||||
|     NSArray *selectedRows = [[self model] selectedRows]; | ||||
|     NSInteger absIndex = n2i([selectedRows objectAtIndex:index]); | ||||
|     NSString *path = [[self py] pathAtIndex:absIndex]; | ||||
|     NSString *path = [[self model] pathAtIndex:absIndex]; | ||||
|     return [[HSQLPreviewItem alloc] initWithUrl:[NSURL fileURLWithPath:path] title:path]; | ||||
| } | ||||
| 
 | ||||
| @ -204,6 +202,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* Python --> Cocoa */ | ||||
| - (void)invalidateMarkings | ||||
| { | ||||
|     [tableView setNeedsDisplay:YES]; | ||||
|     [[self view] setNeedsDisplay:YES]; | ||||
| } | ||||
| @end | ||||
| @ -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; | ||||
|  | ||||
| @ -19,14 +19,14 @@ 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]; | ||||
|     table = [[ResultTable alloc] initWithPy:[py resultTable] view:matches]; | ||||
|     statsLabel = [[StatsLabel alloc] initWithPyParent:py labelView:stats]; | ||||
|     problemDialog = [[ProblemDialog alloc] initWithPy:py]; | ||||
|     table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches]; | ||||
|     statsLabel = [[StatsLabel alloc] initWithPyRef:[model statsLabel] view:stats]; | ||||
|     problemDialog = [[ProblemDialog alloc] initWithPyRef:[model problemDialog]]; | ||||
|     [self initResultColumns]; | ||||
|     [self fillColumnsMenu]; | ||||
|     [matches setTarget:self]; | ||||
| @ -58,7 +58,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* Helpers */ | ||||
| - (void)fillColumnsMenu | ||||
| { | ||||
|     NSArray *menuItems = [[[table columns] py] menuItems]; | ||||
|     NSArray *menuItems = [[[table columns] model] menuItems]; | ||||
|     for (NSInteger i=0; i < [menuItems count]; i++) { | ||||
|         NSArray *pair = [menuItems objectAtIndex:i]; | ||||
|         NSString *display = [pair objectAtIndex:0]; | ||||
| @ -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 | ||||
| @ -272,10 +272,10 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (IBAction)reprioritizeResults:(id)sender | ||||
| { | ||||
|     PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithPy:py]; | ||||
|     PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithApp:model]; | ||||
|     NSInteger result = [NSApp runModalForWindow:[dlg window]]; | ||||
|     if (result == NSRunStoppedResponse) { | ||||
|         [[dlg py] performReprioritization]; | ||||
|         [[dlg model] performReprioritization]; | ||||
|     } | ||||
|     [dlg release]; | ||||
|     [[self window] makeKeyAndOrderFront:nil]; | ||||
| @ -283,12 +283,12 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (IBAction)resetColumnsToDefault:(id)sender | ||||
| { | ||||
|     [[[table columns] py] resetToDefaults]; | ||||
|     [[[table columns] model] resetToDefaults]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)revealSelected:(id)sender | ||||
| { | ||||
|     [py revealSelected]; | ||||
|     [model revealSelected]; | ||||
| } | ||||
| 
 | ||||
| - (IBAction)saveResults:(id)sender | ||||
| @ -298,30 +298,30 @@ 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 | ||||
| { | ||||
|     NSMenuItem *mi = sender; | ||||
|     BOOL checked = [[[table columns] py] toggleMenuItem:[mi tag]]; | ||||
|     BOOL checked = [[[table columns] model] toggleMenuItem:[mi tag]]; | ||||
|     [mi setState:checked ? NSOnState : NSOffState]; | ||||
| } | ||||
| 
 | ||||
| @ -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 { | ||||
| @ -406,7 +406,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|         } | ||||
|     } | ||||
|     else if ([lastAction isEqualTo:jobScan]) { | ||||
|         NSInteger rowCount = [[table py] numberOfRows]; | ||||
|         NSInteger rowCount = [[table model] numberOfRows]; | ||||
|         if (rowCount == 0) { | ||||
|             [Dialogs showMessage:TR(@"No duplicates found.")]; | ||||
|         } | ||||
|  | ||||
| @ -10,10 +10,8 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "HSGUIController.h" | ||||
| #import "PyStatsLabel.h" | ||||
| 
 | ||||
| @interface StatsLabel : HSGUIController | ||||
| { | ||||
|     NSTextField *labelView; | ||||
| } | ||||
| - (id)initWithPyParent:(id)aPyParent labelView:(NSTextField *)aLabelView; | ||||
| - (PyStatsLabel *)py; | ||||
| @interface StatsLabel : HSGUIController {} | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTextField *)aLabelView; | ||||
| - (PyStatsLabel *)model; | ||||
| - (NSTextField *)labelView; | ||||
| @end | ||||
| @ -10,29 +10,25 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Utils.h" | ||||
| 
 | ||||
| @implementation StatsLabel | ||||
| - (id)initWithPyParent:(id)aPyParent labelView:(NSTextField *)aLabelView | ||||
| - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTextField *)aLabelView | ||||
| { | ||||
|     self = [super initWithPyClassName:@"PyStatsLabel" pyParent:aPyParent]; | ||||
|     labelView = [aLabelView retain]; | ||||
|     [self connect]; | ||||
|     return self; | ||||
|     return [super initWithPyRef:aPyRef wrapperClass:[PyStatsLabel class] | ||||
|         callbackClassName:@"StatsLabelView" view:aLabelView]; | ||||
| } | ||||
| 
 | ||||
| - (void)dealloc | ||||
| - (PyStatsLabel *)model | ||||
| { | ||||
|     [self disconnect]; | ||||
|     [labelView release]; | ||||
|     [super dealloc]; | ||||
|     return (PyStatsLabel *)model; | ||||
| } | ||||
| 
 | ||||
| - (PyStatsLabel *)py | ||||
| - (NSTextField *)labelView | ||||
| { | ||||
|     return (PyStatsLabel *)py; | ||||
|     return (NSTextField *)view; | ||||
| } | ||||
| 
 | ||||
| /* Python --> Cocoa */ | ||||
| - (void)refresh | ||||
| { | ||||
|     [labelView setStringValue:[[self py] display]]; | ||||
|     [[self labelView] setStringValue:[[self model] display]]; | ||||
| } | ||||
| @end | ||||
|  | ||||
| @ -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> | ||||
|  | ||||
							
								
								
									
										38
									
								
								cocoa/base/main.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								cocoa/base/main.m
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| /*  | ||||
| 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 <Python.h> | ||||
| #import <wchar.h> | ||||
| 
 | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | ||||
|     NSString *respath = [[NSBundle mainBundle] resourcePath]; | ||||
|     NSString *mainpy = [respath stringByAppendingPathComponent:@"dg_cocoa.py"]; | ||||
|     wchar_t wPythonPath[PATH_MAX+1]; | ||||
|     NSString *pypath = [respath stringByAppendingPathComponent:@"py"]; | ||||
|     mbstowcs(wPythonPath, [pypath fileSystemRepresentation], PATH_MAX+1); | ||||
|     Py_SetPath(wPythonPath); | ||||
|     Py_SetPythonHome(wPythonPath); | ||||
|     Py_Initialize(); | ||||
|     PyEval_InitThreads(); | ||||
|     PyGILState_STATE gilState = PyGILState_Ensure(); | ||||
|     FILE* fp = fopen([mainpy UTF8String], "r"); | ||||
|     PyRun_SimpleFile(fp, [mainpy UTF8String]); | ||||
|     fclose(fp); | ||||
|     PyGILState_Release(gilState); | ||||
|     if (gilState == PyGILState_LOCKED) { | ||||
|         PyThreadState_Swap(NULL); | ||||
|         PyEval_ReleaseLock(); | ||||
|     } | ||||
|     int result = NSApplicationMain(argc,  (const char **) argv); | ||||
|     Py_Finalize(); | ||||
|     [pool release]; | ||||
|     return result; | ||||
| } | ||||
| @ -1,13 +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.inter import PyFairware, FairwareView | ||||
| from hscommon.trans import trget | ||||
| 
 | ||||
| from core.app import JobType | ||||
| from .result_table import PyResultTable | ||||
| 
 | ||||
| tr = trget('ui') | ||||
| 
 | ||||
| @ -19,128 +19,136 @@ JOBID2TITLE = { | ||||
|     JobType.Delete: tr("Sending to Trash"), | ||||
| } | ||||
| 
 | ||||
| class DupeGuruView(FairwareView): | ||||
|     def showExtraFairwareReminder(self): pass | ||||
| 
 | ||||
| class PyDupeGuruBase(PyFairware): | ||||
|     FOLLOW_PROTOCOLS = ['Worker'] | ||||
|      | ||||
|     @dontwrap | ||||
|     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) | ||||
|     def directoryTree(self) -> pyref: | ||||
|         return self.model.directory_tree | ||||
|      | ||||
|     def problemDialog(self) -> pyref: | ||||
|         return self.model.problem_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: | ||||
| @ -149,7 +157,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: | ||||
| @ -159,16 +167,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() | ||||
| @ -180,9 +191,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) | ||||
|      | ||||
|  | ||||
| @ -15,8 +15,9 @@ from cocoa import as_fetch | ||||
| from hscommon.trans import tr | ||||
| 
 | ||||
| from core.app import JobType | ||||
| from core.scanner import ScanType | ||||
| from core_me.app import DupeGuru as DupeGuruBase | ||||
| from .app import JOBID2TITLE | ||||
| from .app import JOBID2TITLE, PyDupeGuruBase | ||||
| 
 | ||||
| JobType.RemoveDeadTracks = 'jobRemoveDeadTracks' | ||||
| JobType.ScanDeadTracks = 'jobScanDeadTracks' | ||||
| @ -67,3 +68,45 @@ class DupeGuruME(DupeGuruBase): | ||||
|          | ||||
|         self.view.start_job(JobType.ScanDeadTracks, do) | ||||
|      | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def __init__(self): | ||||
|         self._init(DupeGuruME) | ||||
|      | ||||
|     def removeDeadTracks(self): | ||||
|         self.model.remove_dead_tracks() | ||||
|      | ||||
|     def scanDeadTracks(self): | ||||
|         self.model.scan_dead_tracks() | ||||
|      | ||||
|     #---Information | ||||
|     def deadTrackCount(self) -> int: | ||||
|         return len(self.model.dead_tracks) | ||||
|      | ||||
|     #---Properties | ||||
|     def setMinMatchPercentage_(self, percentage: int): | ||||
|         self.model.scanner.min_match_percentage = percentage | ||||
|      | ||||
|     def setScanType_(self, scan_type: int): | ||||
|         try: | ||||
|             self.model.scanner.scan_type = [ | ||||
|                 ScanType.Filename, | ||||
|                 ScanType.Fields, | ||||
|                 ScanType.FieldsNoOrder, | ||||
|                 ScanType.Tag, | ||||
|                 ScanType.Contents, | ||||
|                 ScanType.ContentsAudio, | ||||
|             ][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 enable_scanForTag_(self, enable: bool, scan_tag: str): | ||||
|         if enable: | ||||
|             self.model.scanner.scanned_tags.add(scan_tag) | ||||
|         else: | ||||
|             self.model.scanner.scanned_tags.discard(scan_tag) | ||||
|  | ||||
| @ -19,10 +19,12 @@ from hscommon.path import Path | ||||
| from hscommon.trans import tr | ||||
| from cocoa import proxy | ||||
| 
 | ||||
| from core.scanner import ScanType | ||||
| from core import directories | ||||
| from core_pe import _block_osx | ||||
| from core_pe.photo import Photo as PhotoBase | ||||
| from core_pe.app import DupeGuru as DupeGuruBase | ||||
| from .app import PyDupeGuruBase | ||||
| 
 | ||||
| IPHOTO_PATH = Path('iPhoto Library') | ||||
| 
 | ||||
| @ -194,3 +196,32 @@ class DupeGuruPE(DupeGuruBase): | ||||
|                 return | ||||
|         DupeGuruBase.start_scanning(self) | ||||
|      | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def __init__(self): | ||||
|         self._init(DupeGuruPE) | ||||
|      | ||||
|     def clearPictureCache(self): | ||||
|         self.model.scanner.clear_picture_cache() | ||||
|      | ||||
|     #---Information     | ||||
|     def getSelectedDupePath(self) -> str: | ||||
|         return str(self.model.selected_dupe_path()) | ||||
|      | ||||
|     def getSelectedDupeRefPath(self) -> str: | ||||
|         return str(self.model.selected_dupe_ref_path()) | ||||
|      | ||||
|     #---Properties | ||||
|     def setScanType_(self, scan_type: int): | ||||
|         try: | ||||
|             self.model.scanner.scan_type = [ | ||||
|                 ScanType.FuzzyBlock, | ||||
|                 ScanType.ExifTimestamp, | ||||
|             ][scan_type] | ||||
|         except IndexError: | ||||
|             pass | ||||
|      | ||||
|     def setMatchScaled_(self, match_scaled: bool): | ||||
|         self.model.scanner.match_scaled = match_scaled | ||||
|      | ||||
|     def setMinMatchPercentage_(self, percentage: int): | ||||
|         self.model.scanner.threshold = percentage | ||||
|  | ||||
| @ -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,31 @@ class DupeGuru(DupeGuruBase): | ||||
|         DupeGuruBase.__init__(self, view, appdata) | ||||
|         self.directories = Directories() | ||||
|      | ||||
| 
 | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def __init__(self): | ||||
|         self._init(DupeGuru) | ||||
|      | ||||
|     #---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 | ||||
|      | ||||
|  | ||||
| @ -1,13 +1,11 @@ | ||||
| from cocoa.inter import signature, PyGUIObject | ||||
| from cocoa.inter import PyGUIObject, GUIObjectView | ||||
| 
 | ||||
| from core.gui.details_panel import DetailsPanel | ||||
| class DetailsPanelView(GUIObjectView): | ||||
|     pass | ||||
| 
 | ||||
| class PyDetailsPanel(PyGUIObject): | ||||
|     py_class = DetailsPanel | ||||
|     @signature('i@:') | ||||
|     def numberOfRows(self): | ||||
|         return self.py.row_count() | ||||
|     def numberOfRows(self) -> int: | ||||
|         return self.model.row_count() | ||||
|      | ||||
|     @signature('@@:@i') | ||||
|     def valueForColumn_row_(self, column, row): | ||||
|         return self.py.row(row)[int(column)] | ||||
|     def valueForColumn_row_(self, column: str, row: int) -> object: | ||||
|         return self.model.row(row)[int(column)] | ||||
|  | ||||
| @ -1,17 +1,18 @@ | ||||
| from cocoa.inter import PyOutline | ||||
| from objp.util import dontwrap | ||||
| from cocoa.inter import PyOutline, GUIObjectView | ||||
| 
 | ||||
| from core.gui.directory_tree import DirectoryTree | ||||
| class DirectoryOutlineView(GUIObjectView): | ||||
|     pass | ||||
| 
 | ||||
| class PyDirectoryOutline(PyOutline): | ||||
|     py_class = DirectoryTree | ||||
|      | ||||
|     def addDirectory_(self, path): | ||||
|         self.py.add_directory(path) | ||||
|     def addDirectory_(self, path: str): | ||||
|         self.model.add_directory(path) | ||||
|      | ||||
|     def removeSelectedDirectory(self): | ||||
|         self.py.remove_selected() | ||||
|         self.model.remove_selected() | ||||
|      | ||||
|     # python --> cocoa | ||||
|     @dontwrap | ||||
|     def refresh_states(self): | ||||
|         # Under cocoa, both refresh() and refresh_states() do the same thing. | ||||
|         self.cocoa.refresh() | ||||
|         self.callback.refresh() | ||||
| @ -1,25 +1,37 @@ | ||||
| from objp.util import pyref, dontwrap | ||||
| from cocoa.inter import PyGUIObject | ||||
| 
 | ||||
| from core.gui.extra_fairware_reminder import ExtraFairwareReminder | ||||
| 
 | ||||
| class ExtraFairwareReminderView: | ||||
|     def startTimer(self): pass | ||||
|     def stopTimer(self): pass | ||||
|     def setButtonText_(self, text: str): pass; | ||||
|     def enableButton(self): pass | ||||
| 
 | ||||
| class PyExtraFairwareReminder(PyGUIObject): | ||||
|     py_class = ExtraFairwareReminder | ||||
|     def __init__(self, app: pyref): | ||||
|         model = ExtraFairwareReminder(app.model) | ||||
|         PyGUIObject.__init__(self, model) | ||||
|      | ||||
|     def start(self): | ||||
|         self.py.start() | ||||
|         self.model.start() | ||||
|      | ||||
|     def updateButton(self): | ||||
|         self.py.update_button() | ||||
|         self.model.update_button() | ||||
|      | ||||
|     # model --> view | ||||
|     @dontwrap | ||||
|     def start_timer(self): | ||||
|         self.cocoa.startTimer() | ||||
|         self.callback.startTimer() | ||||
|      | ||||
|     @dontwrap | ||||
|     def stop_timer(self): | ||||
|         self.cocoa.stopTimer() | ||||
|         self.callback.stopTimer() | ||||
|      | ||||
|     @dontwrap | ||||
|     def enable_button(self): | ||||
|         self.cocoa.enableButton() | ||||
|         self.callback.enableButton() | ||||
|      | ||||
|     @dontwrap | ||||
|     def set_button_text(self, text): | ||||
|         self.cocoa.setButtonText_(text) | ||||
|         self.callback.setButtonText_(text) | ||||
|  | ||||
| @ -1,31 +1,29 @@ | ||||
| from cocoa.inter import PyGUIObject, PySelectableList | ||||
| 
 | ||||
| from objp.util import pyref | ||||
| from cocoa.inter import PyGUIObject, GUIObjectView | ||||
| from core.gui.prioritize_dialog import PrioritizeDialog | ||||
| from .prioritize_list import PyPrioritizeList | ||||
| 
 | ||||
| class PrioritizeDialogView(GUIObjectView): | ||||
|     pass | ||||
| 
 | ||||
| class PyPrioritizeDialog(PyGUIObject): | ||||
|     py_class = PrioritizeDialog | ||||
|     def __init__(self, app: pyref): | ||||
|         model = PrioritizeDialog(app.model) | ||||
|         PyGUIObject.__init__(self, model) | ||||
|      | ||||
|     def categoryList(self): | ||||
|         if not hasattr(self, '_categoryList'): | ||||
|             self._categoryList = PySelectableList.alloc().initWithPy_(self.py.category_list) | ||||
|         return self._categoryList | ||||
|     def categoryList(self) -> pyref: | ||||
|         return self.model.category_list | ||||
|      | ||||
|     def criteriaList(self): | ||||
|         if not hasattr(self, '_criteriaList'): | ||||
|             self._criteriaList = PySelectableList.alloc().initWithPy_(self.py.criteria_list) | ||||
|         return self._criteriaList | ||||
|     def criteriaList(self) -> pyref: | ||||
|         return self.model.criteria_list | ||||
|      | ||||
|     def prioritizationList(self): | ||||
|         if not hasattr(self, '_prioritizationList'): | ||||
|             self._prioritizationList = PyPrioritizeList.alloc().initWithPy_(self.py.prioritization_list) | ||||
|         return self._prioritizationList | ||||
|     def prioritizationList(self) -> pyref: | ||||
|         return self.model.prioritization_list | ||||
|      | ||||
|     def addSelected(self): | ||||
|         self.py.add_selected() | ||||
|         self.model.add_selected() | ||||
|      | ||||
|     def removeSelected(self): | ||||
|         self.py.remove_selected() | ||||
|         self.model.remove_selected() | ||||
|      | ||||
|     def performReprioritization(self): | ||||
|         self.py.perform_reprioritization() | ||||
|         self.model.perform_reprioritization() | ||||
|  | ||||
| @ -1,7 +1,8 @@ | ||||
| from cocoa.inter import signature, PySelectableList | ||||
| from cocoa.inter import PySelectableList, SelectableListView | ||||
| 
 | ||||
| class PrioritizeListView(SelectableListView): | ||||
|     pass | ||||
| 
 | ||||
| class PyPrioritizeList(PySelectableList): | ||||
|     @signature('v@:@i') | ||||
|     def moveIndexes_toIndex_(self, indexes, dest_index): | ||||
|         self.py.move_indexes(indexes, dest_index) | ||||
|      | ||||
|     def moveIndexes_toIndex_(self, indexes: list, dest_index: int): | ||||
|         self.model.move_indexes(indexes, dest_index) | ||||
|  | ||||
| @ -1,10 +1,9 @@ | ||||
| from objp.util import pyref | ||||
| from cocoa.inter import PyGUIObject | ||||
| 
 | ||||
| from core.gui.problem_dialog import ProblemDialog | ||||
| 
 | ||||
| class PyProblemDialog(PyGUIObject): | ||||
|     py_class = ProblemDialog | ||||
|     def problemTable(self) -> pyref: | ||||
|         return self.model.problem_table | ||||
|      | ||||
|     def revealSelected(self): | ||||
|         self.py.reveal_selected_dupe() | ||||
|      | ||||
|         self.model.reveal_selected_dupe() | ||||
|  | ||||
| @ -1,6 +0,0 @@ | ||||
| from cocoa.inter import PyTable | ||||
| 
 | ||||
| from core.gui.problem_table import ProblemTable | ||||
| 
 | ||||
| class PyProblemTable(PyTable): | ||||
|     py_class = ProblemTable | ||||
| @ -1,53 +1,49 @@ | ||||
| from cocoa.inter import signature, PyTable | ||||
| from objp.util import dontwrap | ||||
| from cocoa.inter import PyTable, TableView | ||||
| 
 | ||||
| class ResultTableView(TableView): | ||||
|     def invalidateMarkings(self): pass | ||||
| 
 | ||||
| class PyResultTable(PyTable): | ||||
|     @signature('c@:') | ||||
|     def powerMarkerMode(self): | ||||
|         return self.py.power_marker | ||||
|     def powerMarkerMode(self) -> bool: | ||||
|         return self.model.power_marker | ||||
|      | ||||
|     @signature('v@:c') | ||||
|     def setPowerMarkerMode_(self, value): | ||||
|         self.py.power_marker = value | ||||
|     def setPowerMarkerMode_(self, value: bool): | ||||
|         self.model.power_marker = value | ||||
|      | ||||
|     @signature('c@:') | ||||
|     def deltaValuesMode(self): | ||||
|         return self.py.delta_values | ||||
|     def deltaValuesMode(self) -> bool: | ||||
|         return self.model.delta_values | ||||
|      | ||||
|     @signature('v@:c') | ||||
|     def setDeltaValuesMode_(self, value): | ||||
|         self.py.delta_values = value | ||||
|     def setDeltaValuesMode_(self, value: bool): | ||||
|         self.model.delta_values = value | ||||
|      | ||||
|     def deltaColumns(self): | ||||
|         return list(self.py.DELTA_COLUMNS) | ||||
|     def deltaColumns(self) -> list: | ||||
|         return list(self.model.DELTA_COLUMNS) | ||||
|      | ||||
|     @signature('@@:i@') | ||||
|     def valueForRow_column_(self, row_index, column): | ||||
|         return self.py.get_row_value(row_index, column) | ||||
|     def valueForRow_column_(self, row_index: int, column: str) -> object: | ||||
|         return self.model.get_row_value(row_index, column) | ||||
|      | ||||
|     @signature('c@:@') | ||||
|     def renameSelected_(self, newname): | ||||
|         return self.py.rename_selected(newname) | ||||
|     def renameSelected_(self, newname: str) -> bool: | ||||
|         return self.model.rename_selected(newname) | ||||
|      | ||||
|     @signature('v@:@c') | ||||
|     def sortBy_ascending_(self, key, asc): | ||||
|         self.py.sort(key, asc) | ||||
|     def sortBy_ascending_(self, key: str, asc: bool): | ||||
|         self.model.sort(key, asc) | ||||
|      | ||||
|     def markSelected(self): | ||||
|         self.py.app.toggle_selected_mark_state() | ||||
|         self.model.app.toggle_selected_mark_state() | ||||
|      | ||||
|     def removeSelected(self): | ||||
|         self.py.app.remove_selected() | ||||
|         self.model.app.remove_selected() | ||||
|      | ||||
|     @signature('i@:') | ||||
|     def selectedDupeCount(self): | ||||
|         return self.py.selected_dupe_count | ||||
|     def selectedDupeCount(self) -> int: | ||||
|         return self.model.selected_dupe_count | ||||
|      | ||||
|     @signature('@@:i') | ||||
|     def pathAtIndex_(self, index): | ||||
|         row = self.py[index] | ||||
|     def pathAtIndex_(self, index: int) -> str: | ||||
|         row = self.model[index] | ||||
|         return str(row._dupe.path) | ||||
|      | ||||
|     # python --> cocoa | ||||
|     @dontwrap | ||||
|     def invalidate_markings(self): | ||||
|         self.cocoa.invalidateMarkings() | ||||
|         self.callback.invalidateMarkings() | ||||
|      | ||||
| @ -1,9 +1,9 @@ | ||||
| from cocoa.inter import PyGUIObject | ||||
| from cocoa.inter import PyGUIObject, GUIObjectView | ||||
| 
 | ||||
| from core.gui.stats_label import StatsLabel | ||||
| class StatsLabelView(GUIObjectView): | ||||
|     pass | ||||
| 
 | ||||
| class PyStatsLabel(PyGUIObject): | ||||
|     py_class = StatsLabel | ||||
|      | ||||
|     def display(self): | ||||
|         return self.py.display | ||||
|     def display(self) -> str: | ||||
|         return self.model.display | ||||
|  | ||||
| @ -12,5 +12,4 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface AppDelegate : AppDelegateBase {} | ||||
| - (PyDupeGuru *)py; | ||||
| @end | ||||
|  | ||||
| @ -74,8 +74,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     return [[DirectoryPanelME alloc] initWithParentApp:self]; | ||||
| } | ||||
| 
 | ||||
| - (PyDupeGuru *)py { return (PyDupeGuru *)py; } | ||||
| 
 | ||||
| //Delegate | ||||
| - (void)applicationDidFinishLaunching:(NSNotification *)aNotification | ||||
| { | ||||
|  | ||||
| @ -1,22 +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 "../base/PyDupeGuru.h" | ||||
| 
 | ||||
| @interface PyDupeGuru : PyDupeGuruBase | ||||
| //Scanning options
 | ||||
| - (void)setMinWordCount:(NSNumber *)word_count; | ||||
| - (void)setMinWordLength:(NSNumber *)word_length; | ||||
| - (void)setWordWeighting:(NSNumber *)words_are_weighted; | ||||
| - (void)setMatchSimilarWords:(NSNumber *)match_similar_words; | ||||
| - (void)enable:(NSNumber *)enable scanForTag:(NSString *)tag; | ||||
| - (void)scanDeadTracks; | ||||
| - (void)removeDeadTracks; | ||||
| - (NSInteger)deadTrackCount; | ||||
| @end | ||||
| @ -11,25 +11,25 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Utils.h" | ||||
| #import "PyDupeGuru.h" | ||||
| #import "Consts.h" | ||||
| #import "ProgressController.h" | ||||
| 
 | ||||
| @implementation ResultWindow | ||||
| /* Override */ | ||||
| - (void)setScanOptions | ||||
| { | ||||
|     NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; | ||||
|     PyDupeGuru *_py = (PyDupeGuru *)py; | ||||
|     [_py setScanType:[ud objectForKey:@"scanType"]]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagTrack"] scanForTag:@"track"]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagArtist"] scanForTag:@"artist"]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagAlbum"] scanForTag:@"album"]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagTitle"] scanForTag:@"title"]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagGenre"] scanForTag:@"genre"]; | ||||
|     [_py enable:[ud objectForKey:@"scanTagYear"] scanForTag:@"year"]; | ||||
|     [_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:n2i([ud objectForKey:@"scanType"])]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagTrack"]) scanForTag:@"track"]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagArtist"]) scanForTag:@"artist"]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagAlbum"]) scanForTag:@"album"]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagTitle"]) scanForTag:@"title"]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagGenre"]) scanForTag:@"genre"]; | ||||
|     [model enable:n2b([ud objectForKey:@"scanTagYear"]) scanForTag:@"year"]; | ||||
|     [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"])]; | ||||
| } | ||||
| 
 | ||||
| - (void)initResultColumns | ||||
| @ -72,7 +72,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| /* Actions */ | ||||
| - (IBAction)removeDeadTracks:(id)sender | ||||
| { | ||||
|     [(PyDupeGuru *)py scanDeadTracks]; | ||||
|     [model scanDeadTracks]; | ||||
| } | ||||
| 
 | ||||
| /* Notifications */ | ||||
| @ -81,11 +81,11 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     [super jobCompleted:aNotification]; | ||||
|     id lastAction = [[ProgressController mainProgressController] jobId]; | ||||
|     if ([lastAction isEqualTo:jobScanDeadTracks]) { | ||||
|         NSInteger deadTrackCount = [(PyDupeGuru *)py deadTrackCount]; | ||||
|         NSInteger deadTrackCount = [model deadTrackCount]; | ||||
|         if (deadTrackCount > 0) { | ||||
|             NSString *msg = TR(@"Your iTunes Library contains %d dead tracks ready to be removed. Continue?"); | ||||
|             if ([Dialogs askYesNo:[NSString stringWithFormat:msg,deadTrackCount]] == NSAlertFirstButtonReturn) | ||||
|                 [(PyDupeGuru *)py removeDeadTracks]; | ||||
|                 [model removeDeadTracks]; | ||||
|         } | ||||
|         else { | ||||
|             [Dialogs showMessage:TR(@"You have no dead tracks in your iTunes Library")]; | ||||
|  | ||||
| @ -7,64 +7,14 @@ | ||||
| from hscommon.trans import install_gettext_trans_under_cocoa | ||||
| install_gettext_trans_under_cocoa() | ||||
| 
 | ||||
| from cocoa.inter import signature | ||||
| from cocoa.inter 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 | ||||
| from inter.prioritize_dialog import PyPrioritizeDialog | ||||
| from inter.prioritize_list import PyPrioritizeList | ||||
| from inter.problem_dialog import PyProblemDialog | ||||
| from inter.problem_table import PyProblemTable | ||||
| from inter.result_table import PyResultTable | ||||
| from inter.stats_label import PyStatsLabel | ||||
| from inter.app_me import DupeGuruME | ||||
| 
 | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def init(self): | ||||
|         self = super(PyDupeGuru,self).init() | ||||
|         self._init(DupeGuruME) | ||||
|         return self | ||||
|      | ||||
|     def removeDeadTracks(self): | ||||
|         self.py.remove_dead_tracks() | ||||
|      | ||||
|     def scanDeadTracks(self): | ||||
|         self.py.scan_dead_tracks() | ||||
|      | ||||
|     #---Information | ||||
|     @signature('i@:') | ||||
|     def deadTrackCount(self): | ||||
|         return len(self.py.dead_tracks) | ||||
|      | ||||
|     #---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.Fields, | ||||
|                 ScanType.FieldsNoOrder, | ||||
|                 ScanType.Tag, | ||||
|                 ScanType.Contents, | ||||
|                 ScanType.ContentsAudio, | ||||
|             ][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 | ||||
|      | ||||
|     def enable_scanForTag_(self, enable, scan_tag): | ||||
|         if enable: | ||||
|             self.py.scanner.scanned_tags.add(scan_tag) | ||||
|         else: | ||||
|             self.py.scanner.scanned_tags.discard(scan_tag) | ||||
|      | ||||
| from inter.app_me import PyDupeGuru | ||||
|  | ||||
| @ -19,11 +19,9 @@ | ||||
| /* End PBXAppleScriptBuildPhase section */ | ||||
| 
 | ||||
| /* Begin PBXBuildFile section */ | ||||
| 		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; | ||||
| 		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; | ||||
| 		CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB411242D00004B0AA7 /* HSGUIController.m */; }; | ||||
| 		CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB611242D00004B0AA7 /* HSOutline.m */; }; | ||||
| 		CE003CC811242D00004B0AA7 /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB811242D00004B0AA7 /* HSWindowController.m */; }; | ||||
| 		CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */; }; | ||||
| 		CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC111242D00004B0AA7 /* HSOutlineView.m */; }; | ||||
| 		CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC311242D00004B0AA7 /* NSIndexPathAdditions.m */; }; | ||||
| @ -47,11 +45,9 @@ | ||||
| 		CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2E87FC142BC92C00519A68 /* HSQuicklook.m */; }; | ||||
| 		CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; | ||||
| 		CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; | ||||
| 		CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; }; | ||||
| 		CE4B59C91119919700C06C9E /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE4B59C61119919700C06C9E /* progress.xib */; }; | ||||
| 		CE4F934912CCA96C0067A3AE /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4F934812CCA96C0067A3AE /* HSAboutBox.m */; }; | ||||
| 		CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE10FC6C12E00EC695D /* Dialogs.m */; }; | ||||
| 		CE515DF40FC6C12E00EC695D /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */; }; | ||||
| 		CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE70FC6C12E00EC695D /* ProgressController.m */; }; | ||||
| 		CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF00FC6C12E00EC695D /* Utils.m */; }; | ||||
| 		CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF20FC6C12E00EC695D /* ValueTransformers.m */; }; | ||||
| @ -64,12 +60,33 @@ | ||||
| 		CE6E0E9F1054EB97008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0E9E1054EB97008D9390 /* dsa_pub.pem */; }; | ||||
| 		CE74A12412537F06008A8DF0 /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */; }; | ||||
| 		CE74A12712537F2E008A8DF0 /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE74A12512537F2E008A8DF0 /* FairwareReminder.xib */; }; | ||||
| 		CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE848A1809DD85810004CB44 /* Consts.h */; }; | ||||
| 		CE84C9B21423ADFB0050A6AD /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */; }; | ||||
| 		CE84C9B31423ADFB0050A6AD /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */; }; | ||||
| 		CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B61423AE410050A6AD /* HSPopUpList.m */; }; | ||||
| 		CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B81423AE410050A6AD /* HSSelectableList.m */; }; | ||||
| 		CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; }; | ||||
| 		CE9705E614C46E7D007A28F6 /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C514C46E7D007A28F6 /* ObjP.m */; }; | ||||
| 		CE9705E714C46E7D007A28F6 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C714C46E7D007A28F6 /* PyColumns.m */; }; | ||||
| 		CE9705E814C46E7D007A28F6 /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */; }; | ||||
| 		CE9705E914C46E7D007A28F6 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */; }; | ||||
| 		CE9705EA14C46E7D007A28F6 /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */; }; | ||||
| 		CE9705EB14C46E7D007A28F6 /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */; }; | ||||
| 		CE9705EC14C46E7D007A28F6 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */; }; | ||||
| 		CE9705ED14C46E7D007A28F6 /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D314C46E7D007A28F6 /* PyFairware.m */; }; | ||||
| 		CE9705EE14C46E7D007A28F6 /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D514C46E7D007A28F6 /* PyGUIObject.m */; }; | ||||
| 		CE9705EF14C46E7D007A28F6 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D714C46E7D007A28F6 /* PyOutline.m */; }; | ||||
| 		CE9705F014C46E7D007A28F6 /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */; }; | ||||
| 		CE9705F114C46E7D007A28F6 /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */; }; | ||||
| 		CE9705F214C46E7D007A28F6 /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */; }; | ||||
| 		CE9705F314C46E7D007A28F6 /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DF14C46E7D007A28F6 /* PyResultTable.m */; }; | ||||
| 		CE9705F414C46E7D007A28F6 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E114C46E7D007A28F6 /* PySelectableList.m */; }; | ||||
| 		CE9705F514C46E7D007A28F6 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */; }; | ||||
| 		CE9705F614C46E7D007A28F6 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E514C46E7D007A28F6 /* PyTable.m */; }; | ||||
| 		CE9705F814C46EA3007A28F6 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9705F714C46EA3007A28F6 /* Python */; }; | ||||
| 		CE9705F914C46EC3007A28F6 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE9705F714C46EA3007A28F6 /* Python */; }; | ||||
| 		CE9705FF14C46F60007A28F6 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE9705FE14C46F60007A28F6 /* py */; }; | ||||
| 		CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CE97060014C46F70007A28F6 /* dg_cocoa.py */; }; | ||||
| 		CE97060314C471F2007A28F6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97060214C471F2007A28F6 /* main.m */; }; | ||||
| 		CEA14F431461ED63007F01A5 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA14F421461ED63007F01A5 /* locale */; }; | ||||
| 		CEB14D29124DFC2800FA7481 /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB14D28124DFC2800FA7481 /* ResultTable.m */; }; | ||||
| 		CEB5E07813225C89009F521D /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */; }; | ||||
| @ -89,7 +106,7 @@ | ||||
| 			dstSubfolderSpec = 10; | ||||
| 			files = ( | ||||
| 				CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */, | ||||
| 				CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */, | ||||
| 				CE9705F914C46EC3007A28F6 /* Python in CopyFiles */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -98,7 +115,6 @@ | ||||
| /* Begin PBXFileReference section */ | ||||
| 		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 		13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | ||||
| 		29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; | ||||
| 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | ||||
| @ -107,12 +123,8 @@ | ||||
| 		CE003CB411242D00004B0AA7 /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; | ||||
| 		CE003CB511242D00004B0AA7 /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE003CB611242D00004B0AA7 /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE003CB711242D00004B0AA7 /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; }; | ||||
| 		CE003CB811242D00004B0AA7 /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; }; | ||||
| 		CE003CB911242D00004B0AA7 /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE003CBC11242D00004B0AA7 /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; }; | ||||
| 		CE003CBD11242D00004B0AA7 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE003CC011242D00004B0AA7 /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; | ||||
| 		CE003CC111242D00004B0AA7 /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; | ||||
| 		CE003CC211242D00004B0AA7 /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; | ||||
| @ -121,7 +133,6 @@ | ||||
| 		CE003CC511242D00004B0AA7 /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; | ||||
| 		CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE003CCF11242D2C004B0AA7 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE05330E12E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE05331012E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE05331212E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; | ||||
| @ -142,12 +153,9 @@ | ||||
| 		CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; | ||||
| 		CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0A0C131175A28100DCA3C6 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE1425880AFB718500BD5167 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; | ||||
| 		CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE22399E148FFE4F00B3DC99 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE2239A0148FFE6600B3DC99 /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE2239A1148FFE6600B3DC99 /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; }; | ||||
| 		CE2B2B5A1406ABDA0038D15A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; }; | ||||
| @ -170,17 +178,13 @@ | ||||
| 		CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE4B59C61119919700C06C9E /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; | ||||
| 		CE4F934712CCA96C0067A3AE /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE4F934812CCA96C0067A3AE /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE00FC6C12E00EC695D /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE10FC6C12E00EC695D /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE20FC6C12E00EC695D /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE60FC6C12E00EC695D /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE70FC6C12E00EC695D /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DE80FC6C12E00EC695D /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DEF0FC6C12E00EC695D /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DF00FC6C12E00EC695D /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515DF10FC6C12E00EC695D /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; | ||||
| @ -190,7 +194,6 @@ | ||||
| 		CE515E170FC6C19300EC695D /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515E180FC6C19300EC695D /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515E190FC6C19300EC695D /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515E1B0FC6C19300EC695D /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE515E1C0FC6C19300EC695D /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE578301124DFC660004769C /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; | ||||
| @ -214,7 +217,6 @@ | ||||
| 		CE74255F1460318D002F8E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; }; | ||||
| 		CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE74A12312537F06008A8DF0 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE74A12612537F2E008A8DF0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE7A6992146442F80007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = ../base/it.lproj/Localizable.strings; sourceTree = "<group>"; }; | ||||
| 		CE7A6998146443090007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DetailsPanel.xib; sourceTree = "<group>"; }; | ||||
| @ -233,21 +235,54 @@ | ||||
| 		CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9B41423AE2A0050A6AD /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9B51423AE410050A6AD /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9B61423AE410050A6AD /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; | ||||
| 		CE84C9B71423AE410050A6AD /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE84C9B81423AE410050A6AD /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; }; | ||||
| 		CE84C9BC1423AF200050A6AD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE9705C414C46E7D007A28F6 /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; }; | ||||
| 		CE9705C514C46E7D007A28F6 /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; }; | ||||
| 		CE9705C614C46E7D007A28F6 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE9705C714C46E7D007A28F6 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; }; | ||||
| 		CE9705C814C46E7D007A28F6 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; }; | ||||
| 		CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; }; | ||||
| 		CE9705CA14C46E7D007A28F6 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE9705CC14C46E7D007A28F6 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; }; | ||||
| 		CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; }; | ||||
| 		CE9705CE14C46E7D007A28F6 /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; }; | ||||
| 		CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; }; | ||||
| 		CE9705D014C46E7D007A28F6 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; }; | ||||
| 		CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; }; | ||||
| 		CE9705D214C46E7D007A28F6 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; }; | ||||
| 		CE9705D314C46E7D007A28F6 /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; }; | ||||
| 		CE9705D414C46E7D007A28F6 /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; }; | ||||
| 		CE9705D514C46E7D007A28F6 /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; }; | ||||
| 		CE9705D614C46E7D007A28F6 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE9705D714C46E7D007A28F6 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE9705D814C46E7D007A28F6 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE9705DA14C46E7D007A28F6 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE9705DC14C46E7D007A28F6 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE9705DE14C46E7D007A28F6 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; }; | ||||
| 		CE9705DF14C46E7D007A28F6 /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; }; | ||||
| 		CE9705E014C46E7D007A28F6 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE9705E114C46E7D007A28F6 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; }; | ||||
| 		CE9705E214C46E7D007A28F6 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; }; | ||||
| 		CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; }; | ||||
| 		CE9705E414C46E7D007A28F6 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE9705E514C46E7D007A28F6 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; }; | ||||
| 		CE9705F714C46EA3007A28F6 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; }; | ||||
| 		CE9705FE14C46F60007A28F6 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; }; | ||||
| 		CE97060014C46F70007A28F6 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; }; | ||||
| 		CE97060214C471F2007A28F6 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; }; | ||||
| 		CEA14F421461ED63007F01A5 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; }; | ||||
| 		CEB14D26124DFC2800FA7481 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB14D27124DFC2800FA7481 /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB14D28124DFC2800FA7481 /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB5E07713225C89009F521D /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB5E07C13225CA2009F521D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEB5E07E13225CB8009F521D /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEC3D37C14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DetailsPanel.xib; sourceTree = "<group>"; }; | ||||
| @ -276,8 +311,6 @@ | ||||
| 		CECE37A31423EA980005187F /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CECE37A41423EA980005187F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CECE37A51423EA980005187F /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEDF07A1112493B200EE5BC0 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEDF07A2112493B200EE5BC0 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; }; | ||||
| @ -296,7 +329,6 @@ | ||||
| 		CEF5770C13CDFB250083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ResultWindow.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEF5770D13CDFB310083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Preferences.xib; sourceTree = "<group>"; }; | ||||
| 		CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; 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 */ | ||||
| @ -307,6 +339,7 @@ | ||||
| 				CE2E87F9142BC90A00519A68 /* Quartz.framework in Frameworks */, | ||||
| 				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, | ||||
| 				CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */, | ||||
| 				CE9705F814C46EA3007A28F6 /* Python in Frameworks */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -316,13 +349,11 @@ | ||||
| 		080E96DDFE201D6D7F000001 /* DGME */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				29B97316FDCFA39411CA2CEA /* main.m */, | ||||
| 				CE381C9509914ACE003581CE /* AppDelegate.h */, | ||||
| 				CE381C9409914ACE003581CE /* AppDelegate.m */, | ||||
| 				CE848A1809DD85810004CB44 /* Consts.h */, | ||||
| 				CE68EE6509ABC48000971085 /* DirectoryPanel.h */, | ||||
| 				CE68EE6609ABC48000971085 /* DirectoryPanel.m */, | ||||
| 				CEFF18A009A4D387005E6321 /* PyDupeGuru.h */, | ||||
| 				CE381C9B09914ADF003581CE /* ResultWindow.h */, | ||||
| 				CE381C9A09914ADF003581CE /* ResultWindow.m */, | ||||
| 			); | ||||
| @ -332,6 +363,7 @@ | ||||
| 		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE9705F714C46EA3007A28F6 /* Python */, | ||||
| 				CE1425880AFB718500BD5167 /* Sparkle.framework */, | ||||
| 				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, | ||||
| 				CE2E87F8142BC90A00519A68 /* Quartz.framework */, | ||||
| @ -362,6 +394,7 @@ | ||||
| 			children = ( | ||||
| 				080E96DDFE201D6D7F000001 /* DGME */, | ||||
| 				CE515E140FC6C17900EC695D /* dgbase */, | ||||
| 				CE9705C314C46E7D007A28F6 /* autogen */, | ||||
| 				CE515DDD0FC6C09400EC695D /* cocoalib */, | ||||
| 				29B97317FDCFA39411CA2CEA /* Resources */, | ||||
| 				29B97323FDCFA39411CA2CEA /* Frameworks */, | ||||
| @ -373,9 +406,10 @@ | ||||
| 		29B97317FDCFA39411CA2CEA /* Resources */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE97060014C46F70007A28F6 /* dg_cocoa.py */, | ||||
| 				CE9705FE14C46F60007A28F6 /* py */, | ||||
| 				CEA14F421461ED63007F01A5 /* locale */, | ||||
| 				CE073F5409CAE1A3005C1D2F /* help */, | ||||
| 				CE381CF509915304003581CE /* dg_cocoa.plugin */, | ||||
| 				CEFC294309C89E0000D9F998 /* images */, | ||||
| 				CE05330C12E5D3D70029EF25 /* xib */, | ||||
| 				CEEB135109C837A2004D2330 /* dupeguru.icns */, | ||||
| @ -406,8 +440,6 @@ | ||||
| 				CE003CB611242D00004B0AA7 /* HSOutline.m */, | ||||
| 				CE0A0BFE1175A1C000DCA3C6 /* HSTable.h */, | ||||
| 				CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */, | ||||
| 				CE003CB711242D00004B0AA7 /* HSWindowController.h */, | ||||
| 				CE003CB811242D00004B0AA7 /* HSWindowController.m */, | ||||
| 				CE84C9B51423AE410050A6AD /* HSPopUpList.h */, | ||||
| 				CE84C9B61423AE410050A6AD /* HSPopUpList.m */, | ||||
| 				CE84C9B71423AE410050A6AD /* HSSelectableList.h */, | ||||
| @ -417,19 +449,6 @@ | ||||
| 			path = ../../cocoalib/controllers; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CE003CBB11242D00004B0AA7 /* proxies */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE22399E148FFE4F00B3DC99 /* PyColumns.h */, | ||||
| 				CE003CBC11242D00004B0AA7 /* PyGUI.h */, | ||||
| 				CE003CBD11242D00004B0AA7 /* PyOutline.h */, | ||||
| 				CE0A0C131175A28100DCA3C6 /* PyTable.h */, | ||||
| 				CE84C9B41423AE2A0050A6AD /* PySelectableList.h */, | ||||
| 			); | ||||
| 			name = proxies; | ||||
| 			path = ../../cocoalib/proxies; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CE003CBF11242D00004B0AA7 /* views */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -477,16 +496,12 @@ | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE003CB211242D00004B0AA7 /* controllers */, | ||||
| 				CE003CBB11242D00004B0AA7 /* proxies */, | ||||
| 				CE003CBF11242D00004B0AA7 /* views */, | ||||
| 				CE4B59C41119919700C06C9E /* xib */, | ||||
| 				CE515DE00FC6C12E00EC695D /* Dialogs.h */, | ||||
| 				CE515DE10FC6C12E00EC695D /* Dialogs.m */, | ||||
| 				CE515DE20FC6C12E00EC695D /* HSErrorReportWindow.h */, | ||||
| 				CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */, | ||||
| 				CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */, | ||||
| 				CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */, | ||||
| 				CE74A12312537F06008A8DF0 /* PyFairware.h */, | ||||
| 				CE4F934712CCA96C0067A3AE /* HSAboutBox.h */, | ||||
| 				CE4F934812CCA96C0067A3AE /* HSAboutBox.m */, | ||||
| 				CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */, | ||||
| @ -497,7 +512,6 @@ | ||||
| 				CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */, | ||||
| 				CE515DE60FC6C12E00EC695D /* ProgressController.h */, | ||||
| 				CE515DE70FC6C12E00EC695D /* ProgressController.m */, | ||||
| 				CE515DE80FC6C12E00EC695D /* PyApp.h */, | ||||
| 				CE515DEF0FC6C12E00EC695D /* Utils.h */, | ||||
| 				CE515DF00FC6C12E00EC695D /* Utils.m */, | ||||
| 				CE515DF10FC6C12E00EC695D /* ValueTransformers.h */, | ||||
| @ -511,40 +525,74 @@ | ||||
| 			children = ( | ||||
| 				CEB14D27124DFC2800FA7481 /* ResultTable.h */, | ||||
| 				CEB14D28124DFC2800FA7481 /* ResultTable.m */, | ||||
| 				CEB14D26124DFC2800FA7481 /* PyResultTable.h */, | ||||
| 				CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */, | ||||
| 				CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */, | ||||
| 				CE003CCF11242D2C004B0AA7 /* PyDirectoryOutline.h */, | ||||
| 				CE515E150FC6C19300EC695D /* AppDelegate.h */, | ||||
| 				CE515E160FC6C19300EC695D /* AppDelegate.m */, | ||||
| 				CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */, | ||||
| 				CE515E170FC6C19300EC695D /* Consts.h */, | ||||
| 				CE6032BE0FE6784C007E33FF /* DetailsPanel.h */, | ||||
| 				CE6032BF0FE6784C007E33FF /* DetailsPanel.m */, | ||||
| 				CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */, | ||||
| 				CE515E180FC6C19300EC695D /* DirectoryPanel.h */, | ||||
| 				CE515E190FC6C19300EC695D /* DirectoryPanel.m */, | ||||
| 				CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */, | ||||
| 				CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */, | ||||
| 				CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */, | ||||
| 				CE515E1B0FC6C19300EC695D /* ResultWindow.h */, | ||||
| 				CE515E1C0FC6C19300EC695D /* ResultWindow.m */, | ||||
| 				CEDF07A1112493B200EE5BC0 /* StatsLabel.h */, | ||||
| 				CEDF07A2112493B200EE5BC0 /* StatsLabel.m */, | ||||
| 				CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */, | ||||
| 				CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */, | ||||
| 				CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */, | ||||
| 				CEB5E07713225C89009F521D /* PyExtraFairwareReminder.h */, | ||||
| 				CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */, | ||||
| 				CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */, | ||||
| 				CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */, | ||||
| 				CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */, | ||||
| 				CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */, | ||||
| 				CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */, | ||||
| 				CE97060214C471F2007A28F6 /* main.m */, | ||||
| 			); | ||||
| 			name = dgbase; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		CE9705C314C46E7D007A28F6 /* autogen */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE9705C414C46E7D007A28F6 /* ObjP.h */, | ||||
| 				CE9705C514C46E7D007A28F6 /* ObjP.m */, | ||||
| 				CE9705C614C46E7D007A28F6 /* PyColumns.h */, | ||||
| 				CE9705C714C46E7D007A28F6 /* PyColumns.m */, | ||||
| 				CE9705C814C46E7D007A28F6 /* PyDetailsPanel.h */, | ||||
| 				CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */, | ||||
| 				CE9705CA14C46E7D007A28F6 /* PyDirectoryOutline.h */, | ||||
| 				CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */, | ||||
| 				CE9705CC14C46E7D007A28F6 /* PyDupeGuru.h */, | ||||
| 				CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */, | ||||
| 				CE9705CE14C46E7D007A28F6 /* PyDupeGuruBase.h */, | ||||
| 				CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */, | ||||
| 				CE9705D014C46E7D007A28F6 /* PyExtraFairwareReminder.h */, | ||||
| 				CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */, | ||||
| 				CE9705D214C46E7D007A28F6 /* PyFairware.h */, | ||||
| 				CE9705D314C46E7D007A28F6 /* PyFairware.m */, | ||||
| 				CE9705D414C46E7D007A28F6 /* PyGUIObject.h */, | ||||
| 				CE9705D514C46E7D007A28F6 /* PyGUIObject.m */, | ||||
| 				CE9705D614C46E7D007A28F6 /* PyOutline.h */, | ||||
| 				CE9705D714C46E7D007A28F6 /* PyOutline.m */, | ||||
| 				CE9705D814C46E7D007A28F6 /* PyPrioritizeDialog.h */, | ||||
| 				CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */, | ||||
| 				CE9705DA14C46E7D007A28F6 /* PyPrioritizeList.h */, | ||||
| 				CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */, | ||||
| 				CE9705DC14C46E7D007A28F6 /* PyProblemDialog.h */, | ||||
| 				CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */, | ||||
| 				CE9705DE14C46E7D007A28F6 /* PyResultTable.h */, | ||||
| 				CE9705DF14C46E7D007A28F6 /* PyResultTable.m */, | ||||
| 				CE9705E014C46E7D007A28F6 /* PySelectableList.h */, | ||||
| 				CE9705E114C46E7D007A28F6 /* PySelectableList.m */, | ||||
| 				CE9705E214C46E7D007A28F6 /* PyStatsLabel.h */, | ||||
| 				CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */, | ||||
| 				CE9705E414C46E7D007A28F6 /* PyTable.h */, | ||||
| 				CE9705E514C46E7D007A28F6 /* PyTable.m */, | ||||
| 			); | ||||
| 			name = autogen; | ||||
| 			path = ../autogen; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		CEFC294309C89E0000D9F998 /* images */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -616,7 +664,6 @@ | ||||
| 			isa = PBXResourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */, | ||||
| 				CE073F6309CAE1A3005C1D2F /* help in Resources */, | ||||
| 				CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, | ||||
| 				CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, | ||||
| @ -635,6 +682,8 @@ | ||||
| 				CEF3185A13D8660000B8CDCA /* ErrorReportWindow.xib in Resources */, | ||||
| 				CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */, | ||||
| 				CEA14F431461ED63007F01A5 /* locale in Resources */, | ||||
| 				CE9705FF14C46F60007A28F6 /* py in Resources */, | ||||
| 				CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -645,12 +694,10 @@ | ||||
| 			isa = PBXSourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				8D11072D0486CEB800E47090 /* main.m in Sources */, | ||||
| 				CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, | ||||
| 				CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, | ||||
| 				CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */, | ||||
| 				CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */, | ||||
| 				CE515DF40FC6C12E00EC695D /* HSErrorReportWindow.m in Sources */, | ||||
| 				CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */, | ||||
| 				CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */, | ||||
| 				CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */, | ||||
| @ -660,7 +707,6 @@ | ||||
| 				CE6032C00FE6784C007E33FF /* DetailsPanel.m in Sources */, | ||||
| 				CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */, | ||||
| 				CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */, | ||||
| 				CE003CC811242D00004B0AA7 /* HSWindowController.m in Sources */, | ||||
| 				CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */, | ||||
| 				CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */, | ||||
| 				CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */, | ||||
| @ -681,6 +727,24 @@ | ||||
| 				CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */, | ||||
| 				CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */, | ||||
| 				CE2239A2148FFE6600B3DC99 /* HSColumns.m in Sources */, | ||||
| 				CE9705E614C46E7D007A28F6 /* ObjP.m in Sources */, | ||||
| 				CE9705E714C46E7D007A28F6 /* PyColumns.m in Sources */, | ||||
| 				CE9705E814C46E7D007A28F6 /* PyDetailsPanel.m in Sources */, | ||||
| 				CE9705E914C46E7D007A28F6 /* PyDirectoryOutline.m in Sources */, | ||||
| 				CE9705EA14C46E7D007A28F6 /* PyDupeGuru.m in Sources */, | ||||
| 				CE9705EB14C46E7D007A28F6 /* PyDupeGuruBase.m in Sources */, | ||||
| 				CE9705EC14C46E7D007A28F6 /* PyExtraFairwareReminder.m in Sources */, | ||||
| 				CE9705ED14C46E7D007A28F6 /* PyFairware.m in Sources */, | ||||
| 				CE9705EE14C46E7D007A28F6 /* PyGUIObject.m in Sources */, | ||||
| 				CE9705EF14C46E7D007A28F6 /* PyOutline.m in Sources */, | ||||
| 				CE9705F014C46E7D007A28F6 /* PyPrioritizeDialog.m in Sources */, | ||||
| 				CE9705F114C46E7D007A28F6 /* PyPrioritizeList.m in Sources */, | ||||
| 				CE9705F214C46E7D007A28F6 /* PyProblemDialog.m in Sources */, | ||||
| 				CE9705F314C46E7D007A28F6 /* PyResultTable.m in Sources */, | ||||
| 				CE9705F414C46E7D007A28F6 /* PySelectableList.m in Sources */, | ||||
| 				CE9705F514C46E7D007A28F6 /* PyStatsLabel.m in Sources */, | ||||
| 				CE9705F614C46E7D007A28F6 /* PyTable.m in Sources */, | ||||
| 				CE97060314C471F2007A28F6 /* main.m in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -880,6 +944,10 @@ | ||||
| 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | ||||
| 				INFOPLIST_FILE = Info.plist; | ||||
| 				INSTALL_PATH = "$(PROJECT_DIR)"; | ||||
| 				LIBRARY_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"\"$(SRCROOT)/../../build\"", | ||||
| 				); | ||||
| 				PRODUCT_NAME = "dupeGuru ME"; | ||||
| 				WRAPPER_EXTENSION = app; | ||||
| 			}; | ||||
| @ -890,8 +958,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
| @ -902,8 +970,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(NATIVE_ARCH_ACTUAL)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
| @ -917,6 +985,10 @@ | ||||
| 				DSTROOT = /; | ||||
| 				INFOPLIST_FILE = Info.plist; | ||||
| 				INSTALL_PATH = "$(PROJECT_DIR)"; | ||||
| 				LIBRARY_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"\"$(SRCROOT)/../../build\"", | ||||
| 				); | ||||
| 				PRODUCT_NAME = "dupeGuru ME"; | ||||
| 				WRAPPER_EXTENSION = app; | ||||
| 			}; | ||||
|  | ||||
| @ -1,23 +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 "Utils.h" | ||||
| 
 | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | ||||
|     [Utils setPluginName:@"dg_cocoa"]; | ||||
|     NSString *pluginPath = [[NSBundle mainBundle] | ||||
|                                 pathForResource:@"dg_cocoa" | ||||
|                                          ofType:@"plugin"]; | ||||
|     NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath]; | ||||
|     [pluginBundle load]; | ||||
|     [pool release]; | ||||
|     return NSApplicationMain(argc,  (const char **) argv); | ||||
| } | ||||
| @ -8,8 +8,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "../base/AppDelegate.h" | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface AppDelegate : AppDelegateBase {} | ||||
| - (PyDupeGuru *)py; | ||||
| @end | ||||
|  | ||||
| @ -64,11 +64,9 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| - (DetailsPanel *)createDetailsPanel | ||||
| { | ||||
|     return [[DetailsPanelPE alloc] initWithPy:py]; | ||||
|     return [[DetailsPanelPE alloc] initWithApp:model]; | ||||
| } | ||||
| 
 | ||||
| - (PyDupeGuru *)py { return (PyDupeGuru *)py; } | ||||
| 
 | ||||
| //Delegate | ||||
| - (void)applicationDidFinishLaunching:(NSNotification *)aNotification | ||||
| { | ||||
|  | ||||
| @ -8,6 +8,7 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| #import <Cocoa/Cocoa.h> | ||||
| #import "../base/DetailsPanel.h" | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface DetailsPanelPE : DetailsPanel | ||||
| { | ||||
| @ -16,9 +17,11 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     IBOutlet NSImageView *refImage; | ||||
|     IBOutlet NSProgressIndicator *refProgressIndicator; | ||||
|      | ||||
|     PyApp *pyApp; | ||||
|     PyDupeGuru *pyApp; | ||||
|     BOOL _needsRefresh; | ||||
|     NSString *_dupePath; | ||||
|     NSString *_refPath; | ||||
| } | ||||
| 
 | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp; | ||||
| @end | ||||
| @ -14,10 +14,10 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "Consts.h" | ||||
| 
 | ||||
| @implementation DetailsPanelPE | ||||
| - (id)initWithPy:(PyApp *)aPy | ||||
| - (id)initWithApp:(PyDupeGuru *)aApp | ||||
| { | ||||
|     self = [super initWithPy:aPy]; | ||||
|     pyApp = aPy; | ||||
|     self = [super initWithPyRef:[aApp detailsPanel]]; | ||||
|     pyApp = aApp; | ||||
|     _needsRefresh = YES; | ||||
|     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageLoaded:) name:ImageLoadedNotification object:self]; | ||||
|     return self; | ||||
| @ -42,12 +42,12 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|         return; | ||||
|     [detailsTable reloadData]; | ||||
|      | ||||
|     NSString *refPath = [(PyDupeGuru *)pyApp getSelectedDupeRefPath]; | ||||
|     NSString *refPath = [pyApp getSelectedDupeRefPath]; | ||||
|     if (_refPath != nil) | ||||
|         [_refPath autorelease]; | ||||
|     _refPath = [refPath retain]; | ||||
|     [NSThread detachNewThreadSelector:@selector(loadImageAsync:) toTarget:self withObject:refPath]; | ||||
|     NSString *dupePath = [(PyDupeGuru *)pyApp getSelectedDupePath]; | ||||
|     NSString *dupePath = [pyApp getSelectedDupePath]; | ||||
|     if (_dupePath != nil) | ||||
|         [_dupePath autorelease]; | ||||
|     _dupePath = [dupePath retain]; | ||||
|  | ||||
| @ -1,17 +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 "../base/PyDupeGuru.h" | ||||
| 
 | ||||
| @interface PyDupeGuru : PyDupeGuruBase | ||||
| - (void)clearPictureCache; | ||||
| - (NSString *)getSelectedDupePath; | ||||
| - (NSString *)getSelectedDupeRefPath; | ||||
| - (void)setMatchScaled:(NSNumber *)match_scaled; | ||||
| @end | ||||
| @ -40,12 +40,11 @@ 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 setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; | ||||
|     [_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; | ||||
|     [_py setMatchScaled:[ud objectForKey:@"matchScaled"]]; | ||||
|     [model setScanType:n2i([ud objectForKey:@"scanType"])]; | ||||
|     [model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])]; | ||||
|     [model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; | ||||
|     [model setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; | ||||
|     [model setMatchScaled:n2b([ud objectForKey:@"matchScaled"])]; | ||||
| } | ||||
| 
 | ||||
| /* Actions */ | ||||
| @ -54,6 +53,6 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
|     NSString *msg = TR(@"Do you really want to remove all your cached picture analysis?"); | ||||
|     if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO | ||||
|         return; | ||||
|     [(PyDupeGuru *)py clearPictureCache]; | ||||
|     [model clearPictureCache]; | ||||
| } | ||||
| @end | ||||
| @ -7,48 +7,15 @@ | ||||
| from hscommon.trans import install_gettext_trans_under_cocoa | ||||
| install_gettext_trans_under_cocoa() | ||||
| 
 | ||||
| from core.scanner import ScanType | ||||
| from cocoa.inter import PySelectableList, PyColumns, PyTable | ||||
| 
 | ||||
| from inter.app import PyDupeGuruBase | ||||
| from inter.details_panel import PyDetailsPanel | ||||
| from inter.directory_outline import PyDirectoryOutline | ||||
| from inter.extra_fairware_reminder import PyExtraFairwareReminder | ||||
| from inter.prioritize_dialog import PyPrioritizeDialog | ||||
| from inter.prioritize_list import PyPrioritizeList | ||||
| from inter.problem_dialog import PyProblemDialog | ||||
| from inter.problem_table import PyProblemTable | ||||
| from inter.result_table import PyResultTable | ||||
| from inter.stats_label import PyStatsLabel | ||||
| from inter.app_pe import DupeGuruPE | ||||
| 
 | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def init(self): | ||||
|         self = super(PyDupeGuru, self).init() | ||||
|         self._init(DupeGuruPE) | ||||
|         return self | ||||
|      | ||||
|     def clearPictureCache(self): | ||||
|         self.py.scanner.clear_picture_cache() | ||||
|      | ||||
|     #---Information     | ||||
|     def getSelectedDupePath(self): | ||||
|         return str(self.py.selected_dupe_path()) | ||||
|      | ||||
|     def getSelectedDupeRefPath(self): | ||||
|         return str(self.py.selected_dupe_ref_path()) | ||||
|      | ||||
|     #---Properties | ||||
|     def setScanType_(self, scan_type): | ||||
|         try: | ||||
|             self.py.scanner.scan_type = [ | ||||
|                 ScanType.FuzzyBlock, | ||||
|                 ScanType.ExifTimestamp, | ||||
|             ][scan_type] | ||||
|         except IndexError: | ||||
|             pass | ||||
|      | ||||
|     def setMatchScaled_(self,match_scaled): | ||||
|         self.py.scanner.match_scaled = match_scaled | ||||
|      | ||||
|     def setMinMatchPercentage_(self,percentage): | ||||
|         self.py.scanner.threshold = int(percentage) | ||||
| from inter.app_pe import PyDupeGuru | ||||
|      | ||||
|  | ||||
| @ -7,7 +7,6 @@ | ||||
| 	objects = { | ||||
| 
 | ||||
| /* Begin PBXBuildFile section */ | ||||
| 		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; | ||||
| 		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; | ||||
| 		CE05339B12E5DA350029EF25 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; }; | ||||
| 		CE05339C12E5DA350029EF25 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; | ||||
| @ -27,12 +26,33 @@ | ||||
| 		CE2A29F713213BFB005899AC /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE2A29F513213BFB005899AC /* ExtraFairwareReminder.xib */; }; | ||||
| 		CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; | ||||
| 		CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; | ||||
| 		CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; }; | ||||
| 		CE60180812DF3EA900236FDC /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE60180712DF3EA900236FDC /* HSRecentFiles.m */; }; | ||||
| 		CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6044EB0FE6796200B71262 /* DetailsPanel.m */; }; | ||||
| 		CE63D9D31461EDC000A8CADD /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CE63D9D21461EDC000A8CADD /* locale */; }; | ||||
| 		CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE68EE6609ABC48000971085 /* DirectoryPanel.m */; }; | ||||
| 		CE6E0F3D1054EC62008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */; }; | ||||
| 		CE75017314C4770500E2A349 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017214C4770500E2A349 /* main.m */; }; | ||||
| 		CE75017514C4771800E2A349 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE75017414C4771800E2A349 /* py */; }; | ||||
| 		CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CE75017614C4772100E2A349 /* dg_cocoa.py */; }; | ||||
| 		CE75017914C4774900E2A349 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE75017814C4774900E2A349 /* Python */; }; | ||||
| 		CE75017A14C4775B00E2A349 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE75017814C4774900E2A349 /* Python */; }; | ||||
| 		CE75019E14C477B100E2A349 /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017D14C477B100E2A349 /* ObjP.m */; }; | ||||
| 		CE75019F14C477B100E2A349 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017F14C477B100E2A349 /* PyColumns.m */; }; | ||||
| 		CE7501A014C477B100E2A349 /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018114C477B100E2A349 /* PyDetailsPanel.m */; }; | ||||
| 		CE7501A114C477B100E2A349 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018314C477B100E2A349 /* PyDirectoryOutline.m */; }; | ||||
| 		CE7501A214C477B100E2A349 /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018514C477B100E2A349 /* PyDupeGuru.m */; }; | ||||
| 		CE7501A314C477B100E2A349 /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018714C477B100E2A349 /* PyDupeGuruBase.m */; }; | ||||
| 		CE7501A414C477B100E2A349 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */; }; | ||||
| 		CE7501A514C477B100E2A349 /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018B14C477B100E2A349 /* PyFairware.m */; }; | ||||
| 		CE7501A614C477B100E2A349 /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018D14C477B100E2A349 /* PyGUIObject.m */; }; | ||||
| 		CE7501A714C477B100E2A349 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018F14C477B100E2A349 /* PyOutline.m */; }; | ||||
| 		CE7501A814C477B100E2A349 /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */; }; | ||||
| 		CE7501A914C477B100E2A349 /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019314C477B100E2A349 /* PyPrioritizeList.m */; }; | ||||
| 		CE7501AA14C477B100E2A349 /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019514C477B100E2A349 /* PyProblemDialog.m */; }; | ||||
| 		CE7501AB14C477B100E2A349 /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019714C477B100E2A349 /* PyResultTable.m */; }; | ||||
| 		CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019914C477B100E2A349 /* PySelectableList.m */; }; | ||||
| 		CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019B14C477B100E2A349 /* PyStatsLabel.m */; }; | ||||
| 		CE7501AE14C477B100E2A349 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019D14C477B100E2A349 /* PyTable.m */; }; | ||||
| 		CE7AC9191119911200D02F6C /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7AC9161119911200D02F6C /* progress.xib */; }; | ||||
| 		CE7D249D1423B0BD002E2297 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249A1423B0BD002E2297 /* HSPopUpList.m */; }; | ||||
| 		CE7D249E1423B0BD002E2297 /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249C1423B0BD002E2297 /* HSSelectableList.m */; }; | ||||
| @ -40,7 +60,6 @@ | ||||
| 		CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D24A21423B106002E2297 /* PrioritizeList.m */; }; | ||||
| 		CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */; }; | ||||
| 		CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB1C0FC192D60086DCA6 /* Dialogs.m */; }; | ||||
| 		CE80DB2F0FC192D60086DCA6 /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */; }; | ||||
| 		CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB220FC192D60086DCA6 /* ProgressController.m */; }; | ||||
| 		CE80DB350FC192D60086DCA6 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2B0FC192D60086DCA6 /* Utils.m */; }; | ||||
| 		CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2D0FC192D60086DCA6 /* ValueTransformers.m */; }; | ||||
| @ -49,11 +68,9 @@ | ||||
| 		CE80DB8A0FC1951C0086DCA6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB830FC1951C0086DCA6 /* AppDelegate.m */; }; | ||||
| 		CE80DB8B0FC1951C0086DCA6 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */; }; | ||||
| 		CE80DB8C0FC1951C0086DCA6 /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB890FC1951C0086DCA6 /* ResultWindow.m */; }; | ||||
| 		CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE848A1809DD85810004CB44 /* Consts.h */; }; | ||||
| 		CE95865F112C516400F95FD2 /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE95865D112C516400F95FD2 /* StatsLabel.m */; }; | ||||
| 		CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7441122C96C008CD2BC /* HSGUIController.m */; }; | ||||
| 		CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7461122C96C008CD2BC /* HSOutline.m */; }; | ||||
| 		CE9EA7581122C96C008CD2BC /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7481122C96C008CD2BC /* HSWindowController.m */; }; | ||||
| 		CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */; }; | ||||
| 		CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7511122C96C008CD2BC /* HSOutlineView.m */; }; | ||||
| 		CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7531122C96C008CD2BC /* NSIndexPathAdditions.m */; }; | ||||
| @ -62,7 +79,6 @@ | ||||
| 		CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEA8F335142BC9AB00A6DFAC /* Quartz.framework */; }; | ||||
| 		CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */; }; | ||||
| 		CEC9DB4C12CCAA7D003102F0 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */; }; | ||||
| 		CECA899C09DB132E00A3D774 /* DetailsPanel.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CECA899A09DB132E00A3D774 /* DetailsPanel.h */; }; | ||||
| 		CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CECA899B09DB132E00A3D774 /* DetailsPanel.m */; }; | ||||
| 		CECB2AC513D867AD0081E295 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC113D867AD0081E295 /* about.xib */; }; | ||||
| 		CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC313D867AD0081E295 /* ErrorReportWindow.xib */; }; | ||||
| @ -81,8 +97,7 @@ | ||||
| 			dstSubfolderSpec = 10; | ||||
| 			files = ( | ||||
| 				CE15C8C00ADEB8D40061D4A5 /* Sparkle.framework in CopyFiles */, | ||||
| 				CECA899C09DB132E00A3D774 /* DetailsPanel.h in CopyFiles */, | ||||
| 				CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */, | ||||
| 				CE75017A14C4775B00E2A349 /* Python in CopyFiles */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -91,7 +106,6 @@ | ||||
| /* Begin PBXFileReference section */ | ||||
| 		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 		13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | ||||
| 		29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; | ||||
| 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | ||||
| @ -112,17 +126,13 @@ | ||||
| 		CE0533AE12E5DAAD0029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/Preferences.xib; sourceTree = "<group>"; }; | ||||
| 		CE0533B712E5DC040029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../../cocoalib/fr.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE073F5409CAE1A3005C1D2F /* help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = help; path = ../../build/help; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0C2AAA117700E700BC749F /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE0C2AB41177011000BC749F /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; }; | ||||
| 		CE0C2AB51177011000BC749F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; | ||||
| 		CE0C2ABA1177014200BC749F /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0C2ABB1177014200BC749F /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE0C2ABC1177014200BC749F /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; | ||||
| 		CE18126F111C9D5100E49FCE /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE1EB5FD12537F9D0034AABB /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE1EB60012537FB90034AABB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE21AFB61423EA6E00DE35BF /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE21AFB71423EA6E00DE35BF /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| @ -130,24 +140,10 @@ | ||||
| 		CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE2A29F613213BFB005899AC /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE2A29FF13213C31005899AC /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE520C5914B394B000AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/about.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C5A14B394B000AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C5B14B394B000AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6014B394C200AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/DetailsPanel.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6114B394C200AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/Preferences.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6414B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DirectoryPanel.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6514B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6614B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/MainMenu.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6714B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6814B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ProblemDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C6914B394DB00AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ResultWindow.xib; sourceTree = "<group>"; }; | ||||
| 		CE520C7014B394E400AE80D6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ../base/ru.lproj/Localizable.strings; sourceTree = "<group>"; }; | ||||
| 		CE60180612DF3EA900236FDC /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE60180712DF3EA900236FDC /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6044EA0FE6796200B71262 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| @ -168,6 +164,44 @@ | ||||
| 		CE68EE6609ABC48000971085 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; }; | ||||
| 		CE7358071406ABF700F3F6DA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; }; | ||||
| 		CE75017214C4770500E2A349 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; }; | ||||
| 		CE75017414C4771800E2A349 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; }; | ||||
| 		CE75017614C4772100E2A349 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; }; | ||||
| 		CE75017814C4774900E2A349 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; }; | ||||
| 		CE75017C14C477B100E2A349 /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; }; | ||||
| 		CE75017D14C477B100E2A349 /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; }; | ||||
| 		CE75017E14C477B100E2A349 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE75017F14C477B100E2A349 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; }; | ||||
| 		CE75018014C477B100E2A349 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; }; | ||||
| 		CE75018114C477B100E2A349 /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; }; | ||||
| 		CE75018214C477B100E2A349 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE75018314C477B100E2A349 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE75018414C477B100E2A349 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; }; | ||||
| 		CE75018514C477B100E2A349 /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; }; | ||||
| 		CE75018614C477B100E2A349 /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; }; | ||||
| 		CE75018714C477B100E2A349 /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; }; | ||||
| 		CE75018814C477B100E2A349 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; }; | ||||
| 		CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; }; | ||||
| 		CE75018A14C477B100E2A349 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; }; | ||||
| 		CE75018B14C477B100E2A349 /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; }; | ||||
| 		CE75018C14C477B100E2A349 /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; }; | ||||
| 		CE75018D14C477B100E2A349 /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; }; | ||||
| 		CE75018E14C477B100E2A349 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE75018F14C477B100E2A349 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE75019014C477B100E2A349 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE75019214C477B100E2A349 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE75019314C477B100E2A349 /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE75019414C477B100E2A349 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE75019514C477B100E2A349 /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE75019614C477B100E2A349 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; }; | ||||
| 		CE75019714C477B100E2A349 /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; }; | ||||
| 		CE75019814C477B100E2A349 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE75019914C477B100E2A349 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; }; | ||||
| 		CE75019A14C477B100E2A349 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; }; | ||||
| 		CE75019B14C477B100E2A349 /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; }; | ||||
| 		CE75019C14C477B100E2A349 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE75019D14C477B100E2A349 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; }; | ||||
| 		CE78759D13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE78759E13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE78759F13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; | ||||
| @ -188,7 +222,6 @@ | ||||
| 		CE7A69CA146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; | ||||
| 		CE7A69CB146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; | ||||
| 		CE7AC9161119911200D02F6C /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; | ||||
| 		CE7D24971423B0A7002E2297 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE7D24991423B0BD002E2297 /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; | ||||
| 		CE7D249A1423B0BD002E2297 /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; | ||||
| 		CE7D249B1423B0BD002E2297 /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; | ||||
| @ -197,16 +230,11 @@ | ||||
| 		CE7D24A01423B106002E2297 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE7D24A11423B106002E2297 /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE7D24A21423B106002E2297 /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE7D24A31423B106002E2297 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE7D24A41423B106002E2297 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE7D24A81423B123002E2297 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE80DB1B0FC192D60086DCA6 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB1C0FC192D60086DCA6 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB1D0FC192D60086DCA6 /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB210FC192D60086DCA6 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB220FC192D60086DCA6 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB230FC192D60086DCA6 /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB2A0FC192D60086DCA6 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB2B0FC192D60086DCA6 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; | ||||
| @ -220,23 +248,17 @@ | ||||
| 		CE80DB840FC1951C0086DCA6 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB870FC1951C0086DCA6 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB880FC1951C0086DCA6 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE80DB890FC1951C0086DCA6 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE848A1809DD85810004CB44 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Consts.h; sourceTree = "<group>"; }; | ||||
| 		CE958659112C516400F95FD2 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE95865C112C516400F95FD2 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE95865D112C516400F95FD2 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9EA7431122C96C008CD2BC /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA7441122C96C008CD2BC /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; | ||||
| 		CE9EA7451122C96C008CD2BC /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA7461122C96C008CD2BC /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE9EA7471122C96C008CD2BC /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA7481122C96C008CD2BC /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; }; | ||||
| 		CE9EA7491122C96C008CD2BC /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9EA74C1122C96C008CD2BC /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA74D1122C96C008CD2BC /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA7501122C96C008CD2BC /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; | ||||
| 		CE9EA7511122C96C008CD2BC /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; | ||||
| 		CE9EA7521122C96C008CD2BC /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; | ||||
| @ -245,7 +267,6 @@ | ||||
| 		CE9EA7551122C96C008CD2BC /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; | ||||
| 		CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9EA7711122CA0B008CD2BC /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEA8F335142BC9AB00A6DFAC /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; | ||||
| 		CEA8F338142BC9D400A6DFAC /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; }; | ||||
| 		CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; }; | ||||
| @ -273,7 +294,6 @@ | ||||
| 		CEE6D559149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/about.xib; sourceTree = "<group>"; }; | ||||
| 		CEE6D55A149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; | ||||
| 		CEE6D55B149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; | ||||
| 		CEE6D55F1491134E0087CDFC /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CEE6D560149113570087CDFC /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; }; | ||||
| 		CEE6D561149113570087CDFC /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; }; | ||||
| 		CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; }; | ||||
| @ -291,11 +311,9 @@ | ||||
| 		CEEE15911460329000783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; }; | ||||
| 		CEF12A7C124DFD400087B51D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEF12A7D124DFD400087B51D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEF12A81124DFD620087B51D /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEF12A82124DFD620087B51D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEF12A83124DFD620087B51D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; 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 */ | ||||
| @ -306,6 +324,7 @@ | ||||
| 				CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */, | ||||
| 				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, | ||||
| 				CE15C8A80ADEB8B50061D4A5 /* Sparkle.framework in Frameworks */, | ||||
| 				CE75017914C4774900E2A349 /* Python in Frameworks */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -315,7 +334,6 @@ | ||||
| 		080E96DDFE201D6D7F000001 /* DGPE */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				29B97316FDCFA39411CA2CEA /* main.m */, | ||||
| 				CE381C9509914ACE003581CE /* AppDelegate.h */, | ||||
| 				CE381C9409914ACE003581CE /* AppDelegate.m */, | ||||
| 				CE848A1809DD85810004CB44 /* Consts.h */, | ||||
| @ -323,7 +341,6 @@ | ||||
| 				CECA899B09DB132E00A3D774 /* DetailsPanel.m */, | ||||
| 				CE68EE6509ABC48000971085 /* DirectoryPanel.h */, | ||||
| 				CE68EE6609ABC48000971085 /* DirectoryPanel.m */, | ||||
| 				CEFF18A009A4D387005E6321 /* PyDupeGuru.h */, | ||||
| 				CE381C9B09914ADF003581CE /* ResultWindow.h */, | ||||
| 				CE381C9A09914ADF003581CE /* ResultWindow.m */, | ||||
| 			); | ||||
| @ -333,6 +350,7 @@ | ||||
| 		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE75017814C4774900E2A349 /* Python */, | ||||
| 				CEA8F335142BC9AB00A6DFAC /* Quartz.framework */, | ||||
| 				CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */, | ||||
| 				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, | ||||
| @ -364,6 +382,7 @@ | ||||
| 				080E96DDFE201D6D7F000001 /* DGPE */, | ||||
| 				CE80DB1A0FC192AB0086DCA6 /* cocoalib */, | ||||
| 				CE80DB810FC194BD0086DCA6 /* dgbase */, | ||||
| 				CE75017B14C477B100E2A349 /* autogen */, | ||||
| 				29B97317FDCFA39411CA2CEA /* Resources */, | ||||
| 				29B97323FDCFA39411CA2CEA /* Frameworks */, | ||||
| 				19C28FACFE9D520D11CA2CBB /* Products */, | ||||
| @ -374,9 +393,10 @@ | ||||
| 		29B97317FDCFA39411CA2CEA /* Resources */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE75017614C4772100E2A349 /* dg_cocoa.py */, | ||||
| 				CE75017414C4771800E2A349 /* py */, | ||||
| 				CE63D9D21461EDC000A8CADD /* locale */, | ||||
| 				CE073F5409CAE1A3005C1D2F /* help */, | ||||
| 				CE381CF509915304003581CE /* dg_cocoa.plugin */, | ||||
| 				CEFC294309C89E0000D9F998 /* images */, | ||||
| 				CE05339212E5DA1D0029EF25 /* xib */, | ||||
| 				CEEB135109C837A2004D2330 /* dupeguru.icns */, | ||||
| @ -411,6 +431,48 @@ | ||||
| 			name = xib; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		CE75017B14C477B100E2A349 /* autogen */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE75017C14C477B100E2A349 /* ObjP.h */, | ||||
| 				CE75017D14C477B100E2A349 /* ObjP.m */, | ||||
| 				CE75017E14C477B100E2A349 /* PyColumns.h */, | ||||
| 				CE75017F14C477B100E2A349 /* PyColumns.m */, | ||||
| 				CE75018014C477B100E2A349 /* PyDetailsPanel.h */, | ||||
| 				CE75018114C477B100E2A349 /* PyDetailsPanel.m */, | ||||
| 				CE75018214C477B100E2A349 /* PyDirectoryOutline.h */, | ||||
| 				CE75018314C477B100E2A349 /* PyDirectoryOutline.m */, | ||||
| 				CE75018414C477B100E2A349 /* PyDupeGuru.h */, | ||||
| 				CE75018514C477B100E2A349 /* PyDupeGuru.m */, | ||||
| 				CE75018614C477B100E2A349 /* PyDupeGuruBase.h */, | ||||
| 				CE75018714C477B100E2A349 /* PyDupeGuruBase.m */, | ||||
| 				CE75018814C477B100E2A349 /* PyExtraFairwareReminder.h */, | ||||
| 				CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */, | ||||
| 				CE75018A14C477B100E2A349 /* PyFairware.h */, | ||||
| 				CE75018B14C477B100E2A349 /* PyFairware.m */, | ||||
| 				CE75018C14C477B100E2A349 /* PyGUIObject.h */, | ||||
| 				CE75018D14C477B100E2A349 /* PyGUIObject.m */, | ||||
| 				CE75018E14C477B100E2A349 /* PyOutline.h */, | ||||
| 				CE75018F14C477B100E2A349 /* PyOutline.m */, | ||||
| 				CE75019014C477B100E2A349 /* PyPrioritizeDialog.h */, | ||||
| 				CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */, | ||||
| 				CE75019214C477B100E2A349 /* PyPrioritizeList.h */, | ||||
| 				CE75019314C477B100E2A349 /* PyPrioritizeList.m */, | ||||
| 				CE75019414C477B100E2A349 /* PyProblemDialog.h */, | ||||
| 				CE75019514C477B100E2A349 /* PyProblemDialog.m */, | ||||
| 				CE75019614C477B100E2A349 /* PyResultTable.h */, | ||||
| 				CE75019714C477B100E2A349 /* PyResultTable.m */, | ||||
| 				CE75019814C477B100E2A349 /* PySelectableList.h */, | ||||
| 				CE75019914C477B100E2A349 /* PySelectableList.m */, | ||||
| 				CE75019A14C477B100E2A349 /* PyStatsLabel.h */, | ||||
| 				CE75019B14C477B100E2A349 /* PyStatsLabel.m */, | ||||
| 				CE75019C14C477B100E2A349 /* PyTable.h */, | ||||
| 				CE75019D14C477B100E2A349 /* PyTable.m */, | ||||
| 			); | ||||
| 			name = autogen; | ||||
| 			path = ../autogen; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		CE7AC9141119911200D02F6C /* xib */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -427,7 +489,6 @@ | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE9EA7421122C96C008CD2BC /* controllers */, | ||||
| 				CE9EA74B1122C96C008CD2BC /* proxies */, | ||||
| 				CE9EA74F1122C96C008CD2BC /* views */, | ||||
| 				CE7AC9141119911200D02F6C /* xib */, | ||||
| 				CE80DB480FC193770086DCA6 /* NSImageAdditions.h */, | ||||
| @ -438,11 +499,8 @@ | ||||
| 				CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */, | ||||
| 				CE80DB1B0FC192D60086DCA6 /* Dialogs.h */, | ||||
| 				CE80DB1C0FC192D60086DCA6 /* Dialogs.m */, | ||||
| 				CE80DB1D0FC192D60086DCA6 /* HSErrorReportWindow.h */, | ||||
| 				CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */, | ||||
| 				CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */, | ||||
| 				CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */, | ||||
| 				CE1EB5FD12537F9D0034AABB /* PyFairware.h */, | ||||
| 				CEC9DB4A12CCAA7D003102F0 /* HSAboutBox.h */, | ||||
| 				CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */, | ||||
| 				CE60180612DF3EA900236FDC /* HSRecentFiles.h */, | ||||
| @ -451,7 +509,6 @@ | ||||
| 				CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */, | ||||
| 				CE80DB210FC192D60086DCA6 /* ProgressController.h */, | ||||
| 				CE80DB220FC192D60086DCA6 /* ProgressController.m */, | ||||
| 				CE80DB230FC192D60086DCA6 /* PyApp.h */, | ||||
| 				CE80DB2A0FC192D60086DCA6 /* Utils.h */, | ||||
| 				CE80DB2B0FC192D60086DCA6 /* Utils.m */, | ||||
| 				CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */, | ||||
| @ -465,36 +522,28 @@ | ||||
| 			children = ( | ||||
| 				CEF12A82124DFD620087B51D /* ResultTable.h */, | ||||
| 				CEF12A83124DFD620087B51D /* ResultTable.m */, | ||||
| 				CEF12A81124DFD620087B51D /* PyResultTable.h */, | ||||
| 				CE80DB820FC1951C0086DCA6 /* AppDelegate.h */, | ||||
| 				CE80DB830FC1951C0086DCA6 /* AppDelegate.m */, | ||||
| 				CE80DB870FC1951C0086DCA6 /* PyDupeGuru.h */, | ||||
| 				CE80DB840FC1951C0086DCA6 /* Consts.h */, | ||||
| 				CE6044EA0FE6796200B71262 /* DetailsPanel.h */, | ||||
| 				CE6044EB0FE6796200B71262 /* DetailsPanel.m */, | ||||
| 				CE18126F111C9D5100E49FCE /* PyDetailsPanel.h */, | ||||
| 				CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */, | ||||
| 				CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */, | ||||
| 				CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */, | ||||
| 				CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */, | ||||
| 				CE9EA7711122CA0B008CD2BC /* PyDirectoryOutline.h */, | ||||
| 				CE0C2ABA1177014200BC749F /* ProblemDialog.h */, | ||||
| 				CE0C2ABB1177014200BC749F /* ProblemDialog.m */, | ||||
| 				CE0C2ABC1177014200BC749F /* PyProblemDialog.h */, | ||||
| 				CE80DB880FC1951C0086DCA6 /* ResultWindow.h */, | ||||
| 				CE80DB890FC1951C0086DCA6 /* ResultWindow.m */, | ||||
| 				CE95865C112C516400F95FD2 /* StatsLabel.h */, | ||||
| 				CE95865D112C516400F95FD2 /* StatsLabel.m */, | ||||
| 				CE958659112C516400F95FD2 /* PyStatsLabel.h */, | ||||
| 				CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */, | ||||
| 				CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */, | ||||
| 				CE2A29FF13213C31005899AC /* PyExtraFairwareReminder.h */, | ||||
| 				CE7D249F1423B106002E2297 /* PrioritizeDialog.h */, | ||||
| 				CE7D24A01423B106002E2297 /* PrioritizeDialog.m */, | ||||
| 				CE7D24A31423B106002E2297 /* PyPrioritizeDialog.h */, | ||||
| 				CE7D24A11423B106002E2297 /* PrioritizeList.h */, | ||||
| 				CE7D24A21423B106002E2297 /* PrioritizeList.m */, | ||||
| 				CE7D24A41423B106002E2297 /* PyPrioritizeList.h */, | ||||
| 				CE75017214C4770500E2A349 /* main.m */, | ||||
| 			); | ||||
| 			name = dgbase; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -510,8 +559,6 @@ | ||||
| 				CE9EA7461122C96C008CD2BC /* HSOutline.m */, | ||||
| 				CE0C2AB41177011000BC749F /* HSTable.h */, | ||||
| 				CE0C2AB51177011000BC749F /* HSTable.m */, | ||||
| 				CE9EA7471122C96C008CD2BC /* HSWindowController.h */, | ||||
| 				CE9EA7481122C96C008CD2BC /* HSWindowController.m */, | ||||
| 				CE7D24991423B0BD002E2297 /* HSPopUpList.h */, | ||||
| 				CE7D249A1423B0BD002E2297 /* HSPopUpList.m */, | ||||
| 				CE7D249B1423B0BD002E2297 /* HSSelectableList.h */, | ||||
| @ -521,19 +568,6 @@ | ||||
| 			path = ../../cocoalib/controllers; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CE9EA74B1122C96C008CD2BC /* proxies */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CEE6D55F1491134E0087CDFC /* PyColumns.h */, | ||||
| 				CE9EA74C1122C96C008CD2BC /* PyGUI.h */, | ||||
| 				CE9EA74D1122C96C008CD2BC /* PyOutline.h */, | ||||
| 				CE0C2AAA117700E700BC749F /* PyTable.h */, | ||||
| 				CE7D24971423B0A7002E2297 /* PySelectableList.h */, | ||||
| 			); | ||||
| 			name = proxies; | ||||
| 			path = ../../cocoalib/proxies; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CE9EA74F1122C96C008CD2BC /* views */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -604,7 +638,6 @@ | ||||
| 				cs, | ||||
| 				it, | ||||
| 				hy, | ||||
| 				ru, | ||||
| 			); | ||||
| 			mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */; | ||||
| 			projectDirPath = ""; | ||||
| @ -620,7 +653,6 @@ | ||||
| 			isa = PBXResourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */, | ||||
| 				CE073F6309CAE1A3005C1D2F /* help in Resources */, | ||||
| 				CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, | ||||
| 				CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, | ||||
| @ -639,6 +671,8 @@ | ||||
| 				CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */, | ||||
| 				CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */, | ||||
| 				CE63D9D31461EDC000A8CADD /* locale in Resources */, | ||||
| 				CE75017514C4771800E2A349 /* py in Resources */, | ||||
| 				CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -649,13 +683,11 @@ | ||||
| 			isa = PBXSourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				8D11072D0486CEB800E47090 /* main.m in Sources */, | ||||
| 				CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, | ||||
| 				CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, | ||||
| 				CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */, | ||||
| 				CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */, | ||||
| 				CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */, | ||||
| 				CE80DB2F0FC192D60086DCA6 /* HSErrorReportWindow.m in Sources */, | ||||
| 				CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */, | ||||
| 				CE80DB350FC192D60086DCA6 /* Utils.m in Sources */, | ||||
| 				CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */, | ||||
| @ -667,7 +699,6 @@ | ||||
| 				CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */, | ||||
| 				CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */, | ||||
| 				CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */, | ||||
| 				CE9EA7581122C96C008CD2BC /* HSWindowController.m in Sources */, | ||||
| 				CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */, | ||||
| 				CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */, | ||||
| 				CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */, | ||||
| @ -688,6 +719,24 @@ | ||||
| 				CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */, | ||||
| 				CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */, | ||||
| 				CEE6D562149113570087CDFC /* HSColumns.m in Sources */, | ||||
| 				CE75017314C4770500E2A349 /* main.m in Sources */, | ||||
| 				CE75019E14C477B100E2A349 /* ObjP.m in Sources */, | ||||
| 				CE75019F14C477B100E2A349 /* PyColumns.m in Sources */, | ||||
| 				CE7501A014C477B100E2A349 /* PyDetailsPanel.m in Sources */, | ||||
| 				CE7501A114C477B100E2A349 /* PyDirectoryOutline.m in Sources */, | ||||
| 				CE7501A214C477B100E2A349 /* PyDupeGuru.m in Sources */, | ||||
| 				CE7501A314C477B100E2A349 /* PyDupeGuruBase.m in Sources */, | ||||
| 				CE7501A414C477B100E2A349 /* PyExtraFairwareReminder.m in Sources */, | ||||
| 				CE7501A514C477B100E2A349 /* PyFairware.m in Sources */, | ||||
| 				CE7501A614C477B100E2A349 /* PyGUIObject.m in Sources */, | ||||
| 				CE7501A714C477B100E2A349 /* PyOutline.m in Sources */, | ||||
| 				CE7501A814C477B100E2A349 /* PyPrioritizeDialog.m in Sources */, | ||||
| 				CE7501A914C477B100E2A349 /* PyPrioritizeList.m in Sources */, | ||||
| 				CE7501AA14C477B100E2A349 /* PyProblemDialog.m in Sources */, | ||||
| 				CE7501AB14C477B100E2A349 /* PyResultTable.m in Sources */, | ||||
| 				CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */, | ||||
| 				CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */, | ||||
| 				CE7501AE14C477B100E2A349 /* PyTable.m in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -704,7 +753,6 @@ | ||||
| 				CEEE15841460328400783E91 /* cs */, | ||||
| 				CE7A69B9146443AD0007D927 /* it */, | ||||
| 				CEE6D5461491130D0087CDFC /* hy */, | ||||
| 				CE520C6414B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = DirectoryPanel.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -719,7 +767,6 @@ | ||||
| 				CEEE15861460328400783E91 /* cs */, | ||||
| 				CE7A69BB146443AD0007D927 /* it */, | ||||
| 				CEE6D5481491130D0087CDFC /* hy */, | ||||
| 				CE520C6614B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = MainMenu.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -734,7 +781,6 @@ | ||||
| 				CEEE15881460328400783E91 /* cs */, | ||||
| 				CE7A69BD146443AD0007D927 /* it */, | ||||
| 				CEE6D54A1491130D0087CDFC /* hy */, | ||||
| 				CE520C6814B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = ProblemDialog.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -749,7 +795,6 @@ | ||||
| 				CEEE15891460328400783E91 /* cs */, | ||||
| 				CE7A69BE146443AD0007D927 /* it */, | ||||
| 				CEE6D54B1491130D0087CDFC /* hy */, | ||||
| 				CE520C6914B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = ResultWindow.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -764,7 +809,6 @@ | ||||
| 				CEEE15901460329000783E91 /* cs */, | ||||
| 				CE7A69C5146443B90007D927 /* it */, | ||||
| 				CEE6D553149113190087CDFC /* hy */, | ||||
| 				CE520C6014B394C200AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = DetailsPanel.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -779,7 +823,6 @@ | ||||
| 				CEEE15911460329000783E91 /* cs */, | ||||
| 				CE7A69C6146443B90007D927 /* it */, | ||||
| 				CEE6D554149113190087CDFC /* hy */, | ||||
| 				CE520C6114B394C200AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = Preferences.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -794,7 +837,6 @@ | ||||
| 				CEEE15771460327300783E91 /* cs */, | ||||
| 				CE7A69B3146443A00007D927 /* it */, | ||||
| 				CEE6D557149113250087CDFC /* hy */, | ||||
| 				CE520C7014B394E400AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = Localizable.strings; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -809,7 +851,6 @@ | ||||
| 				CEEE15701460325B00783E91 /* cs */, | ||||
| 				CE7A69CB146443CB0007D927 /* it */, | ||||
| 				CEE6D55B149113320087CDFC /* hy */, | ||||
| 				CE520C5B14B394B000AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = FairwareReminder.xib; | ||||
| 			path = ../../cocoalib/xib; | ||||
| @ -825,7 +866,6 @@ | ||||
| 				CEEE15851460328400783E91 /* cs */, | ||||
| 				CE7A69BA146443AD0007D927 /* it */, | ||||
| 				CEE6D5471491130D0087CDFC /* hy */, | ||||
| 				CE520C6514B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = ExtraFairwareReminder.xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| @ -840,7 +880,6 @@ | ||||
| 				CEEE15871460328400783E91 /* cs */, | ||||
| 				CE7A69BC146443AD0007D927 /* it */, | ||||
| 				CEE6D5491491130D0087CDFC /* hy */, | ||||
| 				CE520C6714B394DB00AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = PrioritizeDialog.xib; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -855,7 +894,6 @@ | ||||
| 				CEEE156E1460325B00783E91 /* cs */, | ||||
| 				CE7A69C9146443CB0007D927 /* it */, | ||||
| 				CEE6D559149113320087CDFC /* hy */, | ||||
| 				CE520C5914B394B000AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = about.xib; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -870,7 +908,6 @@ | ||||
| 				CEEE156F1460325B00783E91 /* cs */, | ||||
| 				CE7A69CA146443CB0007D927 /* it */, | ||||
| 				CEE6D55A149113320087CDFC /* hy */, | ||||
| 				CE520C5A14B394B000AE80D6 /* ru */, | ||||
| 			); | ||||
| 			name = ErrorReportWindow.xib; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -887,6 +924,10 @@ | ||||
| 				GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | ||||
| 				INFOPLIST_FILE = Info.plist; | ||||
| 				INSTALL_PATH = "$(PROJECT_DIR)"; | ||||
| 				LIBRARY_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"\"$(SRCROOT)/../../build\"", | ||||
| 				); | ||||
| 				PRODUCT_NAME = "dupeGuru PE"; | ||||
| 				WRAPPER_EXTENSION = app; | ||||
| 			}; | ||||
| @ -897,8 +938,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
| @ -909,8 +950,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(NATIVE_ARCH_ACTUAL)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
| @ -924,6 +965,10 @@ | ||||
| 				DSTROOT = /; | ||||
| 				INFOPLIST_FILE = Info.plist; | ||||
| 				INSTALL_PATH = "$(PROJECT_DIR)"; | ||||
| 				LIBRARY_SEARCH_PATHS = ( | ||||
| 					"$(inherited)", | ||||
| 					"\"$(SRCROOT)/../../build\"", | ||||
| 				); | ||||
| 				PRODUCT_NAME = "dupeGuru PE"; | ||||
| 				WRAPPER_EXTENSION = app; | ||||
| 			}; | ||||
|  | ||||
| @ -1,23 +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 "Utils.h" | ||||
| 
 | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | ||||
|     [Utils setPluginName:@"dg_cocoa"]; | ||||
|     NSString *pluginPath = [[NSBundle mainBundle] | ||||
|                                 pathForResource:@"dg_cocoa" | ||||
|                                          ofType:@"plugin"]; | ||||
|     NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath]; | ||||
|     [pluginBundle load]; | ||||
|     [pool release]; | ||||
|     return NSApplicationMain(argc,  (const char **) argv); | ||||
| } | ||||
| @ -11,5 +11,4 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| #import "PyDupeGuru.h" | ||||
| 
 | ||||
| @interface AppDelegate : AppDelegateBase {} | ||||
| - (PyDupeGuru *)py; | ||||
| @end | ||||
|  | ||||
| @ -62,6 +62,4 @@ http://www.hardcoded.net/licenses/bsd_license | ||||
| { | ||||
|     return [[ResultWindow alloc] initWithParentApp:self]; | ||||
| } | ||||
| 
 | ||||
| - (PyDupeGuru *)py { return (PyDupeGuru *)py; } | ||||
| @end | ||||
|  | ||||
| @ -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 <Cocoa/Cocoa.h> | ||||
| #import "../base/PyDupeGuru.h" | ||||
| 
 | ||||
| @interface PyDupeGuru : PyDupeGuruBase | ||||
| //Scanning options
 | ||||
| - (void)setWordWeighting:(NSNumber *)words_are_weighted; | ||||
| - (void)setMatchSimilarWords:(NSNumber *)match_similar_words; | ||||
| @end | ||||
| @ -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 | ||||
|  | ||||
| @ -7,48 +7,14 @@ | ||||
| from hscommon.trans import install_gettext_trans_under_cocoa | ||||
| install_gettext_trans_under_cocoa() | ||||
| 
 | ||||
| from cocoa.inter import signature | ||||
| from cocoa.inter 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 | ||||
| from inter.prioritize_dialog import PyPrioritizeDialog | ||||
| from inter.prioritize_list import PyPrioritizeList | ||||
| from inter.problem_dialog import PyProblemDialog | ||||
| from inter.problem_table import PyProblemTable | ||||
| from inter.result_table import PyResultTable | ||||
| from inter.stats_label import PyStatsLabel | ||||
| from inter.app_se import DupeGuru | ||||
| 
 | ||||
| class PyDupeGuru(PyDupeGuruBase): | ||||
|     def init(self): | ||||
|         self = super(PyDupeGuru,self).init() | ||||
|         self._init(DupeGuru) | ||||
|         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 | ||||
| @ -7,22 +7,31 @@ | ||||
| 	objects = { | ||||
| 
 | ||||
| /* Begin PBXBuildFile section */ | ||||
| 		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; | ||||
| 		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; | ||||
| 		CE073F6309CAE1A3005C1D2F /* help in Resources */ = {isa = PBXBuildFile; fileRef = CE073F5409CAE1A3005C1D2F /* help */; }; | ||||
| 		CE18004D14BDD837001B6329 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; }; | ||||
| 		CE18004F14BDD854001B6329 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; }; | ||||
| 		CE18005114BDD87B001B6329 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE18005014BDD87B001B6329 /* py */; }; | ||||
| 		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 */; }; | ||||
| 		CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5514BF712B00265960 /* PyDirectoryOutline.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 */; }; | ||||
| 		CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; | ||||
| 		CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; | ||||
| 		CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; }; | ||||
| 		CE41672D141FE1E5004F3F0B /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE41672B141FE1E5004F3F0B /* HSSelectableList.m */; }; | ||||
| 		CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */; }; | ||||
| 		CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; | ||||
| 		CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; | ||||
| 		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 */; }; | ||||
| 		CE54A87E148046F9008EEA77 /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE54A87D148046F9008EEA77 /* HSColumns.m */; }; | ||||
| 		CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */; }; | ||||
| 		CE548CC714BF903D00D180CB /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC514BF903D00D180CB /* PyPrioritizeList.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 */; }; | ||||
| @ -32,9 +41,7 @@ | ||||
| 		CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDBF111EE37C006618EA /* HSOutlineView.m */; }; | ||||
| 		CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */; }; | ||||
| 		CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */; }; | ||||
| 		CE76FDCF111EE38E006618EA /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC9111EE38E006618EA /* HSGUIController.m */; }; | ||||
| 		CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */; }; | ||||
| 		CE76FDDF111EE42F006618EA /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDDE111EE42F006618EA /* HSOutline.m */; }; | ||||
| 		CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDF6111EE561006618EA /* NSEventAdditions.m */; }; | ||||
| 		CE79638612536C94008D405B /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE79638412536C94008D405B /* FairwareReminder.xib */; }; | ||||
| 		CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE79638B12536F4E008D405B /* HSFairwareReminder.m */; }; | ||||
| @ -46,19 +53,30 @@ | ||||
| 		CE81135812E5CE6D00A36C80 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81135612E5CE6D00A36C80 /* Preferences.xib */; }; | ||||
| 		CE8113EB12E5CE9A00A36C80 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE8113E912E5CE9A00A36C80 /* Localizable.strings */; }; | ||||
| 		CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE89240714239CC30024CE4E /* PrioritizeList.m */; }; | ||||
| 		CE8C53BC117324CE0011B41F /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE8C53BB117324CE0011B41F /* HSTable.m */; }; | ||||
| 		CE91F216113BC22D0010360B /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE91F214113BC22D0010360B /* StatsLabel.m */; }; | ||||
| 		CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */; }; | ||||
| 		CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */; }; | ||||
| 		CE9777D5141F9D7600C13FB5 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */; }; | ||||
| 		CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.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 */; }; | ||||
| 		CEA175CA1461E8E600776591 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA175C91461E8E600776591 /* locale */; }; | ||||
| 		CEBE4D74111F0EE1009AAC6D /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */; }; | ||||
| 		CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */; }; | ||||
| 		CEB2AF5614C49AC800F907A9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB2AF5514C49AC800F907A9 /* main.m */; }; | ||||
| 		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 */; }; | ||||
| 		CEFC7F9F0FC9517500CD5728 /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */; }; | ||||
| 		CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F910FC9517500CD5728 /* ProgressController.m */; }; | ||||
| 		CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9B0FC9517500CD5728 /* Utils.m */; }; | ||||
| 		CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9D0FC9517500CD5728 /* ValueTransformers.m */; }; | ||||
| @ -75,6 +93,7 @@ | ||||
| 			dstSubfolderSpec = 10; | ||||
| 			files = ( | ||||
| 				CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */, | ||||
| 				CE18004F14BDD854001B6329 /* Python in CopyFiles */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -83,7 +102,6 @@ | ||||
| /* Begin PBXFileReference section */ | ||||
| 		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; | ||||
| 		13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; | ||||
| 		29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; | ||||
| 		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; | ||||
| 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | ||||
| @ -116,7 +134,17 @@ | ||||
| 		CE112F5F145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = "<group>"; }; | ||||
| 		CE112F60145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; | ||||
| 		CE112F61145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; | ||||
| 		CE18004C14BDD837001B6329 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; }; | ||||
| 		CE18005014BDD87B001B6329 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; }; | ||||
| 		CE19BC6111199231007CCEB0 /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; | ||||
| 		CE1D091414BE0C6400CA6B8C /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; }; | ||||
| 		CE1D091514BE0C6400CA6B8C /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; }; | ||||
| 		CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; }; | ||||
| 		CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; }; | ||||
| 		CE275C5414BF712B00265960 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE275C5514BF712B00265960 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE275C5814BF71DF00265960 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE275C5914BF71DF00265960 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; }; | ||||
| 		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 = "<group>"; }; | ||||
| @ -130,50 +158,43 @@ | ||||
| 		CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE41672A141FE1E5004F3F0B /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE41672B141FE1E5004F3F0B /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; }; | ||||
| 		CE41672C141FE1E5004F3F0B /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; }; | ||||
| 		CE3A3B4714BF19B8007898AB /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; }; | ||||
| 		CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; }; | ||||
| 		CE45579A0AE3BC2B005A9546 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; | ||||
| 		CE4746D114C09C12001A66DE /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE4746D214C09C12001A66DE /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE5335FA142BBFAF008E5374 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; }; | ||||
| 		CE5335FB142BBFAF008E5374 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; }; | ||||
| 		CE533602142BC034008E5374 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; | ||||
| 		CE54A87A14804687008EEA77 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE54A87C148046F9008EEA77 /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; }; | ||||
| 		CE54A87D148046F9008EEA77 /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; }; | ||||
| 		CE548CC214BF903D00D180CB /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE548CC414BF903D00D180CB /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE548CC514BF903D00D180CB /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE587E9714C07BCF004CA031 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE587E9814C07BCF004CA031 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; }; | ||||
| 		CE587E9C14C0801F004CA031 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE587E9D14C0801F004CA031 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; }; | ||||
| 		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; }; | ||||
| 		CE647E561173024A006D28BA /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE665B2F13225ADD003F5CFB /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE665B3213225AF8003F5CFB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE665B3413225B07003F5CFB /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6DD4E4124CA3070089A48D /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6DD4E5124CA3070089A48D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6DD4E6124CA3070089A48D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6DD545124CAF1F0089A48D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6DD546124CAF1F0089A48D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE6E0DFD1054E9EF008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; }; | ||||
| 		CE6E7407111C997500C350E3 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE76FDBE111EE37C006618EA /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDBF111EE37C006618EA /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; | ||||
| 		CE76FDC0111EE37C006618EA /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexPathAdditions.m; sourceTree = "<group>"; }; | ||||
| 		CE76FDC2111EE37C006618EA /* NSTableViewAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSTableViewAdditions.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; | ||||
| 		CE76FDC8111EE38E006618EA /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDC9111EE38E006618EA /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; | ||||
| 		CE76FDCD111EE38E006618EA /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDCE111EE38E006618EA /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE76FDD3111EE3A7006618EA /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE76FDDD111EE42F006618EA /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; | ||||
| 		CE76FDDE111EE42F006618EA /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; | ||||
| 		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; }; | ||||
| @ -205,23 +226,23 @@ | ||||
| 		CE8113EC12E5CEA800A36C80 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = ../base/fr.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE89240614239CC30024CE4E /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE89240714239CC30024CE4E /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; | ||||
| 		CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE89240914239CC30024CE4E /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; }; | ||||
| 		CE8C53B61173248F0011B41F /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE8C53BB117324CE0011B41F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; | ||||
| 		CE91F210113BC22D0010360B /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE91F213113BC22D0010360B /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE91F214113BC22D0010360B /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeDialog.h; path = ../base/PrioritizeDialog.h; sourceTree = "<group>"; }; | ||||
| 		CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; | ||||
| 		CE9777D0141F8CB400C13FB5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; | ||||
| 		CE9777D2141F9D6500C13FB5 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CE9777D3141F9D7600C13FB5 /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; | ||||
| 		CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; | ||||
| 		CE9D842814BE2AE900184165 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; }; | ||||
| 		CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; }; | ||||
| 		CE9FC22B14C080CF005C31FD /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; }; | ||||
| 		CE9FC22C14C080CF005C31FD /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; }; | ||||
| 		CE9FC22E14C08622005C31FD /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; }; | ||||
| 		CE9FC22F14C08622005C31FD /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; }; | ||||
| 		CE9FC23114C0866F005C31FD /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; }; | ||||
| 		CE9FC23214C0866F005C31FD /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; }; | ||||
| 		CEA175C91461E8E600776591 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; }; | ||||
| 		CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; }; | ||||
| 		CEB2AF5514C49AC800F907A9 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; }; | ||||
| 		CEB57990146ADC5100EDF7D7 /* HSConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSConsts.h; path = ../../cocoalib/HSConsts.h; sourceTree = "<group>"; }; | ||||
| 		CEBE4D72111F0EE1009AAC6D /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; }; | ||||
| 		CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; }; | ||||
| 		CECFFF1C13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CECFFF1D13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; | ||||
| 		CECFFF1E13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; | ||||
| @ -254,6 +275,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 = "<group>"; }; | ||||
| 		CEEF2A1614C0A5A60082545A /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A1914C0A8480082545A /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A1B14C0A8480082545A /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A1C14C0A8480082545A /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3014C0B9050082545A /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3114C0B9050082545A /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3214C0B9050082545A /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3314C0B9050082545A /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3414C0B9050082545A /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3514C0B9050082545A /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3614C0B9050082545A /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3714C0B9050082545A /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3814C0B9050082545A /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3914C0B9050082545A /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3A14C0B9050082545A /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; }; | ||||
| 		CEEF2A3B14C0B9050082545A /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; | ||||
| 		CEEF2A4214C0BB430082545A /* Worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Worker.h; path = ../../cocoalib/Worker.h; sourceTree = "<group>"; }; | ||||
| 		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 = "<group>"; }; | ||||
| @ -262,11 +302,8 @@ | ||||
| 		CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEFC7F8A0FC9517500CD5728 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEFC7F8B0FC9517500CD5728 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; | ||||
| 		CEFC7F8C0FC9517500CD5728 /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; }; | ||||
| 		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; }; | ||||
| @ -276,10 +313,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 */ | ||||
| @ -287,6 +322,7 @@ | ||||
| 			isa = PBXFrameworksBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				CE18004D14BDD837001B6329 /* Python in Frameworks */, | ||||
| 				CE533603142BC034008E5374 /* Quartz.framework in Frameworks */, | ||||
| 				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, | ||||
| 				CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */, | ||||
| @ -301,10 +337,8 @@ | ||||
| 			children = ( | ||||
| 				CE381C9509914ACE003581CE /* AppDelegate.h */, | ||||
| 				CE381C9409914ACE003581CE /* AppDelegate.m */, | ||||
| 				CEFF18A009A4D387005E6321 /* PyDupeGuru.h */, | ||||
| 				CE381C9B09914ADF003581CE /* ResultWindow.h */, | ||||
| 				CE381C9A09914ADF003581CE /* ResultWindow.m */, | ||||
| 				29B97316FDCFA39411CA2CEA /* main.m */, | ||||
| 			); | ||||
| 			name = DGSE; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -312,6 +346,7 @@ | ||||
| 		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE18004C14BDD837001B6329 /* Python */, | ||||
| 				CE45579A0AE3BC2B005A9546 /* Sparkle.framework */, | ||||
| 				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, | ||||
| 				CE533602142BC034008E5374 /* Quartz.framework */, | ||||
| @ -342,6 +377,7 @@ | ||||
| 			children = ( | ||||
| 				080E96DDFE201D6D7F000001 /* DGSE */, | ||||
| 				CEFC7FB00FC9518F00CD5728 /* dgbase */, | ||||
| 				CE1D091314BE0C6400CA6B8C /* autogen */, | ||||
| 				CEFC7F890FC9513600CD5728 /* cocoalib */, | ||||
| 				29B97317FDCFA39411CA2CEA /* Resources */, | ||||
| 				29B97323FDCFA39411CA2CEA /* Frameworks */, | ||||
| @ -353,9 +389,10 @@ | ||||
| 		29B97317FDCFA39411CA2CEA /* Resources */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */, | ||||
| 				CE18005014BDD87B001B6329 /* py */, | ||||
| 				CEA175C91461E8E600776591 /* locale */, | ||||
| 				CE073F5409CAE1A3005C1D2F /* help */, | ||||
| 				CE381CF509915304003581CE /* dg_cocoa.plugin */, | ||||
| 				CEFC294309C89E0000D9F998 /* images */, | ||||
| 				CEEFC0CA10943849001F3A39 /* xib */, | ||||
| 				CEEB135109C837A2004D2330 /* dupeguru.icns */, | ||||
| @ -387,6 +424,48 @@ | ||||
| 			path = ../../cocoalib/xib; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CE1D091314BE0C6400CA6B8C /* autogen */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				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 */, | ||||
| 				CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */, | ||||
| 				CE275C5414BF712B00265960 /* PyDirectoryOutline.h */, | ||||
| 				CE275C5514BF712B00265960 /* PyDirectoryOutline.m */, | ||||
| 				CE548CC214BF903D00D180CB /* PyPrioritizeDialog.h */, | ||||
| 				CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */, | ||||
| 				CE548CC414BF903D00D180CB /* PyPrioritizeList.h */, | ||||
| 				CE548CC514BF903D00D180CB /* PyPrioritizeList.m */, | ||||
| 				CE4746D114C09C12001A66DE /* PyProblemDialog.h */, | ||||
| 				CE4746D214C09C12001A66DE /* PyProblemDialog.m */, | ||||
| 				CE9FC23114C0866F005C31FD /* PyResultTable.h */, | ||||
| 				CE9FC23214C0866F005C31FD /* PyResultTable.m */, | ||||
| 				CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */, | ||||
| 				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; | ||||
| 			sourceTree = "<group>"; | ||||
| 		}; | ||||
| 		CE76FDBD111EE37C006618EA /* views */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -406,38 +485,23 @@ | ||||
| 		CE76FDC7111EE38E006618EA /* controllers */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE54A87C148046F9008EEA77 /* HSColumns.h */, | ||||
| 				CE54A87D148046F9008EEA77 /* HSColumns.m */, | ||||
| 				CEBE4D72111F0EE1009AAC6D /* HSWindowController.h */, | ||||
| 				CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */, | ||||
| 				CE76FDDD111EE42F006618EA /* HSOutline.h */, | ||||
| 				CE76FDDE111EE42F006618EA /* HSOutline.m */, | ||||
| 				CE76FDC8111EE38E006618EA /* HSGUIController.h */, | ||||
| 				CE76FDC9111EE38E006618EA /* HSGUIController.m */, | ||||
| 				CE41672C141FE1E5004F3F0B /* HSTable.h */, | ||||
| 				CE8C53BB117324CE0011B41F /* HSTable.m */, | ||||
| 				CE9777D3141F9D7600C13FB5 /* HSPopUpList.h */, | ||||
| 				CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */, | ||||
| 				CE41672A141FE1E5004F3F0B /* HSSelectableList.h */, | ||||
| 				CE41672B141FE1E5004F3F0B /* HSSelectableList.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; | ||||
| 		}; | ||||
| 		CE76FDCC111EE38E006618EA /* proxies */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE54A87A14804687008EEA77 /* PyColumns.h */, | ||||
| 				CE76FDCD111EE38E006618EA /* PyGUI.h */, | ||||
| 				CE76FDCE111EE38E006618EA /* PyOutline.h */, | ||||
| 				CE8C53B61173248F0011B41F /* PyTable.h */, | ||||
| 				CE9777D2141F9D6500C13FB5 /* PySelectableList.h */, | ||||
| 			); | ||||
| 			name = proxies; | ||||
| 			path = ../../cocoalib/proxies; | ||||
| 			sourceTree = SOURCE_ROOT; | ||||
| 		}; | ||||
| 		CEEFC0CA10943849001F3A39 /* xib */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| @ -467,26 +531,22 @@ | ||||
| 				CE76FDF5111EE561006618EA /* NSEventAdditions.h */, | ||||
| 				CE76FDF6111EE561006618EA /* NSEventAdditions.m */, | ||||
| 				CE76FDC7111EE38E006618EA /* controllers */, | ||||
| 				CE76FDCC111EE38E006618EA /* proxies */, | ||||
| 				CE76FDBD111EE37C006618EA /* views */, | ||||
| 				CE19BC5F11199231007CCEB0 /* xib */, | ||||
| 				CEB57990146ADC5100EDF7D7 /* HSConsts.h */, | ||||
| 				CEFC7F8A0FC9517500CD5728 /* Dialogs.h */, | ||||
| 				CEFC7F8B0FC9517500CD5728 /* Dialogs.m */, | ||||
| 				CEFC7F8C0FC9517500CD5728 /* HSErrorReportWindow.h */, | ||||
| 				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 */, | ||||
| @ -498,15 +558,12 @@ | ||||
| 		CEFC7FB00FC9518F00CD5728 /* dgbase */ = { | ||||
| 			isa = PBXGroup; | ||||
| 			children = ( | ||||
| 				CE6DD4E4124CA3070089A48D /* PyResultTable.h */, | ||||
| 				CE6DD4E5124CA3070089A48D /* ResultTable.h */, | ||||
| 				CE6DD4E6124CA3070089A48D /* ResultTable.m */, | ||||
| 				CE91F210113BC22D0010360B /* PyStatsLabel.h */, | ||||
| 				CE91F213113BC22D0010360B /* StatsLabel.h */, | ||||
| 				CE91F214113BC22D0010360B /* StatsLabel.m */, | ||||
| 				CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */, | ||||
| 				CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */, | ||||
| 				CE76FDD3111EE3A7006618EA /* PyDirectoryOutline.h */, | ||||
| 				CEFC7FB10FC951A700CD5728 /* AppDelegate.h */, | ||||
| 				CEFC7FB20FC951A700CD5728 /* AppDelegate.m */, | ||||
| 				CEFC7FB30FC951A700CD5728 /* Consts.h */, | ||||
| @ -516,20 +573,15 @@ | ||||
| 				CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */, | ||||
| 				CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */, | ||||
| 				CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */, | ||||
| 				CEFC7FB60FC951A700CD5728 /* PyDupeGuru.h */, | ||||
| 				CE6E7407111C997500C350E3 /* PyDetailsPanel.h */, | ||||
| 				CEFC7FB70FC951A700CD5728 /* ResultWindow.h */, | ||||
| 				CEFC7FB80FC951A700CD5728 /* ResultWindow.m */, | ||||
| 				CE647E541173024A006D28BA /* ProblemDialog.h */, | ||||
| 				CE647E551173024A006D28BA /* ProblemDialog.m */, | ||||
| 				CE647E561173024A006D28BA /* PyProblemDialog.h */, | ||||
| 				CE665B2F13225ADD003F5CFB /* PyExtraFairwareReminder.h */, | ||||
| 				CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */, | ||||
| 				CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */, | ||||
| 				CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */, | ||||
| 				CE89240614239CC30024CE4E /* PrioritizeList.h */, | ||||
| 				CE89240714239CC30024CE4E /* PrioritizeList.m */, | ||||
| 				CE89240914239CC30024CE4E /* PyPrioritizeList.h */, | ||||
| 				CEB2AF5514C49AC800F907A9 /* main.m */, | ||||
| 			); | ||||
| 			name = dgbase; | ||||
| 			sourceTree = "<group>"; | ||||
| @ -597,7 +649,6 @@ | ||||
| 			isa = PBXResourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */, | ||||
| 				CE073F6309CAE1A3005C1D2F /* help in Resources */, | ||||
| 				CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, | ||||
| 				CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, | ||||
| @ -616,6 +667,8 @@ | ||||
| 				CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */, | ||||
| 				CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */, | ||||
| 				CEA175CA1461E8E600776591 /* locale in Resources */, | ||||
| 				CE18005114BDD87B001B6329 /* py in Resources */, | ||||
| 				CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -626,11 +679,9 @@ | ||||
| 			isa = PBXSourcesBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 				8D11072D0486CEB800E47090 /* main.m in Sources */, | ||||
| 				CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, | ||||
| 				CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, | ||||
| 				CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */, | ||||
| 				CEFC7F9F0FC9517500CD5728 /* HSErrorReportWindow.m in Sources */, | ||||
| 				CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */, | ||||
| 				CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */, | ||||
| 				CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */, | ||||
| @ -641,14 +692,10 @@ | ||||
| 				CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */, | ||||
| 				CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */, | ||||
| 				CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */, | ||||
| 				CE76FDCF111EE38E006618EA /* HSGUIController.m in Sources */, | ||||
| 				CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */, | ||||
| 				CE76FDDF111EE42F006618EA /* HSOutline.m in Sources */, | ||||
| 				CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */, | ||||
| 				CEBE4D74111F0EE1009AAC6D /* HSWindowController.m in Sources */, | ||||
| 				CE91F216113BC22D0010360B /* StatsLabel.m in Sources */, | ||||
| 				CE647E571173024A006D28BA /* ProblemDialog.m in Sources */, | ||||
| 				CE8C53BC117324CE0011B41F /* HSTable.m in Sources */, | ||||
| 				CE6DD4E7124CA3070089A48D /* ResultTable.m in Sources */, | ||||
| 				CE6DD547124CAF1F0089A48D /* HSTableView.m in Sources */, | ||||
| 				CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */, | ||||
| @ -656,11 +703,32 @@ | ||||
| 				CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */, | ||||
| 				CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */, | ||||
| 				CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */, | ||||
| 				CE9777D5141F9D7600C13FB5 /* HSPopUpList.m in Sources */, | ||||
| 				CE41672D141FE1E5004F3F0B /* HSSelectableList.m in Sources */, | ||||
| 				CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */, | ||||
| 				CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */, | ||||
| 				CE54A87E148046F9008EEA77 /* HSColumns.m in Sources */, | ||||
| 				CE1D091814BE0C6400CA6B8C /* ObjP.m in Sources */, | ||||
| 				CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */, | ||||
| 				CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */, | ||||
| 				CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */, | ||||
| 				CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */, | ||||
| 				CE275C5A14BF71DF00265960 /* PyColumns.m in Sources */, | ||||
| 				CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */, | ||||
| 				CE548CC714BF903D00D180CB /* PyPrioritizeList.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 */, | ||||
| 				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 */, | ||||
| 				CEB2AF5614C49AC800F907A9 /* main.m in Sources */, | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 		}; | ||||
| @ -870,8 +938,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
| @ -882,8 +950,8 @@ | ||||
| 			buildSettings = { | ||||
| 				ARCHS = "$(NATIVE_ARCH_ACTUAL)"; | ||||
| 				GCC_C_LANGUAGE_STANDARD = c99; | ||||
| 				GCC_WARN_ABOUT_RETURN_TYPE = YES; | ||||
| 				GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| 				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\""; | ||||
| 				LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; | ||||
| 				MACOSX_DEPLOYMENT_TARGET = 10.6; | ||||
| 				SDKROOT = macosx10.6; | ||||
| 			}; | ||||
|  | ||||
| @ -1,23 +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 "Utils.h" | ||||
| 
 | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | ||||
|     [Utils setPluginName:@"dg_cocoa"]; | ||||
|     NSString *pluginPath = [[NSBundle mainBundle] | ||||
|                                 pathForResource:@"dg_cocoa" | ||||
|                                          ofType:@"plugin"]; | ||||
|     NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath]; | ||||
|     [pluginBundle load]; | ||||
|     [pool release]; | ||||
|     return NSApplicationMain(argc,  (const char **) argv); | ||||
| } | ||||
							
								
								
									
										18
									
								
								core/app.py
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								core/app.py
									
									
									
									
									
								
							| @ -24,6 +24,10 @@ from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_d | ||||
| from hscommon.trans import tr | ||||
| 
 | ||||
| from . import directories, results, scanner, export, fs | ||||
| from .gui.details_panel import DetailsPanel | ||||
| from .gui.directory_tree import DirectoryTree | ||||
| from .gui.problem_dialog import ProblemDialog | ||||
| from .gui.stats_label import StatsLabel | ||||
| 
 | ||||
| HAD_FIRST_LAUNCH_PREFERENCE = 'HadFirstLaunch' | ||||
| DEBUG_MODE_PREFERENCE = 'DebugMode' | ||||
| @ -100,7 +104,16 @@ class DupeGuru(RegistrableApplication, Broadcaster): | ||||
|             'ignore_hardlink_matches': False, | ||||
|         } | ||||
|         self.selected_dupes = [] | ||||
|         # subclasses must create self.result_table | ||||
|         self.details_panel = DetailsPanel(self) | ||||
|         self.directory_tree = DirectoryTree(self) | ||||
|         self.problem_dialog = ProblemDialog(self) | ||||
|         self.stats_label = StatsLabel(self) | ||||
|         self.result_table = self._create_result_table() | ||||
|         children = [self.result_table, self.directory_tree, self.problem_dialog, self.stats_label, | ||||
|             self.details_panel] | ||||
|         for child in children: | ||||
|             child.connect() | ||||
|         # subclasses must create and connect self.result_table | ||||
|      | ||||
|     #--- Virtual | ||||
|     def _get_display_info(self, dupe, group, delta): | ||||
| @ -115,6 +128,9 @@ class DupeGuru(RegistrableApplication, Broadcaster): | ||||
|     def _prioritization_categories(self): | ||||
|         raise NotImplementedError() | ||||
|      | ||||
|     def _create_result_table(self): | ||||
|         raise NotImplementedError() | ||||
|      | ||||
|     #--- Private | ||||
|     def _do_delete(self, j, replace_with_hardlinks): | ||||
|         def op(dupe): | ||||
|  | ||||
| @ -1,4 +1,3 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # Created By: Virgil Dupras | ||||
| # Created On: 2010-02-06 | ||||
| # Copyright 2011 Hardcoded Software (http://www.hardcoded.net) | ||||
| @ -8,12 +7,12 @@ | ||||
| # http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| from hscommon.notify import Listener | ||||
| from hscommon.gui.base import NoopGUI | ||||
| 
 | ||||
| class GUIObject(Listener): | ||||
|     def __init__(self, view, app): | ||||
|     def __init__(self, app): | ||||
|         Listener.__init__(self, app) | ||||
|         if view is not None: | ||||
|             self.view = view | ||||
|         self.view = NoopGUI() | ||||
|         self.app = app | ||||
|      | ||||
|     def directories_changed(self): | ||||
|  | ||||
| @ -9,8 +9,8 @@ | ||||
| from .base import GUIObject | ||||
| 
 | ||||
| class DetailsPanel(GUIObject): | ||||
|     def __init__(self, view, app): | ||||
|         GUIObject.__init__(self, view, app) | ||||
|     def __init__(self, app): | ||||
|         GUIObject.__init__(self, app) | ||||
|         self._table = [] | ||||
|      | ||||
|     def connect(self): | ||||
|  | ||||
| @ -59,8 +59,8 @@ class DirectoryTree(GUIObject, Tree): | ||||
|     # refresh() | ||||
|     # refresh_states() # when only states label need to be refreshed | ||||
|     # | ||||
|     def __init__(self, view, app): | ||||
|         GUIObject.__init__(self, view, app) | ||||
|     def __init__(self, app): | ||||
|         GUIObject.__init__(self, app) | ||||
|         Tree.__init__(self) | ||||
|      | ||||
|     def connect(self): | ||||
|  | ||||
| @ -40,7 +40,7 @@ class PrioritizationList(GUISelectableList): | ||||
|         self._refresh_contents() | ||||
| 
 | ||||
| class PrioritizeDialog: | ||||
|     def __init__(self, view, app): | ||||
|     def __init__(self, app): | ||||
|         self.app = app | ||||
|         self.categories = [cat(app.results) for cat in app._prioritization_categories()] | ||||
|         self.category_list = CriterionCategoryList(self) | ||||
|  | ||||
| @ -9,12 +9,15 @@ | ||||
| from hscommon.notify import Broadcaster | ||||
| 
 | ||||
| from .base import GUIObject | ||||
| from .problem_table import ProblemTable | ||||
| 
 | ||||
| class ProblemDialog(GUIObject, Broadcaster): | ||||
|     def __init__(self, view, app): | ||||
|         GUIObject.__init__(self, view, app) | ||||
|     def __init__(self, app): | ||||
|         GUIObject.__init__(self, app) | ||||
|         Broadcaster.__init__(self) | ||||
|         self._selected_dupe = None | ||||
|         self.problem_table = ProblemTable(self) | ||||
|         self.problem_table.connect() | ||||
|      | ||||
|     def reveal_selected_dupe(self): | ||||
|         if self._selected_dupe is not None: | ||||
|  | ||||
| @ -19,11 +19,11 @@ class ProblemTable(GUITable, Listener): | ||||
|         Column('msg', coltr("Error Message")), | ||||
|     ] | ||||
|      | ||||
|     def __init__(self, view, problem_dialog): | ||||
|     def __init__(self, problem_dialog): | ||||
|         GUITable.__init__(self) | ||||
|         Listener.__init__(self, problem_dialog) | ||||
|         self.columns = Columns(self) | ||||
|         self.view = view | ||||
|         self.view = None | ||||
|         self.dialog = problem_dialog | ||||
|      | ||||
|     #--- Override | ||||
|  | ||||
| @ -53,7 +53,7 @@ class DupeRow(Row): | ||||
| 
 | ||||
| class ResultTable(GUIObject, GUITable): | ||||
|     def __init__(self, app): | ||||
|         GUIObject.__init__(self, None, app) | ||||
|         GUIObject.__init__(self, app) | ||||
|         GUITable.__init__(self) | ||||
|         self.columns = Columns(self, prefaccess=app, savename='ResultTable') | ||||
|         self._power_marker = False | ||||
|  | ||||
| @ -1,4 +1,3 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # Created By: Virgil Dupras | ||||
| # Created On: 2010-02-11 | ||||
| # Copyright 2011 Hardcoded Software (http://www.hardcoded.net) | ||||
|  | ||||
| @ -23,7 +23,6 @@ class DupeGuru(DupeGuruBase): | ||||
|         DupeGuruBase.__init__(self, view, appdata) | ||||
|         self.scanner = scanner.ScannerME() | ||||
|         self.directories.fileclasses = [fs.MusicFile] | ||||
|         self.result_table = ResultTable(self) | ||||
|      | ||||
|     def _get_display_info(self, dupe, group, delta): | ||||
|         size = dupe.size | ||||
| @ -87,3 +86,5 @@ class DupeGuru(DupeGuruBase): | ||||
|     def _prioritization_categories(self): | ||||
|         return prioritize.all_categories() | ||||
|      | ||||
|     def _create_result_table(self): | ||||
|         return ResultTable(self) | ||||
|  | ||||
| @ -30,7 +30,6 @@ class DupeGuru(DupeGuruBase): | ||||
|         DupeGuruBase.__init__(self, view, appdata) | ||||
|         self.scanner = ScannerPE() | ||||
|         self.scanner.cache_path = op.join(self.appdata, 'cached_pictures.db') | ||||
|         self.result_table = ResultTable(self) | ||||
|      | ||||
|     def _get_display_info(self, dupe, group, delta): | ||||
|         size = dupe.size | ||||
| @ -91,3 +90,5 @@ class DupeGuru(DupeGuruBase): | ||||
|     def _prioritization_categories(self): | ||||
|         return prioritize.all_categories() | ||||
|      | ||||
|     def _create_result_table(self): | ||||
|         return ResultTable(self) | ||||
|  | ||||
| @ -17,10 +17,6 @@ class DupeGuru(DupeGuruBase): | ||||
|     NAME = __appname__ | ||||
|     METADATA_TO_READ = ['size', 'mtime'] | ||||
|      | ||||
|     def __init__(self, view, appdata): | ||||
|         DupeGuruBase.__init__(self, view, appdata) | ||||
|         self.result_table = ResultTable(self) | ||||
|      | ||||
|     def _get_display_info(self, dupe, group, delta): | ||||
|         size = dupe.size | ||||
|         mtime = dupe.mtime | ||||
| @ -67,3 +63,6 @@ class DupeGuru(DupeGuruBase): | ||||
|     def _prioritization_categories(self): | ||||
|         return prioritize.all_categories() | ||||
|      | ||||
|     def _create_result_table(self): | ||||
|         return ResultTable(self) | ||||
|      | ||||
|  | ||||
| @ -87,7 +87,7 @@ class DupeGuru(QObject): | ||||
|         self._progress = Progress(self.resultWindow) | ||||
|         self.directories_dialog = DirectoriesDialog(self.resultWindow, self) | ||||
|         self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) | ||||
|         self.problemDialog = ProblemDialog(parent=self.resultWindow, app=self) | ||||
|         self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog) | ||||
|         self.preferences_dialog = self.PREFERENCES_DIALOG_CLASS(self.resultWindow, self) | ||||
|         self.about_box = AboutBox(self.resultWindow, self) | ||||
|                  | ||||
|  | ||||
| @ -1,4 +1,3 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| # Created By: Virgil Dupras | ||||
| # Created On: 2010-02-05 | ||||
| # Copyright 2011 Hardcoded Software (http://www.hardcoded.net) | ||||
| @ -10,22 +9,20 @@ | ||||
| from PyQt4.QtCore import Qt | ||||
| from PyQt4.QtGui import QDialog | ||||
| 
 | ||||
| from core.gui.details_panel import DetailsPanel | ||||
| 
 | ||||
| from .details_table import DetailsModel | ||||
| 
 | ||||
| class DetailsDialog(QDialog): | ||||
|     def __init__(self, parent, app): | ||||
|         QDialog.__init__(self, parent, Qt.Tool) | ||||
|         self.app = app | ||||
|         self.model = DetailsPanel(self, app.model) | ||||
|         self.model = app.model.details_panel | ||||
|         self.model.view = self | ||||
|         self._setupUi() | ||||
|         if self.app.prefs.detailsWindowRect is not None: | ||||
|             self.setGeometry(self.app.prefs.detailsWindowRect) | ||||
|         self.tableModel = DetailsModel(self.model) | ||||
|         # tableView is defined in subclasses | ||||
|         self.tableView.setModel(self.tableModel) | ||||
|         self.model.connect() | ||||
|          | ||||
|         self.app.willSavePrefs.connect(self.appWillSavePrefs) | ||||
|      | ||||
|  | ||||
| @ -28,7 +28,7 @@ class DirectoriesDialog(QMainWindow): | ||||
|         self.lastAddedFolder = platform.INITIAL_FOLDER_IN_DIALOGS | ||||
|         self.recentFolders = Recent(self.app, 'recentFolders') | ||||
|         self._setupUi() | ||||
|         self.directoriesModel = DirectoriesModel(self.app, view=self.treeView) | ||||
|         self.directoriesModel = DirectoriesModel(self.app.model.directory_tree, view=self.treeView) | ||||
|         self.directoriesDelegate = DirectoriesDelegate() | ||||
|         self.treeView.setItemDelegate(self.directoriesDelegate) | ||||
|         self._setupColumns() | ||||
|  | ||||
| @ -15,8 +15,6 @@ from PyQt4.QtGui import (QComboBox, QStyledItemDelegate, QApplication, QBrush, Q | ||||
| from hscommon.trans import trget | ||||
| from qtlib.tree_model import RefNode, TreeModel | ||||
| 
 | ||||
| from core.gui.directory_tree import DirectoryTree | ||||
| 
 | ||||
| tr = trget('ui') | ||||
| 
 | ||||
| HEADERS = [tr("Name"), tr("State")] | ||||
| @ -60,12 +58,12 @@ class DirectoriesDelegate(QStyledItemDelegate): | ||||
|      | ||||
| 
 | ||||
| class DirectoriesModel(TreeModel): | ||||
|     def __init__(self, app, view): | ||||
|     def __init__(self, model, view): | ||||
|         TreeModel.__init__(self) | ||||
|         self.model = DirectoryTree(self, app.model) | ||||
|         self.model = model | ||||
|         self.model.view = self | ||||
|         self.view = view | ||||
|         self.view.setModel(self) | ||||
|         self.model.connect() | ||||
|          | ||||
|         self.view.selectionModel().selectionChanged[(QItemSelection, QItemSelection)].connect(self.selectionChanged) | ||||
|      | ||||
|  | ||||
| @ -55,9 +55,9 @@ class PrioritizeDialog(QDialog): | ||||
|     def __init__(self, parent, app): | ||||
|         flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint | ||||
|         QDialog.__init__(self, parent, flags) | ||||
|         self.app = app | ||||
|         self._setupUi() | ||||
|         self.model = PrioritizeDialogModel(view=self, app=app.model) | ||||
|         self.model = PrioritizeDialogModel(app=app.model) | ||||
|         self.model.view = self | ||||
|         self.categoryList = ComboboxModel(model=self.model.category_list, view=self.categoryCombobox) | ||||
|         self.criteriaList = ListviewModel(model=self.model.criteria_list, view=self.criteriaListView) | ||||
|         self.prioritizationList = PrioritizationList(model=self.model.prioritization_list, view=self.prioritizationListView) | ||||
|  | ||||
| @ -11,21 +11,18 @@ from PyQt4.QtGui import (QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QSpacer | ||||
|     QLabel, QTableView, QAbstractItemView, QApplication) | ||||
| 
 | ||||
| from hscommon.trans import trget | ||||
| from core.gui.problem_dialog import ProblemDialog as ProblemDialogModel | ||||
| from .problem_table import ProblemTable | ||||
| 
 | ||||
| tr = trget('ui') | ||||
| 
 | ||||
| class ProblemDialog(QDialog): | ||||
|     def __init__(self, parent, app): | ||||
|     def __init__(self, parent, model): | ||||
|         flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint | ||||
|         QDialog.__init__(self, parent, flags) | ||||
|         self.app = app | ||||
|         self._setupUi() | ||||
|         self.model = ProblemDialogModel(view=self, app=app.model) | ||||
|         self.table = ProblemTable(problem_dialog=self, view=self.tableView) | ||||
|         self.model.connect() | ||||
|         self.table.model.connect() | ||||
|         self.model = model | ||||
|         self.model.view = self | ||||
|         self.table = ProblemTable(self.model.problem_table, view=self.tableView) | ||||
|          | ||||
|         self.revealButton.clicked.connect(self.model.reveal_selected_dupe) | ||||
|         self.closeButton.clicked.connect(self.accept) | ||||
|  | ||||
| @ -8,7 +8,6 @@ | ||||
| 
 | ||||
| from qtlib.column import Column | ||||
| from qtlib.table import Table | ||||
| from core.gui.problem_table import ProblemTable as ProblemTableModel | ||||
| 
 | ||||
| class ProblemTable(Table): | ||||
|     COLUMNS = [ | ||||
| @ -16,8 +15,7 @@ class ProblemTable(Table): | ||||
|         Column('msg', defaultWidth=150), | ||||
|     ] | ||||
|      | ||||
|     def __init__(self, problem_dialog, view): | ||||
|         model = ProblemTableModel(view=self, problem_dialog=problem_dialog.model) | ||||
|     def __init__(self, model, view): | ||||
|         Table.__init__(self, model, view) | ||||
|         # we have to prevent Return from initiating editing. | ||||
|         # self.view.editSelected = lambda: None | ||||
|  | ||||
| @ -30,7 +30,7 @@ class ResultWindow(QMainWindow): | ||||
|         self._last_filter = None | ||||
|         self._setupUi() | ||||
|         self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView) | ||||
|         self.stats = StatsLabel(app, self.statusLabel) | ||||
|         self.stats = StatsLabel(app.model.stats_label, self.statusLabel) | ||||
|         self._update_column_actions_status() | ||||
|          | ||||
|         self.connect(self.menuColumns, SIGNAL('triggered(QAction*)'), self.columnToggled) | ||||
|  | ||||
| @ -17,7 +17,6 @@ class ResultsModel(Table): | ||||
|     def __init__(self, app, view): | ||||
|         model = app.model.result_table | ||||
|         Table.__init__(self, model, view) | ||||
|         self.model.connect() | ||||
|          | ||||
|         app.prefsChanged.connect(self.appPrefsChanged) | ||||
|         app.willSavePrefs.connect(self.appWillSavePrefs) | ||||
|  | ||||
| @ -6,13 +6,11 @@ | ||||
| # which should be included with this package. The terms are also available at  | ||||
| # http://www.hardcoded.net/licenses/bsd_license | ||||
| 
 | ||||
| from core.gui.stats_label import StatsLabel as StatsLabelModel | ||||
| 
 | ||||
| class StatsLabel(object): | ||||
|     def __init__(self, app, view): | ||||
| class StatsLabel: | ||||
|     def __init__(self, model, view): | ||||
|         self.view = view | ||||
|         self.model = StatsLabelModel(self, app.model) | ||||
|         self.model.connect() | ||||
|         self.model = model | ||||
|         self.model.view = self | ||||
|      | ||||
|     def refresh(self): | ||||
|         self.view.setText(self.model.display) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user