diff --git a/build.py b/build.py index c616a2c4..de23a4ba 100644 --- a/build.py +++ b/build.py @@ -203,18 +203,19 @@ def build_cocoa_bridging_interfaces(edition): from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView from inter.prioritize_list import PyPrioritizeList, PrioritizeListView from inter.problem_dialog import PyProblemDialog + from inter.ignore_list_dialog import PyIgnoreListDialog, IgnoreListDialogView from inter.result_table import PyResultTable, ResultTableView from inter.stats_label import PyStatsLabel, StatsLabelView from inter.app import PyDupeGuruBase, DupeGuruView appmod = importlib.import_module('inter.app_{}'.format(edition)) allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware, PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog, - PyResultTable, PyStatsLabel, PyDupeGuruBase, appmod.PyDupeGuru] + PyIgnoreListDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase, appmod.PyDupeGuru] for class_ in allclasses: objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True) allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView, DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView, - ResultTableView, StatsLabelView, DupeGuruView] + IgnoreListDialogView, ResultTableView, StatsLabelView, DupeGuruView] clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses] objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m') build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m']) diff --git a/cocoa/base/AppDelegate.h b/cocoa/base/AppDelegate.h index 7a849eaf..1b63b951 100644 --- a/cocoa/base/AppDelegate.h +++ b/cocoa/base/AppDelegate.h @@ -11,6 +11,7 @@ http://www.hardcoded.net/licenses/bsd_license #import "ResultWindow.h" #import "DetailsPanel.h" #import "DirectoryPanel.h" +#import "IgnoreListDialog.h" #import "HSAboutBox.h" #import "HSRecentFiles.h" @@ -24,6 +25,7 @@ http://www.hardcoded.net/licenses/bsd_license ResultWindowBase *_resultWindow; DirectoryPanel *_directoryPanel; DetailsPanel *_detailsPanel; + IgnoreListDialog *_ignoreListDialog; NSWindowController *_preferencesPanel; HSAboutBox *_aboutBox; HSRecentFiles *_recentResults; @@ -58,6 +60,7 @@ http://www.hardcoded.net/licenses/bsd_license - (IBAction)showDirectoryWindow:(id)sender; - (IBAction)showPreferencesPanel:(id)sender; - (IBAction)showResultWindow:(id)sender; +- (IBAction)showIgnoreList:(id)sender; - (IBAction)startScanning:(id)sender; /* model --> view */ diff --git a/cocoa/base/AppDelegate.m b/cocoa/base/AppDelegate.m index 6bc58ed3..7e11ccfb 100644 --- a/cocoa/base/AppDelegate.m +++ b/cocoa/base/AppDelegate.m @@ -38,6 +38,7 @@ http://www.hardcoded.net/licenses/bsd_license _resultWindow = [self createResultWindow]; _directoryPanel = [self createDirectoryPanel]; _detailsPanel = [self createDetailsPanel]; + _ignoreListDialog = [[IgnoreListDialog alloc] initWithPyRef:[model ignoreListDialog]]; _aboutBox = nil; // Lazily loaded _preferencesPanel = nil; // Lazily loaded [[[self directoryPanel] window] makeKeyAndOrderFront:self]; @@ -149,6 +150,11 @@ http://www.hardcoded.net/licenses/bsd_license [[[self resultWindow] window] makeKeyAndOrderFront:nil]; } +- (IBAction)showIgnoreList:(id)sender +{ + [model showIgnoreList]; +} + - (IBAction)startScanning:(id)sender { [[self resultWindow] startDuplicateScan:sender]; diff --git a/cocoa/base/IgnoreListDialog.h b/cocoa/base/IgnoreListDialog.h new file mode 100644 index 00000000..2fe8c92c --- /dev/null +++ b/cocoa/base/IgnoreListDialog.h @@ -0,0 +1,25 @@ +/* +Copyright 2012 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 "PyIgnoreListDialog.h" +#import "HSTable.h" + +@interface IgnoreListDialog : NSWindowController +{ + IBOutlet NSTableView *ignoreListTableView; + + PyIgnoreListDialog *model; + HSTable *ignoreListTable; +} +- (id)initWithPyRef:(PyObject *)aPyRef; + +- (void)initializeColumns; +- (IBAction)removeSelected:(id)sender; +- (IBAction)clear:(id)sender; +@end \ No newline at end of file diff --git a/cocoa/base/IgnoreListDialog.m b/cocoa/base/IgnoreListDialog.m new file mode 100644 index 00000000..272b9124 --- /dev/null +++ b/cocoa/base/IgnoreListDialog.m @@ -0,0 +1,57 @@ +/* +Copyright 2012 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 "IgnoreListDialog.h" +#import "Utils.h" + +@implementation IgnoreListDialog +- (id)initWithPyRef:(PyObject *)aPyRef +{ + self = [super initWithWindowNibName:@"IgnoreListDialog"]; + [self window]; //So the detailsTable is initialized. + model = [[PyIgnoreListDialog alloc] initWithModel:aPyRef]; + [model bindCallback:createCallback(@"IgnoreListDialogView", self)]; + ignoreListTable = [[HSTable alloc] initWithPyRef:[model ignoreListTable] tableView:ignoreListTableView]; + [self initializeColumns]; + return self; +} + +- (void)dealloc +{ + [ignoreListTable release]; + [model release]; + [super dealloc]; +} + +- (void)initializeColumns +{ + HSColumnDef defs[] = { + {@"path1", 240, 40, 0, NO, nil}, + {@"path2", 240, 40, 0, NO, nil}, + nil + }; + [[ignoreListTable columns] initializeColumns:defs]; + [[ignoreListTable columns] setColumnsAsReadOnly]; +} + +- (IBAction)removeSelected:(id)sender +{ + [model removeSelected]; +} + +- (IBAction)clear:(id)sender +{ + [model clear]; +} + +/* model --> view */ +- (void)show +{ + [self showWindow:self]; +} +@end \ No newline at end of file diff --git a/cocoa/base/ResultWindow.h b/cocoa/base/ResultWindow.h index b9992021..c4a6dc78 100644 --- a/cocoa/base/ResultWindow.h +++ b/cocoa/base/ResultWindow.h @@ -45,7 +45,6 @@ http://www.hardcoded.net/licenses/bsd_license - (void)showProblemDialog; /* Actions */ -- (IBAction)clearIgnoreList:(id)sender; - (IBAction)changeOptions:(id)sender; - (IBAction)copyMarked:(id)sender; - (IBAction)deleteMarked:(id)sender; diff --git a/cocoa/base/ResultWindow.m b/cocoa/base/ResultWindow.m index 2b1a0e42..a3f0ec39 100644 --- a/cocoa/base/ResultWindow.m +++ b/cocoa/base/ResultWindow.m @@ -98,11 +98,6 @@ http://www.hardcoded.net/licenses/bsd_license } /* Actions */ -- (IBAction)clearIgnoreList:(id)sender -{ - [model clearIgnoreList]; -} - - (IBAction)changeOptions:(id)sender { NSInteger seg = [optionsSwitch selectedSegment]; diff --git a/cocoa/base/en.lproj/IgnoreListDialog.strings b/cocoa/base/en.lproj/IgnoreListDialog.strings new file mode 100644 index 00000000..e8d0806e --- /dev/null +++ b/cocoa/base/en.lproj/IgnoreListDialog.strings @@ -0,0 +1,12 @@ + +/* Class = "NSWindow"; title = "Ignore List"; ObjectID = "1"; */ +"1.title" = "Ignore List"; + +/* Class = "NSButtonCell"; title = "Close"; ObjectID = "19"; */ +"19.title" = "Close"; + +/* Class = "NSButtonCell"; title = "Remove Selected"; ObjectID = "21"; */ +"21.title" = "Remove Selected"; + +/* Class = "NSButtonCell"; title = "Clear"; ObjectID = "28"; */ +"28.title" = "Clear"; diff --git a/cocoa/base/en.lproj/IgnoreListDialog.xib b/cocoa/base/en.lproj/IgnoreListDialog.xib new file mode 100644 index 00000000..88d8f839 --- /dev/null +++ b/cocoa/base/en.lproj/IgnoreListDialog.xib @@ -0,0 +1,504 @@ + + + + 1060 + 11D50 + 2177 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2177 + + + NSView + NSTableView + NSScrollView + NSWindowTemplate + NSTableHeaderView + NSButtonCell + NSButton + NSScroller + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + IgnoreListDialog + + + FirstResponder + + + NSApplication + + + 11 + 2 + {{477, 306}, {574, 347}} + 1685585920 + Ignore List + NSWindow + + + + + 256 + + + + 274 + + + + 2304 + + + + 256 + {532, 211} + + + + YES + + + 256 + {532, 17} + + + + + + + + -2147483392 + {{224, 0}, {16, 17}} + + + + + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + 1512046592 + + + 4 + 15 + 0 + NO + 0 + 1 + + + {{1, 17}, {532, 249}} + + + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + + _doScroller: + 0.99052132701421802 + + + + -2147483392 + {{1, 154}, {438, 15}} + + + + 1 + + _doScroller: + 1 + 0.98871331828442433 + + + + 2304 + + + + {{1, 0}, {532, 17}} + + + + + + 4 + + + + {{20, 60}, {534, 267}} + + + + 133682 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 289 + {{464, 12}, {96, 32}} + + + YES + + 67239424 + 134217728 + Close + + LucidaGrande + 13 + 1044 + + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 292 + {{14, 12}, {154, 32}} + + + + YES + + 67239424 + 134217728 + Remove Selected + + + -2038284033 + 129 + + + 200 + 25 + + + + + 292 + {{162, 12}, {154, 32}} + + + + YES + + 67239424 + 134217728 + Clear + + + -2038284033 + 129 + + + 200 + 25 + + + + {574, 347} + + + + + {{0, 0}, {1920, 1058}} + {10000000000000, 10000000000000} + YES + + + + + + + window + + + + 22 + + + + ignoreListTableView + + + + 30 + + + + removeSelected: + + + + 31 + + + + clear: + + + + 32 + + + + performClose: + + + + 25 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + + + + + + + 5 + + + + + + + + + + + 6 + + + + + 7 + + + + + 8 + + + + + + 9 + + + + + 18 + + + + + + + + 19 + + + + + 20 + + + + + + + + 21 + + + + + 27 + + + + + + + + 28 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{477, 306}, {480, 309}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 32 + + + + + IgnoreListDialog + NSWindowController + + id + id + + + + clear: + id + + + removeSelected: + id + + + + ignoreListTableView + NSTableView + + + ignoreListTableView + + ignoreListTableView + NSTableView + + + + IBProjectSource + ./Classes/IgnoreListDialog.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + diff --git a/cocoa/base/en.lproj/MainMenu.strings b/cocoa/base/en.lproj/MainMenu.strings index 48327230..6ae2a321 100644 --- a/cocoa/base/en.lproj/MainMenu.strings +++ b/cocoa/base/en.lproj/MainMenu.strings @@ -92,9 +92,6 @@ /* Class = "NSMenuItem"; title = "Start Duplicate Scan"; ObjectID = "926"; */ "926.title" = "Start Duplicate Scan"; -/* Class = "NSMenuItem"; title = "Clear Ignore List"; ObjectID = "927"; */ -"927.title" = "Clear Ignore List"; - /* Class = "NSMenuItem"; title = "Rename Selected"; ObjectID = "933"; */ "933.title" = "Rename Selected"; @@ -175,3 +172,6 @@ /* Class = "NSMenuItem"; title = "Re-Prioritize Results"; ObjectID = "1276"; */ "1276.title" = "Re-Prioritize Results"; + +/* Class = "NSMenuItem"; title = "Ignore List"; ObjectID = "1283"; */ +"1283.title" = "Ignore List"; diff --git a/cocoa/base/en.lproj/MainMenu.xib b/cocoa/base/en.lproj/MainMenu.xib index 0640310c..86578529 100644 --- a/cocoa/base/en.lproj/MainMenu.xib +++ b/cocoa/base/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 11C74 - 1938 - 1138.23 - 567.00 + 11D50 + 2177 + 1138.32 + 568.00 com.apple.InterfaceBuilder.CocoaPlugin - 1938 + 2177 NSMenu @@ -318,15 +318,6 @@ - - - Clear Ignore List - G - 1048576 - 2147483647 - - - YES @@ -553,6 +544,14 @@ + + + Ignore List + + 2147483647 + + + Details Panel @@ -773,14 +772,6 @@ 1005 - - - clearIgnoreList: - - - - 1243 - copyMarked: @@ -1061,6 +1052,14 @@ 1275 + + + showIgnoreList: + + + + 1285 + checkForUpdates: @@ -1142,6 +1141,7 @@ + @@ -1310,7 +1310,6 @@ - @@ -1375,11 +1374,6 @@ - - 927 - - - 928 @@ -1584,6 +1578,11 @@ + + 1283 + + + @@ -1610,6 +1609,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1649,7 +1649,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1669,7 +1668,7 @@ - 1282 + 1285 @@ -1690,6 +1689,7 @@ id id id + id id id id @@ -1715,6 +1715,10 @@ showDirectoryWindow: id + + showIgnoreList: + id + showPreferencesPanel: id @@ -1731,7 +1735,6 @@ NSMenu NSMenu - PyDupeGuruBase NSMenu @@ -1743,10 +1746,6 @@ columnsMenu NSMenu - - py - PyDupeGuruBase - recentResultsMenu NSMenu @@ -1785,25 +1784,15 @@ - PrioritizeDialog + IgnoreListDialog NSWindowController - id - id - id + id id - - addSelected: - id - - - cancel: - id - - - ok: + + clear: id @@ -1811,28 +1800,20 @@ id - - NSPopUpButton - NSTableView - NSTableView - - - - categoryPopUpView - NSPopUpButton - - - criteriaTableView + + ignoreListTableView + NSTableView + + + ignoreListTableView + + ignoreListTableView NSTableView - - prioritizationTableView - NSTableView - - + IBProjectSource - ./Classes/PrioritizeDialog.h + ./Classes/IgnoreListDialog.h @@ -1870,7 +1851,6 @@ NSWindowController id - id id id id @@ -1905,10 +1885,6 @@ changeOptions: id - - clearIgnoreList: - id - copyMarked: id @@ -2100,8 +2076,8 @@ YES 3 - {9, 8} - {7, 2} + {11, 11} + {10, 3} diff --git a/cocoa/inter/app.py b/cocoa/inter/app.py index 59dbee82..a1a9cfb1 100644 --- a/cocoa/inter/app.py +++ b/cocoa/inter/app.py @@ -51,14 +51,14 @@ class PyDupeGuruBase(PyFairware): def resultTable(self) -> pyref: return self.model.result_table + def ignoreListDialog(self) -> pyref: + return self.model.ignore_list_dialog + #---Directories def addDirectory_(self, directory: str) -> int: return self.model.add_directory(directory) #---Results - def clearIgnoreList(self): - self.model.clear_ignore_list() - def doScan(self): self.model.start_scanning() @@ -129,6 +129,9 @@ class PyDupeGuruBase(PyFairware): def invokeCustomCommand(self): self.model.invoke_custom_command() + def showIgnoreList(self): + self.model.ignore_list_dialog.show() + #---Information def resultsAreModified(self) -> bool: return self.model.results.is_modified diff --git a/cocoa/inter/ignore_list_dialog.py b/cocoa/inter/ignore_list_dialog.py new file mode 100644 index 00000000..3763cae1 --- /dev/null +++ b/cocoa/inter/ignore_list_dialog.py @@ -0,0 +1,20 @@ +from objp.util import pyref +from cocoa.inter import PyGUIObject, GUIObjectView + +class IgnoreListDialogView(GUIObjectView): + def show(self): pass + +class PyIgnoreListDialog(PyGUIObject): + def ignoreListTable(self) -> pyref: + return self.model.ignore_list_table + + def removeSelected(self): + self.model.remove_selected() + + def clear(self): + self.model.clear() + + #--- model --> view + def show(self): + self.callback.show() + diff --git a/cocoa/me/dg_cocoa.py b/cocoa/me/dg_cocoa.py index 373d4c6b..291ed7ee 100644 --- a/cocoa/me/dg_cocoa.py +++ b/cocoa/me/dg_cocoa.py @@ -14,6 +14,7 @@ from inter.directory_outline import PyDirectoryOutline from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_list import PyPrioritizeList from inter.problem_dialog import PyProblemDialog +from inter.ignore_list_dialog import PyIgnoreListDialog from inter.result_table import PyResultTable from inter.stats_label import PyStatsLabel from inter.app_me import PyDupeGuru diff --git a/cocoa/me/dupeguru.xcodeproj/project.pbxproj b/cocoa/me/dupeguru.xcodeproj/project.pbxproj index 0eeb1c5d..57619354 100644 --- a/cocoa/me/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/me/dupeguru.xcodeproj/project.pbxproj @@ -37,6 +37,17 @@ CE073F6309CAE1A3005C1D2F /* help in Resources */ = {isa = PBXBuildFile; fileRef = CE073F5409CAE1A3005C1D2F /* help */; }; CE0A0C001175A1C000DCA3C6 /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */; }; CE0A0C041175A1DE00DCA3C6 /* ProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */; }; + CE11958F1510FF700063C8AF /* PyIgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE11958E1510FF700063C8AF /* PyIgnoreListDialog.m */; }; + CE1195931510FF890063C8AF /* IgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1195921510FF890063C8AF /* IgnoreListDialog.m */; }; + CE1195961510FFB20063C8AF /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE1195941510FFB20063C8AF /* IgnoreListDialog.xib */; }; + CE11959F151100020063C8AF /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05330D12E5D3ED0029EF25 /* DetailsPanel.xib */; }; + CE1195A0151100020063C8AF /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05330F12E5D3ED0029EF25 /* DirectoryPanel.xib */; }; + CE1195A1151100020063C8AF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331112E5D3ED0029EF25 /* MainMenu.xib */; }; + CE1195A2151100020063C8AF /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331312E5D3ED0029EF25 /* ProblemDialog.xib */; }; + CE1195A3151100020063C8AF /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE1195941510FFB20063C8AF /* IgnoreListDialog.xib */; }; + CE1195A4151100020063C8AF /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331512E5D3ED0029EF25 /* ResultWindow.xib */; }; + CE1195A5151100020063C8AF /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05332112E5D4100029EF25 /* Preferences.xib */; }; + CE1195A6151100020063C8AF /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; }; CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; }; CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; }; CE1EAA0A12DF3E81009BA949 /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */; }; @@ -150,6 +161,19 @@ CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = ""; }; CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; + CE11958D1510FF700063C8AF /* PyIgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyIgnoreListDialog.h; sourceTree = ""; }; + CE11958E1510FF700063C8AF /* PyIgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyIgnoreListDialog.m; sourceTree = ""; }; + CE1195911510FF890063C8AF /* IgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IgnoreListDialog.h; path = ../base/IgnoreListDialog.h; sourceTree = ""; }; + CE1195921510FF890063C8AF /* IgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IgnoreListDialog.m; path = ../base/IgnoreListDialog.m; sourceTree = ""; }; + CE1195951510FFB20063C8AF /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE119597151100020063C8AF /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE119598151100020063C8AF /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE119599151100020063C8AF /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE11959A151100020063C8AF /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE11959B151100020063C8AF /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE11959C151100020063C8AF /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE11959D151100020063C8AF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE11959E151100020063C8AF /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/IgnoreListDialog.xib; sourceTree = ""; }; CE1425880AFB718500BD5167 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = ""; }; CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; @@ -468,6 +492,7 @@ CE05330F12E5D3ED0029EF25 /* DirectoryPanel.xib */, CE05331112E5D3ED0029EF25 /* MainMenu.xib */, CE05331312E5D3ED0029EF25 /* ProblemDialog.xib */, + CE1195941510FFB20063C8AF /* IgnoreListDialog.xib */, CE05331512E5D3ED0029EF25 /* ResultWindow.xib */, CE05332112E5D4100029EF25 /* Preferences.xib */, CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */, @@ -533,6 +558,8 @@ CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */, CE515E1B0FC6C19300EC695D /* ResultWindow.h */, CE515E1C0FC6C19300EC695D /* ResultWindow.m */, + CE1195911510FF890063C8AF /* IgnoreListDialog.h */, + CE1195921510FF890063C8AF /* IgnoreListDialog.m */, CEDF07A1112493B200EE5BC0 /* StatsLabel.h */, CEDF07A2112493B200EE5BC0 /* StatsLabel.m */, CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */, @@ -571,6 +598,8 @@ CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */, CE9705DC14C46E7D007A28F6 /* PyProblemDialog.h */, CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */, + CE11958D1510FF700063C8AF /* PyIgnoreListDialog.h */, + CE11958E1510FF700063C8AF /* PyIgnoreListDialog.m */, CE9705DE14C46E7D007A28F6 /* PyResultTable.h */, CE9705DF14C46E7D007A28F6 /* PyResultTable.m */, CE9705E014C46E7D007A28F6 /* PySelectableList.h */, @@ -675,6 +704,15 @@ CEA14F431461ED63007F01A5 /* locale in Resources */, CE9705FF14C46F60007A28F6 /* py in Resources */, CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */, + CE1195961510FFB20063C8AF /* IgnoreListDialog.xib in Resources */, + CE11959F151100020063C8AF /* DetailsPanel.xib in Resources */, + CE1195A0151100020063C8AF /* DirectoryPanel.xib in Resources */, + CE1195A1151100020063C8AF /* MainMenu.xib in Resources */, + CE1195A2151100020063C8AF /* ProblemDialog.xib in Resources */, + CE1195A3151100020063C8AF /* IgnoreListDialog.xib in Resources */, + CE1195A4151100020063C8AF /* ResultWindow.xib in Resources */, + CE1195A5151100020063C8AF /* Preferences.xib in Resources */, + CE1195A6151100020063C8AF /* PrioritizeDialog.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -734,6 +772,8 @@ CE9705F514C46E7D007A28F6 /* PyStatsLabel.m in Sources */, CE9705F614C46E7D007A28F6 /* PyTable.m in Sources */, CE97060314C471F2007A28F6 /* main.m in Sources */, + CE11958F1510FF700063C8AF /* PyIgnoreListDialog.m in Sources */, + CE1195931510FF890063C8AF /* IgnoreListDialog.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -852,6 +892,22 @@ name = Localizable.strings; sourceTree = ""; }; + CE1195941510FFB20063C8AF /* IgnoreListDialog.xib */ = { + isa = PBXVariantGroup; + children = ( + CE1195951510FFB20063C8AF /* en */, + CE119597151100020063C8AF /* cs */, + CE119598151100020063C8AF /* de */, + CE119599151100020063C8AF /* fr */, + CE11959A151100020063C8AF /* hy */, + CE11959B151100020063C8AF /* it */, + CE11959C151100020063C8AF /* ru */, + CE11959D151100020063C8AF /* uk */, + CE11959E151100020063C8AF /* zh_CN */, + ); + name = IgnoreListDialog.xib; + sourceTree = ""; + }; CE74A12512537F2E008A8DF0 /* FairwareReminder.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/cocoa/pe/dg_cocoa.py b/cocoa/pe/dg_cocoa.py index ccad635d..1f82bdc8 100644 --- a/cocoa/pe/dg_cocoa.py +++ b/cocoa/pe/dg_cocoa.py @@ -14,6 +14,7 @@ from inter.directory_outline import PyDirectoryOutline from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_list import PyPrioritizeList from inter.problem_dialog import PyProblemDialog +from inter.ignore_list_dialog import PyIgnoreListDialog from inter.result_table import PyResultTable from inter.stats_label import PyStatsLabel from inter.app_pe import PyDupeGuru diff --git a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj index 2bda124d..5405415e 100644 --- a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj @@ -8,17 +8,6 @@ /* Begin PBXBuildFile section */ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; - CE03DD6C14FBD31300E998AC /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; - CE03DD6D14FBD31300E998AC /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339712E5DA350029EF25 /* ProblemDialog.xib */; }; - CE03DD6E14FBD31300E998AC /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339912E5DA350029EF25 /* ResultWindow.xib */; }; - CE03DD6F14FBD31300E998AC /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */; }; - CE03DD7014FBD31300E998AC /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A512E5DA4D0029EF25 /* Preferences.xib */; }; - CE03DD7414FBD33600E998AC /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A512E5DA4D0029EF25 /* Preferences.xib */; }; - CE03DD7514FBD33600E998AC /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */; }; - CE03DD7714FBD34600E998AC /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */; }; - CE03DD7B14FBD36600E998AC /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC113D867AD0081E295 /* about.xib */; }; - CE03DD7C14FBD36600E998AC /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC313D867AD0081E295 /* ErrorReportWindow.xib */; }; - CE03DD7D14FBD36600E998AC /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE1EB5FF12537FB90034AABB /* FairwareReminder.xib */; }; CE05339B12E5DA350029EF25 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; }; CE05339C12E5DA350029EF25 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; CE05339D12E5DA350029EF25 /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339712E5DA350029EF25 /* ProblemDialog.xib */; }; @@ -61,6 +50,17 @@ CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019914C477B100E2A349 /* PySelectableList.m */; }; CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019B14C477B100E2A349 /* PyStatsLabel.m */; }; CE7501AE14C477B100E2A349 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019D14C477B100E2A349 /* PyTable.m */; }; + CE7857971511019400174D51 /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7857951511019400174D51 /* IgnoreListDialog.xib */; }; + CE78579B151101B000174D51 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; }; + CE78579C151101B000174D51 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; + CE78579D151101B000174D51 /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339712E5DA350029EF25 /* ProblemDialog.xib */; }; + CE7857A1151101C900174D51 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339912E5DA350029EF25 /* ResultWindow.xib */; }; + CE7857A2151101C900174D51 /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */; }; + CE7857A3151101C900174D51 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A512E5DA4D0029EF25 /* Preferences.xib */; }; + CE7857A6151101DD00174D51 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339912E5DA350029EF25 /* ResultWindow.xib */; }; + CE7857A7151101DD00174D51 /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */; }; + CE7857AA1511021200174D51 /* PyIgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7857A91511021200174D51 /* PyIgnoreListDialog.m */; }; + CE7857AD1511022A00174D51 /* IgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7857AC1511022A00174D51 /* IgnoreListDialog.m */; }; CE7AC9191119911200D02F6C /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7AC9161119911200D02F6C /* progress.xib */; }; CE7D249D1423B0BD002E2297 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249A1423B0BD002E2297 /* HSPopUpList.m */; }; CE7D249E1423B0BD002E2297 /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249C1423B0BD002E2297 /* HSSelectableList.m */; }; @@ -215,6 +215,19 @@ CE75019B14C477B100E2A349 /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = ""; }; CE75019C14C477B100E2A349 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = ""; }; CE75019D14C477B100E2A349 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = ""; }; + CE7857961511019400174D51 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE785798151101B000174D51 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE785799151101B000174D51 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE78579A151101B000174D51 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE78579E151101C900174D51 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE78579F151101C900174D51 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE7857A0151101C900174D51 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE7857A4151101DD00174D51 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE7857A5151101DD00174D51 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE7857A81511021200174D51 /* PyIgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyIgnoreListDialog.h; sourceTree = ""; }; + CE7857A91511021200174D51 /* PyIgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyIgnoreListDialog.m; sourceTree = ""; }; + CE7857AB1511022A00174D51 /* IgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IgnoreListDialog.h; path = ../base/IgnoreListDialog.h; sourceTree = ""; }; + CE7857AC1511022A00174D51 /* IgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IgnoreListDialog.m; path = ../base/IgnoreListDialog.m; sourceTree = ""; }; CE78759D13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; CE78759F13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; CE7875A013CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ProblemDialog.xib; sourceTree = SOURCE_ROOT; }; @@ -441,6 +454,7 @@ CE05339312E5DA350029EF25 /* DirectoryPanel.xib */, CE05339512E5DA350029EF25 /* MainMenu.xib */, CE05339712E5DA350029EF25 /* ProblemDialog.xib */, + CE7857951511019400174D51 /* IgnoreListDialog.xib */, CE05339912E5DA350029EF25 /* ResultWindow.xib */, CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */, CE0533A512E5DA4D0029EF25 /* Preferences.xib */, @@ -475,6 +489,8 @@ CE75019214C477B100E2A349 /* PyPrioritizeList.h */, CE75019314C477B100E2A349 /* PyPrioritizeList.m */, CE75019414C477B100E2A349 /* PyProblemDialog.h */, + CE7857A81511021200174D51 /* PyIgnoreListDialog.h */, + CE7857A91511021200174D51 /* PyIgnoreListDialog.m */, CE75019514C477B100E2A349 /* PyProblemDialog.m */, CE75019614C477B100E2A349 /* PyResultTable.h */, CE75019714C477B100E2A349 /* PyResultTable.m */, @@ -549,6 +565,8 @@ CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */, CE0C2ABA1177014200BC749F /* ProblemDialog.h */, CE0C2ABB1177014200BC749F /* ProblemDialog.m */, + CE7857AB1511022A00174D51 /* IgnoreListDialog.h */, + CE7857AC1511022A00174D51 /* IgnoreListDialog.m */, CE80DB880FC1951C0086DCA6 /* ResultWindow.h */, CE80DB890FC1951C0086DCA6 /* ResultWindow.m */, CE95865C112C516400F95FD2 /* StatsLabel.h */, @@ -634,7 +652,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0430; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "dupeguru" */; compatibilityVersion = "Xcode 3.2"; @@ -688,17 +706,15 @@ CE63D9D31461EDC000A8CADD /* locale in Resources */, CE75017514C4771800E2A349 /* py in Resources */, CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */, - CE03DD6C14FBD31300E998AC /* MainMenu.xib in Resources */, - CE03DD6D14FBD31300E998AC /* ProblemDialog.xib in Resources */, - CE03DD6E14FBD31300E998AC /* ResultWindow.xib in Resources */, - CE03DD6F14FBD31300E998AC /* DetailsPanel.xib in Resources */, - CE03DD7014FBD31300E998AC /* Preferences.xib in Resources */, - CE03DD7414FBD33600E998AC /* Preferences.xib in Resources */, - CE03DD7514FBD33600E998AC /* PrioritizeDialog.xib in Resources */, - CE03DD7714FBD34600E998AC /* dsa_pub.pem in Resources */, - CE03DD7B14FBD36600E998AC /* about.xib in Resources */, - CE03DD7C14FBD36600E998AC /* ErrorReportWindow.xib in Resources */, - CE03DD7D14FBD36600E998AC /* FairwareReminder.xib in Resources */, + CE7857971511019400174D51 /* IgnoreListDialog.xib in Resources */, + CE78579B151101B000174D51 /* DirectoryPanel.xib in Resources */, + CE78579C151101B000174D51 /* MainMenu.xib in Resources */, + CE78579D151101B000174D51 /* ProblemDialog.xib in Resources */, + CE7857A1151101C900174D51 /* ResultWindow.xib in Resources */, + CE7857A2151101C900174D51 /* DetailsPanel.xib in Resources */, + CE7857A3151101C900174D51 /* Preferences.xib in Resources */, + CE7857A6151101DD00174D51 /* ResultWindow.xib in Resources */, + CE7857A7151101DD00174D51 /* DetailsPanel.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -761,6 +777,8 @@ CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */, CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */, CE7501AE14C477B100E2A349 /* PyTable.m in Sources */, + CE7857AA1511021200174D51 /* PyIgnoreListDialog.m in Sources */, + CE7857AD1511022A00174D51 /* IgnoreListDialog.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -896,6 +914,22 @@ path = ../../cocoalib/xib; sourceTree = SOURCE_ROOT; }; + CE7857951511019400174D51 /* IgnoreListDialog.xib */ = { + isa = PBXVariantGroup; + children = ( + CE7857961511019400174D51 /* en */, + CE785798151101B000174D51 /* cs */, + CE785799151101B000174D51 /* de */, + CE78579A151101B000174D51 /* fr */, + CE78579E151101C900174D51 /* hy */, + CE78579F151101C900174D51 /* it */, + CE7857A0151101C900174D51 /* ru */, + CE7857A4151101DD00174D51 /* uk */, + CE7857A5151101DD00174D51 /* zh_CN */, + ); + name = IgnoreListDialog.xib; + sourceTree = ""; + }; CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/cocoa/se/dg_cocoa.py b/cocoa/se/dg_cocoa.py index 06dd790e..399d3338 100644 --- a/cocoa/se/dg_cocoa.py +++ b/cocoa/se/dg_cocoa.py @@ -14,6 +14,7 @@ from inter.directory_outline import PyDirectoryOutline from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_list import PyPrioritizeList from inter.problem_dialog import PyProblemDialog +from inter.ignore_list_dialog import PyIgnoreListDialog from inter.result_table import PyResultTable from inter.stats_label import PyStatsLabel from inter.app_se import PyDupeGuru \ No newline at end of file diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 054c461f..858463be 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -9,6 +9,10 @@ /* Begin PBXBuildFile section */ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CE073F6309CAE1A3005C1D2F /* help in Resources */ = {isa = PBXBuildFile; fileRef = CE073F5409CAE1A3005C1D2F /* help */; }; + CE148035151100EC00CD5DAD /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE148038151100FB00CD5DAD /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE14803A1511010500CD5DAD /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE14803C1511011000CD5DAD /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; CE18004D14BDD837001B6329 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; }; CE18004F14BDD854001B6329 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; }; CE18005114BDD87B001B6329 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE18005014BDD87B001B6329 /* py */; }; @@ -20,9 +24,16 @@ CE27D3C412CCA43800859E67 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE27D3C312CCA43800859E67 /* HSAboutBox.m */; }; CE31819D13D85D9B00B6D649 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819913D85D9B00B6D649 /* about.xib */; }; CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819B13D85D9B00B6D649 /* ErrorReportWindow.xib */; }; + CE3491E3151100A40030B64C /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE3491E6151100AD0030B64C /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE3491E9151100BB0030B64C /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */; }; + CE3491EA151100BB0030B64C /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81135612E5CE6D00A36C80 /* Preferences.xib */; }; CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */; }; + CE412C0D1510ECAA00484122 /* PyIgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE412C0C1510ECAA00484122 /* PyIgnoreListDialog.m */; }; + CE412C111510ECCA00484122 /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE412C0F1510ECCA00484122 /* IgnoreListDialog.xib */; }; + CE412C141510ED2E00484122 /* IgnoreListDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE412C131510ED2E00484122 /* IgnoreListDialog.m */; }; CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; CE4746D314C09C12001A66DE /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4746D214C09C12001A66DE /* PyProblemDialog.m */; }; @@ -129,6 +140,10 @@ CE112F5F145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = ""; }; CE112F60145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = ""; }; CE112F61145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/FairwareReminder.xib; sourceTree = ""; }; + CE148034151100EC00CD5DAD /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE148037151100FB00CD5DAD /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE1480391511010500CD5DAD /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE14803B1511011000CD5DAD /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/IgnoreListDialog.xib; sourceTree = ""; }; CE18004C14BDD837001B6329 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = ""; }; CE18005014BDD87B001B6329 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = ""; }; CE19BC6111199231007CCEB0 /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = ""; }; @@ -149,12 +164,21 @@ CE3181A313D85DB700B6D649 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/about.xib; sourceTree = ""; }; CE3181A413D85DB700B6D649 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/ErrorReportWindow.xib; sourceTree = ""; }; CE3181A513D85DB700B6D649 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/FairwareReminder.xib; sourceTree = ""; }; + CE3491E2151100A40030B64C /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE3491E5151100AD0030B64C /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE3491E7151100BB0030B64C /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE3491E8151100BB0030B64C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/IgnoreListDialog.xib; sourceTree = ""; }; CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE3A3B4714BF19B8007898AB /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = ""; }; CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = ""; }; + CE412C0B1510ECAA00484122 /* PyIgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyIgnoreListDialog.h; sourceTree = ""; }; + CE412C0C1510ECAA00484122 /* PyIgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyIgnoreListDialog.m; sourceTree = ""; }; + CE412C101510ECCA00484122 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/IgnoreListDialog.xib; sourceTree = ""; }; + CE412C121510ED2E00484122 /* IgnoreListDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IgnoreListDialog.h; path = ../base/IgnoreListDialog.h; sourceTree = ""; }; + CE412C131510ED2E00484122 /* IgnoreListDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IgnoreListDialog.m; path = ../base/IgnoreListDialog.m; sourceTree = ""; }; CE45579A0AE3BC2B005A9546 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = ""; }; CE4746D114C09C12001A66DE /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = ""; }; CE4746D214C09C12001A66DE /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = ""; }; @@ -443,6 +467,8 @@ CE548CC514BF903D00D180CB /* PyPrioritizeList.m */, CE4746D114C09C12001A66DE /* PyProblemDialog.h */, CE4746D214C09C12001A66DE /* PyProblemDialog.m */, + CE412C0B1510ECAA00484122 /* PyIgnoreListDialog.h */, + CE412C0C1510ECAA00484122 /* PyIgnoreListDialog.m */, CE9FC23114C0866F005C31FD /* PyResultTable.h */, CE9FC23214C0866F005C31FD /* PyResultTable.m */, CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */, @@ -503,6 +529,7 @@ CE81134412E5CE4D00A36C80 /* DirectoryPanel.xib */, CE81134612E5CE4D00A36C80 /* MainMenu.xib */, CE81134812E5CE4D00A36C80 /* ProblemDialog.xib */, + CE412C0F1510ECCA00484122 /* IgnoreListDialog.xib */, CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */, CE81135612E5CE6D00A36C80 /* Preferences.xib */, CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */, @@ -568,6 +595,8 @@ CEFC7FB80FC951A700CD5728 /* ResultWindow.m */, CE647E541173024A006D28BA /* ProblemDialog.h */, CE647E551173024A006D28BA /* ProblemDialog.m */, + CE412C121510ED2E00484122 /* IgnoreListDialog.h */, + CE412C131510ED2E00484122 /* IgnoreListDialog.m */, CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */, CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */, CE89240614239CC30024CE4E /* PrioritizeList.h */, @@ -660,6 +689,15 @@ CEA175CA1461E8E600776591 /* locale in Resources */, CE18005114BDD87B001B6329 /* py in Resources */, CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */, + CE412C111510ECCA00484122 /* IgnoreListDialog.xib in Resources */, + CE3491E3151100A40030B64C /* ResultWindow.xib in Resources */, + CE3491E6151100AD0030B64C /* ResultWindow.xib in Resources */, + CE3491E9151100BB0030B64C /* ResultWindow.xib in Resources */, + CE3491EA151100BB0030B64C /* Preferences.xib in Resources */, + CE148035151100EC00CD5DAD /* ResultWindow.xib in Resources */, + CE148038151100FB00CD5DAD /* ResultWindow.xib in Resources */, + CE14803A1511010500CD5DAD /* ResultWindow.xib in Resources */, + CE14803C1511011000CD5DAD /* ResultWindow.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -718,6 +756,8 @@ CEEF2A4014C0B9050082545A /* HSSelectableList.m in Sources */, CEEF2A4114C0B9050082545A /* HSTable.m in Sources */, CEB2AF5614C49AC800F907A9 /* main.m in Sources */, + CE412C0D1510ECAA00484122 /* PyIgnoreListDialog.m in Sources */, + CE412C141510ED2E00484122 /* IgnoreListDialog.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -756,6 +796,22 @@ name = ErrorReportWindow.xib; sourceTree = ""; }; + CE412C0F1510ECCA00484122 /* IgnoreListDialog.xib */ = { + isa = PBXVariantGroup; + children = ( + CE412C101510ECCA00484122 /* en */, + CE3491E2151100A40030B64C /* cs */, + CE3491E5151100AD0030B64C /* de */, + CE3491E7151100BB0030B64C /* fr */, + CE3491E8151100BB0030B64C /* hy */, + CE148034151100EC00CD5DAD /* it */, + CE148037151100FB00CD5DAD /* ru */, + CE1480391511010500CD5DAD /* uk */, + CE14803B1511011000CD5DAD /* zh_CN */, + ); + name = IgnoreListDialog.xib; + sourceTree = ""; + }; CE79638412536C94008D405B /* FairwareReminder.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/core/app.py b/core/app.py index 7c1dbcbb..30507b4c 100644 --- a/core/app.py +++ b/core/app.py @@ -26,6 +26,7 @@ from hscommon.trans import tr from . import directories, results, scanner, export, fs from .gui.details_panel import DetailsPanel from .gui.directory_tree import DirectoryTree +from .gui.ignore_list_dialog import IgnoreListDialog from .gui.problem_dialog import ProblemDialog from .gui.stats_label import StatsLabel @@ -114,12 +115,12 @@ class DupeGuru(RegistrableApplication, Broadcaster): self.details_panel = DetailsPanel(self) self.directory_tree = DirectoryTree(self) self.problem_dialog = ProblemDialog(self) + self.ignore_list_dialog = IgnoreListDialog(self) self.stats_label = StatsLabel(self) self.result_table = self._create_result_table() children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel] for child in children: child.connect() - # subclasses must create and connect self.result_table #--- Virtual def _get_display_info(self, dupe, group, delta): @@ -257,6 +258,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): if other is not dupe: self.scanner.ignore_list.Ignore(str(other.path), str(dupe.path)) self.remove_duplicates(dupes) + self.ignore_list_dialog.refresh() def apply_filter(self, filter): self.results.apply_filter(None) @@ -271,16 +273,6 @@ class DupeGuru(RegistrableApplication, Broadcaster): while delete_if_empty(path, ['.DS_Store']): path = path[:-1] - def clear_ignore_list(self): - if not self.scanner.ignore_list: - msg = tr("The ignore list is already empty. Nothing to clear.") - self.view.show_message(msg) - return - msg = tr("Do you really want to remove all %d items from the ignore list?") % len(self.scanner.ignore_list) - if self.view.ask_yes_no(msg): - self.scanner.ignore_list.Clear() - self.view.show_message(tr("Ignore list cleared.")) - def copy_or_move(self, dupe, copy: bool, destination: str, dest_type: DestType): source_path = dupe.path location_path = first(p for p in self.directories if dupe.path in p) @@ -398,6 +390,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): self.notify('directories_changed') p = op.join(self.appdata, 'ignore_list.xml') self.scanner.ignore_list.load_from_xml(p) + self.ignore_list_dialog.refresh() def load_from(self, filename): def do(j): @@ -439,6 +432,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): def purge_ignore_list(self): self.scanner.ignore_list.Filter(lambda f,s:op.exists(f) and op.exists(s)) + self.ignore_list_dialog.refresh() def remove_directories(self, indexes): try: diff --git a/core/gui/ignore_list_dialog.py b/core/gui/ignore_list_dialog.py new file mode 100644 index 00000000..d94ad143 --- /dev/null +++ b/core/gui/ignore_list_dialog.py @@ -0,0 +1,39 @@ +# Created On: 2012/03/13 +# Copyright 2012 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 + +from hscommon.trans import tr +from .ignore_list_table import IgnoreListTable + +class IgnoreListDialog: + #--- View interface + # show() + # + + def __init__(self, app): + self.app = app + self.ignore_list = self.app.scanner.ignore_list + self.ignore_list_table = IgnoreListTable(self) + + def clear(self): + if not self.ignore_list: + return + msg = tr("Do you really want to remove all %d items from the ignore list?") % len(self.ignore_list) + if self.app.view.ask_yes_no(msg): + self.ignore_list.Clear() + self.refresh() + + def refresh(self): + self.ignore_list_table.refresh() + + def remove_selected(self): + for row in self.ignore_list_table.selected_rows: + self.ignore_list.remove(row.path1_original, row.path2_original) + self.refresh() + + def show(self): + self.view.show() + diff --git a/core/gui/ignore_list_table.py b/core/gui/ignore_list_table.py new file mode 100644 index 00000000..acdf7247 --- /dev/null +++ b/core/gui/ignore_list_table.py @@ -0,0 +1,41 @@ +# Created By: Virgil Dupras +# Created On: 2012-03-13 +# Copyright 2012 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 + +from hscommon.gui.table import GUITable, Row +from hscommon.gui.column import Column, Columns +from hscommon.trans import trget + +coltr = trget('columns') + +class IgnoreListTable(GUITable): + COLUMNS = [ + # the str concat below saves us needless localization. + Column('path1', coltr("File Path") + " 1"), + Column('path2', coltr("File Path") + " 2"), + ] + + def __init__(self, ignore_list_dialog): + GUITable.__init__(self) + self.columns = Columns(self) + self.view = None + self.dialog = ignore_list_dialog + + #--- Override + def _fill(self): + for path1, path2 in self.dialog.ignore_list: + self.append(IgnoreListRow(self, path1, path2)) + + +class IgnoreListRow(Row): + def __init__(self, table, path1, path2): + Row.__init__(self, table) + self.path1_original = path1 + self.path2_original = path2 + self.path1 = str(path1) + self.path2 = str(path2) + diff --git a/core/ignore.py b/core/ignore.py index da8b2314..de7b0826 100644 --- a/core/ignore.py +++ b/core/ignore.py @@ -71,6 +71,25 @@ class IgnoreList: self._ignored[first] = matches self._count += 1 + def remove(self, first, second): + def inner(first, second): + try: + matches = self._ignored[first] + if second in matches: + matches.discard(second) + if not matches: + del self._ignored[first] + self._count -= 1 + return True + else: + return False + except KeyError: + return False + + if not inner(first, second): + if not inner(second, first): + raise ValueError() + def load_from_xml(self, infile): """Loads the ignore list from a XML created with save_to_xml. diff --git a/core/tests/base.py b/core/tests/base.py index e5f04416..0ad7d5dd 100644 --- a/core/tests/base.py +++ b/core/tests/base.py @@ -152,6 +152,8 @@ class TestApp(TestAppBase): link_gui(self.pdialog.category_list) link_gui(self.pdialog.criteria_list) link_gui(self.pdialog.prioritization_list) + link_gui(self.app.ignore_list_dialog) + link_gui(self.app.ignore_list_dialog.ignore_list_table) #--- Helpers def select_pri_criterion(self, name): diff --git a/core/tests/ignore_test.py b/core/tests/ignore_test.py index 636ceb86..dc4e6fb2 100644 --- a/core/tests/ignore_test.py +++ b/core/tests/ignore_test.py @@ -9,6 +9,7 @@ import io from xml.etree import ElementTree as ET +from pytest import raises from hscommon.testutil import eq_ from ..ignore import * @@ -147,3 +148,18 @@ def test_nonzero(): assert not il il.Ignore('foo','bar') assert il + +def test_remove(): + il = IgnoreList() + il.Ignore('foo', 'bar') + il.Ignore('foo', 'baz') + il.remove('bar', 'foo') + eq_(len(il), 1) + assert not il.AreIgnored('foo', 'bar') + +def test_remove_non_existant(): + il = IgnoreList() + il.Ignore('foo', 'bar') + il.Ignore('foo', 'baz') + with raises(ValueError): + il.remove('foo', 'bleh') diff --git a/locale/columns.pot b/locale/columns.pot index 4318148c..0d3eb316 100644 --- a/locale/columns.pot +++ b/locale/columns.pot @@ -3,11 +3,12 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=utf-8\n" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "" diff --git a/locale/core.pot b/locale/core.pot index 717b0a07..81975837 100644 --- a/locale/core.pot +++ b/locale/core.pot @@ -3,15 +3,15 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -39,55 +39,43 @@ msgstr "" msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" msgstr "" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:280 -msgid "Do you really want to remove all %d items from the ignore list?" -msgstr "" - -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:336 +#: core/app.py:327 msgid "You are about to send %d files to Trash (and hardlink them afterwards). Continue?" msgstr "" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "" -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "" -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "" @@ -107,6 +95,10 @@ msgstr "" msgid "Grouped %d/%d matches" msgstr "" +#: core/gui/ignore_list_dialog.py:24 +msgid "Do you really want to remove all %d items from the ignore list?" +msgstr "" + #: core/prioritize.py:68 msgid "None" msgstr "" diff --git a/locale/cs/LC_MESSAGES/columns.po b/locale/cs/LC_MESSAGES/columns.po index cd6fae99..1c2bd5ca 100644 --- a/locale/cs/LC_MESSAGES/columns.po +++ b/locale/cs/LC_MESSAGES/columns.po @@ -100,10 +100,11 @@ msgstr "Velikost (KB)" msgid "Dimensions" msgstr "Rozměry" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Cesta k souboru" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Chybové hlášení" diff --git a/locale/cs/LC_MESSAGES/core.po b/locale/cs/LC_MESSAGES/core.po index 4f2f981a..635fe247 100644 --- a/locale/cs/LC_MESSAGES/core.po +++ b/locale/cs/LC_MESSAGES/core.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -12,15 +12,15 @@ msgid "" "mode." msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Shromažďuji prohlížené soubory" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d vyřazeno)" @@ -112,11 +112,11 @@ msgstr "Ověřeno %d/%d shod" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -144,40 +144,32 @@ msgstr "" "Všech %d vybraných shod bude v následujících hledáních ignorováno. " "Pokračovat?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Opravdu chcete odstranit všech %d položek ze seznamu výjimek?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "" - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" @@ -185,6 +177,6 @@ msgstr "" "Chystáte se vyhodit %d souborů do koše (a následně na ně vytvořit " "hardlinky). Pokračovat?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "Chystáte se vyhodit %d souborů do koše. Pokračovat?" diff --git a/locale/cs/LC_MESSAGES/ui.po b/locale/cs/LC_MESSAGES/ui.po index 32e2bc81..0e41eb4f 100644 --- a/locale/cs/LC_MESSAGES/ui.po +++ b/locale/cs/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Vyhledávám duplicity" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Nahrávám" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Přesouvám" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Kopíruji" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Nápověda dupeGuru" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "O aplikaci" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Okno s výsledky" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Soubor" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Nápověda" @@ -105,50 +105,50 @@ msgstr "Nápověda" msgid "Load Recent Results" msgstr "Nahrát nedávné výsledky" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Vyberte složky, které chcete prohledat a stiskněte \"Prohledat\"." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Nahrát výsledky" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Prohledat" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Máte neuložené výsledky, opravdu si přejete skončit?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Vyberte složku, kterou chcete přidat do prohledávacího seznamu" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Vyberte soubor s výsledky, který chcete nahrát" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Máte neuložené výsledky, opravdu si přejete pokračovat?" @@ -255,18 +255,19 @@ msgstr "Problémy!" msgid "Reveal Selected" msgstr "Ukázat vybrané ve správci souborů" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Zavřít" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Detaily" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Akce" @@ -352,41 +353,37 @@ msgstr "Invertovat označení" msgid "Mark Selected" msgstr "Označit vybrané" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Vyčistit seznam výjimek" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Uložit výsledky..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Spustit vlastní příkaz" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Sloupce" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Výchozí nastavení" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Vyberte soubor pro uložení výsledků" @@ -693,7 +690,7 @@ msgstr "Akce" msgid "Directories" msgstr "Adresáře" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Jen duplicity" @@ -846,7 +843,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -855,3 +852,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/de/LC_MESSAGES/columns.po b/locale/de/LC_MESSAGES/columns.po index 6913802e..d6da9fb9 100644 --- a/locale/de/LC_MESSAGES/columns.po +++ b/locale/de/LC_MESSAGES/columns.po @@ -100,10 +100,11 @@ msgstr "Größe (KB)" msgid "Dimensions" msgstr "Dimensionen" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Dateipfad" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Fehlermeldung" diff --git a/locale/de/LC_MESSAGES/core.po b/locale/de/LC_MESSAGES/core.po index c2ea9428..f0cd2da3 100644 --- a/locale/de/LC_MESSAGES/core.po +++ b/locale/de/LC_MESSAGES/core.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -12,15 +12,15 @@ msgid "" "mode." msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Sammle Dateien zum Scannen" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Der ausgewählte Ordner enthält keine scannbare Dateien." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d verworfen)" @@ -112,11 +112,11 @@ msgstr "%d/%d verifizierte Paare" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -142,41 +142,33 @@ msgid "" "Continue?" msgstr "%d Dateien werden in zukünftigen Scans ignoriert werden. Fortfahren?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Möchten Sie wirklich alle %d Einträge aus der Ignorier-Liste löschen?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "Ignorier-Liste geleert." - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Sie haben keinen eigenen Befehl erstellt. Bitte in den Einstellungen " "konfigurieren." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "kopieren" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "verschieben" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "Wählen sie einen Ordner zum {} der ausgewählten Dateien" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" @@ -184,6 +176,6 @@ msgstr "" "%d Dateien werden gelöscht und mit physikalischen Verknüpfungen ersetzt. " "Fortfahren?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "%d Dateien werden in den Mülleimer zu verschoben. Fortfahren?" diff --git a/locale/de/LC_MESSAGES/ui.po b/locale/de/LC_MESSAGES/ui.po index 18b19d3e..bb91427b 100644 --- a/locale/de/LC_MESSAGES/ui.po +++ b/locale/de/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Suche nach Duplikaten" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Laden" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Verschieben" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Kopieren" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "Sende Dateien in den Mülleimer" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "Beenden" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Einstellungen" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru Hilfe" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Über dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "Registriere dupeGuru" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "Auf Updates überprüfen" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "Debug Log öffnen" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Ergebnisfenster" msgid "Add Folder..." msgstr "Ordner hinzufügen..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Ablage" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "Ansicht" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Hilfe" @@ -105,50 +105,50 @@ msgstr "Hilfe" msgid "Load Recent Results" msgstr "Lade letzte Ergebnisse" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Zu scannende Ordner auswählen und \"Scan\" drücken." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Lade Ergebnisse" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Scan" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "Ungespeicherte Ergebnisse" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Sie haben ungespeicherte Ergebnisse. Wollen Sie wirklich beenden?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Wählen Sie einen Ordner aus, um ihn der Scanliste hinzuzufügen." -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Wählen Sie eine Ergebnisliste zum Laden aus." -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "Alle Dateien (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru Ergebnisse (*.dupeguru)" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "Starte einen neuen Scan" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Sie haben ungespeicherte Ergebnisse. Möchten Sie wirklich fortfahren?" @@ -264,18 +264,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Zeige Markierte" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Schließen" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Details" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Aktionen" @@ -361,41 +362,37 @@ msgstr "Markierung invertieren" msgid "Mark Selected" msgstr "Ausgewählte markieren" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Ignorier-Liste leeren" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "Exportiere als HTML" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Speichere Ergebnisse..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Eigenen Befehl ausführen" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "Auswählen" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Spalten" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Voreinstellungen" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} (Ergebnisse)" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Datei zum Speichern der Ergebnisliste auswählen." @@ -693,7 +690,7 @@ msgstr "Action" msgid "Directories" msgstr "Directories" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Dupes Only" @@ -846,7 +843,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -855,3 +852,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/fr/LC_MESSAGES/columns.po b/locale/fr/LC_MESSAGES/columns.po index 9de20beb..75a168ff 100644 --- a/locale/fr/LC_MESSAGES/columns.po +++ b/locale/fr/LC_MESSAGES/columns.po @@ -100,10 +100,11 @@ msgstr "Taille (KB)" msgid "Dimensions" msgstr "Dimensions" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Chemin du fichier" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Message d'erreur" diff --git a/locale/fr/LC_MESSAGES/core.po b/locale/fr/LC_MESSAGES/core.po index 6125ffa3..d7c5e086 100644 --- a/locale/fr/LC_MESSAGES/core.po +++ b/locale/fr/LC_MESSAGES/core.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -12,15 +12,15 @@ msgid "" "mode." msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Collecte des fichiers à scanner" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d hors-groupe)" @@ -112,11 +112,11 @@ msgstr "Vérifié %d/%d paires" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "Aucun doublon marqué. Rien à faire." -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "Aucun doublon sélectionné. Rien à faire." @@ -143,47 +143,40 @@ msgid "" "Continue?" msgstr "%d fichiers seront ignorés des prochains scans. Continuer?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "" "Voulez-vous vider la liste de fichiers ignorés des %d items qu'elle " "contient?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "La liste de doublons ignorés a été vidée." - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "%d fichiers seront retirés des résultats. Continuer?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "La liste est vide. Il n'y a rien à vider" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "copier" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "déplacer" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués." -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" -msgstr "%d fichiers seront envoyés à la corbeille (puis 'hardlinkés'). Continuer?" +msgstr "" +"%d fichiers seront envoyés à la corbeille (puis 'hardlinkés'). Continuer?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "%d fichiers seront envoyés à la corbeille. Continuer?" diff --git a/locale/fr/LC_MESSAGES/ui.po b/locale/fr/LC_MESSAGES/ui.po index ac2043ce..b1fdf0fd 100644 --- a/locale/fr/LC_MESSAGES/ui.po +++ b/locale/fr/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Scan de doublons en cours" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Chargement en cours" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Déplacement en cours" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Copie en cours" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "Envoi de fichiers à la corbeille" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "Quitter" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Préférences" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Aide dupeGuru" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "À propos de dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "Enregistrer dupeGuru" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "Vérifier les mises à jour" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "Ouvrir logs de déboguage" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Fenêtre de résultats" msgid "Add Folder..." msgstr "Ajouter dossier..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Fichier" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "Voir" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Aide" @@ -105,50 +105,50 @@ msgstr "Aide" msgid "Load Recent Results" msgstr "Charger résultats récents" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Sélectionnez les dossiers à scanner puis faites \"Scan\"." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Charger" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Scan" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "Résultats non sauvegardés" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Vos résultats ne sont pas sauvegardés. Voulez-vous vraiment quitter?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Sélectionnez un dossier à ajouter à la liste" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Sélectionnez un fichier résultats à charger" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "Tout les fichiers (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "Résultats dupeGuru (*.dupeguru)" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "Commencer un nouveau scan" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "" "Vos résultats ne sont pas sauvegardés. Voulez-vous vraiment continuer?" @@ -266,18 +266,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Révéler Fichier" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Fermer" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Détails" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Actions" @@ -363,41 +364,37 @@ msgstr "Inverser le marquage" msgid "Mark Selected" msgstr "Marquer sélectionnés" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Vider la liste de fichiers ignorés" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "Exporter vers HTML" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Sauvegarder résultats..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Invoquer commande personnalisée" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "Marquer" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Colonnes" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Réinitialiser" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} (Résultats)" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Sélectionnez un fichier résultats dans lequel sauvegarder" @@ -704,7 +701,7 @@ msgstr "Action" msgid "Directories" msgstr "Dossiers" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Sans réf." @@ -858,7 +855,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -867,3 +864,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "Liste de doublons ignorés" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "Effacer sélection" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "Vider" diff --git a/locale/hy/LC_MESSAGES/columns.po b/locale/hy/LC_MESSAGES/columns.po index 9bf3ad33..d84618a3 100755 --- a/locale/hy/LC_MESSAGES/columns.po +++ b/locale/hy/LC_MESSAGES/columns.po @@ -13,11 +13,12 @@ msgstr "" "X-Poedit-Language: Armenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Ֆայլի ճ-ը" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Սխալի գրությունը" diff --git a/locale/hy/LC_MESSAGES/core.po b/locale/hy/LC_MESSAGES/core.po index 094c3d63..62e652c3 100755 --- a/locale/hy/LC_MESSAGES/core.po +++ b/locale/hy/LC_MESSAGES/core.po @@ -13,7 +13,7 @@ msgstr "" "X-Poedit-Language: Armenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "միաժամանակ հնարավոր է ջնջել, տեղափոխել կամ պատճենել միայն 10 օրինակներ" @@ -26,15 +26,15 @@ msgstr "" "Չեք կարող ջնջել, տեղափձոխել կամ պատճենել ավելի քան 10 օրինակներ փորձնական " "եղանակում:" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:" -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d անպիտան)" @@ -126,11 +126,11 @@ msgstr "Ստուգում է %d/%d համընկնումները" msgid "Read EXIF of %d/%d pictures" msgstr "Կարդալ EXIF-ը d/%d նկարներից" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -157,44 +157,36 @@ msgid "" msgstr "" "Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Ցանկանու՞մ եք հեռացնել բոլոր %d ֆայլերը անտեսումների ցանկից:" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "Անտեսումների ցանկը մաքրվեց:" - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:" -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "պատճենել" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "տեղափոխել" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" msgstr "Դուք ուղարկում եք %d ֆայլերը Աղբարկղ: Շարունակե՞լ:" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "%d ֆայլերը տեղափոխվելու են Աղբարկղ: Շարունակե՞լ:" diff --git a/locale/hy/LC_MESSAGES/ui.po b/locale/hy/LC_MESSAGES/ui.po index c4c3f750..edac9a1a 100755 --- a/locale/hy/LC_MESSAGES/ui.po +++ b/locale/hy/LC_MESSAGES/ui.po @@ -13,19 +13,19 @@ msgstr "" "X-Poedit-Language: Armenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Ստուգվում են կրկնօրինակները" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Բացվում է" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Տեղափոխվում է" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Պատճենվում է" @@ -53,39 +53,39 @@ msgstr "Զրույց iPhoto-ի հետ: Մի կպեք! " msgid "The iPhoto application couldn't be found." msgstr "iPhoto ծրագիրը չի գտնվել:" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "Ֆայլերը ուղարկվում են Աղբարկղ" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "Փակել" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Կարգավորումներ" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru-ի Օգնությունը" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "dupeGuru-ի մասին" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "Գրանցել dupeGuru-ն" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "Ստուգել թարմացումները" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "Բացել Սխալների մատյանը" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -122,16 +122,16 @@ msgstr "Արդյունքի պատուհանը" msgid "Add Folder..." msgstr "Ավելացնել թղթապանակ..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Ֆայլ" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "Տեսքը" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Օգնություն" @@ -140,50 +140,50 @@ msgstr "Օգնություն" msgid "Load Recent Results" msgstr "Բացել Վերջին արդյունքները" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Ընտրեք ստուգելու թղթապանակները և սեղմեք \"Ստուգել\":" -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Բացել արդյունքները" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Ստուգել" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "Չպահպանված արդյունքները" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Դուք ունեք չպահպանված արդյունքներ, իրո՞ք փակել:" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Ընտրեք ստուգման ցանկը ավելացնելու թղթապանակը" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Ընտրեք արդյունքի ֆայլը՝ բացելու համար" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "Բոլոր ֆայլերը (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru-ի արդյունքները (*.dupeguru)" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "Սկսել նոր ստուգումը" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Ունեք չպահպանված արդյունքներ, իրո՞ք շարունակել:" @@ -299,18 +299,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Ցուցադրել ընտրվածը" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Փակել" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Մանրամասն" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Գործողություններ" @@ -396,41 +397,37 @@ msgstr "Ետարկել նշումը" msgid "Mark Selected" msgstr "Նշել ընտրվածը" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Մաքրել անտեսումների ցանկը" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "Արտածել HTML-ով" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Պահպանել արդյունքները..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Անտեսել Հրամանի կատարումը" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "Նշել" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Սյուները" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Ետարկել ծրագրայինի" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} Արդյունքներ" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Ընտրեք ֆայլը՝ պահպանելու արդյունքները՝" @@ -762,7 +759,7 @@ msgstr "Գործողությունը" msgid "Directories" msgstr "Թղթապանակներ" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Միայն կրկ." @@ -857,7 +854,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -866,3 +863,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/it/LC_MESSAGES/columns.po b/locale/it/LC_MESSAGES/columns.po index f36b25b0..f7b2ac4e 100644 --- a/locale/it/LC_MESSAGES/columns.po +++ b/locale/it/LC_MESSAGES/columns.po @@ -100,10 +100,11 @@ msgstr "Dimensione (KB)" msgid "Dimensions" msgstr "Dimensioni" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Percorso del file" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Messaggio di errore" diff --git a/locale/it/LC_MESSAGES/core.po b/locale/it/LC_MESSAGES/core.po index b571c164..28ae7fe4 100644 --- a/locale/it/LC_MESSAGES/core.po +++ b/locale/it/LC_MESSAGES/core.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -12,15 +12,15 @@ msgid "" "mode." msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Raccolta file da scansionare" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Le cartelle selezionate non contengono file da scansionare." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d scartati)" @@ -113,11 +113,11 @@ msgstr "Verificate %d/%d somiglianze" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -145,49 +145,41 @@ msgstr "" "Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni " "successive. Continuare?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "" "Vuoi veramente rimuovere tutti i %d elementi dalla lista dei file da " "ignorare?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "" - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Non hai impostato nessun comando personalizzato. Impostalo nelle tue " "preferenze." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "Stai per rimuovere %d file dai risultati. Continuare?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" msgstr "" "Stai per inviare %d file nel cestino (compresi gli hardlink). Continuare?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "Stai per inviare %d file nel cestino. Continuare?" diff --git a/locale/it/LC_MESSAGES/ui.po b/locale/it/LC_MESSAGES/ui.po index d7d7da74..d224491d 100644 --- a/locale/it/LC_MESSAGES/ui.po +++ b/locale/it/LC_MESSAGES/ui.po @@ -2,19 +2,19 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Scansione per i duplicati" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Caricamento" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Spostamento" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Copia in corso" @@ -42,39 +42,39 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Non trovo l'applicazione iPhoto." -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Aiuto di dupeGuru" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Informazioni su dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -111,16 +111,16 @@ msgstr "Finestra dei risultati" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "File" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Aiuto" @@ -129,52 +129,52 @@ msgstr "Aiuto" msgid "Load Recent Results" msgstr "Carica i risultati recenti" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Seleziona le cartelle da scansionare e premi \"Scansiona\"." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Carica i risultati" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Scansiona" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Hai dei risultati non salvati. Vuoi veramente chiudere?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "" "Seleziona una cartella da aggiungere alla lista delle cartelle da " "scansionare" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Seleziona un risultato (file) da caricare" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Hai dei risultati non salvati. Vuoi veramente continuare?" @@ -292,18 +292,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Mostra i selezionati" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Chiudi" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Dettagli" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Azioni" @@ -389,41 +390,37 @@ msgstr "Inverti la selezione" msgid "Mark Selected" msgstr "Marca i selezionati" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Cancella la lista degli elementi da ignorare" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Salva i risultati..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Invoca comando personalizzato" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Colonne" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Ripristina impostazioni predefinite" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Seleziona un file dove salvare i tuoi risultati" @@ -732,7 +729,7 @@ msgstr "Azione" msgid "Directories" msgstr "Cartelle" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Solo duplicati" @@ -863,7 +860,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -872,3 +869,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/columns.po b/locale/ru/LC_MESSAGES/columns.po index e65dd1c9..dc03ff04 100755 --- a/locale/ru/LC_MESSAGES/columns.po +++ b/locale/ru/LC_MESSAGES/columns.po @@ -12,11 +12,12 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Путь к файлу" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Сообщение об ошибке" diff --git a/locale/ru/LC_MESSAGES/core.po b/locale/ru/LC_MESSAGES/core.po index 80eca267..91de16ab 100755 --- a/locale/ru/LC_MESSAGES/core.po +++ b/locale/ru/LC_MESSAGES/core.po @@ -12,7 +12,7 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "сможете только для удаления, перемещения или копирования 10 копий сразу" @@ -25,15 +25,15 @@ msgstr "" "Вы не можете удалять, перемещать или копировать более 10 дубликатов сразу в " "демонстрационном режиме." -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Сбор файлов для сканирования" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Выбранных директорий не содержат сканируемых файлов." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s. (%d отменено)" @@ -125,11 +125,11 @@ msgstr "Проверенные %d/%d совпадениях" msgid "Read EXIF of %d/%d pictures" msgstr "Прочитано EXIF %d/%d из фотографии" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -157,41 +157,33 @@ msgstr "" "Все выбранные %d матчей будут игнорироваться во всех последующих проверок. " "Продолжить?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Вы действительно хотите удалить все элементы %d из черного списка?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "Черный список очищается." - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "У вас нет пользовательской команды создали. Установите его в ваших " "предпочтениях." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "Вы собираетесь удалить файлы %d из результата поиска. Продолжить?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "копия" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "перемещение" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "Выберите каталог на {} отмеченные файлы" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" @@ -199,6 +191,6 @@ msgstr "" "Вы собираетесь отправить%d файлы в корзину (и жесткую них позже). " "Продолжить?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "Вы собираетесь отправить %d файлы в корзину. Продолжить?" diff --git a/locale/ru/LC_MESSAGES/ui.po b/locale/ru/LC_MESSAGES/ui.po index f7b975a2..d7666723 100755 --- a/locale/ru/LC_MESSAGES/ui.po +++ b/locale/ru/LC_MESSAGES/ui.po @@ -12,19 +12,19 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Проверка на наличие дубликатов" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Загрузка" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Перемещение" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Копирование" @@ -52,39 +52,39 @@ msgstr "В контакте с iPhoto. Не трогайте!" msgid "The iPhoto application couldn't be found." msgstr "iPhoto приложение не может быть найдено." -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "Отправка файлов в корзину" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "Выход" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Предпочтения" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Справка dupeGuru" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "О dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "Регистрация dupeGuru" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "Проверить обновления" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "Открыть журнал Debug" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -121,16 +121,16 @@ msgstr "Окно результатов" msgid "Add Folder..." msgstr "Добавить папку ..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Файл" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "Вид" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Помощь" @@ -139,50 +139,50 @@ msgstr "Помощь" msgid "Load Recent Results" msgstr "Нагрузка Последних результатов" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Выбрайте папкы для сканирования и нажмите \"Сканирование\"." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Задрузить Результаты" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Сканирование" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "Несохраненные результаты" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Есть несохраненные результаты, вы действительно хотите выйти?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Выберите папку для добавления в список сканирования" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Выберите файл результатов для загрузки" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "Все файлы (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru результаты (*. dupeguru)" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "Начать новую проверку" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "" "Вы сделали какие-нибудь результаты, вы действительно хотите продолжить?" @@ -302,18 +302,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Показать выбранное" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Закрывать" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Детали" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Действия" @@ -399,41 +400,37 @@ msgstr "Обратить Маркировку" msgid "Mark Selected" msgstr "Отметить Выбранные" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Очистить список друзей" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "Экспорт в HTML" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Сохранить результаты ..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Вызвать специальную команду" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "Отметить" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Колонны" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Восстановить значения по умолчанию" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} Результаты" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Выберите файл, чтобы сохранить ваши результаты" @@ -765,7 +762,7 @@ msgstr "Действие" msgid "Directories" msgstr "Каталоги" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Только обманки" @@ -860,7 +857,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -869,3 +866,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/ui.pot b/locale/ui.pot index 8573c978..5ce296b9 100644 --- a/locale/ui.pot +++ b/locale/ui.pot @@ -2,19 +2,19 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "" @@ -65,39 +65,45 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -132,16 +138,16 @@ msgstr "" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "" @@ -150,50 +156,50 @@ msgstr "" msgid "Load Recent Results" msgstr "" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "" -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "" @@ -217,6 +223,16 @@ msgstr "" msgid "Normal" msgstr "" +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" + #: qt/base/preferences_dialog.py:37 msgid "Scan Type:" msgstr "" @@ -304,18 +320,19 @@ msgstr "" msgid "Reveal Selected" msgstr "" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "" @@ -401,49 +418,45 @@ msgstr "" msgid "Mark Selected" msgstr "" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "" -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "" diff --git a/locale/uk/LC_MESSAGES/columns.po b/locale/uk/LC_MESSAGES/columns.po index 6ca45f36..d66b4d7c 100755 --- a/locale/uk/LC_MESSAGES/columns.po +++ b/locale/uk/LC_MESSAGES/columns.po @@ -12,11 +12,12 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "Шлях до файлу" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "Повідомлення про помилку" diff --git a/locale/uk/LC_MESSAGES/core.po b/locale/uk/LC_MESSAGES/core.po index 97b1ac57..9f6153d6 100755 --- a/locale/uk/LC_MESSAGES/core.po +++ b/locale/uk/LC_MESSAGES/core.po @@ -12,7 +12,7 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "зможете тільки для видалення, переміщення або копіювання 10 копій відразу" @@ -25,15 +25,15 @@ msgstr "" "Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу" " в демонстраційному режимі." -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "Збір файлів для сканування" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "Вибраних директорій не містять сканованих файлів." -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d відкидаються)" @@ -125,11 +125,11 @@ msgstr "Перевірені %d/%d матчів" msgid "Read EXIF of %d/%d pictures" msgstr "Прочитано EXIF %d/%d фотографії" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -157,41 +157,33 @@ msgstr "" "Всі вибрані %d матчів будуть ігноруватися у всіх наступних перевірок. " "Продовжити?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Ви дійсно хочете видалити всі елементи %d з чорного списку?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "Чорний список очищається." - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "У вас немає користувальницької команди створили. Встановіть його в ваші " "уподобання." -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "Ви збираєтеся видалити файли %d результату пошуку. Продовжити?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "копія" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "переміщати" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "Виберіть каталог на {} відмічені файли" -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" @@ -199,6 +191,6 @@ msgstr "" "Ви збираєтеся відправити %d файли до кошика (і жорстку них пізніше). " "Продовжити?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "Ви збираєтеся відправити %d файли в корзину. Продовжити?" diff --git a/locale/uk/LC_MESSAGES/ui.po b/locale/uk/LC_MESSAGES/ui.po index 81326d48..0c630098 100755 --- a/locale/uk/LC_MESSAGES/ui.po +++ b/locale/uk/LC_MESSAGES/ui.po @@ -12,19 +12,19 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "Перевірка на наявність дублікатів" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "Навантаження" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "Переміщення" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "Копіювання" @@ -52,39 +52,39 @@ msgstr "У бесіді з iPhoto. Не чіпайте його!" msgid "The iPhoto application couldn't be found." msgstr "iPhoto програма не може бути знайдене." -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "Відправлення файлів до кошика" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "Вихід" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Уподобання" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru Довідка" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Про dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "Реєстрація dupeGuru" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "Перевірити оновлення" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "Відкрити журнал Debug" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -121,16 +121,16 @@ msgstr "Вікно результатів" msgid "Add Folder..." msgstr "Додати папку ..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Файл" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "Вид" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Допомога" @@ -139,50 +139,50 @@ msgstr "Допомога" msgid "Load Recent Results" msgstr "Навантаження Останні результати" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "Вибір папок для сканування і натисніть \"Scan\"." -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "Навантаження Результати" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "Сканування" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "Незбережені результати" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Ви зробили якісь результати, ви дійсно хочете вийти?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Виберіть папку для додавання в список сканування" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Виберіть файл результатів для завантаження" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "Всі файли (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru Результати (*.dupeguru) " -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "Почати нову перевірку" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Ви зробили якісь результати, ви дійсно хочете продовжити?" @@ -298,18 +298,19 @@ msgstr "" msgid "Reveal Selected" msgstr "Показати вибраного" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Закриття" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Деталі" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Дії" @@ -395,41 +396,37 @@ msgstr "Звернути Маркування" msgid "Mark Selected" msgstr "Марк Обраний" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "Очистити список друзів" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "Експорт в HTML" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Зберегти результати ..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Викликати спеціальної команди" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "Марк" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Колони" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Відновити налаштування за замовчуванням" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} Результати" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Виберіть файл, щоб зберегти ваші результати" @@ -761,7 +758,7 @@ msgstr "Дія" msgid "Directories" msgstr "Каталоги" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Тільки ошукані" @@ -856,7 +853,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -865,3 +862,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/columns.po b/locale/zh_CN/LC_MESSAGES/columns.po index 39cb8a58..ceaa383c 100644 --- a/locale/zh_CN/LC_MESSAGES/columns.po +++ b/locale/zh_CN/LC_MESSAGES/columns.po @@ -100,10 +100,11 @@ msgstr "大小 (KB)" msgid "Dimensions" msgstr "规格" -#: core/gui/problem_table.py:18 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 +#: core/gui/problem_table.py:17 msgid "File Path" msgstr "文件路径" -#: core/gui/problem_table.py:19 +#: core/gui/problem_table.py:18 msgid "Error Message" msgstr "错误信息" diff --git a/locale/zh_CN/LC_MESSAGES/core.po b/locale/zh_CN/LC_MESSAGES/core.po index 003823af..001833a2 100644 --- a/locale/zh_CN/LC_MESSAGES/core.po +++ b/locale/zh_CN/LC_MESSAGES/core.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:93 +#: core/app.py:94 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" @@ -12,15 +12,15 @@ msgid "" "mode." msgstr "" -#: core/app.py:508 +#: core/app.py:501 msgid "Collecting files to scan" msgstr "收集文件以备扫描" -#: core/app.py:519 +#: core/app.py:512 msgid "The selected directories contain no scannable file." msgstr "所选文件夹中不包含可供扫描的文件。" -#: core/app.py:558 +#: core/app.py:551 msgid "%s (%d discarded)" msgstr "%s (%d 无效)" @@ -112,11 +112,11 @@ msgstr "验证 %d/%d 匹配项" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:35 +#: core/app.py:36 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:36 +#: core/app.py:37 msgid "There are no selected duplicates. Nothing has been done." msgstr "" @@ -142,44 +142,36 @@ msgid "" "Continue?" msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。继续吗?" -#: core/app.py:280 +#: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "确定要从忽略列表中移除 %d 项吗?" -#: core/app.py:283 -msgid "Ignore list cleared." -msgstr "忽略列表已清空。" - -#: core/app.py:376 +#: core/app.py:367 msgid "You have no custom command set up. Set it up in your preferences." msgstr "你没有设定自定义命令。请在首选项中进行设定。" -#: core/app.py:461 core/app.py:472 +#: core/app.py:454 core/app.py:465 msgid "You are about to remove %d files from results. Continue?" msgstr "你将从结果中移除 %d 个文件。继续吗?" -#: core/app.py:277 -msgid "The ignore list is already empty. Nothing to clear." -msgstr "" - -#: core/app.py:321 +#: core/app.py:312 msgid "copy" msgstr "复制" -#: core/app.py:321 +#: core/app.py:312 msgid "move" msgstr "移动" -#: core/app.py:322 +#: core/app.py:313 msgid "Select a directory to {} marked files to" msgstr "选择一个文件夹将标记的 {} 个文件进行..." -#: core/app.py:336 +#: core/app.py:327 msgid "" "You are about to send %d files to Trash (and hardlink them afterwards). " "Continue?" msgstr "即将有 %d 个文件被移动垃圾桶并删除硬盘上的文件。继续吗?" -#: core/app.py:338 +#: core/app.py:329 msgid "You are about to send %d files to Trash. Continue?" msgstr "即将有 %d 个文件被移到回收站。继续吗?" diff --git a/locale/zh_CN/LC_MESSAGES/ui.po b/locale/zh_CN/LC_MESSAGES/ui.po index 572486ae..78d0aa41 100644 --- a/locale/zh_CN/LC_MESSAGES/ui.po +++ b/locale/zh_CN/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 +#: cocoa/inter/app.py:15 qt/base/app.py:39 msgid "Scanning for duplicates" msgstr "重复文件扫描中" -#: cocoa/inter/app.py:16 qt/base/app.py:39 +#: cocoa/inter/app.py:16 qt/base/app.py:40 msgid "Loading" msgstr "载入中" -#: cocoa/inter/app.py:17 qt/base/app.py:40 +#: cocoa/inter/app.py:17 qt/base/app.py:41 msgid "Moving" msgstr "移动中" -#: cocoa/inter/app.py:18 qt/base/app.py:41 +#: cocoa/inter/app.py:18 qt/base/app.py:42 msgid "Copying" msgstr "复制中" -#: qt/base/app.py:42 +#: qt/base/app.py:43 msgid "Sending files to the recycle bin" msgstr "将文件移到回收站" -#: qt/base/app.py:108 +#: qt/base/app.py:110 msgid "Quit" msgstr "退出" -#: qt/base/app.py:109 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "首选项" -#: qt/base/app.py:110 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru帮助" -#: qt/base/app.py:111 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "关于dupeGuru" -#: qt/base/app.py:112 +#: qt/base/app.py:115 msgid "Register dupeGuru" msgstr "注册dupeGuru" -#: qt/base/app.py:113 +#: qt/base/app.py:116 msgid "Check for Update" msgstr "检查更新" -#: qt/base/app.py:114 +#: qt/base/app.py:117 msgid "Open Debug Log" msgstr "打开调试记录" -#: qt/base/app.py:226 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -85,16 +85,16 @@ msgstr "结果窗口" msgid "Add Folder..." msgstr "增加文件夹..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:83 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "文件" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:91 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 msgid "View" msgstr "视图" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:93 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "帮助" @@ -103,50 +103,50 @@ msgstr "帮助" msgid "Load Recent Results" msgstr "载入最近的结果" -#: qt/base/directories_dialog.py:107 +#: qt/base/directories_dialog.py:108 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Select folders to scan and press \"Scan\"." msgstr "请选择要扫描的文件夹,然后点击 \"扫描\"。" -#: qt/base/directories_dialog.py:131 +#: qt/base/directories_dialog.py:132 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Load Results" msgstr "载入结果" -#: qt/base/directories_dialog.py:134 +#: qt/base/directories_dialog.py:135 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 msgid "Scan" msgstr "扫描" -#: qt/base/directories_dialog.py:178 +#: qt/base/directories_dialog.py:179 msgid "Unsaved results" msgstr "未保存的结果" -#: qt/base/directories_dialog.py:179 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "您还没有保存扫描结果,确定要退出吗?" -#: qt/base/directories_dialog.py:187 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "请选择一个文件夹并加入到扫描列表中" -#: qt/base/directories_dialog.py:204 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "选择一个结果文件并载入" -#: qt/base/directories_dialog.py:205 +#: qt/base/directories_dialog.py:206 msgid "All Files (*.*)" msgstr "所有文件 (*.*)" -#: qt/base/directories_dialog.py:205 qt/base/result_window.py:305 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru结果 (*.dupeguru)" -#: qt/base/directories_dialog.py:216 +#: qt/base/directories_dialog.py:217 msgid "Start a new scan" msgstr "开始新的扫描" -#: qt/base/directories_dialog.py:217 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "目前还有结果尚未保存,确定要继续吗?" @@ -260,18 +260,19 @@ msgstr "在处理部分或全部文件时发现问题。产生问题的原因在 msgid "Reveal Selected" msgstr "显示选择" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "关闭" -#: qt/base/result_window.py:47 qt/base/result_window.py:178 +#: qt/base/result_window.py:47 qt/base/result_window.py:177 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "详细说明" -#: qt/base/result_window.py:48 qt/base/result_window.py:87 -#: qt/base/result_window.py:152 qt/base/result_window.py:177 +#: qt/base/result_window.py:48 qt/base/result_window.py:86 +#: qt/base/result_window.py:151 qt/base/result_window.py:176 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "行为" @@ -357,41 +358,37 @@ msgstr "反选标记文件" msgid "Mark Selected" msgstr "标记所选文件" -#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 -msgid "Clear Ignore List" -msgstr "清空忽略列表" - -#: qt/base/result_window.py:68 +#: qt/base/result_window.py:67 msgid "Export To HTML" msgstr "导出为 HTML" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "保存结果..." -#: qt/base/result_window.py:70 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "调用自定义命令" -#: qt/base/result_window.py:85 +#: qt/base/result_window.py:84 msgid "Mark" msgstr "标记" -#: qt/base/result_window.py:89 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "显示列" -#: qt/base/result_window.py:148 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "重置为默认值" -#: qt/base/result_window.py:171 +#: qt/base/result_window.py:170 msgid "{} Results" msgstr "{} (结果)" -#: qt/base/result_window.py:304 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "将结果保存为..." @@ -698,7 +695,7 @@ msgstr "Action" msgid "Directories" msgstr "Directories" -#: qt/base/result_window.py:179 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Dupes Only" @@ -851,7 +848,7 @@ msgstr "" msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:180 +#: qt/base/result_window.py:179 msgid "Delta Values" msgstr "" @@ -860,3 +857,19 @@ msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" + +#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/MainMenu.strings:0 +msgid "Ignore List" +msgstr "" + +#: qt/base/ignore_list_dialog.py:44 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Remove Selected" +msgstr "" + +#: qt/base/ignore_list_dialog.py:45 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +msgid "Clear" +msgstr "" diff --git a/qt/base/app.py b/qt/base/app.py index 7c3df8ef..e430c97d 100644 --- a/qt/base/app.py +++ b/qt/base/app.py @@ -31,6 +31,7 @@ from . import platform from .result_window import ResultWindow from .directories_dialog import DirectoriesDialog from .problem_dialog import ProblemDialog +from .ignore_list_dialog import IgnoreListDialog tr = trget('ui') @@ -87,6 +88,7 @@ class DupeGuru(QObject): self.directories_dialog = DirectoriesDialog(self.resultWindow, self) self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog) + self.ignoreListDialog = IgnoreListDialog(parent=self.resultWindow, model=self.model.ignore_list_dialog) self.preferences_dialog = self.PREFERENCES_DIALOG_CLASS(self.resultWindow, self) self.about_box = AboutBox(self.resultWindow, self) @@ -107,6 +109,7 @@ class DupeGuru(QObject): ACTIONS = [ ('actionQuit', 'Ctrl+Q', '', tr("Quit"), self.quitTriggered), ('actionPreferences', 'Ctrl+P', '', tr("Preferences"), self.preferencesTriggered), + ('actionIgnoreList', '', '', tr("Ignore List"), self.ignoreListTriggered), ('actionShowHelp', 'F1', '', tr("dupeGuru Help"), self.showHelpTriggered), ('actionAbout', '', '', tr("About dupeGuru"), self.showAboutBoxTriggered), ('actionRegister', '', '', tr("Register dupeGuru"), self.registerTriggered), @@ -173,6 +176,9 @@ class DupeGuru(QObject): def checkForUpdateTriggered(self): QProcess.execute('updater.exe', ['/checknow']) + def ignoreListTriggered(self): + self.model.ignore_list_dialog.show() + def job_finished(self, jobid): result = self.model._job_completed(jobid, self._progress.last_error) if not result: diff --git a/qt/base/directories_dialog.py b/qt/base/directories_dialog.py index 50cc33da..5a7d31f5 100644 --- a/qt/base/directories_dialog.py +++ b/qt/base/directories_dialog.py @@ -79,6 +79,7 @@ class DirectoriesDialog(QMainWindow): self.menuFile.addAction(self.app.actionQuit) self.menuView.addAction(self.app.actionPreferences) self.menuView.addAction(self.actionShowResultsWindow) + self.menuView.addAction(self.app.actionIgnoreList) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionRegister) self.menuHelp.addAction(self.app.actionCheckForUpdate) diff --git a/qt/base/ignore_list_dialog.py b/qt/base/ignore_list_dialog.py new file mode 100644 index 00000000..d8a5f911 --- /dev/null +++ b/qt/base/ignore_list_dialog.py @@ -0,0 +1,52 @@ +# Created By: Virgil Dupras +# Created On: 2012-03-13 +# Copyright 2012 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 + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QDialog, QVBoxLayout, QPushButton, QTableView, QAbstractItemView + +from hscommon.trans import trget +from qtlib.util import horizontalWrap +from .ignore_list_table import IgnoreListTable + +tr = trget('ui') + +class IgnoreListDialog(QDialog): + def __init__(self, parent, model): + flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint + QDialog.__init__(self, parent, flags) + self._setupUi() + self.model = model + self.model.view = self + self.table = IgnoreListTable(self.model.ignore_list_table, view=self.tableView) + + self.removeSelectedButton.clicked.connect(self.model.remove_selected) + self.clearButton.clicked.connect(self.model.clear) + + def _setupUi(self): + self.setWindowTitle(tr("Ignore List")) + self.resize(540, 330) + self.verticalLayout = QVBoxLayout(self) + self.tableView = QTableView() + self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers) + self.tableView.setSelectionMode(QAbstractItemView.ExtendedSelection) + self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows) + self.tableView.setShowGrid(False) + self.tableView.horizontalHeader().setStretchLastSection(True) + self.tableView.verticalHeader().setDefaultSectionSize(18) + self.tableView.verticalHeader().setHighlightSections(False) + self.tableView.verticalHeader().setVisible(False) + self.verticalLayout.addWidget(self.tableView) + self.removeSelectedButton = QPushButton(tr("Remove Selected")) + self.clearButton = QPushButton(tr("Clear")) + self.verticalLayout.addLayout(horizontalWrap([self.removeSelectedButton, self.clearButton, + None])) + + #--- model --> view + def show(self): + QDialog.show(self) + diff --git a/qt/base/ignore_list_table.py b/qt/base/ignore_list_table.py new file mode 100644 index 00000000..5588258a --- /dev/null +++ b/qt/base/ignore_list_table.py @@ -0,0 +1,15 @@ +# Created On: 2012-03-13 +# Copyright 2012 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 + +from qtlib.column import Column +from qtlib.table import Table + +class IgnoreListTable(Table): + COLUMNS = [ + Column('path1', defaultWidth=230), + Column('path2', defaultWidth=230), + ] diff --git a/qt/base/result_window.py b/qt/base/result_window.py index ab441028..db9d199f 100644 --- a/qt/base/result_window.py +++ b/qt/base/result_window.py @@ -64,7 +64,6 @@ class ResultWindow(QMainWindow): ('actionMarkNone', 'Ctrl+Shift+A', '', tr("Mark None"), self.markNoneTriggered), ('actionInvertMarking', 'Ctrl+Alt+A', '', tr("Invert Marking"), self.markInvertTriggered), ('actionMarkSelected', '', '', tr("Mark Selected"), self.markSelectedTriggered), - ('actionClearIgnoreList', '', '', tr("Clear Ignore List"), self.clearIgnoreListTriggered), ('actionExport', '', '', tr("Export To HTML"), self.exportTriggered), ('actionSaveResults', 'Ctrl+S', '', tr("Save Results..."), self.saveResultsTriggered), ('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', tr("Invoke Custom Command"), self.app.invokeCustomCommand), @@ -116,6 +115,7 @@ class ResultWindow(QMainWindow): self.menuView.addAction(self.actionDelta) self.menuView.addSeparator() self.menuView.addAction(self.actionDetails) + self.menuView.addAction(self.app.actionIgnoreList) self.menuView.addAction(self.app.actionPreferences) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionRegister) @@ -124,7 +124,6 @@ class ResultWindow(QMainWindow): self.menuHelp.addAction(self.app.actionAbout) self.menuFile.addAction(self.actionSaveResults) self.menuFile.addAction(self.actionExport) - self.menuFile.addAction(self.actionClearIgnoreList) self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) @@ -226,9 +225,6 @@ class ResultWindow(QMainWindow): def addToIgnoreListTriggered(self): self.app.model.add_selected_to_ignore_list() - def clearIgnoreListTriggered(self): - self.app.model.clear_ignore_list() - def copyTriggered(self): self.app.model.copy_or_move_marked(True)