From a007ccb1ec38a7e4007fca1860401bec2bb12219 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 5 Apr 2017 22:17:28 -0400 Subject: [PATCH] Un-xibless-ified Preferences Goodbye xibless --- build.py | 20 -- cocoa/AppDelegate.m | 14 +- cocoa/Base.lproj/Preferences.xib | 334 +++++++++++++++++++ cocoa/Base.lproj/PreferencesMusic.xib | 408 ++++++++++++++++++++++++ cocoa/Base.lproj/PreferencesPicture.xib | 277 ++++++++++++++++ cocoa/ui/preferences_panel.py | 173 ---------- dupeGuru.xcodeproj/project.pbxproj | 144 +++++++-- requirements.txt | 1 - 8 files changed, 1149 insertions(+), 222 deletions(-) create mode 100644 cocoa/Base.lproj/Preferences.xib create mode 100644 cocoa/Base.lproj/PreferencesMusic.xib create mode 100644 cocoa/Base.lproj/PreferencesPicture.xib delete mode 100644 cocoa/ui/preferences_panel.py diff --git a/build.py b/build.py index 7ff63a9..76b59c9 100644 --- a/build.py +++ b/build.py @@ -53,10 +53,6 @@ def parse_args(): '--cocoa-compile', action='store_true', dest='cocoa_compile', help="Build only Cocoa executable" ) - parser.add_option( - '--xibless', action='store_true', dest='xibless', - help="Build only xibless UIs" - ) parser.add_option( '--updatepot', action='store_true', dest='updatepot', help="Generate .pot files from source code." @@ -76,21 +72,8 @@ def cocoa_app(): app_path = 'build/dupeGuru.app' return OSXAppStructure(app_path) -def build_xibless(dest='cocoa/autogen'): - import xibless - ensure_folder(dest) - for appmode in ('standard', 'music', 'picture'): - xibless.generate( - op.join('cocoa', 'ui', 'preferences_panel.py'), - op.join(dest, 'PreferencesPanel%s_UI' % appmode.capitalize()), - localizationTable='Localizable', - args={'appmode': appmode}, - ) - def build_cocoa(dev): - build_localizations() - build_xibless() build_cocoa_proxy_module() build_cocoa_bridging_interfaces() @@ -155,7 +138,6 @@ def build_localizations(): def build_updatepot(): print("Updating Cocoa strings file.") loc.generate_cocoa_strings_from_code('cocoalib', 'cocoalib/en.lproj') - build_xibless() loc.generate_cocoa_strings_from_code('cocoa', 'cocoa/en.lproj') def build_mergepot(): @@ -280,8 +262,6 @@ def main(): print_and_do('{0} waf configure && {0} waf'.format(sys.executable)) os.chdir('..') cocoa_app().copy_executable('cocoa/build/dupeGuru') - elif options.xibless: - build_xibless() else: build_normal(options.dev) diff --git a/cocoa/AppDelegate.m b/cocoa/AppDelegate.m index a96bdbe..b386c6c 100644 --- a/cocoa/AppDelegate.m +++ b/cocoa/AppDelegate.m @@ -14,9 +14,6 @@ http://www.gnu.org/licenses/gpl-3.0.html #import "Utils.h" #import "ValueTransformers.h" #import "DetailsPanelPicture.h" -#import "PreferencesPanelStandard_UI.h" -#import "PreferencesPanelMusic_UI.h" -#import "PreferencesPanelPicture_UI.h" @implementation AppDelegate @@ -236,18 +233,15 @@ http://www.gnu.org/licenses/gpl-3.0.html - (IBAction)showPreferencesPanel:(id)sender { if (_preferencesPanel == nil) { - NSWindow *window; + NSString *nibName = @"Preferences"; NSInteger appMode = [model getAppMode]; if (appMode == AppModePicture) { - window = createPreferencesPanelPicture_UI(nil); + nibName = @"PreferencesPicture"; } else if (appMode == AppModeMusic) { - window = createPreferencesPanelMusic_UI(nil); + nibName = @"PreferencesMusic"; } - else { - window = createPreferencesPanelStandard_UI(nil); - } - _preferencesPanel = [[NSWindowController alloc] initWithWindow:window]; + _preferencesPanel = [[NSWindowController alloc] initWithWindowNibName:nibName]; } [_preferencesPanel showWindow:nil]; } diff --git a/cocoa/Base.lproj/Preferences.xib b/cocoa/Base.lproj/Preferences.xib new file mode 100644 index 0000000..747c2b0 --- /dev/null +++ b/cocoa/Base.lproj/Preferences.xib @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vtScanTypeIsNotContent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + 12 + 13 + 14 + 18 + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cocoa/Base.lproj/PreferencesMusic.xib b/cocoa/Base.lproj/PreferencesMusic.xib new file mode 100644 index 0000000..bec3a3d --- /dev/null +++ b/cocoa/Base.lproj/PreferencesMusic.xib @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vtScanTypeMusicIsNotContent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + 12 + 13 + 14 + 18 + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cocoa/Base.lproj/PreferencesPicture.xib b/cocoa/Base.lproj/PreferencesPicture.xib new file mode 100644 index 0000000..7a1020a --- /dev/null +++ b/cocoa/Base.lproj/PreferencesPicture.xib @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + vtScanTypeIsFuzzy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + 12 + 13 + 14 + 18 + 24 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cocoa/ui/preferences_panel.py b/cocoa/ui/preferences_panel.py deleted file mode 100644 index 227bc68..0000000 --- a/cocoa/ui/preferences_panel.py +++ /dev/null @@ -1,173 +0,0 @@ -appmode = args.get('appmode', 'standard') -dialogHeights = { - 'standard': 325, - 'music': 345, - 'picture': 255, -} - -result = Window(410, dialogHeights[appmode], "dupeGuru Preferences") -tabView = TabView(result) -basicTab = tabView.addTab("Basic") -advancedTab = tabView.addTab("Advanced") -thresholdSlider = Slider(basicTab.view, 1, 100, 80) -thresholdLabel = Label(basicTab.view, "Filter hardness:") -moreResultsLabel = Label(basicTab.view, "More results") -fewerResultsLabel = Label(basicTab.view, "Fewer results") -thresholdValueLabel = Label(basicTab.view, "") -fontSizeCombo = Combobox(basicTab.view, ["11", "12", "13", "14", "18", "24"]) -fontSizeLabel = Label(basicTab.view, "Font Size:") -if appmode in ('standard', 'music'): - wordWeightingBox = Checkbox(basicTab.view, "Word weighting") - matchSimilarWordsBox = Checkbox(basicTab.view, "Match similar words") -elif appmode == 'picture': - matchDifferentDimensionsBox = Checkbox(basicTab.view, "Match pictures of different dimensions") -mixKindBox = Checkbox(basicTab.view, "Can mix file kind") -removeEmptyFoldersBox = Checkbox(basicTab.view, "Remove empty folders on delete or move") -checkForUpdatesBox = Checkbox(basicTab.view, "Automatically check for updates") -if appmode == 'standard': - ignoreSmallFilesBox = Checkbox(basicTab.view, "Ignore files smaller than:") - smallFilesThresholdText = TextField(basicTab.view, "") - smallFilesThresholdSuffixLabel = Label(basicTab.view, "KB") -elif appmode == 'music': - tagsToScanLabel = Label(basicTab.view, "Tags to scan:") - trackBox = Checkbox(basicTab.view, "Track") - artistBox = Checkbox(basicTab.view, "Artist") - albumBox = Checkbox(basicTab.view, "Album") - titleBox = Checkbox(basicTab.view, "Title") - genreBox = Checkbox(basicTab.view, "Genre") - yearBox = Checkbox(basicTab.view, "Year") - tagBoxes = [trackBox, artistBox, albumBox, titleBox, genreBox, yearBox] - -regexpCheckbox = Checkbox(advancedTab.view, "Use regular expressions when filtering") -ignoreHardlinksBox = Checkbox(advancedTab.view, "Ignore duplicates hardlinking to the same file") -debugModeCheckbox = Checkbox(advancedTab.view, "Debug mode (restart required)") -customCommandLabel = Label(advancedTab.view, "Custom command (arguments: %d for dupe, %r for ref):") -customCommandText = TextField(advancedTab.view, "") -copyMoveLabel = Label(advancedTab.view, "Copy and Move:") -copyMovePopup = Popup(advancedTab.view, ["Right in destination", "Recreate relative path", "Recreate absolute path"]) - -resetToDefaultsButton = Button(result, "Reset To Defaults") -thresholdSlider.bind('value', defaults, 'values.minMatchPercentage') -thresholdValueLabel.bind('value', defaults, 'values.minMatchPercentage') -fontSizeCombo.bind('value', defaults, 'values.TableFontSize') -mixKindBox.bind('value', defaults, 'values.mixFileKind') -removeEmptyFoldersBox.bind('value', defaults, 'values.removeEmptyFolders') -checkForUpdatesBox.bind('value', defaults, 'values.SUEnableAutomaticChecks') -regexpCheckbox.bind('value', defaults, 'values.useRegexpFilter') -ignoreHardlinksBox.bind('value', defaults, 'values.ignoreHardlinkMatches') -debugModeCheckbox.bind('value', defaults, 'values.DebugMode') -customCommandText.bind('value', defaults, 'values.CustomCommand') -copyMovePopup.bind('selectedIndex', defaults, 'values.recreatePathType') -if appmode in ('standard', 'music'): - wordWeightingBox.bind('value', defaults, 'values.wordWeighting') - matchSimilarWordsBox.bind('value', defaults, 'values.matchSimilarWords') - disableWhenContentScan = [thresholdSlider, wordWeightingBox, matchSimilarWordsBox] - for control in disableWhenContentScan: - vtname = 'vtScanTypeMusicIsNotContent' if appmode == 'music' else 'vtScanTypeIsNotContent' - prefname = 'values.scanTypeMusic' if appmode == 'music' else 'values.scanTypeStandard' - control.bind('enabled', defaults, prefname, valueTransformer=vtname) - if appmode == 'standard': - ignoreSmallFilesBox.bind('value', defaults, 'values.ignoreSmallFiles') - smallFilesThresholdText.bind('value', defaults, 'values.smallFileThreshold') - elif appmode == 'music': - for box in tagBoxes: - box.bind('enabled', defaults, 'values.scanTypeMusic', valueTransformer='vtScanTypeIsTag') - trackBox.bind('value', defaults, 'values.scanTagTrack') - artistBox.bind('value', defaults, 'values.scanTagArtist') - albumBox.bind('value', defaults, 'values.scanTagAlbum') - titleBox.bind('value', defaults, 'values.scanTagTitle') - genreBox.bind('value', defaults, 'values.scanTagGenre') - yearBox.bind('value', defaults, 'values.scanTagYear') -elif appmode == 'picture': - matchDifferentDimensionsBox.bind('value', defaults, 'values.matchScaled') - thresholdSlider.bind('enabled', defaults, 'values.scanTypePicture', valueTransformer='vtScanTypeIsFuzzy') - -result.canResize = False -result.canMinimize = False -thresholdValueLabel.formatter = NumberFormatter(NumberStyle.Decimal) -thresholdValueLabel.formatter.maximumFractionDigits = 0 -allLabels = [thresholdValueLabel, moreResultsLabel, fewerResultsLabel, - thresholdLabel, fontSizeLabel, customCommandLabel, copyMoveLabel] -allCheckboxes = [mixKindBox, removeEmptyFoldersBox, checkForUpdatesBox, regexpCheckbox, - ignoreHardlinksBox, debugModeCheckbox] -if appmode == 'standard': - allLabels += [smallFilesThresholdSuffixLabel] - allCheckboxes += [ignoreSmallFilesBox, wordWeightingBox, matchSimilarWordsBox] -elif appmode == 'music': - allLabels += [tagsToScanLabel] - allCheckboxes += tagBoxes + [wordWeightingBox, matchSimilarWordsBox] -elif appmode == 'picture': - allCheckboxes += [matchDifferentDimensionsBox] -for label in allLabels: - label.controlSize = ControlSize.Small -fewerResultsLabel.alignment = TextAlignment.Right -for checkbox in allCheckboxes: - checkbox.font = thresholdValueLabel.font -resetToDefaultsButton.action = Action(defaults, 'revertToInitialValues:') - -thresholdLabel.width = fontSizeLabel.width = 94 -fontSizeCombo.width = 66 -thresholdValueLabel.width = 25 -resetToDefaultsButton.width = 136 -if appmode == 'standard': - smallFilesThresholdText.width = 60 - smallFilesThresholdSuffixLabel.width = 40 -elif appmode == 'music': - for box in tagBoxes: - box.width = 70 - -tabView.packToCorner(Pack.UpperLeft) -tabView.fill(Pack.Right) -resetToDefaultsButton.packRelativeTo(tabView, Pack.Below, align=Pack.Right) -tabView.fill(Pack.Below, margin=14) -tabView.setAnchor(Pack.UpperLeft, growX=True, growY=True) -thresholdLayout = HLayout([thresholdLabel, thresholdSlider, thresholdValueLabel], filler=thresholdSlider) -thresholdLayout.packToCorner(Pack.UpperLeft) -thresholdLayout.fill(Pack.Right) -# We want to give the labels as much space as possible, and we only "know" how much is available -# after the slider's fill operation. -moreResultsLabel.width = fewerResultsLabel.width = thresholdSlider.width // 2 -moreResultsLabel.packRelativeTo(thresholdSlider, Pack.Below, align=Pack.Left, margin=6) -fewerResultsLabel.packRelativeTo(thresholdSlider, Pack.Below, align=Pack.Right, margin=6) -fontSizeCombo.packRelativeTo(moreResultsLabel, Pack.Below) -fontSizeLabel.packRelativeTo(fontSizeCombo, Pack.Left) - -if appmode == 'music': - tagsToScanLabel.packRelativeTo(fontSizeCombo, Pack.Below) - tagsToScanLabel.fill(Pack.Left) - tagsToScanLabel.fill(Pack.Right) - trackBox.packRelativeTo(tagsToScanLabel, Pack.Below) - trackBox.x += 10 - artistBox.packRelativeTo(trackBox, Pack.Right) - albumBox.packRelativeTo(artistBox, Pack.Right) - titleBox.packRelativeTo(trackBox, Pack.Below) - genreBox.packRelativeTo(titleBox, Pack.Right) - yearBox.packRelativeTo(genreBox, Pack.Right) - viewToPackCheckboxesUnder = titleBox -else: - viewToPackCheckboxesUnder = fontSizeCombo - -if appmode == 'standard': - checkboxesToLayout = [wordWeightingBox, matchSimilarWordsBox, mixKindBox, removeEmptyFoldersBox, - ignoreSmallFilesBox] -elif appmode == 'music': - checkboxesToLayout = [wordWeightingBox, matchSimilarWordsBox, mixKindBox, removeEmptyFoldersBox, - checkForUpdatesBox] -elif appmode == 'picture': - checkboxesToLayout = [matchDifferentDimensionsBox, mixKindBox, removeEmptyFoldersBox, - checkForUpdatesBox] -checkboxLayout = VLayout(checkboxesToLayout) -checkboxLayout.packRelativeTo(viewToPackCheckboxesUnder, Pack.Below) -checkboxLayout.fill(Pack.Left) -checkboxLayout.fill(Pack.Right) - -if appmode == 'standard': - smallFilesThresholdText.packRelativeTo(ignoreSmallFilesBox, Pack.Below, margin=4) - checkForUpdatesBox.packRelativeTo(smallFilesThresholdText, Pack.Below, margin=4) - checkForUpdatesBox.fill(Pack.Right) - smallFilesThresholdText.x += 20 - smallFilesThresholdSuffixLabel.packRelativeTo(smallFilesThresholdText, Pack.Right) - -advancedLayout = VLayout(advancedTab.view.subviews[:]) -advancedLayout.packToCorner(Pack.UpperLeft) -advancedLayout.fill(Pack.Right) diff --git a/dupeGuru.xcodeproj/project.pbxproj b/dupeGuru.xcodeproj/project.pbxproj index 90e5aea..35ed97b 100644 --- a/dupeGuru.xcodeproj/project.pbxproj +++ b/dupeGuru.xcodeproj/project.pbxproj @@ -10,6 +10,9 @@ CE0559871E762105008EB4F8 /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0559851E762105008EB4F8 /* IgnoreListDialog.xib */; }; CE05598E1E76217C008EB4F8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE05598C1E76217C008EB4F8 /* Localizable.strings */; }; CE0559921E7626E7008EB4F8 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CE0559911E7626E7008EB4F8 /* locale */; }; + CE41E6BD1E95D4B600D9F8FF /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE41E6B71E95D4B600D9F8FF /* Preferences.xib */; }; + CE41E6BE1E95D4B600D9F8FF /* PreferencesMusic.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE41E6B91E95D4B600D9F8FF /* PreferencesMusic.xib */; }; + CE41E6BF1E95D4B600D9F8FF /* PreferencesPicture.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE41E6BB1E95D4B600D9F8FF /* PreferencesPicture.xib */; }; CE549CDC1E933C7600C75A05 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE549CDA1E933C7600C75A05 /* ResultWindow.xib */; }; CE54FEBE1E9487D600BE559F /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE54FEBC1E9487D600BE559F /* DirectoryPanel.xib */; }; CE65D0CC1E7781640092126E /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE65D0CA1E7781640092126E /* progress.xib */; }; @@ -55,9 +58,6 @@ CE9720F41E74E40300A598C9 /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9720E51E74E40300A598C9 /* ResultWindow.m */; }; CE9720F51E74E40300A598C9 /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9720E71E74E40300A598C9 /* StatsLabel.m */; }; CE9721451E74E41D00A598C9 /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721081E74E41C00A598C9 /* ObjP.m */; }; - CE9721461E74E41D00A598C9 /* PreferencesPanelMusic_UI.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97210A1E74E41C00A598C9 /* PreferencesPanelMusic_UI.m */; }; - CE9721471E74E41D00A598C9 /* PreferencesPanelPicture_UI.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97210C1E74E41C00A598C9 /* PreferencesPanelPicture_UI.m */; }; - CE9721481E74E41D00A598C9 /* PreferencesPanelStandard_UI.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97210E1E74E41C00A598C9 /* PreferencesPanelStandard_UI.m */; }; CE97214C1E74E41D00A598C9 /* PyBaseApp.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721161E74E41D00A598C9 /* PyBaseApp.m */; }; CE97214D1E74E41D00A598C9 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9721181E74E41D00A598C9 /* PyColumns.m */; }; CE97214E1E74E41D00A598C9 /* PyDeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97211A1E74E41D00A598C9 /* PyDeletionOptions.m */; }; @@ -137,6 +137,54 @@ CE0559CD1E762A94008EB4F8 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; CE0559CE1E762A9A008EB4F8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/IgnoreListDialog.strings; sourceTree = ""; }; CE0559D01E762A9A008EB4F8 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/Localizable.strings; sourceTree = ""; }; + CE41E6B81E95D4B600D9F8FF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoa/Base.lproj/Preferences.xib; sourceTree = ""; }; + CE41E6BA1E95D4B600D9F8FF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoa/Base.lproj/PreferencesMusic.xib; sourceTree = ""; }; + CE41E6BC1E95D4B600D9F8FF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoa/Base.lproj/PreferencesPicture.xib; sourceTree = ""; }; + CE41E6C11E95D50200D9F8FF /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoa/fr.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6C31E95D50300D9F8FF /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoa/de.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6C51E95D50500D9F8FF /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cocoa/cs.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6C71E95D50600D9F8FF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = cocoa/es.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6C91E95D50800D9F8FF /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = cocoa/el.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6CB1E95D50900D9F8FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = cocoa/it.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6CD1E95D50A00D9F8FF /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = cocoa/nl.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6CF1E95D50C00D9F8FF /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = cocoa/pl.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6D11E95D50D00D9F8FF /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = cocoa/ko.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6D31E95D50F00D9F8FF /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = cocoa/hy.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6D51E95D51100D9F8FF /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "cocoa/pt-BR.lproj/Preferences.strings"; sourceTree = ""; }; + CE41E6D71E95D51200D9F8FF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = cocoa/ru.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6D91E95D51400D9F8FF /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = cocoa/uk.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6DB1E95D51500D9F8FF /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/Preferences.strings"; sourceTree = ""; }; + CE41E6DD1E95D51800D9F8FF /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/Preferences.strings; sourceTree = ""; }; + CE41E6DF1E95D76800D9F8FF /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoa/fr.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6E11E95D76A00D9F8FF /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoa/de.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6E31E95D76B00D9F8FF /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cocoa/cs.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6E51E95D76C00D9F8FF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = cocoa/es.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6E71E95D76E00D9F8FF /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = cocoa/el.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6E91E95D76F00D9F8FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = cocoa/it.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6EB1E95D77100D9F8FF /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = cocoa/nl.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6ED1E95D77200D9F8FF /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = cocoa/pl.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6EF1E95D77300D9F8FF /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = cocoa/ko.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6F11E95D77600D9F8FF /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = cocoa/hy.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6F31E95D77700D9F8FF /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "cocoa/pt-BR.lproj/PreferencesMusic.strings"; sourceTree = ""; }; + CE41E6F51E95D77800D9F8FF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = cocoa/ru.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6F71E95D77A00D9F8FF /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = cocoa/uk.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6F91E95D77B00D9F8FF /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/PreferencesMusic.strings"; sourceTree = ""; }; + CE41E6FB1E95D77C00D9F8FF /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/PreferencesMusic.strings; sourceTree = ""; }; + CE41E6FD1E95D7F500D9F8FF /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoa/fr.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E6FF1E95D7F700D9F8FF /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoa/de.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7011E95D7F800D9F8FF /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cocoa/cs.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7031E95D7F900D9F8FF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = cocoa/es.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7051E95D7FA00D9F8FF /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = cocoa/el.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7071E95D7FC00D9F8FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = cocoa/it.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7091E95D7FD00D9F8FF /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = cocoa/nl.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E70B1E95D7FF00D9F8FF /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = cocoa/pl.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E70D1E95D80100D9F8FF /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = cocoa/ko.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E70F1E95D80200D9F8FF /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = cocoa/hy.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7111E95D80300D9F8FF /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "cocoa/pt-BR.lproj/PreferencesPicture.strings"; sourceTree = ""; }; + CE41E7131E95D80500D9F8FF /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = cocoa/ru.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7151E95D80700D9F8FF /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = cocoa/uk.lproj/PreferencesPicture.strings; sourceTree = ""; }; + CE41E7171E95D80900D9F8FF /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "cocoa/zh-Hans.lproj/PreferencesPicture.strings"; sourceTree = ""; }; + CE41E7191E95D80A00D9F8FF /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = cocoa/vi.lproj/PreferencesPicture.strings; sourceTree = ""; }; CE549CDB1E933C7600C75A05 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = cocoa/Base.lproj/ResultWindow.xib; sourceTree = ""; }; CE549CDE1E933D4A00C75A05 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = cocoa/fr.lproj/ResultWindow.strings; sourceTree = ""; }; CE549CE01E933D4C00C75A05 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = cocoa/de.lproj/ResultWindow.strings; sourceTree = ""; }; @@ -313,12 +361,6 @@ CE9720E71E74E40300A598C9 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = cocoa/StatsLabel.m; sourceTree = ""; }; CE9721071E74E41C00A598C9 /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjP.h; path = cocoa/autogen/ObjP.h; sourceTree = ""; }; CE9721081E74E41C00A598C9 /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ObjP.m; path = cocoa/autogen/ObjP.m; sourceTree = ""; }; - CE9721091E74E41C00A598C9 /* PreferencesPanelMusic_UI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencesPanelMusic_UI.h; path = cocoa/autogen/PreferencesPanelMusic_UI.h; sourceTree = ""; }; - CE97210A1E74E41C00A598C9 /* PreferencesPanelMusic_UI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PreferencesPanelMusic_UI.m; path = cocoa/autogen/PreferencesPanelMusic_UI.m; sourceTree = ""; }; - CE97210B1E74E41C00A598C9 /* PreferencesPanelPicture_UI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencesPanelPicture_UI.h; path = cocoa/autogen/PreferencesPanelPicture_UI.h; sourceTree = ""; }; - CE97210C1E74E41C00A598C9 /* PreferencesPanelPicture_UI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PreferencesPanelPicture_UI.m; path = cocoa/autogen/PreferencesPanelPicture_UI.m; sourceTree = ""; }; - CE97210D1E74E41C00A598C9 /* PreferencesPanelStandard_UI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreferencesPanelStandard_UI.h; path = cocoa/autogen/PreferencesPanelStandard_UI.h; sourceTree = ""; }; - CE97210E1E74E41C00A598C9 /* PreferencesPanelStandard_UI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PreferencesPanelStandard_UI.m; path = cocoa/autogen/PreferencesPanelStandard_UI.m; sourceTree = ""; }; CE9721151E74E41D00A598C9 /* PyBaseApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyBaseApp.h; path = cocoa/autogen/PyBaseApp.h; sourceTree = ""; }; CE9721161E74E41D00A598C9 /* PyBaseApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PyBaseApp.m; path = cocoa/autogen/PyBaseApp.m; sourceTree = ""; }; CE9721171E74E41D00A598C9 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyColumns.h; path = cocoa/autogen/PyColumns.h; sourceTree = ""; }; @@ -484,6 +526,9 @@ CEF0941E1E947AF700CD0BF3 /* DetailsPanelPicture.xib */, CEF0943F1E947CAB00CD0BF3 /* PrioritizeDialog.xib */, CEF094601E94828600CD0BF3 /* ProblemDialog.xib */, + CE41E6B71E95D4B600D9F8FF /* Preferences.xib */, + CE41E6B91E95D4B600D9F8FF /* PreferencesMusic.xib */, + CE41E6BB1E95D4B600D9F8FF /* PreferencesPicture.xib */, ); name = xib; sourceTree = ""; @@ -619,12 +664,6 @@ children = ( CE9721071E74E41C00A598C9 /* ObjP.h */, CE9721081E74E41C00A598C9 /* ObjP.m */, - CE9721091E74E41C00A598C9 /* PreferencesPanelMusic_UI.h */, - CE97210A1E74E41C00A598C9 /* PreferencesPanelMusic_UI.m */, - CE97210B1E74E41C00A598C9 /* PreferencesPanelPicture_UI.h */, - CE97210C1E74E41C00A598C9 /* PreferencesPanelPicture_UI.m */, - CE97210D1E74E41C00A598C9 /* PreferencesPanelStandard_UI.h */, - CE97210E1E74E41C00A598C9 /* PreferencesPanelStandard_UI.m */, CE9721151E74E41D00A598C9 /* PyBaseApp.h */, CE9721161E74E41D00A598C9 /* PyBaseApp.m */, CE9721171E74E41D00A598C9 /* PyColumns.h */, @@ -780,6 +819,7 @@ CE05598E1E76217C008EB4F8 /* Localizable.strings in Resources */, CE65D0ED1E7783C40092126E /* ErrorReportWindow.xib in Resources */, CE549CDC1E933C7600C75A05 /* ResultWindow.xib in Resources */, + CE41E6BF1E95D4B600D9F8FF /* PreferencesPicture.xib in Resources */, CEF094411E947CAB00CD0BF3 /* PrioritizeDialog.xib in Resources */, CEFC8A251E74F23000965F37 /* dg_cocoa.py in Resources */, CEF093DE1E9474F700CD0BF3 /* DeletionOptions.xib in Resources */, @@ -789,6 +829,8 @@ CE0559871E762105008EB4F8 /* IgnoreListDialog.xib in Resources */, CEF094621E94828600CD0BF3 /* ProblemDialog.xib in Resources */, CEF094201E947AF700CD0BF3 /* DetailsPanelPicture.xib in Resources */, + CE41E6BE1E95D4B600D9F8FF /* PreferencesMusic.xib in Resources */, + CE41E6BD1E95D4B600D9F8FF /* Preferences.xib in Resources */, CEFC8A261E74F23000965F37 /* dupeguru.icns in Resources */, CE65D0CC1E7781640092126E /* progress.xib in Resources */, CE9EF6DF1E9345100089CA20 /* MainMenu.xib in Resources */, @@ -827,7 +869,6 @@ CE9720F51E74E40300A598C9 /* StatsLabel.m in Sources */, CE6F7DEA1E74E9E4004C0518 /* HSQuicklook.m in Sources */, CE97214C1E74E41D00A598C9 /* PyBaseApp.m in Sources */, - CE9721461E74E41D00A598C9 /* PreferencesPanelMusic_UI.m in Sources */, CE6F7DF11E74E9E4004C0518 /* ValueTransformers.m in Sources */, CE9720E91E74E40300A598C9 /* DeletionOptions.m in Sources */, CE6F7E061E74EA12004C0518 /* HSOutline.m in Sources */, @@ -836,7 +877,6 @@ CE6F7DE71E74E9E4004C0518 /* HSAboutBox.m in Sources */, CE9720EF1E74E40300A598C9 /* main.m in Sources */, CE9721591E74E41D00A598C9 /* PyResultTable.m in Sources */, - CE9721481E74E41D00A598C9 /* PreferencesPanelStandard_UI.m in Sources */, CE9720E81E74E40300A598C9 /* AppDelegate.m in Sources */, CE9721561E74E41D00A598C9 /* PyPrioritizeList.m in Sources */, CE6F7DEF1E74E9E4004C0518 /* ProgressController.m in Sources */, @@ -858,7 +898,6 @@ CE6F7E141E74EA26004C0518 /* HSOutlineView.m in Sources */, CE97214F1E74E41D00A598C9 /* PyDetailsPanel.m in Sources */, CE6F7E171E74EA26004C0518 /* NSTableViewAdditions.m in Sources */, - CE9721471E74E41D00A598C9 /* PreferencesPanelPicture_UI.m in Sources */, CE97215C1E74E41D00A598C9 /* PyTable.m in Sources */, CE9721581E74E41D00A598C9 /* PyProgressWindow.m in Sources */, CE6F7DEC1E74E9E4004C0518 /* NSEventAdditions.m in Sources */, @@ -916,6 +955,75 @@ name = Localizable.strings; sourceTree = ""; }; + CE41E6B71E95D4B600D9F8FF /* Preferences.xib */ = { + isa = PBXVariantGroup; + children = ( + CE41E6B81E95D4B600D9F8FF /* Base */, + CE41E6C11E95D50200D9F8FF /* fr */, + CE41E6C31E95D50300D9F8FF /* de */, + CE41E6C51E95D50500D9F8FF /* cs */, + CE41E6C71E95D50600D9F8FF /* es */, + CE41E6C91E95D50800D9F8FF /* el */, + CE41E6CB1E95D50900D9F8FF /* it */, + CE41E6CD1E95D50A00D9F8FF /* nl */, + CE41E6CF1E95D50C00D9F8FF /* pl */, + CE41E6D11E95D50D00D9F8FF /* ko */, + CE41E6D31E95D50F00D9F8FF /* hy */, + CE41E6D51E95D51100D9F8FF /* pt-BR */, + CE41E6D71E95D51200D9F8FF /* ru */, + CE41E6D91E95D51400D9F8FF /* uk */, + CE41E6DB1E95D51500D9F8FF /* zh-Hans */, + CE41E6DD1E95D51800D9F8FF /* vi */, + ); + name = Preferences.xib; + sourceTree = ""; + }; + CE41E6B91E95D4B600D9F8FF /* PreferencesMusic.xib */ = { + isa = PBXVariantGroup; + children = ( + CE41E6BA1E95D4B600D9F8FF /* Base */, + CE41E6DF1E95D76800D9F8FF /* fr */, + CE41E6E11E95D76A00D9F8FF /* de */, + CE41E6E31E95D76B00D9F8FF /* cs */, + CE41E6E51E95D76C00D9F8FF /* es */, + CE41E6E71E95D76E00D9F8FF /* el */, + CE41E6E91E95D76F00D9F8FF /* it */, + CE41E6EB1E95D77100D9F8FF /* nl */, + CE41E6ED1E95D77200D9F8FF /* pl */, + CE41E6EF1E95D77300D9F8FF /* ko */, + CE41E6F11E95D77600D9F8FF /* hy */, + CE41E6F31E95D77700D9F8FF /* pt-BR */, + CE41E6F51E95D77800D9F8FF /* ru */, + CE41E6F71E95D77A00D9F8FF /* uk */, + CE41E6F91E95D77B00D9F8FF /* zh-Hans */, + CE41E6FB1E95D77C00D9F8FF /* vi */, + ); + name = PreferencesMusic.xib; + sourceTree = ""; + }; + CE41E6BB1E95D4B600D9F8FF /* PreferencesPicture.xib */ = { + isa = PBXVariantGroup; + children = ( + CE41E6BC1E95D4B600D9F8FF /* Base */, + CE41E6FD1E95D7F500D9F8FF /* fr */, + CE41E6FF1E95D7F700D9F8FF /* de */, + CE41E7011E95D7F800D9F8FF /* cs */, + CE41E7031E95D7F900D9F8FF /* es */, + CE41E7051E95D7FA00D9F8FF /* el */, + CE41E7071E95D7FC00D9F8FF /* it */, + CE41E7091E95D7FD00D9F8FF /* nl */, + CE41E70B1E95D7FF00D9F8FF /* pl */, + CE41E70D1E95D80100D9F8FF /* ko */, + CE41E70F1E95D80200D9F8FF /* hy */, + CE41E7111E95D80300D9F8FF /* pt-BR */, + CE41E7131E95D80500D9F8FF /* ru */, + CE41E7151E95D80700D9F8FF /* uk */, + CE41E7171E95D80900D9F8FF /* zh-Hans */, + CE41E7191E95D80A00D9F8FF /* vi */, + ); + name = PreferencesPicture.xib; + sourceTree = ""; + }; CE549CDA1E933C7600C75A05 /* ResultWindow.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/requirements.txt b/requirements.txt index bfdf440..fdc39dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ -r dupeguru/requirements.txt objp>=1.3.1 -xibless>=0.4.1