diff --git a/build.py b/build.py index 80e639d..48d0fa7 100644 --- a/build.py +++ b/build.py @@ -84,7 +84,6 @@ def build_xibless(dest='cocoa/autogen'): ('problem_dialog.py', 'ProblemDialog_UI'), ('directory_panel.py', 'DirectoryPanel_UI'), ('prioritize_dialog.py', 'PrioritizeDialog_UI'), - ('result_window.py', 'ResultWindow_UI'), ('main_menu.py', 'MainMenu_UI'), ('details_panel.py', 'DetailsPanel_UI'), ('details_panel_picture.py', 'DetailsPanelPicture_UI'), diff --git a/cocoa/Base.lproj/ResultWindow.xib b/cocoa/Base.lproj/ResultWindow.xib new file mode 100644 index 0000000..f617104 --- /dev/null +++ b/cocoa/Base.lproj/ResultWindow.xib @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vtRowHeightOffset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cocoa/ResultWindow.h b/cocoa/ResultWindow.h index 509b042..90eb530 100644 --- a/cocoa/ResultWindow.h +++ b/cocoa/ResultWindow.h @@ -1,5 +1,5 @@ /* -Copyright 2015 Hardcoded Software (http://www.hardcoded.net) +Copyright 2017 Virgil Dupras This software is licensed under the "GPLv3" License as described in the "LICENSE" file, which should be included with this package. The terms are also available at @@ -46,31 +46,31 @@ http://www.gnu.org/licenses/gpl-3.0.html - (void)initResultColumns:(ResultTable *)aTable; /* Actions */ -- (void)changeOptions; -- (void)copyMarked; -- (void)trashMarked; -- (void)filter; -- (void)focusOnFilterField; -- (void)ignoreSelected; -- (void)invokeCustomCommand; -- (void)markAll; -- (void)markInvert; -- (void)markNone; -- (void)markSelected; -- (void)moveMarked; -- (void)openClicked; -- (void)openSelected; -- (void)removeMarked; -- (void)removeSelected; -- (void)renameSelected; -- (void)reprioritizeResults; -- (void)resetColumnsToDefault; -- (void)revealSelected; -- (void)saveResults; -- (void)switchSelected; -- (void)toggleColumn:(id)sender; -- (void)toggleDelta; -- (void)toggleDetailsPanel; -- (void)togglePowerMarker; -- (void)toggleQuicklookPanel; +- (IBAction)changeOptions:(id)sender; +- (IBAction)copyMarked:(id)sender; +- (IBAction)trashMarked:(id)sender; +- (IBAction)filter:(id)sender; +- (IBAction)focusOnFilterField:(id)sender; +- (IBAction)ignoreSelected:(id)sender; +- (IBAction)invokeCustomCommand:(id)sender; +- (IBAction)markAll:(id)sender; +- (IBAction)markInvert:(id)sender; +- (IBAction)markNone:(id)sender; +- (IBAction)markSelected:(id)sender; +- (IBAction)moveMarked:(id)sender; +- (IBAction)openClicked:(id)sender; +- (IBAction)openSelected:(id)sender; +- (IBAction)removeMarked:(id)sender; +- (IBAction)removeSelected:(id)sender; +- (IBAction)renameSelected:(id)sender; +- (IBAction)reprioritizeResults:(id)sender; +- (IBAction)resetColumnsToDefault:(id)sender; +- (IBAction)revealSelected:(id)sender; +- (IBAction)saveResults:(id)sender; +- (IBAction)switchSelected:(id)sender; +- (IBAction)toggleColumn:(id)sender; +- (IBAction)toggleDelta:(id)sender; +- (IBAction)toggleDetailsPanel:(id)sender; +- (IBAction)togglePowerMarker:(id)sender; +- (IBAction)toggleQuicklookPanel:(id)sender; @end diff --git a/cocoa/ResultWindow.m b/cocoa/ResultWindow.m index f0cc860..aed180f 100644 --- a/cocoa/ResultWindow.m +++ b/cocoa/ResultWindow.m @@ -1,5 +1,5 @@ /* -Copyright 2015 Hardcoded Software (http://www.hardcoded.net) +Copyright 2017 Virgil Dupras This software is licensed under the "GPLv3" License as described in the "LICENSE" file, which should be included with this package. The terms are also available at @@ -7,7 +7,6 @@ http://www.gnu.org/licenses/gpl-3.0.html */ #import "ResultWindow.h" -#import "ResultWindow_UI.h" #import "Dialogs.h" #import "ProgressController.h" #import "Utils.h" @@ -25,11 +24,10 @@ http://www.gnu.org/licenses/gpl-3.0.html - (id)initWithParentApp:(AppDelegate *)aApp; { - self = [super initWithWindow:nil]; + self = [super initWithWindowNibName:@"ResultWindow"]; + [self window]; app = aApp; model = [app model]; - [self setWindow:createResultWindow_UI(self)]; - [[self window] setTitle:fmt(NSLocalizedString(@"%@ Results", @""), [model appName])]; /* Put a cute iTunes-like bottom bar */ [[self window] setContentBorderThickness:28 forEdge:NSMinYEdge]; table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches]; @@ -183,21 +181,21 @@ http://www.gnu.org/licenses/gpl-3.0.html } /* Actions */ -- (void)changeOptions +- (IBAction)changeOptions:(id)sender { NSInteger seg = [optionsSwitch selectedSegment]; if (seg == 0) { - [self toggleDetailsPanel]; + [self toggleDetailsPanel:sender]; } else if (seg == 1) { - [self togglePowerMarker]; + [self togglePowerMarker:sender]; } else if (seg == 2) { - [self toggleDelta]; + [self toggleDelta:sender]; } } -- (void)copyMarked +- (IBAction)copyMarked:(id)sender { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; @@ -205,56 +203,56 @@ http://www.gnu.org/licenses/gpl-3.0.html [model copyMarked]; } -- (void)trashMarked +- (IBAction)trashMarked:(id)sender { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; [model deleteMarked]; } -- (void)filter +- (IBAction)filter:(id)sender { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [model setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])]; [model applyFilter:[filterField stringValue]]; } -- (void)focusOnFilterField +- (IBAction)focusOnFilterField:(id)sender { [[self window] makeFirstResponder:filterField]; } -- (void)ignoreSelected +- (IBAction)ignoreSelected:(id)sender { [model addSelectedToIgnoreList]; } -- (void)invokeCustomCommand +- (IBAction)invokeCustomCommand:(id)sender { [model invokeCustomCommand]; } -- (void)markAll +- (IBAction)markAll:(id)sender { [model markAll]; } -- (void)markInvert +- (IBAction)markInvert:(id)sender { [model markInvert]; } -- (void)markNone +- (IBAction)markNone:(id)sender { [model markNone]; } -- (void)markSelected +- (IBAction)markSelected:(id)sender { [model toggleSelectedMark]; } -- (void)moveMarked +- (IBAction)moveMarked:(id)sender { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; @@ -262,7 +260,7 @@ http://www.gnu.org/licenses/gpl-3.0.html [model moveMarked]; } -- (void)openClicked +- (IBAction)openClicked:(id)sender { if ([matches clickedRow] < 0) { return; @@ -271,29 +269,29 @@ http://www.gnu.org/licenses/gpl-3.0.html [model openSelected]; } -- (void)openSelected +- (IBAction)openSelected:(id)sender { [model openSelected]; } -- (void)removeMarked +- (IBAction)removeMarked:(id)sender { [model removeMarked]; } -- (void)removeSelected +- (IBAction)removeSelected:(id)sender { [model removeSelected]; } -- (void)renameSelected +- (IBAction)renameSelected:(id)sender { NSInteger col = [matches columnWithIdentifier:@"name"]; NSInteger row = [matches selectedRow]; [matches editColumn:col row:row withEvent:[NSApp currentEvent] select:YES]; } -- (void)reprioritizeResults +- (IBAction)reprioritizeResults:(id)sender { PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithApp:model]; NSInteger result = [NSApp runModalForWindow:[dlg window]]; @@ -304,18 +302,18 @@ http://www.gnu.org/licenses/gpl-3.0.html [[self window] makeKeyAndOrderFront:nil]; } -- (void)resetColumnsToDefault +- (IBAction)resetColumnsToDefault:(id)sender { [[[table columns] model] resetToDefaults]; [self fillColumnsMenu]; } -- (void)revealSelected +- (IBAction)revealSelected:(id)sender { [model revealSelected]; } -- (void)saveResults +- (IBAction)saveResults:(id)sender { NSSavePanel *sp = [NSSavePanel savePanel]; [sp setCanCreateDirectories:YES]; @@ -327,37 +325,37 @@ http://www.gnu.org/licenses/gpl-3.0.html } } -- (void)switchSelected +- (IBAction)switchSelected:(id)sender { [model makeSelectedReference]; } -- (void)toggleColumn:(id)sender +- (IBAction)toggleColumn:(id)sender { NSMenuItem *mi = sender; BOOL checked = [[[table columns] model] toggleMenuItem:[mi tag]]; [mi setState:checked ? NSOnState : NSOffState]; } -- (void)toggleDetailsPanel +- (IBAction)toggleDetailsPanel:(id)sender { [[app detailsPanel] toggleVisibility]; [self updateOptionSegments]; } -- (void)toggleDelta +- (IBAction)toggleDelta:(id)sender { [table setDeltaValuesMode:![table deltaValuesMode]]; [self updateOptionSegments]; } -- (void)togglePowerMarker +- (IBAction)togglePowerMarker:(id)sender { [table setPowerMarkerMode:![table powerMarkerMode]]; [self updateOptionSegments]; } -- (void)toggleQuicklookPanel +- (IBAction)toggleQuicklookPanel:(id)sender { if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) { [[QLPreviewPanel sharedPreviewPanel] orderOut:nil]; diff --git a/cocoa/ui/ignore_list_dialog.py b/cocoa/ui/ignore_list_dialog.py deleted file mode 100644 index 60ad46a..0000000 --- a/cocoa/ui/ignore_list_dialog.py +++ /dev/null @@ -1,30 +0,0 @@ -ownerclass = 'IgnoreListDialog' -ownerimport = 'IgnoreListDialog.h' - -result = Window(550, 350, "Ignore List") -table = TableView(result) -removeSelectedButton = Button(result, "Remove Selected") -clearButton = Button(result, "Clear") -closeButton = Button(result, "Close") - -owner.ignoreListTableView = table - -result.canMinimize = False -removeSelectedButton.action = Action(owner.model, 'removeSelected') -clearButton.action = Action(owner.model, 'clear') -closeButton.action = Action(result, 'performClose:') -closeButton.keyEquivalent = '\\r' -table.allowsColumnReordering = False -table.allowsColumnSelection = False -table.allowsMultipleSelection = True - -removeSelectedButton.width = 142 -clearButton.width = 142 -closeButton.width = 84 -buttonLayout = HLayout([removeSelectedButton, clearButton, None, closeButton]) -buttonLayout.packToCorner(Pack.LowerLeft) -buttonLayout.fill(Pack.Right) -buttonLayout.setAnchor(Pack.Below) -table.packRelativeTo(buttonLayout, Pack.Above) -table.fill(Pack.UpperRight) -table.setAnchor(Pack.UpperLeft, growX=True, growY=True) diff --git a/cocoa/ui/main_menu.py b/cocoa/ui/main_menu.py index 5b0e74b..2f00143 100644 --- a/cocoa/ui/main_menu.py +++ b/cocoa/ui/main_menu.py @@ -25,7 +25,7 @@ appMenu.addItem("Quit dupeGuru", Action(NSApp, 'terminate:'), 'cmd+q') fileMenu.addItem("Load Results...", Action(None, 'loadResults'), 'cmd+o') owner.recentResultsMenu = fileMenu.addMenu("Load Recent Results") -fileMenu.addItem("Save Results...", Action(None, 'saveResults'), 'cmd+s') +fileMenu.addItem("Save Results...", Action(None, 'saveResults:'), 'cmd+s') fileMenu.addItem("Export Results to XHTML", Action(owner.model, 'exportToXHTML'), 'cmd+shift+e') fileMenu.addItem("Export Results to CSV", Action(owner.model, 'exportToCSV')) fileMenu.addItem("Clear Picture Cache", Action(owner, 'clearPictureCache'), 'cmd+shift+p') @@ -39,35 +39,35 @@ editMenu.addItem("Cut", Action(None, 'cut:'), 'cmd+x') editMenu.addItem("Copy", Action(None, 'copy:'), 'cmd+c') editMenu.addItem("Paste", Action(None, 'paste:'), 'cmd+v') editMenu.addSeparator() -editMenu.addItem("Filter Results...", Action(None, 'focusOnFilterField'), 'cmd+alt+f') +editMenu.addItem("Filter Results...", Action(None, 'focusOnFilterField:'), 'cmd+alt+f') actionMenu.addItem("Start Duplicate Scan", Action(owner, 'startScanning'), 'cmd+d') actionMenu.addSeparator() -actionMenu.addItem("Send Marked to Trash...", Action(None, 'trashMarked'), 'cmd+t') -actionMenu.addItem("Move Marked to...", Action(None, 'moveMarked'), 'cmd+m') -actionMenu.addItem("Copy Marked to...", Action(None, 'copyMarked'), 'cmd+alt+m') -actionMenu.addItem("Remove Marked from Results", Action(None, 'removeMarked'), 'cmd+r') -actionMenu.addItem("Re-Prioritize Results...", Action(None, 'reprioritizeResults')) +actionMenu.addItem("Send Marked to Trash...", Action(None, 'trashMarked:'), 'cmd+t') +actionMenu.addItem("Move Marked to...", Action(None, 'moveMarked:'), 'cmd+m') +actionMenu.addItem("Copy Marked to...", Action(None, 'copyMarked:'), 'cmd+alt+m') +actionMenu.addItem("Remove Marked from Results", Action(None, 'removeMarked:'), 'cmd+r') +actionMenu.addItem("Re-Prioritize Results...", Action(None, 'reprioritizeResults:')) actionMenu.addSeparator() -actionMenu.addItem("Remove Selected from Results", Action(None, 'removeSelected'), 'cmd+backspace') -actionMenu.addItem("Add Selected to Ignore List", Action(None, 'ignoreSelected'), 'cmd+g') -actionMenu.addItem("Make Selected into Reference", Action(None, 'switchSelected'), 'cmd+arrowup') +actionMenu.addItem("Remove Selected from Results", Action(None, 'removeSelected:'), 'cmd+backspace') +actionMenu.addItem("Add Selected to Ignore List", Action(None, 'ignoreSelected:'), 'cmd+g') +actionMenu.addItem("Make Selected into Reference", Action(None, 'switchSelected:'), 'cmd+arrowup') actionMenu.addSeparator() -actionMenu.addItem("Open Selected with Default Application", Action(None, 'openSelected'), 'cmd+return') -actionMenu.addItem("Reveal Selected in Finder", Action(None, 'revealSelected'), 'cmd+alt+return') -actionMenu.addItem("Invoke Custom Command", Action(None, 'invokeCustomCommand'), 'cmd+shift+c') -actionMenu.addItem("Rename Selected", Action(None, 'renameSelected'), 'enter') +actionMenu.addItem("Open Selected with Default Application", Action(None, 'openSelected:'), 'cmd+return') +actionMenu.addItem("Reveal Selected in Finder", Action(None, 'revealSelected:'), 'cmd+alt+return') +actionMenu.addItem("Invoke Custom Command", Action(None, 'invokeCustomCommand:'), 'cmd+shift+c') +actionMenu.addItem("Rename Selected", Action(None, 'renameSelected:'), 'enter') -modeMenu.addItem("Show Dupes Only", Action(None, 'togglePowerMarker'), 'cmd+1') -modeMenu.addItem("Show Delta Values", Action(None, 'toggleDelta'), 'cmd+2') +modeMenu.addItem("Show Dupes Only", Action(None, 'togglePowerMarker:'), 'cmd+1') +modeMenu.addItem("Show Delta Values", Action(None, 'toggleDelta:'), 'cmd+2') windowMenu.addItem("Results Window", Action(owner, 'showResultWindow')) windowMenu.addItem("Folder Selection Window", Action(owner, 'showDirectoryWindow')) windowMenu.addItem("Ignore List", Action(owner, 'showIgnoreList')) -windowMenu.addItem("Details Panel", Action(None, 'toggleDetailsPanel'), 'cmd+i') -windowMenu.addItem("Quick Look", Action(None, 'toggleQuicklookPanel'), 'cmd+l') +windowMenu.addItem("Details Panel", Action(None, 'toggleDetailsPanel:'), 'cmd+i') +windowMenu.addItem("Quick Look", Action(None, 'toggleQuicklookPanel:'), 'cmd+l') windowMenu.addSeparator() -windowMenu.addItem("Minimize", Action(None, 'performMinimize:')) +windowMenu.addItem("Minimize", Action(None, 'performMiniaturize:')) windowMenu.addItem("Zoom", Action(None, 'performZoom:')) windowMenu.addItem("Close Window", Action(None, 'performClose:'), 'cmd+w') windowMenu.addSeparator() diff --git a/cocoa/ui/result_window.py b/cocoa/ui/result_window.py deleted file mode 100644 index ad3b075..0000000 --- a/cocoa/ui/result_window.py +++ /dev/null @@ -1,97 +0,0 @@ -ownerclass = 'ResultWindow' -ownerimport = 'ResultWindow.h' - -result = Window(557, 400, "dupeGuru Results") -toolbar = result.createToolbar('ResultsToolbar') -table = TableView(result) -table.OBJC_CLASS = 'HSTableView' -statsLabel = Label(result, "") -contextMenu = Menu("") - -#Setup toolbar items -toolbar.displayMode = const.NSToolbarDisplayModeIconOnly -directoriesToolItem = toolbar.addItem('Directories', "Directories", image='folder32') -actionToolItem = toolbar.addItem('Action', "Action") -filterToolItem = toolbar.addItem('Filter', "Filter") -optionsToolItem = toolbar.addItem('Options', "Options") -quicklookToolItem = toolbar.addItem('QuickLook', "Quick Look") -toolbar.defaultItems = [actionToolItem, optionsToolItem, quicklookToolItem, directoriesToolItem, - toolbar.flexibleSpace(), filterToolItem] -actionPopup = Popup(None) -actionPopup.pullsdown = True -actionPopup.bezelStyle = const.NSTexturedRoundedBezelStyle -actionPopup.arrowPosition = const.NSPopUpArrowAtBottom -item = actionPopup.menu.addItem("") # First item is invisible -item.hidden = True -item.image = 'NSActionTemplate' -actionPopup.width = 44 -actionToolItem.view = actionPopup -filterField = SearchField(None, "Filter") -filterField.action = Action(owner, 'filter') -filterField.sendsWholeSearchString = True -filterToolItem.view = filterField -filterToolItem.minSize = Size(80, 22) -filterToolItem.maxSize = Size(300, 22) -quickLookButton = Button(None, "") -quickLookButton.bezelStyle = const.NSTexturedRoundedBezelStyle -quickLookButton.image = 'NSQuickLookTemplate' -quickLookButton.width = 44 -quickLookButton.action = Action(owner, 'toggleQuicklookPanel') -quicklookToolItem.view = quickLookButton -optionsSegments = SegmentedControl(None) -optionsSegments.segmentStyle = const.NSSegmentStyleCapsule -optionsSegments.trackingMode = const.NSSegmentSwitchTrackingSelectAny -optionsSegments.font = Font(FontFamily.System, 11) -optionsSegments.addSegment("Details", 57) -optionsSegments.addSegment("Dupes Only", 82) -optionsSegments.addSegment("Delta", 48) -optionsSegments.action = Action(owner, 'changeOptions') -optionsToolItem.view = optionsSegments - -# Popuplate menus -actionPopup.menu.addItem("Send Marked to Trash...", action=Action(owner, 'trashMarked')) -actionPopup.menu.addItem("Move Marked to...", action=Action(owner, 'moveMarked')) -actionPopup.menu.addItem("Copy Marked to...", action=Action(owner, 'copyMarked')) -actionPopup.menu.addItem("Remove Marked from Results", action=Action(owner, 'removeMarked')) -actionPopup.menu.addSeparator() -for menu in (actionPopup.menu, contextMenu): - menu.addItem("Remove Selected from Results", action=Action(owner, 'removeSelected')) - menu.addItem("Add Selected to Ignore List", action=Action(owner, 'ignoreSelected')) - menu.addItem("Make Selected into Reference", action=Action(owner, 'switchSelected')) - menu.addSeparator() - menu.addItem("Open Selected with Default Application", action=Action(owner, 'openSelected')) - menu.addItem("Reveal Selected in Finder", action=Action(owner, 'revealSelected')) - menu.addItem("Rename Selected", action=Action(owner, 'renameSelected')) - -# Doing connections -owner.filterField = filterField -owner.matches = table -owner.optionsSwitch = optionsSegments -owner.optionsToolbarItem = optionsToolItem -owner.stats = statsLabel -table.bind('rowHeight', defaults, 'values.TableFontSize', valueTransformer='vtRowHeightOffset') - -# Rest of the setup -result.minSize = Size(340, 340) -result.autosaveName = 'MainWindow' -statsLabel.alignment = TextAlignment.Center -table.alternatingRows = True -table.menu = contextMenu -table.allowsColumnReordering = True -table.allowsColumnResizing = True -table.allowsColumnSelection = False -table.allowsEmptySelection = False -table.allowsMultipleSelection = True -table.allowsTypeSelect = True -table.gridStyleMask = const.NSTableViewSolidHorizontalGridLineMask -table.setAnchor(Pack.UpperLeft, growX=True, growY=True) -statsLabel.setAnchor(Pack.LowerLeft, growX=True) - -# Layout -# It's a little weird to pack with a margin of -1, but if I don't do that, I get too thick of a -# border on the upper side of the table. -table.packToCorner(Pack.UpperLeft, margin=-1) -table.fill(Pack.Right, margin=0) -statsLabel.packRelativeTo(table, Pack.Below, margin=6) -statsLabel.fill(Pack.Right, margin=0) -table.fill(Pack.Below, margin=5) diff --git a/dupeGuru.xcodeproj/project.pbxproj b/dupeGuru.xcodeproj/project.pbxproj index fb0678c..6dfe00b 100644 --- a/dupeGuru.xcodeproj/project.pbxproj +++ b/dupeGuru.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ CE0559871E762105008EB4F8 /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0559851E762105008EB4F8 /* IgnoreListDialog.xib */; }; CE05598E1E76217C008EB4F8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE05598C1E76217C008EB4F8 /* Localizable.strings */; }; CE0559921E7626E7008EB4F8 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CE0559911E7626E7008EB4F8 /* locale */; }; + CE549CDC1E933C7600C75A05 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE549CDA1E933C7600C75A05 /* ResultWindow.xib */; }; CE65D0CC1E7781640092126E /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE65D0CA1E7781640092126E /* progress.xib */; }; CE65D0ED1E7783C40092126E /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE65D0EB1E7783C40092126E /* ErrorReportWindow.xib */; }; CE6F7D8D1E74E71C004C0518 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE6F7D8C1E74E71C004C0518 /* Python */; settings = {ATTRIBUTES = (Required, ); }; }; @@ -81,7 +82,6 @@ CE97215B1E74E41D00A598C9 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721341E74E41D00A598C9 /* PyStatsLabel.m */; }; CE97215C1E74E41D00A598C9 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721361E74E41D00A598C9 /* PyTable.m */; }; CE97215D1E74E41D00A598C9 /* PyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721381E74E41D00A598C9 /* PyTextField.m */; }; - CE97215E1E74E41D00A598C9 /* ResultWindow_UI.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97213A1E74E41D00A598C9 /* ResultWindow_UI.m */; }; CE97215F1E74E41D00A598C9 /* XiblessSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97213C1E74E41D00A598C9 /* XiblessSupport.m */; }; CED88C1F1E763F2700C9B98C /* py in Resources */ = {isa = PBXBuildFile; fileRef = CED88C1E1E763F2700C9B98C /* py */; }; CEFC8A251E74F23000965F37 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CEFC8A231E74F23000965F37 /* dg_cocoa.py */; }; @@ -137,6 +137,22 @@ CE0559CD1E762A94008EB4F8 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CE0559CE1E762A9A008EB4F8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/IgnoreListDialog.strings; sourceTree = ""; }; CE0559D01E762A9A008EB4F8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/Localizable.strings; sourceTree = ""; }; + CE549CDB1E933C7600C75A05 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoa/Base.lproj/ResultWindow.xib; sourceTree = ""; }; + CE549CDE1E933D4A00C75A05 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoa/fr.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CE01E933D4C00C75A05 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoa/de.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CE21E933D4D00C75A05 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cocoa/cs.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CE41E933D4F00C75A05 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = cocoa/es.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CE61E933D5000C75A05 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = cocoa/el.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CE81E933D5100C75A05 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = cocoa/it.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CEA1E933D5300C75A05 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = cocoa/nl.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CEC1E933D5500C75A05 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = cocoa/pl.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CEE1E933D5700C75A05 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = cocoa/ko.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CF01E933D5A00C75A05 /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = cocoa/hy.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CF21E933D5B00C75A05 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "cocoa/pt-BR.lproj/ResultWindow.strings"; sourceTree = ""; }; + CE549CF41E933D5C00C75A05 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = cocoa/ru.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CF61E933D5D00C75A05 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = cocoa/uk.lproj/ResultWindow.strings; sourceTree = ""; }; + CE549CF81E933D5F00C75A05 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/ResultWindow.strings"; sourceTree = ""; }; + CE549CFA1E933D6000C75A05 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/ResultWindow.strings; sourceTree = ""; }; CE65D0CB1E7781640092126E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoalib/Base.lproj/progress.xib; sourceTree = ""; }; CE65D0CE1E7781730092126E /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoalib/fr.lproj/progress.strings; sourceTree = ""; }; CE65D0D01E7781740092126E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoalib/de.lproj/progress.strings; sourceTree = ""; }; @@ -337,8 +353,6 @@ CE9721361E74E41D00A598C9 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PyTable.m; path = cocoa/autogen/PyTable.m; sourceTree = ""; }; CE9721371E74E41D00A598C9 /* PyTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyTextField.h; path = cocoa/autogen/PyTextField.h; sourceTree = ""; }; CE9721381E74E41D00A598C9 /* PyTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PyTextField.m; path = cocoa/autogen/PyTextField.m; sourceTree = ""; }; - CE9721391E74E41D00A598C9 /* ResultWindow_UI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow_UI.h; path = cocoa/autogen/ResultWindow_UI.h; sourceTree = ""; }; - CE97213A1E74E41D00A598C9 /* ResultWindow_UI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow_UI.m; path = cocoa/autogen/ResultWindow_UI.m; sourceTree = ""; }; CE97213B1E74E41D00A598C9 /* XiblessSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XiblessSupport.h; path = cocoa/autogen/XiblessSupport.h; sourceTree = ""; }; CE97213C1E74E41D00A598C9 /* XiblessSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XiblessSupport.m; path = cocoa/autogen/XiblessSupport.m; sourceTree = ""; }; CE9C2E9D1E74E1640099B9FB /* dupeGuru.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dupeGuru.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -363,6 +377,7 @@ CE1891011E75D5A6008CE1AE /* xib */ = { isa = PBXGroup; children = ( + CE549CDA1E933C7600C75A05 /* ResultWindow.xib */, CE0559851E762105008EB4F8 /* IgnoreListDialog.xib */, ); name = xib; @@ -555,8 +570,6 @@ CE9721361E74E41D00A598C9 /* PyTable.m */, CE9721371E74E41D00A598C9 /* PyTextField.h */, CE9721381E74E41D00A598C9 /* PyTextField.m */, - CE9721391E74E41D00A598C9 /* ResultWindow_UI.h */, - CE97213A1E74E41D00A598C9 /* ResultWindow_UI.m */, CE97213B1E74E41D00A598C9 /* XiblessSupport.h */, CE97213C1E74E41D00A598C9 /* XiblessSupport.m */, ); @@ -675,6 +688,7 @@ CED88C1F1E763F2700C9B98C /* py in Resources */, CE05598E1E76217C008EB4F8 /* Localizable.strings in Resources */, CE65D0ED1E7783C40092126E /* ErrorReportWindow.xib in Resources */, + CE549CDC1E933C7600C75A05 /* ResultWindow.xib in Resources */, CEFC8A251E74F23000965F37 /* dg_cocoa.py in Resources */, CE7CA6061E76337700874874 /* about.xib in Resources */, CE7CA6071E76337700874874 /* cocoalib.strings in Resources */, @@ -692,7 +706,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CE97215E1E74E41D00A598C9 /* ResultWindow_UI.m in Sources */, CE97213F1E74E41D00A598C9 /* DetailsPanelPicture_UI.m in Sources */, CE6F7E041E74EA12004C0518 /* HSColumns.m in Sources */, CE9720ED1E74E40300A598C9 /* DirectoryPanel.m in Sources */, @@ -812,6 +825,29 @@ name = Localizable.strings; sourceTree = ""; }; + CE549CDA1E933C7600C75A05 /* ResultWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + CE549CDB1E933C7600C75A05 /* Base */, + CE549CDE1E933D4A00C75A05 /* fr */, + CE549CE01E933D4C00C75A05 /* de */, + CE549CE21E933D4D00C75A05 /* cs */, + CE549CE41E933D4F00C75A05 /* es */, + CE549CE61E933D5000C75A05 /* el */, + CE549CE81E933D5100C75A05 /* it */, + CE549CEA1E933D5300C75A05 /* nl */, + CE549CEC1E933D5500C75A05 /* pl */, + CE549CEE1E933D5700C75A05 /* ko */, + CE549CF01E933D5A00C75A05 /* hy */, + CE549CF21E933D5B00C75A05 /* pt-BR */, + CE549CF41E933D5C00C75A05 /* ru */, + CE549CF61E933D5D00C75A05 /* uk */, + CE549CF81E933D5F00C75A05 /* zh-Hans */, + CE549CFA1E933D6000C75A05 /* vi */, + ); + name = ResultWindow.xib; + sourceTree = ""; + }; CE65D0CA1E7781640092126E /* progress.xib */ = { isa = PBXVariantGroup; children = (