mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
Brought back delta values.
This commit is contained in:
parent
46836cc805
commit
a65fd7d0d0
@ -56,7 +56,6 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
//Scanning options
|
//Scanning options
|
||||||
- (void)setMinMatchPercentage:(NSNumber *)percentage;
|
- (void)setMinMatchPercentage:(NSNumber *)percentage;
|
||||||
- (void)setMixFileKind:(NSNumber *)mix_file_kind;
|
- (void)setMixFileKind:(NSNumber *)mix_file_kind;
|
||||||
- (void)setDisplayDeltaValues:(NSNumber *)display_delta_values;
|
|
||||||
- (void)setEscapeFilterRegexp:(NSNumber *)escape_filter_regexp;
|
- (void)setEscapeFilterRegexp:(NSNumber *)escape_filter_regexp;
|
||||||
- (void)setRemoveEmptyFolders:(NSNumber *)remove_empty_folders;
|
- (void)setRemoveEmptyFolders:(NSNumber *)remove_empty_folders;
|
||||||
- (void)setSizeThreshold:(NSInteger)size_threshold;
|
- (void)setSizeThreshold:(NSInteger)size_threshold;
|
||||||
|
@ -10,7 +10,10 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
#import "PyOutline.h"
|
#import "PyOutline.h"
|
||||||
|
|
||||||
@interface PyResultTree : PyOutline
|
@interface PyResultTree : PyOutline
|
||||||
|
- (BOOL)powerMarkerMode;
|
||||||
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
|
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
|
||||||
|
- (BOOL)deltaValuesMode;
|
||||||
|
- (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode;
|
||||||
|
|
||||||
- (NSString *)valueForPath:(NSArray *)aPath column:(NSInteger)aColumn;
|
- (NSString *)valueForPath:(NSArray *)aPath column:(NSInteger)aColumn;
|
||||||
- (BOOL)renameSelected:(NSString *)aNewName;
|
- (BOOL)renameSelected:(NSString *)aNewName;
|
||||||
|
@ -12,10 +12,14 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
|
|
||||||
@interface ResultOutline : HSOutline
|
@interface ResultOutline : HSOutline
|
||||||
{
|
{
|
||||||
NSMutableIndexSet *_deltaColumns;
|
NSIndexSet *_deltaColumns;
|
||||||
}
|
}
|
||||||
- (PyResultTree *)py;
|
- (PyResultTree *)py;
|
||||||
|
- (BOOL)powerMarkerMode;
|
||||||
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
|
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
|
||||||
|
- (BOOL)deltaValuesMode;
|
||||||
|
- (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode;
|
||||||
|
- (void)setDeltaColumns:(NSIndexSet *)aDeltaColumns;
|
||||||
|
|
||||||
- (IBAction)markSelected:(id)sender;
|
- (IBAction)markSelected:(id)sender;
|
||||||
@end;
|
@end;
|
@ -18,6 +18,12 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_deltaColumns release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
- (PyResultTree *)py
|
- (PyResultTree *)py
|
||||||
{
|
{
|
||||||
return (PyResultTree *)py;
|
return (PyResultTree *)py;
|
||||||
@ -31,11 +37,32 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Public */
|
/* Public */
|
||||||
|
- (BOOL)powerMarkerMode
|
||||||
|
{
|
||||||
|
return [[self py] powerMarkerMode];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode
|
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode
|
||||||
{
|
{
|
||||||
[[self py] setPowerMarkerMode:aPowerMarkerMode];
|
[[self py] setPowerMarkerMode:aPowerMarkerMode];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)deltaValuesMode
|
||||||
|
{
|
||||||
|
return [[self py] deltaValuesMode];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode
|
||||||
|
{
|
||||||
|
[[self py] setDeltaValuesMode:aDeltaValuesMode];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setDeltaColumns:(NSIndexSet *)aDeltaColumns
|
||||||
|
{
|
||||||
|
[_deltaColumns release];
|
||||||
|
_deltaColumns = [aDeltaColumns retain];
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)markSelected:(id)sender
|
- (IBAction)markSelected:(id)sender
|
||||||
{
|
{
|
||||||
[[self py] markSelected];
|
[[self py] markSelected];
|
||||||
@ -96,12 +123,12 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
else {
|
else {
|
||||||
[textCell setTextColor:[NSColor blueColor]];
|
[textCell setTextColor:[NSColor blueColor]];
|
||||||
}
|
}
|
||||||
// if ((_displayDelta) && (_powerMode || ([node level] > 1))) {
|
if (([self deltaValuesMode]) && ([self powerMarkerMode] || ([path length] > 1))) {
|
||||||
// NSInteger i = [[tableColumn identifier] integerValue];
|
NSInteger i = [[tableColumn identifier] integerValue];
|
||||||
// if ([_deltaColumns containsIndex:i]) {
|
if ([_deltaColumns containsIndex:i]) {
|
||||||
// [textCell setTextColor:[NSColor orangeColor]];
|
[textCell setTextColor:[NSColor orangeColor]];
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@end
|
@end
|
@ -27,10 +27,7 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
IBOutlet NSMenu *columnsMenu;
|
IBOutlet NSMenu *columnsMenu;
|
||||||
IBOutlet NSSearchField *filterField;
|
IBOutlet NSSearchField *filterField;
|
||||||
|
|
||||||
BOOL _powerMode;
|
|
||||||
BOOL _displayDelta;
|
|
||||||
NSMutableArray *_resultColumns;
|
NSMutableArray *_resultColumns;
|
||||||
NSMutableIndexSet *_deltaColumns;
|
|
||||||
NSWindowController *preferencesPanel;
|
NSWindowController *preferencesPanel;
|
||||||
ResultOutline *outline;
|
ResultOutline *outline;
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,6 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
@implementation ResultWindowBase
|
@implementation ResultWindowBase
|
||||||
- (void)awakeFromNib
|
- (void)awakeFromNib
|
||||||
{
|
{
|
||||||
_displayDelta = NO;
|
|
||||||
_powerMode = NO;
|
|
||||||
[self window];
|
[self window];
|
||||||
preferencesPanel = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
|
preferencesPanel = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
|
||||||
outline = [[ResultOutline alloc] initWithPyParent:py view:matches];
|
outline = [[ResultOutline alloc] initWithPyParent:py view:matches];
|
||||||
@ -42,7 +40,6 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
[self fillColumnsMenu];
|
[self fillColumnsMenu];
|
||||||
[deltaSwitch setSelectedSegment:0];
|
[deltaSwitch setSelectedSegment:0];
|
||||||
[pmSwitch setSelectedSegment:0];
|
[pmSwitch setSelectedSegment:0];
|
||||||
[py setDisplayDeltaValues:b2n(_displayDelta)];
|
|
||||||
[matches setTarget:self];
|
[matches setTarget:self];
|
||||||
[matches setDoubleAction:@selector(openClicked:)];
|
[matches setDoubleAction:@selector(openClicked:)];
|
||||||
[self refreshStats];
|
[self refreshStats];
|
||||||
@ -116,7 +113,7 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
|
|
||||||
- (NSArray *)getSelectedPaths:(BOOL)aDupesOnly
|
- (NSArray *)getSelectedPaths:(BOOL)aDupesOnly
|
||||||
{
|
{
|
||||||
if (_powerMode)
|
if ([outline powerMarkerMode])
|
||||||
aDupesOnly = NO;
|
aDupesOnly = NO;
|
||||||
NSIndexSet *indexes = [matches selectedRowIndexes];
|
NSIndexSet *indexes = [matches selectedRowIndexes];
|
||||||
NSMutableArray *nodeList = [NSMutableArray array];
|
NSMutableArray *nodeList = [NSMutableArray array];
|
||||||
@ -171,7 +168,7 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
|
|
||||||
- (void)performPySelection:(NSArray *)aIndexPaths
|
- (void)performPySelection:(NSArray *)aIndexPaths
|
||||||
{
|
{
|
||||||
if (_powerMode) {
|
if ([outline powerMarkerMode]) {
|
||||||
[py selectPowerMarkerNodePaths:aIndexPaths];
|
[py selectPowerMarkerNodePaths:aIndexPaths];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -203,15 +200,12 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
|
|
||||||
- (IBAction)changeDelta:(id)sender
|
- (IBAction)changeDelta:(id)sender
|
||||||
{
|
{
|
||||||
_displayDelta = [deltaSwitch selectedSegment] == 1;
|
[outline setDeltaValuesMode:[deltaSwitch selectedSegment] == 1];
|
||||||
[py setDisplayDeltaValues:b2n(_displayDelta)];
|
|
||||||
[self reloadMatches];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)changePowerMarker:(id)sender
|
- (IBAction)changePowerMarker:(id)sender
|
||||||
{
|
{
|
||||||
_powerMode = [pmSwitch selectedSegment] == 1;
|
[outline setPowerMarkerMode:[pmSwitch selectedSegment] == 1];
|
||||||
[outline setPowerMarkerMode:_powerMode];
|
|
||||||
// [self outlineView:matches didClickTableColumn:nil];
|
// [self outlineView:matches didClickTableColumn:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,10 +10,7 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
#import "../base/ResultWindow.h"
|
#import "../base/ResultWindow.h"
|
||||||
#import "DirectoryPanel.h"
|
#import "DirectoryPanel.h"
|
||||||
|
|
||||||
@interface ResultWindow : ResultWindowBase
|
@interface ResultWindow : ResultWindowBase {}
|
||||||
{
|
|
||||||
NSString *_lastAction;
|
|
||||||
}
|
|
||||||
- (IBAction)removeDeadTracks:(id)sender;
|
- (IBAction)removeDeadTracks:(id)sender;
|
||||||
- (IBAction)startDuplicateScan:(id)sender;
|
- (IBAction)startDuplicateScan:(id)sender;
|
||||||
@end
|
@end
|
||||||
|
@ -20,8 +20,9 @@ http://www.hardcoded.net/licenses/hs_license
|
|||||||
{
|
{
|
||||||
[super awakeFromNib];
|
[super awakeFromNib];
|
||||||
[[self window] setTitle:@"dupeGuru Music Edition"];
|
[[self window] setTitle:@"dupeGuru Music Edition"];
|
||||||
_deltaColumns = [[NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,7)] retain];
|
NSMutableIndexSet *deltaColumns = [[NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,7)] retain];
|
||||||
[_deltaColumns removeIndex:6];
|
[deltaColumns removeIndex:6];
|
||||||
|
[outline setDeltaColumns:deltaColumns];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
|
@ -46,7 +46,6 @@ class DupeGuru(app.DupeGuru):
|
|||||||
appdata = op.join(appsupport, appdata_subdir)
|
appdata = op.join(appsupport, appdata_subdir)
|
||||||
app.DupeGuru.__init__(self, data_module, appdata, appid)
|
app.DupeGuru.__init__(self, data_module, appdata, appid)
|
||||||
self.progress = cocoa.ThreadedJobPerformer()
|
self.progress = cocoa.ThreadedJobPerformer()
|
||||||
self.display_delta_values = False
|
|
||||||
|
|
||||||
#--- Override
|
#--- Override
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -156,9 +155,3 @@ class DupeGuru(app.DupeGuru):
|
|||||||
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)
|
self._select_dupes(dupes)
|
||||||
|
|
||||||
def sort_dupes(self,key,asc):
|
|
||||||
self.results.sort_dupes(key,asc,self.display_delta_values)
|
|
||||||
|
|
||||||
def sort_groups(self,key,asc):
|
|
||||||
self.results.sort_groups(key,asc)
|
|
||||||
|
|
||||||
|
@ -131,9 +131,6 @@ class PyDupeGuruBase(PyRegistrable):
|
|||||||
def setMixFileKind_(self, mix_file_kind):
|
def setMixFileKind_(self, mix_file_kind):
|
||||||
self.py.scanner.mix_file_kind = mix_file_kind
|
self.py.scanner.mix_file_kind = mix_file_kind
|
||||||
|
|
||||||
def setDisplayDeltaValues_(self, display_delta_values):
|
|
||||||
self.py.display_delta_values= display_delta_values
|
|
||||||
|
|
||||||
def setEscapeFilterRegexp_(self, escape_filter_regexp):
|
def setEscapeFilterRegexp_(self, escape_filter_regexp):
|
||||||
self.py.options['escape_filter_regexp'] = escape_filter_regexp
|
self.py.options['escape_filter_regexp'] = escape_filter_regexp
|
||||||
|
|
||||||
@ -175,10 +172,22 @@ class PyDirectoryOutline(PyOutline):
|
|||||||
class PyResultOutline(PyOutline):
|
class PyResultOutline(PyOutline):
|
||||||
py_class = ResultTree
|
py_class = ResultTree
|
||||||
|
|
||||||
|
@signature('c@:')
|
||||||
|
def powerMarkerMode(self):
|
||||||
|
return self.py.power_marker
|
||||||
|
|
||||||
@signature('v@:c')
|
@signature('v@:c')
|
||||||
def setPowerMarkerMode_(self, value):
|
def setPowerMarkerMode_(self, value):
|
||||||
self.py.power_marker = value
|
self.py.power_marker = value
|
||||||
|
|
||||||
|
@signature('c@:')
|
||||||
|
def deltaValuesMode(self):
|
||||||
|
return self.py.delta_values
|
||||||
|
|
||||||
|
@signature('v@:c')
|
||||||
|
def setDeltaValuesMode_(self, value):
|
||||||
|
self.py.delta_values = value
|
||||||
|
|
||||||
@signature('@@:@i')
|
@signature('@@:@i')
|
||||||
def valueForPath_column_(self, path, column):
|
def valueForPath_column_(self, path, column):
|
||||||
return self.py.get_node_value(path, column)
|
return self.py.get_node_value(path, column)
|
||||||
|
@ -34,6 +34,7 @@ class ResultTree(GUIObject, Tree):
|
|||||||
GUIObject.__init__(self, view, app)
|
GUIObject.__init__(self, view, app)
|
||||||
Tree.__init__(self)
|
Tree.__init__(self)
|
||||||
self._power_marker = False
|
self._power_marker = False
|
||||||
|
self._delta_values = False
|
||||||
self.connect()
|
self.connect()
|
||||||
self._refresh()
|
self._refresh()
|
||||||
self.view.refresh()
|
self.view.refresh()
|
||||||
@ -60,16 +61,16 @@ class ResultTree(GUIObject, Tree):
|
|||||||
node = self.get_node(path)
|
node = self.get_node(path)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return '---'
|
return '---'
|
||||||
if self.app.display_delta_values:
|
if self.delta_values:
|
||||||
return node.data_delta[column]
|
return node.data_delta[column]
|
||||||
else:
|
else:
|
||||||
return node.data[column]
|
return node.data[column]
|
||||||
|
|
||||||
def sort(self, key, asc):
|
def sort(self, key, asc):
|
||||||
if self.power_marker:
|
if self.power_marker:
|
||||||
self.app.sort_dupes(key, asc)
|
self.app.results.sort_dupes(key, asc, self.delta_values)
|
||||||
else:
|
else:
|
||||||
self.app.sort_groups(key, asc)
|
self.app.results.sort_groups(key, asc)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def power_marker(self):
|
def power_marker(self):
|
||||||
@ -83,6 +84,18 @@ class ResultTree(GUIObject, Tree):
|
|||||||
self._refresh()
|
self._refresh()
|
||||||
self.view.refresh()
|
self.view.refresh()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def delta_values(self):
|
||||||
|
return self._delta_values
|
||||||
|
|
||||||
|
@delta_values.setter
|
||||||
|
def delta_values(self, value):
|
||||||
|
if value == self._delta_values:
|
||||||
|
return
|
||||||
|
self._delta_values = value
|
||||||
|
self._refresh()
|
||||||
|
self.view.refresh()
|
||||||
|
|
||||||
@Tree.selected.setter
|
@Tree.selected.setter
|
||||||
def selected(self, node):
|
def selected(self, node):
|
||||||
self._selected = node
|
self._selected = node
|
||||||
|
Loading…
x
Reference in New Issue
Block a user