mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-22 22:51:39 +00:00
[#194 state:fixed] Added the "Replace with symlink" deletion option.
This commit is contained in:
@@ -15,12 +15,14 @@ http://www.hardcoded.net/licenses/bsd_license
|
||||
PyDeletionOptions *model;
|
||||
|
||||
NSTextField *messageTextField;
|
||||
NSButton *hardlinkButton;
|
||||
NSButton *linkButton;
|
||||
NSMatrix *linkTypeRadio;
|
||||
NSButton *directButton;
|
||||
}
|
||||
|
||||
@property (readwrite, retain) NSTextField *messageTextField;
|
||||
@property (readwrite, retain) NSButton *hardlinkButton;
|
||||
@property (readwrite, retain) NSButton *linkButton;
|
||||
@property (readwrite, retain) NSMatrix *linkTypeRadio;
|
||||
@property (readwrite, retain) NSButton *directButton;
|
||||
|
||||
- (id)initWithPyRef:(PyObject *)aPyRef;
|
||||
|
||||
@@ -13,7 +13,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
||||
@implementation DeletionOptions
|
||||
|
||||
@synthesize messageTextField;
|
||||
@synthesize hardlinkButton;
|
||||
@synthesize linkButton;
|
||||
@synthesize linkTypeRadio;
|
||||
@synthesize directButton;
|
||||
|
||||
- (id)initWithPyRef:(PyObject *)aPyRef
|
||||
@@ -33,7 +34,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
||||
|
||||
- (void)updateOptions
|
||||
{
|
||||
[model setHardlink:[hardlinkButton state] == NSOnState];
|
||||
[model setLinkDeleted:[linkButton state] == NSOnState];
|
||||
[model setUseHardlinks:[linkTypeRadio selectedColumn] == 1];
|
||||
[model setDirect:[directButton state] == NSOnState];
|
||||
}
|
||||
|
||||
@@ -55,8 +57,9 @@ http://www.hardcoded.net/licenses/bsd_license
|
||||
|
||||
- (BOOL)show
|
||||
{
|
||||
[hardlinkButton setState:NSOffState];
|
||||
[linkButton setState:NSOffState];
|
||||
[directButton setState:NSOffState];
|
||||
[linkTypeRadio selectCellAtRow:0 column:0];
|
||||
NSInteger r = [NSApp runModalForWindow:[self window]];
|
||||
[[self window] close];
|
||||
return r == NSOKButton;
|
||||
|
||||
@@ -1,47 +1,49 @@
|
||||
ownerclass = 'DeletionOptions'
|
||||
ownerimport = 'DeletionOptions.h'
|
||||
|
||||
result = Window(450, 215, "Deletion Options")
|
||||
result = Window(450, 240, "Deletion Options")
|
||||
messageLabel = Label(result, "")
|
||||
hardlinkCheckbox = Checkbox(result, "Hardlink deleted files")
|
||||
hardlinkLabel = Label(result, "After having deleted a duplicate, place a hardlink targeting the "
|
||||
linkCheckbox = Checkbox(result, "Link deleted files")
|
||||
linkLabel = Label(result, "After having deleted a duplicate, place a link targeting the "
|
||||
"reference file to replace the deleted file.")
|
||||
linkTypeChoice = RadioButtons(result, ["Symlink", "Hardlink"], columns=2)
|
||||
directCheckbox = Checkbox(result, "Directly delete files")
|
||||
directLabel = Label(result, "Instead of sending files to trash, delete them directly. This option "
|
||||
"is usually used as a workaround when the normal deletion method doesn't work.")
|
||||
proceedButton = Button(result, "Proceed")
|
||||
cancelButton = Button(result, "Cancel")
|
||||
|
||||
owner.hardlinkButton = hardlinkCheckbox
|
||||
owner.linkButton = linkCheckbox
|
||||
owner.linkTypeRadio = linkTypeChoice
|
||||
owner.directButton = directCheckbox
|
||||
owner.messageTextField = messageLabel
|
||||
|
||||
result.canMinimize = False
|
||||
result.canResize = False
|
||||
hardlinkLabel.controlSize = const.NSSmallControlSize
|
||||
directLabel.controlSize = const.NSSmallControlSize
|
||||
linkLabel.controlSize = ControlSize.Small
|
||||
directLabel.controlSize = ControlSize.Small
|
||||
linkTypeChoice.controlSize = ControlSize.Small
|
||||
proceedButton.keyEquivalent = '\\r'
|
||||
cancelButton.keyEquivalent = '\\e'
|
||||
hardlinkCheckbox.action = directCheckbox.action = Action(owner, 'updateOptions')
|
||||
linkCheckbox.action = directCheckbox.action = linkTypeChoice.action = Action(owner, 'updateOptions')
|
||||
proceedButton.action = Action(owner, 'proceed')
|
||||
cancelButton.action = Action(owner, 'cancel')
|
||||
|
||||
hardlinkLabel.height *= 2 # 2 lines
|
||||
linkLabel.height *= 2 # 2 lines
|
||||
directLabel.height *= 3 # 3 lines
|
||||
proceedButton.width = 92
|
||||
cancelButton.width = 92
|
||||
|
||||
messageLabel.packToCorner(Pack.UpperLeft)
|
||||
hardlinkCheckbox.packRelativeTo(messageLabel, Pack.Below)
|
||||
hardlinkLabel.packRelativeTo(hardlinkCheckbox, Pack.Below)
|
||||
directCheckbox.packRelativeTo(hardlinkLabel, Pack.Below)
|
||||
directLabel.packRelativeTo(directCheckbox, Pack.Below)
|
||||
for view in (messageLabel, hardlinkCheckbox, hardlinkLabel, directCheckbox, directLabel):
|
||||
view.fill(Pack.Right)
|
||||
proceedButton.packToCorner(Pack.LowerRight)
|
||||
cancelButton.packRelativeTo(proceedButton, Pack.Left)
|
||||
mainLayout = VLayout([messageLabel, linkCheckbox, linkLabel, linkTypeChoice, directCheckbox,
|
||||
directLabel])
|
||||
mainLayout.packToCorner(Pack.UpperLeft)
|
||||
mainLayout.fill(Pack.Right)
|
||||
buttonLayout = HLayout([cancelButton, proceedButton])
|
||||
buttonLayout.packToCorner(Pack.LowerRight)
|
||||
|
||||
# indent the labels under checkboxes a little bit to the right
|
||||
for label in (hardlinkLabel, directLabel):
|
||||
label.x += 20
|
||||
label.width -= 20
|
||||
for indentedView in (linkLabel, directLabel, linkTypeChoice):
|
||||
indentedView.x += 20
|
||||
indentedView.width -= 20
|
||||
# We actually don't want the link choice radio buttons to take all the width, it looks weird.
|
||||
linkTypeChoice.width = 170
|
||||
|
||||
Reference in New Issue
Block a user