diff --git a/cocoa/base/Consts.h b/cocoa/base/Consts.h index 92c4cb58..27349cea 100644 --- a/cocoa/base/Consts.h +++ b/cocoa/base/Consts.h @@ -18,4 +18,6 @@ http://www.hardcoded.net/licenses/bsd_license #define jobMove @"job_move" #define jobDelete @"job_delete" +#define DGPrioritizeIndexPasteboardType @"DGPrioritizeIndexPasteboardType" + #define TR(s) NSLocalizedString(s, @"") \ No newline at end of file diff --git a/cocoa/base/PrioritizeDialog.h b/cocoa/base/PrioritizeDialog.h index 873ffdd2..369c2a29 100644 --- a/cocoa/base/PrioritizeDialog.h +++ b/cocoa/base/PrioritizeDialog.h @@ -12,6 +12,7 @@ http://www.hardcoded.net/licenses/bsd_license #import "PyPrioritizeDialog.h" #import "HSPopUpList.h" #import "HSSelectableList.h" +#import "PrioritizeList.h" @interface PrioritizeDialog : HSWindowController { @@ -21,7 +22,7 @@ http://www.hardcoded.net/licenses/bsd_license HSPopUpList *categoryPopUp; HSSelectableList *criteriaList; - HSSelectableList *prioritizationList; + PrioritizeList *prioritizationList; } - (id)initWithPy:(PyApp *)aPy; - (PyPrioritizeDialog *)py; diff --git a/cocoa/base/PrioritizeDialog.m b/cocoa/base/PrioritizeDialog.m index 8f12257f..1419ffd7 100644 --- a/cocoa/base/PrioritizeDialog.m +++ b/cocoa/base/PrioritizeDialog.m @@ -15,7 +15,7 @@ http://www.hardcoded.net/licenses/bsd_license [self window]; categoryPopUp = [[HSPopUpList alloc] initWithPy:[[self py] categoryList] view:categoryPopUpView]; criteriaList = [[HSSelectableList alloc] initWithPy:[[self py] criteriaList] view:criteriaTableView]; - prioritizationList = [[HSSelectableList alloc] initWithPy:[[self py] prioritizationList] view:prioritizationTableView]; + prioritizationList = [[PrioritizeList alloc] initWithPy:[[self py] prioritizationList] view:prioritizationTableView]; [self connect]; return self; } @@ -25,6 +25,7 @@ http://www.hardcoded.net/licenses/bsd_license [self disconnect]; [categoryPopUp release]; [criteriaList release]; + [prioritizationList release]; [super dealloc]; } diff --git a/cocoa/base/PrioritizeList.h b/cocoa/base/PrioritizeList.h new file mode 100644 index 00000000..52014dd3 --- /dev/null +++ b/cocoa/base/PrioritizeList.h @@ -0,0 +1,15 @@ +/* +Copyright 2011 Hardcoded Software (http://www.hardcoded.net) + +This software is licensed under the "BSD" License as described in the "LICENSE" file, +which should be included with this package. The terms are also available at +http://www.hardcoded.net/licenses/bsd_license +*/ + +#import +#import "HSSelectableList.h" +#import "PyPrioritizeList.h" + +@interface PrioritizeList : HSSelectableList {} +- (PyPrioritizeList *)py; +@end \ No newline at end of file diff --git a/cocoa/base/PrioritizeList.m b/cocoa/base/PrioritizeList.m new file mode 100644 index 00000000..bd13a327 --- /dev/null +++ b/cocoa/base/PrioritizeList.m @@ -0,0 +1,51 @@ +/* +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 "PrioritizeList.h" +#import "Utils.h" +#import "Consts.h" + +@implementation PrioritizeList +- (PyPrioritizeList *)py +{ + return (PyPrioritizeList *)py; +} + +- (void)setView:(NSTableView *)aTableView +{ + [super setView:aTableView]; + [[self view] registerForDraggedTypes:[NSArray arrayWithObject:DGPrioritizeIndexPasteboardType]]; +} + +- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard +{ + NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; + [pboard declareTypes:[NSArray arrayWithObject:DGPrioritizeIndexPasteboardType] owner:self]; + [pboard setData:data forType:DGPrioritizeIndexPasteboardType]; + return YES; +} + +- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id )info proposedRow:(NSInteger)row + proposedDropOperation:(NSTableViewDropOperation)op +{ + if (op == NSTableViewDropAbove) { + return NSDragOperationMove; + } + return NSDragOperationNone; +} + +- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id )info + row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation +{ + NSPasteboard* pboard = [info draggingPasteboard]; + NSData* rowData = [pboard dataForType:DGPrioritizeIndexPasteboardType]; + NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData]; + [[self py] moveIndexes:[Utils indexSet2Array:rowIndexes] toIndex:row]; + return YES; +} +@end \ No newline at end of file diff --git a/cocoa/base/PyPrioritizeList.h b/cocoa/base/PyPrioritizeList.h new file mode 100644 index 00000000..7e5c70bb --- /dev/null +++ b/cocoa/base/PyPrioritizeList.h @@ -0,0 +1,14 @@ +/* +Copyright 2011 Hardcoded Software (http://www.hardcoded.net) + +This software is licensed under the "BSD" License as described in the "LICENSE" file, +which should be included with this package. The terms are also available at +http://www.hardcoded.net/licenses/bsd_license +*/ + +#import +#import "PySelectableList.h" + +@interface PyPrioritizeList : PySelectableList +- (void)moveIndexes:(NSArray *)indexes toIndex:(NSInteger)destIndex; +@end \ No newline at end of file diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 04e0df9e..bb47b0cb 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ CE81135012E5CE4D00A36C80 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; 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 */; }; @@ -169,6 +170,10 @@ CE81135912E5CE7B00A36C80 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/Preferences.xib; sourceTree = ""; }; CE8113EA12E5CE9A00A36C80 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = ../base/en.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; }; 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 = ""; }; + CE89240714239CC30024CE4E /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = ""; }; + CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = ""; }; + CE89240914239CC30024CE4E /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = ""; }; CE8C53B61173248F0011B41F /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = ""; }; CE8C53BB117324CE0011B41F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = ""; }; CE91F210113BC22D0010360B /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; }; @@ -455,6 +460,10 @@ CE665B2F13225ADD003F5CFB /* PyExtraFairwareReminder.h */, CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */, CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */, + CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */, + CE89240614239CC30024CE4E /* PrioritizeList.h */, + CE89240714239CC30024CE4E /* PrioritizeList.m */, + CE89240914239CC30024CE4E /* PyPrioritizeList.h */, ); name = dgbase; sourceTree = ""; @@ -579,6 +588,7 @@ CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */, CE9777D5141F9D7600C13FB5 /* HSPopUpList.m in Sources */, CE41672D141FE1E5004F3F0B /* HSSelectableList.m in Sources */, + CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/core/app_cocoa_inter.py b/core/app_cocoa_inter.py index 2d07d7f9..35e4b1d1 100644 --- a/core/app_cocoa_inter.py +++ b/core/app_cocoa_inter.py @@ -282,7 +282,7 @@ class PyPrioritizeDialog(PyGUIObject): def prioritizationList(self): if not hasattr(self, '_prioritizationList'): - self._prioritizationList = PySelectableList.alloc().initWithPy_(self.py.prioritization_list) + self._prioritizationList = PyPrioritizeList.alloc().initWithPy_(self.py.prioritization_list) return self._prioritizationList def addSelected(self): @@ -293,3 +293,9 @@ class PyPrioritizeDialog(PyGUIObject): def performReprioritization(self): self.py.perform_reprioritization() + +class PyPrioritizeList(PySelectableList): + @signature('v@:@i') + def moveIndexes_toIndex_(self, indexes, dest_index): + self.py.move_indexes(indexes, dest_index) + \ No newline at end of file