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