diff --git a/cocoa/base/Consts.h b/cocoa/base/Consts.h index c9f82650..80227a02 100644 --- a/cocoa/base/Consts.h +++ b/cocoa/base/Consts.h @@ -8,7 +8,6 @@ http://www.hardcoded.net/licenses/hs_license #import -#define DuplicateSelectionChangedNotification @"DuplicateSelectionChangedNotification" /* ResultsChangedNotification happens on major changes, which requires a complete reload of the data*/ #define ResultsChangedNotification @"ResultsChangedNotification" /* ResultsChangedNotification happens on minor changes, which requires buffer flush*/ diff --git a/cocoa/base/PyDupeGuru.h b/cocoa/base/PyDupeGuru.h index ab9594c2..022a296c 100644 --- a/cocoa/base/PyDupeGuru.h +++ b/cocoa/base/PyDupeGuru.h @@ -35,7 +35,6 @@ http://www.hardcoded.net/licenses/hs_license - (void)markNone; - (void)addSelectedToIgnoreList; -- (void)refreshDetailsWithSelected; - (void)removeSelected; - (void)openSelected; - (NSNumber *)renameSelected:(NSString *)aNewName; diff --git a/cocoa/base/ResultWindow.m b/cocoa/base/ResultWindow.m index a344abe2..a6544960 100644 --- a/cocoa/base/ResultWindow.m +++ b/cocoa/base/ResultWindow.m @@ -317,6 +317,7 @@ http://www.hardcoded.net/licenses/hs_license NSInteger startLen = [[py getOutlineView:matchesTag childCountsForPath:[NSArray array]] count]; [self performPySelection:[self getSelectedPaths:YES]]; [py makeSelectedReference]; + [self performPySelection:[self getSelectedPaths:NO]]; // In some cases (when in a filtered view in Power Marker mode, it's possible that the demoted // ref is not a part of the filter, making the table smaller. In those cases, we want to do a // complete reload of the table to avoid a crash. @@ -443,8 +444,6 @@ http://www.hardcoded.net/licenses/hs_license - (void)outlineViewSelectionDidChange:(NSNotification *)notification { [self performPySelection:[self getSelectedPaths:NO]]; - [py refreshDetailsWithSelected]; - [[NSNotificationCenter defaultCenter] postNotificationName:DuplicateSelectionChangedNotification object:self]; } - (void)resultsChanged:(NSNotification *)aNotification diff --git a/cocoa/me/dupeguru.xcodeproj/project.pbxproj b/cocoa/me/dupeguru.xcodeproj/project.pbxproj index e1c250a7..24f1f24a 100644 --- a/cocoa/me/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/me/dupeguru.xcodeproj/project.pbxproj @@ -39,7 +39,6 @@ CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE70FC6C12E00EC695D /* ProgressController.m */; }; CE515DF70FC6C12E00EC695D /* RecentDirectories.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DEA0FC6C12E00EC695D /* RecentDirectories.m */; }; CE515DF80FC6C12E00EC695D /* RegistrationInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DEC0FC6C12E00EC695D /* RegistrationInterface.m */; }; - CE515DF90FC6C12E00EC695D /* Table.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DEE0FC6C12E00EC695D /* Table.m */; }; CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF00FC6C12E00EC695D /* Utils.m */; }; CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF20FC6C12E00EC695D /* ValueTransformers.m */; }; CE515E1D0FC6C19300EC695D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515E160FC6C19300EC695D /* AppDelegate.m */; }; @@ -106,8 +105,6 @@ CE515DEA0FC6C12E00EC695D /* RecentDirectories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RecentDirectories.m; path = ../../cocoalib/RecentDirectories.m; sourceTree = SOURCE_ROOT; }; CE515DEB0FC6C12E00EC695D /* RegistrationInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegistrationInterface.h; path = ../../cocoalib/RegistrationInterface.h; sourceTree = SOURCE_ROOT; }; CE515DEC0FC6C12E00EC695D /* RegistrationInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RegistrationInterface.m; path = ../../cocoalib/RegistrationInterface.m; sourceTree = SOURCE_ROOT; }; - CE515DED0FC6C12E00EC695D /* Table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Table.h; path = ../../cocoalib/Table.h; sourceTree = SOURCE_ROOT; }; - CE515DEE0FC6C12E00EC695D /* Table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Table.m; path = ../../cocoalib/Table.m; 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; }; @@ -290,8 +287,6 @@ CE515DEA0FC6C12E00EC695D /* RecentDirectories.m */, CE515DEB0FC6C12E00EC695D /* RegistrationInterface.h */, CE515DEC0FC6C12E00EC695D /* RegistrationInterface.m */, - CE515DED0FC6C12E00EC695D /* Table.h */, - CE515DEE0FC6C12E00EC695D /* Table.m */, CE515DEF0FC6C12E00EC695D /* Utils.h */, CE515DF00FC6C12E00EC695D /* Utils.m */, CE515DF10FC6C12E00EC695D /* ValueTransformers.h */, @@ -407,7 +402,6 @@ CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */, CE515DF70FC6C12E00EC695D /* RecentDirectories.m in Sources */, CE515DF80FC6C12E00EC695D /* RegistrationInterface.m in Sources */, - CE515DF90FC6C12E00EC695D /* Table.m in Sources */, CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */, CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */, CE515E1D0FC6C19300EC695D /* AppDelegate.m in Sources */, diff --git a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj index e1fed2c3..82343cb2 100644 --- a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj @@ -31,7 +31,6 @@ CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB220FC192D60086DCA6 /* ProgressController.m */; }; CE80DB320FC192D60086DCA6 /* RecentDirectories.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB250FC192D60086DCA6 /* RecentDirectories.m */; }; CE80DB330FC192D60086DCA6 /* RegistrationInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB270FC192D60086DCA6 /* RegistrationInterface.m */; }; - CE80DB340FC192D60086DCA6 /* Table.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB290FC192D60086DCA6 /* Table.m */; }; CE80DB350FC192D60086DCA6 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2B0FC192D60086DCA6 /* Utils.m */; }; CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2D0FC192D60086DCA6 /* ValueTransformers.m */; }; CE80DB470FC193650086DCA6 /* NSNotificationAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB460FC193650086DCA6 /* NSNotificationAdditions.m */; }; @@ -106,8 +105,6 @@ CE80DB250FC192D60086DCA6 /* RecentDirectories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RecentDirectories.m; path = ../../cocoalib/RecentDirectories.m; sourceTree = SOURCE_ROOT; }; CE80DB260FC192D60086DCA6 /* RegistrationInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegistrationInterface.h; path = ../../cocoalib/RegistrationInterface.h; sourceTree = SOURCE_ROOT; }; CE80DB270FC192D60086DCA6 /* RegistrationInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RegistrationInterface.m; path = ../../cocoalib/RegistrationInterface.m; sourceTree = SOURCE_ROOT; }; - CE80DB280FC192D60086DCA6 /* Table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Table.h; path = ../../cocoalib/Table.h; sourceTree = SOURCE_ROOT; }; - CE80DB290FC192D60086DCA6 /* Table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Table.m; path = ../../cocoalib/Table.m; 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; }; @@ -283,8 +280,6 @@ CE80DB250FC192D60086DCA6 /* RecentDirectories.m */, CE80DB260FC192D60086DCA6 /* RegistrationInterface.h */, CE80DB270FC192D60086DCA6 /* RegistrationInterface.m */, - CE80DB280FC192D60086DCA6 /* Table.h */, - CE80DB290FC192D60086DCA6 /* Table.m */, CE80DB2A0FC192D60086DCA6 /* Utils.h */, CE80DB2B0FC192D60086DCA6 /* Utils.m */, CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */, @@ -412,7 +407,6 @@ CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */, CE80DB320FC192D60086DCA6 /* RecentDirectories.m in Sources */, CE80DB330FC192D60086DCA6 /* RegistrationInterface.m in Sources */, - CE80DB340FC192D60086DCA6 /* Table.m in Sources */, CE80DB350FC192D60086DCA6 /* Utils.m in Sources */, CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */, CE80DB470FC193650086DCA6 /* NSNotificationAdditions.m in Sources */, diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 321ba7dc..1ab3b0f8 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -35,7 +35,6 @@ CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F910FC9517500CD5728 /* ProgressController.m */; }; CEFC7FA20FC9517500CD5728 /* RecentDirectories.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F950FC9517500CD5728 /* RecentDirectories.m */; }; CEFC7FA30FC9517500CD5728 /* RegistrationInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F970FC9517500CD5728 /* RegistrationInterface.m */; }; - CEFC7FA40FC9517500CD5728 /* Table.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F990FC9517500CD5728 /* Table.m */; }; CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9B0FC9517500CD5728 /* Utils.m */; }; CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9D0FC9517500CD5728 /* ValueTransformers.m */; }; CEFC7FB90FC951A700CD5728 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7FB20FC951A700CD5728 /* AppDelegate.m */; }; @@ -102,8 +101,6 @@ CEFC7F950FC9517500CD5728 /* RecentDirectories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RecentDirectories.m; path = ../../cocoalib/RecentDirectories.m; sourceTree = SOURCE_ROOT; }; CEFC7F960FC9517500CD5728 /* RegistrationInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegistrationInterface.h; path = ../../cocoalib/RegistrationInterface.h; sourceTree = SOURCE_ROOT; }; CEFC7F970FC9517500CD5728 /* RegistrationInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RegistrationInterface.m; path = ../../cocoalib/RegistrationInterface.m; sourceTree = SOURCE_ROOT; }; - CEFC7F980FC9517500CD5728 /* Table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Table.h; path = ../../cocoalib/Table.h; sourceTree = SOURCE_ROOT; }; - CEFC7F990FC9517500CD5728 /* Table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Table.m; path = ../../cocoalib/Table.m; 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; }; @@ -269,8 +266,6 @@ CEFC7F950FC9517500CD5728 /* RecentDirectories.m */, CEFC7F960FC9517500CD5728 /* RegistrationInterface.h */, CEFC7F970FC9517500CD5728 /* RegistrationInterface.m */, - CEFC7F980FC9517500CD5728 /* Table.h */, - CEFC7F990FC9517500CD5728 /* Table.m */, CEFC7F9A0FC9517500CD5728 /* Utils.h */, CEFC7F9B0FC9517500CD5728 /* Utils.m */, CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */, @@ -377,7 +372,6 @@ CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */, CEFC7FA20FC9517500CD5728 /* RecentDirectories.m in Sources */, CEFC7FA30FC9517500CD5728 /* RegistrationInterface.m in Sources */, - CEFC7FA40FC9517500CD5728 /* Table.m in Sources */, CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */, CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */, CEFC7FB90FC951A700CD5728 /* AppDelegate.m in Sources */, diff --git a/core/app_cocoa.py b/core/app_cocoa.py index bbe43878..db675b45 100644 --- a/core/app_cocoa.py +++ b/core/app_cocoa.py @@ -50,7 +50,6 @@ class DupeGuru(app.DupeGuru, Broadcaster): self.progress = cocoa.ThreadedJobPerformer() self.display_delta_values = False self.selected_dupes = [] - self.RefreshDetailsWithSelected() #--- Override @staticmethod @@ -93,6 +92,12 @@ class DupeGuru(app.DupeGuru, Broadcaster): curr_path = self.directories.get_subfolders(curr_path)[current_index] return self.get_folder_path(node_path[1:], curr_path) + def _select_dupes(self, dupes): + if dupes == self.selected_dupes: + return + self.selected_dupes = dupes + self.notify('dupes_selected') + #---Public def AddSelectedToIgnoreList(self): for dupe in self.selected_dupes: @@ -113,9 +118,6 @@ class DupeGuru(app.DupeGuru, Broadcaster): def PurgeIgnoreList(self): self.scanner.ignore_list.Filter(lambda f,s:op.exists(f) and op.exists(s)) - def RefreshDetailsWithSelected(self): - self.notify('details_table_changed') - def RemoveDirectory(self,index): try: del self.directories[index] @@ -141,8 +143,7 @@ class DupeGuru(app.DupeGuru, Broadcaster): NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(path,'') def start_scanning(self): - self.selected_dupes = [] - self.RefreshDetailsWithSelected() + self._select_dupes([]) try: app.DupeGuru.start_scanning(self) return 0 @@ -187,13 +188,12 @@ class DupeGuru(app.DupeGuru, Broadcaster): return g.ref selected = [extract_dupe(self.GetObjects(p)) for p in node_paths] - self.selected_dupes = [dupe for dupe in selected if dupe is not None] + self._select_dupes([dupe for dupe in selected if dupe is not None]) def SelectPowerMarkerNodePaths(self,node_paths): rows = [p[0] for p in node_paths] - self.selected_dupes = [ - self.results.dupes[row] for row in rows if row in xrange(len(self.results.dupes)) - ] + dupes = [self.results.dupes[row] for row in rows if row in xrange(len(self.results.dupes))] + self._select_dupes(dupes) def SetDirectoryState(self, node_path, state): p = self.get_folder_path(node_path) diff --git a/core/app_cocoa_inter.py b/core/app_cocoa_inter.py index 6337696f..28526c94 100644 --- a/core/app_cocoa_inter.py +++ b/core/app_cocoa_inter.py @@ -71,9 +71,6 @@ class PyDupeGuruBase(PyApp): def saveResults(self): self.app.save() - def refreshDetailsWithSelected(self): - self.app.RefreshDetailsWithSelected() - def selectedResultNodePaths(self): return self.app.selected_result_node_paths() diff --git a/core/gui/details_panel.py b/core/gui/details_panel.py index e724b4fd..0111e1b1 100644 --- a/core/gui/details_panel.py +++ b/core/gui/details_panel.py @@ -41,7 +41,7 @@ class DetailsPanel(Listener): return self._table[row_index] #--- Event Handlers - def details_table_changed(self): + def dupes_selected(self): self._refresh() self.view.refresh() diff --git a/core/tests/app_cocoa_test.py b/core/tests/app_cocoa_test.py index 6d15e958..48a02a45 100644 --- a/core/tests/app_cocoa_test.py +++ b/core/tests/app_cocoa_test.py @@ -253,11 +253,9 @@ class TCDupeGuru(TestCase): def test_refreshDetailsWithSelected(self): self.app.SelectPowerMarkerNodePaths(r2np([0,2])) - self.app.RefreshDetailsWithSelected() eq_(self.dpanel.row(0), ('Filename', 'bar bleh', 'foo bar')) self.check_gui_calls(self.dpanel_gui, ['refresh']) self.app.SelectPowerMarkerNodePaths([]) - self.app.RefreshDetailsWithSelected() eq_(self.dpanel.row(0), ('Filename', '---', '---')) self.check_gui_calls(self.dpanel_gui, ['refresh'])