mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-01-25 08:01:39 +00:00
Compare commits
146 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
573d088088 | ||
|
|
75b08125c0 | ||
|
|
20320f539f | ||
|
|
24771af955 | ||
|
|
2bfe9960f1 | ||
|
|
215bcb0d76 | ||
|
|
2dbf8b80ae | ||
|
|
470cd92030 | ||
|
|
111edc3ce5 | ||
|
|
df30a31782 | ||
|
|
91f3a59523 | ||
|
|
3441e51c0e | ||
|
|
a99c40b5d8 | ||
|
|
5b4de58c38 | ||
|
|
cd83b16dbd | ||
|
|
b67db988ab | ||
|
|
7ebea44cb0 | ||
|
|
4de40af1b0 | ||
|
|
54988650d7 | ||
|
|
a47c208f45 | ||
|
|
c321427a8f | ||
|
|
26c77a18fd | ||
|
|
9f19451ac7 | ||
|
|
bcd9d7e7d0 | ||
|
|
b42b0be512 | ||
|
|
d90764a9ea | ||
|
|
c5c4e02bf4 | ||
|
|
fae3a6ac3a | ||
|
|
09b91aab66 | ||
|
|
b5a219cc00 | ||
|
|
9cb62e0544 | ||
|
|
653668dd96 | ||
|
|
5a5a74d0e1 | ||
|
|
5247ac8abd | ||
|
|
f992599beb | ||
|
|
51f8c51ef3 | ||
|
|
fcdc692b61 | ||
|
|
deb5260c6a | ||
|
|
81df280ea6 | ||
|
|
4f097a3a89 | ||
|
|
8cd1e13814 | ||
|
|
7e81e6c93f | ||
|
|
b19d6c9a27 | ||
|
|
977fb606eb | ||
|
|
9e7d27dcda | ||
|
|
caf04f0d3f | ||
|
|
a2553da578 | ||
|
|
3cd44705f8 | ||
|
|
0cf6987083 | ||
|
|
a67f7e2c9e | ||
|
|
5a3b6883fa | ||
|
|
b0f9a94375 | ||
|
|
ad5c4a954c | ||
|
|
292d993dce | ||
|
|
1fe42f673f | ||
|
|
244af5b652 | ||
|
|
abe9041a67 | ||
|
|
a2d73b216c | ||
|
|
f08b593acb | ||
|
|
cb35dc7897 | ||
|
|
903ecd9eae | ||
|
|
79e9251511 | ||
|
|
81daef6145 | ||
|
|
6a7af81685 | ||
|
|
b3db7c6842 | ||
|
|
85e5b4cfa7 | ||
|
|
79e6020982 | ||
|
|
b7e7e67c99 | ||
|
|
1017e3c730 | ||
|
|
b74e33f4b0 | ||
|
|
2d0facdb14 | ||
|
|
c34004ed94 | ||
|
|
4db5fae38b | ||
|
|
5d5670d4be | ||
|
|
e21a7e18b4 | ||
|
|
a29ed235f6 | ||
|
|
fd706e752f | ||
|
|
729db49183 | ||
|
|
a68e4310ee | ||
|
|
500314859d | ||
|
|
b6d457f908 | ||
|
|
6850c7e2f8 | ||
|
|
9e5630fe99 | ||
|
|
f1a21e62cd | ||
|
|
7cc2defa35 | ||
|
|
24a11ee4bd | ||
|
|
e2b23ca961 | ||
|
|
8fabb14b8b | ||
|
|
07de7d6f0e | ||
|
|
e0b844f617 | ||
|
|
a7bc76bf7c | ||
|
|
89fb531f3d | ||
|
|
f22baa8d5a | ||
|
|
7c2e601a30 | ||
|
|
16e4a5fddd | ||
|
|
4200f2a090 | ||
|
|
45c8291645 | ||
|
|
89f8214bce | ||
|
|
16e1ee93d0 | ||
|
|
222ae73590 | ||
|
|
21c0292154 | ||
|
|
a7eb90894a | ||
|
|
64baf2a10c | ||
|
|
392a802ef1 | ||
|
|
8efeab7b40 | ||
|
|
8a86ecee38 | ||
|
|
3e79b57409 | ||
|
|
362e020585 | ||
|
|
df5c8ddf22 | ||
|
|
70cc48d51f | ||
|
|
dccffd9516 | ||
|
|
04056c1597 | ||
|
|
69b2e37368 | ||
|
|
05478591a4 | ||
|
|
ead3b1e651 | ||
|
|
27f4c290c4 | ||
|
|
4f248ee981 | ||
|
|
d7397c0125 | ||
|
|
e4430168f7 | ||
|
|
78c2ae150d | ||
|
|
806e3917e3 | ||
|
|
6c62c2d563 | ||
|
|
7a768bd0e6 | ||
|
|
a6c01f6868 | ||
|
|
721591d3e3 | ||
|
|
1171705921 | ||
|
|
65d2581f74 | ||
|
|
2128d1787a | ||
|
|
cbf2ab82ce | ||
|
|
adef5a9dfa | ||
|
|
0c9e5c90a3 | ||
|
|
787f546c17 | ||
|
|
2d4ecf1122 | ||
|
|
1836003506 | ||
|
|
44d34f56f7 | ||
|
|
24c3d7ed00 | ||
|
|
8f7657573d | ||
|
|
c03c7f2be1 | ||
|
|
91a157cb2b | ||
|
|
7ced1e7b9d | ||
|
|
f4b8efff50 | ||
|
|
4c0545189e | ||
|
|
21af7b2fcd | ||
|
|
df9af9a796 | ||
|
|
933474400c | ||
|
|
b2c8e779bd |
20
.hgignore
20
.hgignore
@@ -6,9 +6,8 @@ run.py
|
|||||||
*.so
|
*.so
|
||||||
*.mo
|
*.mo
|
||||||
*.pyd
|
*.pyd
|
||||||
.tm_*
|
*.waf*
|
||||||
*.xcodeproj/xcuserdata
|
.lock-waf*
|
||||||
*.xcodeproj/project.xcworkspace/xcuserdata
|
|
||||||
conf.json
|
conf.json
|
||||||
build
|
build
|
||||||
dist
|
dist
|
||||||
@@ -17,21 +16,6 @@ installer_tmp-cache
|
|||||||
cocoa/autogen
|
cocoa/autogen
|
||||||
cocoa/*/Info.plist
|
cocoa/*/Info.plist
|
||||||
cocoa/*/build
|
cocoa/*/build
|
||||||
cocoa/*/*.app
|
|
||||||
cocoa/*/dg_cocoa.plugin
|
|
||||||
cocoa/*/fr.lproj/*.xib
|
|
||||||
cocoa/*/de.lproj/*.xib
|
|
||||||
cocoa/*/zh_CN.lproj/*.xib
|
|
||||||
cocoa/*/cs.lproj/*.xib
|
|
||||||
cocoa/*/it.lproj/*.xib
|
|
||||||
cs.lproj
|
|
||||||
de.lproj
|
|
||||||
fr.lproj
|
|
||||||
it.lproj
|
|
||||||
hy.lproj
|
|
||||||
ru.lproj
|
|
||||||
uk.lproj
|
|
||||||
zh_CN.lproj
|
|
||||||
qt/base/*_rc.py
|
qt/base/*_rc.py
|
||||||
help/*/conf.py
|
help/*/conf.py
|
||||||
help/*/changelog.rst
|
help/*/changelog.rst
|
||||||
10
.hgtags
10
.hgtags
@@ -70,3 +70,13 @@ a619f313712e2923160b8f90d8250ee0e184c7b9 pe2.4.1
|
|||||||
fad463ae749b7189dce92f1e42a57ac4ee03987d se3.3.3
|
fad463ae749b7189dce92f1e42a57ac4ee03987d se3.3.3
|
||||||
236cf9b690a144392e7e86e7c9749fc834a8b271 me6.3.0
|
236cf9b690a144392e7e86e7c9749fc834a8b271 me6.3.0
|
||||||
90318f1303858d9d01065d92d78d98b888b38ea0 se3.4.0
|
90318f1303858d9d01065d92d78d98b888b38ea0 se3.4.0
|
||||||
|
93ed33410df2d2f21229a77ae49c83ece2c50a55 pe2.5.0
|
||||||
|
c153aef25e5c9911f2197d13899591c50cf38ffc se3.4.1
|
||||||
|
71b7e18613f3790cea18cb0dd8c9c986ce237267 me6.3.1
|
||||||
|
c3d9f91dc9c9d60f370c72bc211f09be3e4fc18d se3.5.0
|
||||||
|
254bce83ad6e56c102d69fd603f6845e2324b470 me6.4.0
|
||||||
|
e772f1de86744999ffbbe5845554417965b1dfba me6.4.1
|
||||||
|
c8a9a4d355927e509f514308c82306192bc71f92 pe2.6.0
|
||||||
|
a618e954f01e4bbdbe9a03e5667a67d62be995a7 me6.4.2
|
||||||
|
0f18c4498a6c7529bf77207db70aed8a5ec96ee4 se3.6.0
|
||||||
|
8f478379ec62fd1329d527aafb1ab0f2410f3a79 me6.5.0
|
||||||
|
|||||||
22
README
22
README
@@ -37,11 +37,11 @@ General dependencies
|
|||||||
OS X prerequisites
|
OS X prerequisites
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
- XCode 4.1
|
- XCode's command line tools
|
||||||
- Sparkle (http://sparkle.andymatuschak.org/)
|
|
||||||
- objp 1.1.0 (http://bitbucket.org/hsoft/objp)
|
- objp 1.1.0 (http://bitbucket.org/hsoft/objp)
|
||||||
- pluginbuilder 1.1.0 (http://bitbucket.org/hsoft/pluginbuilder)
|
- pluginbuilder 1.1.0 (http://bitbucket.org/hsoft/pluginbuilder)
|
||||||
- appscript 1.0.0 for ME and PE (http://appscript.sourceforge.net/)
|
- appscript 1.0.0 for ME and PE (http://appscript.sourceforge.net/)
|
||||||
|
- xibless 0.4.0 (https://bitbucket.org/hsoft/xibless)
|
||||||
|
|
||||||
Windows prerequisites
|
Windows prerequisites
|
||||||
---------------------
|
---------------------
|
||||||
@@ -80,26 +80,16 @@ If you didn't use mercurial to download this source, you probably have an incomp
|
|||||||
External projects (hscommon, qtlib, cocoalib) need to be at the root of the dupeGuru project folder.
|
External projects (hscommon, qtlib, cocoalib) need to be at the root of the dupeGuru project folder.
|
||||||
You'll have to download those separately. Or use mercurial, it's much easier.
|
You'll have to download those separately. Or use mercurial, it's much easier.
|
||||||
|
|
||||||
As far as I can tell, you don't *have* to compile/install everything manually and you can normally
|
|
||||||
use `easy_install` to install python dependencies. However, be aware that compiling/installing
|
|
||||||
manually from the repositories of each project is what I personally do, so if you hit a snag
|
|
||||||
somewhere, you might want to try the manual way.
|
|
||||||
|
|
||||||
PyObjC's website is badly outdated. Also, as far as I can tell, the package installable with
|
|
||||||
`easy_install` has good chances of not working. Your best bet is to download the latest tagged
|
|
||||||
version from the repository and compile it from source.
|
|
||||||
|
|
||||||
Another one on OS X: I wouldn't use macports/fink/whatever. Whenever I tried using those, I always
|
Another one on OS X: I wouldn't use macports/fink/whatever. Whenever I tried using those, I always
|
||||||
ended up with problems.
|
ended up with problems.
|
||||||
|
|
||||||
On OSX Lion, for dupeGuru PE, make sure that you installed the latest version of macholib because there was a
|
|
||||||
10.7 related bug that was fixed recently. Right now, the fix hasn't even been released yet so you
|
|
||||||
have to install directly from the repo ( http://bitbucket.org/ronaldoussoren/macholib ). The fix
|
|
||||||
in question is at http://bitbucket.org/ronaldoussoren/macholib/changeset/4ab0de0f5b60
|
|
||||||
|
|
||||||
Whenever you have a problem, always double-check that you're running the correct python version.
|
Whenever you have a problem, always double-check that you're running the correct python version.
|
||||||
You'll probably have to tweak your $PATH.
|
You'll probably have to tweak your $PATH.
|
||||||
|
|
||||||
|
To setup a build machine under Ubuntu 12.04 and up, install those packages: python3-dev, python3-pyqt4,
|
||||||
|
pyqt4-dev-tools, mercurial and then python3-setuptools. Once you've done that, install pip with
|
||||||
|
`easy_install`. Once you've done that, you can then perform "The easy way!" installation.
|
||||||
|
|
||||||
Building dupeGuru
|
Building dupeGuru
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
|||||||
213
build.py
213
build.py
@@ -18,9 +18,11 @@ from setuptools import setup, Extension
|
|||||||
|
|
||||||
from hscommon import sphinxgen
|
from hscommon import sphinxgen
|
||||||
from hscommon.build import (add_to_pythonpath, print_and_do, copy_packages, filereplace,
|
from hscommon.build import (add_to_pythonpath, print_and_do, copy_packages, filereplace,
|
||||||
get_module_version, build_all_cocoa_locs, move_all, copy_sysconfig_files_for_embed, copy_all,
|
get_module_version, move_all, copy_sysconfig_files_for_embed, copy_all, move, copy,
|
||||||
move)
|
OSXAppStructure, build_cocoalib_xibless, fix_qt_resource_file)
|
||||||
from hscommon import loc
|
from hscommon import loc
|
||||||
|
from hscommon.plat import ISOSX
|
||||||
|
from hscommon.util import ensure_folder
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
usage = "usage: %prog [options]"
|
usage = "usage: %prog [options]"
|
||||||
@@ -31,8 +33,12 @@ def parse_args():
|
|||||||
help="Build only the help file")
|
help="Build only the help file")
|
||||||
parser.add_option('--loc', action='store_true', dest='loc',
|
parser.add_option('--loc', action='store_true', dest='loc',
|
||||||
help="Build only localization")
|
help="Build only localization")
|
||||||
parser.add_option('--cocoamod', action='store_true', dest='cocoamod',
|
parser.add_option('--cocoa-ext', action='store_true', dest='cocoa_ext',
|
||||||
help="Build only Cocoa modules")
|
help="Build only Cocoa extensions")
|
||||||
|
parser.add_option('--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',
|
parser.add_option('--updatepot', action='store_true', dest='updatepot',
|
||||||
help="Generate .pot files from source code.")
|
help="Generate .pot files from source code.")
|
||||||
parser.add_option('--mergepot', action='store_true', dest='mergepot',
|
parser.add_option('--mergepot', action='store_true', dest='mergepot',
|
||||||
@@ -40,17 +46,60 @@ def parse_args():
|
|||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
def cocoa_compile_command(edition):
|
||||||
|
return '{0} waf configure --edition {1} && {0} waf'.format(sys.executable, edition)
|
||||||
|
|
||||||
|
def cocoa_app(edition):
|
||||||
|
app_path = {
|
||||||
|
'se': 'build/dupeGuru.app',
|
||||||
|
'me': 'build/dupeGuru ME.app',
|
||||||
|
'pe': 'build/dupeGuru PE.app',
|
||||||
|
}[edition]
|
||||||
|
return OSXAppStructure(app_path)
|
||||||
|
|
||||||
|
def build_xibless(edition, dest='cocoa/autogen'):
|
||||||
|
import xibless
|
||||||
|
ensure_folder(dest)
|
||||||
|
FNPAIRS = [
|
||||||
|
('ignore_list_dialog.py', 'IgnoreListDialog_UI'),
|
||||||
|
('deletion_options.py', 'DeletionOptions_UI'),
|
||||||
|
('problem_dialog.py', 'ProblemDialog_UI'),
|
||||||
|
('directory_panel.py', 'DirectoryPanel_UI'),
|
||||||
|
('prioritize_dialog.py', 'PrioritizeDialog_UI'),
|
||||||
|
('result_window.py', 'ResultWindow_UI'),
|
||||||
|
('main_menu.py', 'MainMenu_UI'),
|
||||||
|
('preferences_panel.py', 'PreferencesPanel_UI'),
|
||||||
|
]
|
||||||
|
for srcname, dstname in FNPAIRS:
|
||||||
|
xibless.generate(op.join('cocoa', 'base', 'ui', srcname), op.join(dest, dstname),
|
||||||
|
localizationTable='Localizable', args={'edition': edition})
|
||||||
|
if edition == 'pe':
|
||||||
|
xibless.generate('cocoa/pe/ui/details_panel.py', op.join(dest, 'DetailsPanel_UI'), localizationTable='Localizable')
|
||||||
|
else:
|
||||||
|
xibless.generate('cocoa/base/ui/details_panel.py', op.join(dest, 'DetailsPanel_UI'), localizationTable='Localizable')
|
||||||
|
|
||||||
def build_cocoa(edition, dev):
|
def build_cocoa(edition, dev):
|
||||||
|
print("Creating OS X app structure")
|
||||||
|
ed = lambda s: s.format(edition)
|
||||||
|
app = cocoa_app(edition)
|
||||||
|
app_version = get_module_version(ed('core_{}'))
|
||||||
|
cocoa_project_path = ed('cocoa/{}')
|
||||||
|
filereplace(op.join(cocoa_project_path, 'InfoTemplate.plist'), op.join('build', 'Info.plist'), version=app_version)
|
||||||
|
app.create(op.join('build', 'Info.plist'))
|
||||||
|
print("Building localizations")
|
||||||
|
build_localizations('cocoa', edition)
|
||||||
|
print("Building xibless UIs")
|
||||||
|
build_cocoalib_xibless()
|
||||||
|
build_xibless(edition)
|
||||||
|
print("Building Python extensions")
|
||||||
build_cocoa_proxy_module()
|
build_cocoa_proxy_module()
|
||||||
build_cocoa_bridging_interfaces(edition)
|
build_cocoa_bridging_interfaces(edition)
|
||||||
print("Building the cocoa layer")
|
print("Building the cocoa layer")
|
||||||
from pluginbuilder import copy_embeddable_python_dylib, get_python_header_folder, collect_dependencies
|
from pluginbuilder import copy_embeddable_python_dylib, collect_dependencies
|
||||||
copy_embeddable_python_dylib('build')
|
copy_embeddable_python_dylib('build')
|
||||||
if not op.exists('build/PythonHeaders'):
|
pydep_folder = op.join(app.resources, 'py')
|
||||||
os.symlink(get_python_header_folder(), 'build/PythonHeaders')
|
if not op.exists(pydep_folder):
|
||||||
if not op.exists('build/py'):
|
os.mkdir(pydep_folder)
|
||||||
os.mkdir('build/py')
|
|
||||||
cocoa_project_path = 'cocoa/{0}'.format(edition)
|
|
||||||
shutil.copy(op.join(cocoa_project_path, 'dg_cocoa.py'), 'build')
|
shutil.copy(op.join(cocoa_project_path, 'dg_cocoa.py'), 'build')
|
||||||
specific_packages = {
|
specific_packages = {
|
||||||
'se': ['core_se'],
|
'se': ['core_se'],
|
||||||
@@ -60,39 +109,34 @@ def build_cocoa(edition, dev):
|
|||||||
tocopy = ['core', 'hscommon', 'cocoa/inter', 'cocoalib/cocoa'] + specific_packages
|
tocopy = ['core', 'hscommon', 'cocoa/inter', 'cocoalib/cocoa'] + specific_packages
|
||||||
copy_packages(tocopy, 'build')
|
copy_packages(tocopy, 'build')
|
||||||
sys.path.insert(0, 'build')
|
sys.path.insert(0, 'build')
|
||||||
collect_dependencies('build/dg_cocoa.py', 'build/py', excludes=['PyQt4'])
|
collect_dependencies('build/dg_cocoa.py', pydep_folder, excludes=['PyQt4'])
|
||||||
del sys.path[0]
|
del sys.path[0]
|
||||||
if dev:
|
if dev:
|
||||||
copy_packages(tocopy, 'build/py', create_links=True)
|
copy_packages(tocopy, pydep_folder, create_links=True)
|
||||||
# Views are not referenced by python code, so they're not found by the collector.
|
# Views are not referenced by python code, so they're not found by the collector.
|
||||||
copy_all('build/inter/*.so', 'build/py/inter')
|
copy_all('build/inter/*.so', op.join(pydep_folder, 'inter'))
|
||||||
copy_sysconfig_files_for_embed('build/py')
|
copy_sysconfig_files_for_embed(pydep_folder)
|
||||||
os.chdir(cocoa_project_path)
|
print("Compiling with WAF")
|
||||||
print('Generating Info.plist')
|
os.chdir('cocoa')
|
||||||
app_version = get_module_version('core_{}'.format(edition))
|
print_and_do(cocoa_compile_command(edition))
|
||||||
filereplace('InfoTemplate.plist', 'Info.plist', version=app_version)
|
os.chdir('..')
|
||||||
print("Building the XCode project")
|
app.copy_executable('cocoa/build/dupeGuru')
|
||||||
args = ['-project dupeguru.xcodeproj']
|
print("Copying resources and frameworks")
|
||||||
if dev:
|
image_path = ed('cocoa/{}/dupeguru.icns')
|
||||||
args.append('-configuration dev')
|
resources = [image_path, 'cocoa/base/dsa_pub.pem', 'build/dg_cocoa.py', 'build/help']
|
||||||
else:
|
app.copy_resources(*resources, use_symlinks=dev)
|
||||||
args.append('-configuration release')
|
app.copy_frameworks('build/Python', 'cocoalib/Sparkle.framework')
|
||||||
args = ' '.join(args)
|
|
||||||
os.system('xcodebuild {0}'.format(args))
|
|
||||||
os.chdir('../..')
|
|
||||||
print("Creating the run.py file")
|
print("Creating the run.py file")
|
||||||
app_path = {
|
|
||||||
'se': 'cocoa/se/dupeGuru.app',
|
|
||||||
'me': 'cocoa/me/dupeGuru\\ ME.app',
|
|
||||||
'pe': 'cocoa/pe/dupeGuru\\ PE.app',
|
|
||||||
}[edition]
|
|
||||||
tmpl = open('run_template_cocoa.py', 'rt').read()
|
tmpl = open('run_template_cocoa.py', 'rt').read()
|
||||||
run_contents = tmpl.replace('{{app_path}}', app_path)
|
run_contents = tmpl.replace('{{app_path}}', app.dest)
|
||||||
open('run.py', 'wt').write(run_contents)
|
open('run.py', 'wt').write(run_contents)
|
||||||
|
|
||||||
def build_qt(edition, dev):
|
def build_qt(edition, dev):
|
||||||
|
print("Building localizations")
|
||||||
|
build_localizations('qt', edition)
|
||||||
print("Building Qt stuff")
|
print("Building Qt stuff")
|
||||||
print_and_do("pyrcc4 -py3 {0} > {1}".format(op.join('qt', 'base', 'dg.qrc'), op.join('qt', 'base', 'dg_rc.py')))
|
print_and_do("pyrcc4 -py3 {0} > {1}".format(op.join('qt', 'base', 'dg.qrc'), op.join('qt', 'base', 'dg_rc.py')))
|
||||||
|
fix_qt_resource_file(op.join('qt', 'base', 'dg_rc.py'))
|
||||||
print("Creating the run.py file")
|
print("Creating the run.py file")
|
||||||
tmpl = open('run_template_qt.py', 'rt').read()
|
tmpl = open('run_template_qt.py', 'rt').read()
|
||||||
run_contents = tmpl.replace('{{edition}}', edition)
|
run_contents = tmpl.replace('{{edition}}', edition)
|
||||||
@@ -112,36 +156,55 @@ def build_help(edition):
|
|||||||
conftmpl = op.join(current_path, 'help', 'conf.tmpl')
|
conftmpl = op.join(current_path, 'help', 'conf.tmpl')
|
||||||
sphinxgen.gen(help_basepath, help_destpath, changelog_path, tixurl, confrepl, conftmpl, changelogtmpl)
|
sphinxgen.gen(help_basepath, help_destpath, changelog_path, tixurl, confrepl, conftmpl, changelogtmpl)
|
||||||
|
|
||||||
def build_localizations(ui, edition):
|
def build_base_localizations():
|
||||||
print("Building localizations")
|
|
||||||
loc.compile_all_po('locale')
|
loc.compile_all_po('locale')
|
||||||
loc.compile_all_po(op.join('hscommon', 'locale'))
|
loc.compile_all_po(op.join('hscommon', 'locale'))
|
||||||
loc.merge_locale_dir(op.join('hscommon', 'locale'), 'locale')
|
loc.merge_locale_dir(op.join('hscommon', 'locale'), 'locale')
|
||||||
if op.exists(op.join('build', 'locale')):
|
|
||||||
shutil.rmtree(op.join('build', 'locale'))
|
def build_cocoa_localizations(edition):
|
||||||
shutil.copytree('locale', op.join('build', 'locale'), ignore=shutil.ignore_patterns('*.po', '*.pot'))
|
print("Creating lproj folders based on .po files")
|
||||||
|
app = cocoa_app(edition)
|
||||||
|
en_stringsfile = op.join('cocoa', 'base', 'en.lproj', 'Localizable.strings')
|
||||||
|
en_cocoastringsfile = op.join('cocoalib', 'en.lproj', 'cocoalib.strings')
|
||||||
|
for lang in loc.get_langs('locale'):
|
||||||
|
pofile = op.join('locale', lang, 'LC_MESSAGES', 'ui.po')
|
||||||
|
dest_lproj = op.join(app.resources, lang + '.lproj')
|
||||||
|
ensure_folder(dest_lproj)
|
||||||
|
loc.po2strings(pofile, en_stringsfile, op.join(dest_lproj, 'Localizable.strings'))
|
||||||
|
pofile = op.join('cocoalib', 'locale', lang, 'LC_MESSAGES', 'cocoalib.po')
|
||||||
|
loc.po2strings(pofile, en_cocoastringsfile, op.join(dest_lproj, 'cocoalib.strings'))
|
||||||
|
# We also have to copy the "en.lproj" strings
|
||||||
|
en_lproj = op.join(app.resources, 'en.lproj')
|
||||||
|
ensure_folder(en_lproj)
|
||||||
|
copy(en_stringsfile, en_lproj)
|
||||||
|
copy(en_cocoastringsfile, en_lproj)
|
||||||
|
|
||||||
|
def build_qt_localizations():
|
||||||
|
loc.compile_all_po(op.join('qtlib', 'locale'))
|
||||||
|
loc.merge_locale_dir(op.join('qtlib', 'locale'), 'locale')
|
||||||
|
|
||||||
|
def build_localizations(ui, edition):
|
||||||
|
build_base_localizations()
|
||||||
if ui == 'cocoa':
|
if ui == 'cocoa':
|
||||||
print("Creating lproj folders based on .po files")
|
build_cocoa_localizations(edition)
|
||||||
for lang in loc.get_langs('locale'):
|
locale_dest = op.join(cocoa_app(edition).resources, 'locale')
|
||||||
if lang == 'en':
|
|
||||||
continue
|
|
||||||
pofile = op.join('locale', lang, 'LC_MESSAGES', 'ui.po')
|
|
||||||
for edition_folder in ['base', 'se', 'me', 'pe']:
|
|
||||||
enlproj = op.join('cocoa', edition_folder, 'en.lproj')
|
|
||||||
dest_lproj = op.join('cocoa', edition_folder, lang + '.lproj')
|
|
||||||
loc.po2allxibstrings(pofile, enlproj, dest_lproj)
|
|
||||||
if edition_folder == 'base':
|
|
||||||
loc.po2strings(pofile, op.join(enlproj, 'Localizable.strings'), op.join(dest_lproj, 'Localizable.strings'))
|
|
||||||
pofile = op.join('cocoalib', 'locale', lang, 'LC_MESSAGES', 'cocoalib.po')
|
|
||||||
loc.po2allxibstrings(pofile, op.join('cocoalib', 'en.lproj'), op.join('cocoalib', lang + '.lproj'))
|
|
||||||
build_all_cocoa_locs('cocoalib')
|
|
||||||
build_all_cocoa_locs(op.join('cocoa', 'base'))
|
|
||||||
build_all_cocoa_locs(op.join('cocoa', edition))
|
|
||||||
elif ui == 'qt':
|
elif ui == 'qt':
|
||||||
loc.compile_all_po(op.join('qtlib', 'locale'))
|
build_qt_localizations()
|
||||||
loc.merge_locale_dir(op.join('qtlib', 'locale'), 'locale')
|
locale_dest = op.join('build', 'locale')
|
||||||
|
if op.exists(locale_dest):
|
||||||
|
shutil.rmtree(locale_dest)
|
||||||
|
shutil.copytree('locale', locale_dest, ignore=shutil.ignore_patterns('*.po', '*.pot'))
|
||||||
|
|
||||||
def build_updatepot():
|
def build_updatepot():
|
||||||
|
if ISOSX:
|
||||||
|
print("Updating Cocoa strings file.")
|
||||||
|
# We need to have strings from *all* editions in here, so we'll call xibless for all editions
|
||||||
|
# in dummy subfolders.
|
||||||
|
build_cocoalib_xibless('cocoalib/autogen')
|
||||||
|
loc.generate_cocoa_strings_from_code('cocoalib', 'cocoalib/en.lproj')
|
||||||
|
for edition in ('se', 'me', 'pe'):
|
||||||
|
build_xibless(edition, op.join('cocoa', 'autogen', edition))
|
||||||
|
loc.generate_cocoa_strings_from_code('cocoa', 'cocoa/base/en.lproj')
|
||||||
print("Building .pot files from source files")
|
print("Building .pot files from source files")
|
||||||
print("Building core.pot")
|
print("Building core.pot")
|
||||||
all_cores = ['core', 'core_se', 'core_me', 'core_pe']
|
all_cores = ['core', 'core_se', 'core_me', 'core_pe']
|
||||||
@@ -155,14 +218,14 @@ def build_updatepot():
|
|||||||
loc.generate_pot(['hscommon'], op.join('hscommon', 'locale', 'hscommon.pot'), ['tr'])
|
loc.generate_pot(['hscommon'], op.join('hscommon', 'locale', 'hscommon.pot'), ['tr'])
|
||||||
print("Building qtlib.pot")
|
print("Building qtlib.pot")
|
||||||
loc.generate_pot(['qtlib'], op.join('qtlib', 'locale', 'qtlib.pot'), ['tr'])
|
loc.generate_pot(['qtlib'], op.join('qtlib', 'locale', 'qtlib.pot'), ['tr'])
|
||||||
print("Building cocoalib.pot")
|
if ISOSX:
|
||||||
loc.allstrings2pot(op.join('cocoalib', 'en.lproj'), op.join('cocoalib', 'locale', 'cocoalib.pot'))
|
print("Building cocoalib.pot")
|
||||||
print("Enhancing ui.pot with Cocoa's strings files")
|
cocoalib_pot = op.join('cocoalib', 'locale', 'cocoalib.pot')
|
||||||
loc.allstrings2pot(op.join('cocoa', 'base', 'en.lproj'), op.join('locale', 'ui.pot'),
|
os.remove(cocoalib_pot)
|
||||||
excludes={'core', 'message', 'columns'})
|
loc.strings2pot(op.join('cocoalib', 'en.lproj', 'cocoalib.strings'), cocoalib_pot)
|
||||||
loc.allstrings2pot(op.join('cocoa', 'se', 'en.lproj'), op.join('locale', 'ui.pot'))
|
print("Enhancing ui.pot with Cocoa's strings files")
|
||||||
loc.allstrings2pot(op.join('cocoa', 'me', 'en.lproj'), op.join('locale', 'ui.pot'))
|
loc.strings2pot(op.join('cocoa', 'base', 'en.lproj', 'Localizable.strings'),
|
||||||
loc.allstrings2pot(op.join('cocoa', 'pe', 'en.lproj'), op.join('locale', 'ui.pot'))
|
op.join('locale', 'ui.pot'))
|
||||||
|
|
||||||
def build_mergepot():
|
def build_mergepot():
|
||||||
print("Updating .po files using .pot files")
|
print("Updating .po files using .pot files")
|
||||||
@@ -186,9 +249,10 @@ def build_cocoa_proxy_module():
|
|||||||
import objp.p2o
|
import objp.p2o
|
||||||
objp.p2o.generate_python_proxy_code('cocoalib/cocoa/CocoaProxy.h', 'build/CocoaProxy.m')
|
objp.p2o.generate_python_proxy_code('cocoalib/cocoa/CocoaProxy.h', 'build/CocoaProxy.m')
|
||||||
build_cocoa_ext("CocoaProxy", 'cocoalib/cocoa',
|
build_cocoa_ext("CocoaProxy", 'cocoalib/cocoa',
|
||||||
['cocoalib/cocoa/CocoaProxy.m', 'build/CocoaProxy.m', 'build/ObjP.m', 'cocoalib/HSErrorReportWindow.m'],
|
['cocoalib/cocoa/CocoaProxy.m', 'build/CocoaProxy.m', 'build/ObjP.m',
|
||||||
|
'cocoalib/HSErrorReportWindow.m', 'cocoa/autogen/HSErrorReportWindow_UI.m'],
|
||||||
['AppKit', 'CoreServices'],
|
['AppKit', 'CoreServices'],
|
||||||
['cocoalib'])
|
['cocoalib', 'cocoa/autogen'])
|
||||||
|
|
||||||
def build_cocoa_bridging_interfaces(edition):
|
def build_cocoa_bridging_interfaces(edition):
|
||||||
print("Building Cocoa Bridging Interfaces")
|
print("Building Cocoa Bridging Interfaces")
|
||||||
@@ -198,6 +262,7 @@ def build_cocoa_bridging_interfaces(edition):
|
|||||||
add_to_pythonpath('cocoalib')
|
add_to_pythonpath('cocoalib')
|
||||||
from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline,
|
from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline,
|
||||||
OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyFairware)
|
OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyFairware)
|
||||||
|
from inter.deletion_options import PyDeletionOptions, DeletionOptionsView
|
||||||
from inter.details_panel import PyDetailsPanel, DetailsPanelView
|
from inter.details_panel import PyDetailsPanel, DetailsPanelView
|
||||||
from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView
|
from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView
|
||||||
from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView
|
from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView
|
||||||
@@ -210,12 +275,13 @@ def build_cocoa_bridging_interfaces(edition):
|
|||||||
appmod = importlib.import_module('inter.app_{}'.format(edition))
|
appmod = importlib.import_module('inter.app_{}'.format(edition))
|
||||||
allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware,
|
allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware,
|
||||||
PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog,
|
PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog,
|
||||||
PyIgnoreListDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase, appmod.PyDupeGuru]
|
PyIgnoreListDialog, PyDeletionOptions, PyResultTable, PyStatsLabel, PyDupeGuruBase,
|
||||||
|
appmod.PyDupeGuru]
|
||||||
for class_ in allclasses:
|
for class_ in allclasses:
|
||||||
objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True)
|
objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True)
|
||||||
allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView,
|
allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView,
|
||||||
DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView,
|
DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView,
|
||||||
IgnoreListDialogView, ResultTableView, StatsLabelView, DupeGuruView]
|
IgnoreListDialogView, DeletionOptionsView, ResultTableView, StatsLabelView, DupeGuruView]
|
||||||
clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses]
|
clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses]
|
||||||
objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m')
|
objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m')
|
||||||
build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m'])
|
build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m'])
|
||||||
@@ -248,7 +314,6 @@ def build_normal(edition, ui, dev):
|
|||||||
print("Building dupeGuru {0} with UI {1}".format(edition.upper(), ui))
|
print("Building dupeGuru {0} with UI {1}".format(edition.upper(), ui))
|
||||||
add_to_pythonpath('.')
|
add_to_pythonpath('.')
|
||||||
build_help(edition)
|
build_help(edition)
|
||||||
build_localizations(ui, edition)
|
|
||||||
print("Building dupeGuru")
|
print("Building dupeGuru")
|
||||||
if edition == 'pe':
|
if edition == 'pe':
|
||||||
build_pe_modules(ui)
|
build_pe_modules(ui)
|
||||||
@@ -278,9 +343,17 @@ def main():
|
|||||||
build_updatepot()
|
build_updatepot()
|
||||||
elif options.mergepot:
|
elif options.mergepot:
|
||||||
build_mergepot()
|
build_mergepot()
|
||||||
elif options.cocoamod:
|
elif options.cocoa_ext:
|
||||||
build_cocoa_proxy_module()
|
build_cocoa_proxy_module()
|
||||||
build_cocoa_bridging_interfaces(edition)
|
build_cocoa_bridging_interfaces(edition)
|
||||||
|
elif options.cocoa_compile:
|
||||||
|
os.chdir('cocoa')
|
||||||
|
print_and_do(cocoa_compile_command(edition))
|
||||||
|
os.chdir('..')
|
||||||
|
cocoa_app(edition).copy_executable('cocoa/build/dupeGuru')
|
||||||
|
elif options.xibless:
|
||||||
|
build_cocoalib_xibless()
|
||||||
|
build_xibless(edition)
|
||||||
else:
|
else:
|
||||||
build_normal(edition, ui, dev)
|
build_normal(edition, ui, dev)
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <Sparkle/SUUpdater.h>
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
#import "ResultWindow.h"
|
#import "ResultWindow.h"
|
||||||
#import "DetailsPanel.h"
|
#import "DetailsPanel.h"
|
||||||
@@ -17,9 +18,9 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
@interface AppDelegateBase : NSObject
|
@interface AppDelegateBase : NSObject
|
||||||
{
|
{
|
||||||
IBOutlet NSMenu *recentResultsMenu;
|
NSMenu *recentResultsMenu;
|
||||||
IBOutlet NSMenu *actionsMenu;
|
NSMenu *columnsMenu;
|
||||||
IBOutlet NSMenu *columnsMenu;
|
SUUpdater *updater;
|
||||||
|
|
||||||
PyDupeGuru *model;
|
PyDupeGuru *model;
|
||||||
ResultWindowBase *_resultWindow;
|
ResultWindowBase *_resultWindow;
|
||||||
@@ -31,7 +32,12 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
HSRecentFiles *_recentResults;
|
HSRecentFiles *_recentResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSMenu *recentResultsMenu;
|
||||||
|
@property (readwrite, retain) NSMenu *columnsMenu;
|
||||||
|
@property (readwrite, retain) SUUpdater *updater;
|
||||||
|
|
||||||
/* Virtual */
|
/* Virtual */
|
||||||
|
+ (NSDictionary *)defaultPreferences;
|
||||||
- (PyDupeGuru *)model;
|
- (PyDupeGuru *)model;
|
||||||
- (ResultWindowBase *)createResultWindow;
|
- (ResultWindowBase *)createResultWindow;
|
||||||
- (DirectoryPanel *)createDirectoryPanel;
|
- (DirectoryPanel *)createDirectoryPanel;
|
||||||
@@ -39,11 +45,11 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (NSString *)homepageURL;
|
- (NSString *)homepageURL;
|
||||||
|
|
||||||
/* Public */
|
/* Public */
|
||||||
|
- (void)finalizeInit;
|
||||||
- (ResultWindowBase *)resultWindow;
|
- (ResultWindowBase *)resultWindow;
|
||||||
- (DirectoryPanel *)directoryPanel;
|
- (DirectoryPanel *)directoryPanel;
|
||||||
- (DetailsPanel *)detailsPanel;
|
- (DetailsPanel *)detailsPanel;
|
||||||
- (HSRecentFiles *)recentResults;
|
- (HSRecentFiles *)recentResults;
|
||||||
- (NSMenu *)columnsMenu;
|
|
||||||
|
|
||||||
/* Delegate */
|
/* Delegate */
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
|
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;
|
||||||
@@ -53,15 +59,15 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (void)recentFileClicked:(NSString *)path;
|
- (void)recentFileClicked:(NSString *)path;
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)loadResults:(id)sender;
|
- (void)loadResults;
|
||||||
- (IBAction)openWebsite:(id)sender;
|
- (void)openWebsite;
|
||||||
- (IBAction)openHelp:(id)sender;
|
- (void)openHelp;
|
||||||
- (IBAction)showAboutBox:(id)sender;
|
- (void)showAboutBox;
|
||||||
- (IBAction)showDirectoryWindow:(id)sender;
|
- (void)showDirectoryWindow;
|
||||||
- (IBAction)showPreferencesPanel:(id)sender;
|
- (void)showPreferencesPanel;
|
||||||
- (IBAction)showResultWindow:(id)sender;
|
- (void)showResultWindow;
|
||||||
- (IBAction)showIgnoreList:(id)sender;
|
- (void)showIgnoreList;
|
||||||
- (IBAction)startScanning:(id)sender;
|
- (void)startScanning;
|
||||||
|
|
||||||
/* model --> view */
|
/* model --> view */
|
||||||
- (void)showMessage:(NSString *)msg;
|
- (void)showMessage:(NSString *)msg;
|
||||||
@@ -6,26 +6,61 @@ which should be included with this package. The terms are also available at
|
|||||||
http://www.hardcoded.net/licenses/bsd_license
|
http://www.hardcoded.net/licenses/bsd_license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegateBase.h"
|
||||||
#import "ProgressController.h"
|
#import "ProgressController.h"
|
||||||
#import "HSFairwareReminder.h"
|
#import "HSFairwareReminder.h"
|
||||||
#import "Utils.h"
|
#import "HSPyUtil.h"
|
||||||
#import "Consts.h"
|
#import "Consts.h"
|
||||||
#import "Dialogs.h"
|
#import "Dialogs.h"
|
||||||
|
#import "Utils.h"
|
||||||
#import "ValueTransformers.h"
|
#import "ValueTransformers.h"
|
||||||
#import <Sparkle/SUUpdater.h>
|
#import "PreferencesPanel_UI.h"
|
||||||
|
|
||||||
@implementation AppDelegateBase
|
@implementation AppDelegateBase
|
||||||
|
|
||||||
|
@synthesize recentResultsMenu;
|
||||||
|
@synthesize columnsMenu;
|
||||||
|
@synthesize updater;
|
||||||
|
|
||||||
|
+ (NSDictionary *)defaultPreferences
|
||||||
|
{
|
||||||
|
NSMutableDictionary *d = [NSMutableDictionary dictionary];
|
||||||
|
[d setObject:i2n(1) forKey:@"recreatePathType"];
|
||||||
|
[d setObject:i2n(11) forKey:TableFontSize];
|
||||||
|
[d setObject:b2n(YES) forKey:@"mixFileKind"];
|
||||||
|
[d setObject:b2n(NO) forKey:@"useRegexpFilter"];
|
||||||
|
[d setObject:b2n(NO) forKey:@"ignoreHardlinkMatches"];
|
||||||
|
[d setObject:b2n(NO) forKey:@"removeEmptyFolders"];
|
||||||
|
[d setObject:b2n(NO) forKey:@"DebugMode"];
|
||||||
|
[d setObject:@"" forKey:@"CustomCommand"];
|
||||||
|
[d setObject:[NSArray array] forKey:@"recentDirectories"];
|
||||||
|
[d setObject:[NSArray array] forKey:@"columnsOrder"];
|
||||||
|
[d setObject:[NSDictionary dictionary] forKey:@"columnsWidth"];
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
+ (void)initialize
|
+ (void)initialize
|
||||||
{
|
{
|
||||||
HSVTAdd *vt = [[[HSVTAdd alloc] initWithValue:4] autorelease];
|
HSVTAdd *vt = [[[HSVTAdd alloc] initWithValue:4] autorelease];
|
||||||
[NSValueTransformer setValueTransformer:vt forName:@"vtRowHeightOffset"];
|
[NSValueTransformer setValueTransformer:vt forName:@"vtRowHeightOffset"];
|
||||||
|
NSDictionary *d = [self defaultPreferences];
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:d];
|
||||||
|
[[NSUserDefaults standardUserDefaults] registerDefaults:d];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib
|
- (id)init
|
||||||
{
|
{
|
||||||
|
self = [super init];
|
||||||
model = [[PyDupeGuru alloc] init];
|
model = [[PyDupeGuru alloc] init];
|
||||||
[model bindCallback:createCallback(@"DupeGuruView", self)];
|
[model bindCallback:createCallback(@"DupeGuruView", self)];
|
||||||
|
[self setUpdater:[SUUpdater sharedUpdater]];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)finalizeInit
|
||||||
|
{
|
||||||
|
// We can only finalize initialization once the main menu has been created, which cannot happen
|
||||||
|
// before AppDelegate is created.
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
/* Because the pref pane is lazily loaded, we have to manually do the update check if the
|
/* Because the pref pane is lazily loaded, we have to manually do the update check if the
|
||||||
preference is set.
|
preference is set.
|
||||||
@@ -92,10 +127,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
return _recentResults;
|
return _recentResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMenu *)columnsMenu { return columnsMenu; }
|
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)loadResults:(id)sender
|
- (void)loadResults
|
||||||
{
|
{
|
||||||
NSOpenPanel *op = [NSOpenPanel openPanel];
|
NSOpenPanel *op = [NSOpenPanel openPanel];
|
||||||
[op setCanChooseFiles:YES];
|
[op setCanChooseFiles:YES];
|
||||||
@@ -103,7 +136,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[op setCanCreateDirectories:NO];
|
[op setCanCreateDirectories:NO];
|
||||||
[op setAllowsMultipleSelection:NO];
|
[op setAllowsMultipleSelection:NO];
|
||||||
[op setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
|
[op setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
|
||||||
[op setTitle:TR(@"Select a results file to load")];
|
[op setTitle:NSLocalizedString(@"Select a results file to load", @"")];
|
||||||
if ([op runModal] == NSOKButton) {
|
if ([op runModal] == NSOKButton) {
|
||||||
NSString *filename = [[op filenames] objectAtIndex:0];
|
NSString *filename = [[op filenames] objectAtIndex:0];
|
||||||
[model loadResultsFrom:filename];
|
[model loadResultsFrom:filename];
|
||||||
@@ -111,12 +144,12 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)openWebsite:(id)sender
|
- (void)openWebsite
|
||||||
{
|
{
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[self homepageURL]]];
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[self homepageURL]]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)openHelp:(id)sender
|
- (void)openHelp
|
||||||
{
|
{
|
||||||
NSBundle *b = [NSBundle mainBundle];
|
NSBundle *b = [NSBundle mainBundle];
|
||||||
NSString *p = [b pathForResource:@"index" ofType:@"html" inDirectory:@"help"];
|
NSString *p = [b pathForResource:@"index" ofType:@"html" inDirectory:@"help"];
|
||||||
@@ -124,40 +157,40 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[[NSWorkspace sharedWorkspace] openURL:u];
|
[[NSWorkspace sharedWorkspace] openURL:u];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showAboutBox:(id)sender
|
- (void)showAboutBox
|
||||||
{
|
{
|
||||||
if (_aboutBox == nil) {
|
if (_aboutBox == nil) {
|
||||||
_aboutBox = [[HSAboutBox alloc] initWithApp:model];
|
_aboutBox = [[HSAboutBox alloc] initWithApp:model];
|
||||||
}
|
}
|
||||||
[[_aboutBox window] makeKeyAndOrderFront:sender];
|
[[_aboutBox window] makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showDirectoryWindow:(id)sender
|
- (void)showDirectoryWindow
|
||||||
{
|
{
|
||||||
[[[self directoryPanel] window] makeKeyAndOrderFront:nil];
|
[[[self directoryPanel] window] makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showPreferencesPanel:(id)sender
|
- (void)showPreferencesPanel
|
||||||
{
|
{
|
||||||
if (_preferencesPanel == nil) {
|
if (_preferencesPanel == nil) {
|
||||||
_preferencesPanel = [[NSWindowController alloc] initWithWindowNibName:@"Preferences"];
|
_preferencesPanel = [[NSWindowController alloc] initWithWindow:createPreferencesPanel_UI(nil)];
|
||||||
}
|
}
|
||||||
[_preferencesPanel showWindow:sender];
|
[_preferencesPanel showWindow:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showResultWindow:(id)sender
|
- (void)showResultWindow
|
||||||
{
|
{
|
||||||
[[[self resultWindow] window] makeKeyAndOrderFront:nil];
|
[[[self resultWindow] window] makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showIgnoreList:(id)sender
|
- (void)showIgnoreList
|
||||||
{
|
{
|
||||||
[model showIgnoreList];
|
[model showIgnoreList];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)startScanning:(id)sender
|
- (void)startScanning
|
||||||
{
|
{
|
||||||
[[self resultWindow] startDuplicateScan:sender];
|
[[self resultWindow] startDuplicateScan];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -179,7 +212,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
|
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
|
||||||
{
|
{
|
||||||
if ([model resultsAreModified]) {
|
if ([model resultsAreModified]) {
|
||||||
NSString *msg = TR(@"You have unsaved results, do you really want to quit?");
|
NSString *msg = NSLocalizedString(@"You have unsaved results, do you really want to quit?", @"");
|
||||||
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) { // NO
|
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) { // NO
|
||||||
return NSTerminateCancel;
|
return NSTerminateCancel;
|
||||||
}
|
}
|
||||||
@@ -258,4 +291,18 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)selectDestFileWithPrompt:(NSString *)prompt extension:(NSString *)extension
|
||||||
|
{
|
||||||
|
NSSavePanel *sp = [NSSavePanel savePanel];
|
||||||
|
[sp setCanCreateDirectories:YES];
|
||||||
|
[sp setAllowedFileTypes:[NSArray arrayWithObject:extension]];
|
||||||
|
[sp setTitle:prompt];
|
||||||
|
if ([sp runModal] == NSOKButton) {
|
||||||
|
return [sp filename];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@@ -6,8 +6,6 @@ which should be included with this package. The terms are also available at
|
|||||||
http://www.hardcoded.net/licenses/bsd_license
|
http://www.hardcoded.net/licenses/bsd_license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "HSConsts.h"
|
|
||||||
|
|
||||||
#define JobStarted @"JobStarted"
|
#define JobStarted @"JobStarted"
|
||||||
#define JobInProgress @"JobInProgress"
|
#define JobInProgress @"JobInProgress"
|
||||||
#define TableFontSize @"TableFontSize"
|
#define TableFontSize @"TableFontSize"
|
||||||
|
|||||||
33
cocoa/base/DeletionOptions.h
Normal file
33
cocoa/base/DeletionOptions.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
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 <Cocoa/Cocoa.h>
|
||||||
|
#import "PyDeletionOptions.h"
|
||||||
|
|
||||||
|
@interface DeletionOptions : NSWindowController
|
||||||
|
{
|
||||||
|
|
||||||
|
PyDeletionOptions *model;
|
||||||
|
|
||||||
|
NSTextField *messageTextField;
|
||||||
|
NSButton *linkButton;
|
||||||
|
NSMatrix *linkTypeRadio;
|
||||||
|
NSButton *directButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSTextField *messageTextField;
|
||||||
|
@property (readwrite, retain) NSButton *linkButton;
|
||||||
|
@property (readwrite, retain) NSMatrix *linkTypeRadio;
|
||||||
|
@property (readwrite, retain) NSButton *directButton;
|
||||||
|
|
||||||
|
- (id)initWithPyRef:(PyObject *)aPyRef;
|
||||||
|
|
||||||
|
- (void)updateOptions;
|
||||||
|
- (void)proceed;
|
||||||
|
- (void)cancel;
|
||||||
|
@end
|
||||||
67
cocoa/base/DeletionOptions.m
Normal file
67
cocoa/base/DeletionOptions.m
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
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 "DeletionOptions.h"
|
||||||
|
#import "DeletionOptions_UI.h"
|
||||||
|
#import "HSPyUtil.h"
|
||||||
|
|
||||||
|
@implementation DeletionOptions
|
||||||
|
|
||||||
|
@synthesize messageTextField;
|
||||||
|
@synthesize linkButton;
|
||||||
|
@synthesize linkTypeRadio;
|
||||||
|
@synthesize directButton;
|
||||||
|
|
||||||
|
- (id)initWithPyRef:(PyObject *)aPyRef
|
||||||
|
{
|
||||||
|
self = [super initWithWindow:nil];
|
||||||
|
model = [[PyDeletionOptions alloc] initWithModel:aPyRef];
|
||||||
|
[self setWindow:createDeletionOptions_UI(self)];
|
||||||
|
[model bindCallback:createCallback(@"DeletionOptionsView", self)];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[model release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateOptions
|
||||||
|
{
|
||||||
|
[model setLinkDeleted:[linkButton state] == NSOnState];
|
||||||
|
[model setUseHardlinks:[linkTypeRadio selectedColumn] == 1];
|
||||||
|
[model setDirect:[directButton state] == NSOnState];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)proceed
|
||||||
|
{
|
||||||
|
[NSApp stopModalWithCode:NSOKButton];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancel
|
||||||
|
{
|
||||||
|
[NSApp stopModalWithCode:NSCancelButton];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* model --> view */
|
||||||
|
- (void)updateMsg:(NSString *)msg
|
||||||
|
{
|
||||||
|
[messageTextField setStringValue:msg];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)show
|
||||||
|
{
|
||||||
|
[linkButton setState:NSOffState];
|
||||||
|
[directButton setState:NSOffState];
|
||||||
|
[linkTypeRadio selectCellAtRow:0 column:0];
|
||||||
|
NSInteger r = [NSApp runModalForWindow:[self window]];
|
||||||
|
[[self window] close];
|
||||||
|
return r == NSOKButton;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -10,15 +10,19 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import <Python.h>
|
#import <Python.h>
|
||||||
#import "PyDetailsPanel.h"
|
#import "PyDetailsPanel.h"
|
||||||
|
|
||||||
@interface DetailsPanel : NSWindowController
|
@interface DetailsPanelBase : NSWindowController <NSTableViewDataSource>
|
||||||
{
|
{
|
||||||
IBOutlet NSTableView *detailsTable;
|
NSTableView *detailsTable;
|
||||||
|
|
||||||
PyDetailsPanel *model;
|
PyDetailsPanel *model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSTableView *detailsTable;
|
||||||
|
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef;
|
- (id)initWithPyRef:(PyObject *)aPyRef;
|
||||||
- (PyDetailsPanel *)model;
|
- (PyDetailsPanel *)model;
|
||||||
|
|
||||||
|
- (NSWindow *)createWindow;
|
||||||
- (BOOL)isVisible;
|
- (BOOL)isVisible;
|
||||||
- (void)toggleVisibility;
|
- (void)toggleVisibility;
|
||||||
|
|
||||||
@@ -6,14 +6,17 @@ which should be included with this package. The terms are also available at
|
|||||||
http://www.hardcoded.net/licenses/bsd_license
|
http://www.hardcoded.net/licenses/bsd_license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "DetailsPanel.h"
|
#import "DetailsPanelBase.h"
|
||||||
#import "Utils.h"
|
#import "HSPyUtil.h"
|
||||||
|
|
||||||
|
@implementation DetailsPanelBase
|
||||||
|
|
||||||
|
@synthesize detailsTable;
|
||||||
|
|
||||||
@implementation DetailsPanel
|
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef
|
- (id)initWithPyRef:(PyObject *)aPyRef
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"DetailsPanel"];
|
self = [super initWithWindow:nil];
|
||||||
[self window]; //So the detailsTable is initialized.
|
[self setWindow:[self createWindow]];
|
||||||
model = [[PyDetailsPanel alloc] initWithModel:aPyRef];
|
model = [[PyDetailsPanel alloc] initWithModel:aPyRef];
|
||||||
[model bindCallback:createCallback(@"DetailsPanelView", self)];
|
[model bindCallback:createCallback(@"DetailsPanelView", self)];
|
||||||
return self;
|
return self;
|
||||||
@@ -30,6 +33,11 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
return (PyDetailsPanel *)model;
|
return (PyDetailsPanel *)model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSWindow *)createWindow
|
||||||
|
{
|
||||||
|
return nil; // Virtual
|
||||||
|
}
|
||||||
|
|
||||||
- (void)refreshDetails
|
- (void)refreshDetails
|
||||||
{
|
{
|
||||||
[detailsTable reloadData];
|
[detailsTable reloadData];
|
||||||
@@ -16,27 +16,33 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
@interface DirectoryPanel : NSWindowController <NSOpenSavePanelDelegate>
|
@interface DirectoryPanel : NSWindowController <NSOpenSavePanelDelegate>
|
||||||
{
|
{
|
||||||
IBOutlet NSPopUpButton *addButtonPopUp;
|
|
||||||
IBOutlet NSPopUpButton *loadRecentButtonPopUp;
|
|
||||||
IBOutlet HSOutlineView *outlineView;
|
|
||||||
IBOutlet NSButton *removeButton;
|
|
||||||
IBOutlet NSButton *loadResultsButton;
|
|
||||||
|
|
||||||
AppDelegateBase *_app;
|
AppDelegateBase *_app;
|
||||||
PyDupeGuru *model;
|
PyDupeGuru *model;
|
||||||
HSRecentFiles *_recentDirectories;
|
HSRecentFiles *_recentDirectories;
|
||||||
DirectoryOutline *outline;
|
DirectoryOutline *outline;
|
||||||
BOOL _alwaysShowPopUp;
|
BOOL _alwaysShowPopUp;
|
||||||
|
NSPopUpButton *addButtonPopUp;
|
||||||
|
NSPopUpButton *loadRecentButtonPopUp;
|
||||||
|
HSOutlineView *outlineView;
|
||||||
|
NSButton *removeButton;
|
||||||
|
NSButton *loadResultsButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSPopUpButton *addButtonPopUp;
|
||||||
|
@property (readwrite, retain) NSPopUpButton *loadRecentButtonPopUp;
|
||||||
|
@property (readwrite, retain) HSOutlineView *outlineView;
|
||||||
|
@property (readwrite, retain) NSButton *removeButton;
|
||||||
|
@property (readwrite, retain) NSButton *loadResultsButton;
|
||||||
|
|
||||||
- (id)initWithParentApp:(AppDelegateBase *)aParentApp;
|
- (id)initWithParentApp:(AppDelegateBase *)aParentApp;
|
||||||
|
|
||||||
- (void)fillPopUpMenu; // Virtual
|
- (void)fillPopUpMenu; // Virtual
|
||||||
- (void)adjustUIToLocalization;
|
- (void)adjustUIToLocalization;
|
||||||
|
|
||||||
- (IBAction)askForDirectory:(id)sender;
|
- (void)askForDirectory;
|
||||||
- (IBAction)popupAddDirectoryMenu:(id)sender;
|
- (void)popupAddDirectoryMenu:(id)sender;
|
||||||
- (IBAction)popupLoadRecentMenu:(id)sender;
|
- (void)popupLoadRecentMenu:(id)sender;
|
||||||
- (IBAction)removeSelectedDirectory:(id)sender;
|
- (void)removeSelectedDirectory;
|
||||||
|
|
||||||
- (void)addDirectory:(NSString *)directory;
|
- (void)addDirectory:(NSString *)directory;
|
||||||
- (void)refreshRemoveButtonText;
|
- (void)refreshRemoveButtonText;
|
||||||
|
|||||||
@@ -7,16 +7,23 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "DirectoryPanel.h"
|
#import "DirectoryPanel.h"
|
||||||
|
#import "DirectoryPanel_UI.h"
|
||||||
#import "Dialogs.h"
|
#import "Dialogs.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
#import "Consts.h"
|
|
||||||
|
|
||||||
@implementation DirectoryPanel
|
@implementation DirectoryPanel
|
||||||
|
|
||||||
|
@synthesize addButtonPopUp;
|
||||||
|
@synthesize loadRecentButtonPopUp;
|
||||||
|
@synthesize outlineView;
|
||||||
|
@synthesize removeButton;
|
||||||
|
@synthesize loadResultsButton;
|
||||||
|
|
||||||
- (id)initWithParentApp:(AppDelegateBase *)aParentApp
|
- (id)initWithParentApp:(AppDelegateBase *)aParentApp
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"DirectoryPanel"];
|
self = [super initWithWindow:nil];
|
||||||
[self window];
|
[self setWindow:createDirectoryPanel_UI(self)];
|
||||||
_app = aParentApp;
|
_app = aParentApp;
|
||||||
model = [_app model];
|
model = [_app model];
|
||||||
[[self window] setTitle:[model appName]];
|
[[self window] setTitle:[model appName]];
|
||||||
@@ -47,7 +54,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (void)fillPopUpMenu
|
- (void)fillPopUpMenu
|
||||||
{
|
{
|
||||||
NSMenu *m = [addButtonPopUp menu];
|
NSMenu *m = [addButtonPopUp menu];
|
||||||
NSMenuItem *mi = [m addItemWithTitle:TR(@"Add New Folder...") action:@selector(askForDirectory:) keyEquivalent:@""];
|
NSMenuItem *mi = [m addItemWithTitle:NSLocalizedString(@"Add New Folder...", @"") action:@selector(askForDirectory) keyEquivalent:@""];
|
||||||
[mi setTarget:self];
|
[mi setTarget:self];
|
||||||
[m addItem:[NSMenuItem separatorItem]];
|
[m addItem:[NSMenuItem separatorItem]];
|
||||||
}
|
}
|
||||||
@@ -75,13 +82,13 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
|
|
||||||
- (IBAction)askForDirectory:(id)sender
|
- (void)askForDirectory
|
||||||
{
|
{
|
||||||
NSOpenPanel *op = [NSOpenPanel openPanel];
|
NSOpenPanel *op = [NSOpenPanel openPanel];
|
||||||
[op setCanChooseFiles:YES];
|
[op setCanChooseFiles:YES];
|
||||||
[op setCanChooseDirectories:YES];
|
[op setCanChooseDirectories:YES];
|
||||||
[op setAllowsMultipleSelection:YES];
|
[op setAllowsMultipleSelection:YES];
|
||||||
[op setTitle:TR(@"Select a folder to add to the scanning list")];
|
[op setTitle:NSLocalizedString(@"Select a folder to add to the scanning list", @"")];
|
||||||
[op setDelegate:self];
|
[op setDelegate:self];
|
||||||
if ([op runModal] == NSOKButton) {
|
if ([op runModal] == NSOKButton) {
|
||||||
for (NSString *directory in [op filenames]) {
|
for (NSString *directory in [op filenames]) {
|
||||||
@@ -90,10 +97,10 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)popupAddDirectoryMenu:(id)sender
|
- (void)popupAddDirectoryMenu:(id)sender
|
||||||
{
|
{
|
||||||
if ((!_alwaysShowPopUp) && ([[_recentDirectories filepaths] count] == 0)) {
|
if ((!_alwaysShowPopUp) && ([[_recentDirectories filepaths] count] == 0)) {
|
||||||
[self askForDirectory:sender];
|
[self askForDirectory];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[addButtonPopUp selectItem:nil];
|
[addButtonPopUp selectItem:nil];
|
||||||
@@ -101,14 +108,14 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)popupLoadRecentMenu:(id)sender
|
- (void)popupLoadRecentMenu:(id)sender
|
||||||
{
|
{
|
||||||
if ([[[_app recentResults] filepaths] count] > 0) {
|
if ([[[_app recentResults] filepaths] count] > 0) {
|
||||||
NSMenu *m = [loadRecentButtonPopUp menu];
|
NSMenu *m = [loadRecentButtonPopUp menu];
|
||||||
while ([m numberOfItems] > 0) {
|
while ([m numberOfItems] > 0) {
|
||||||
[m removeItemAtIndex:0];
|
[m removeItemAtIndex:0];
|
||||||
}
|
}
|
||||||
NSMenuItem *mi = [m addItemWithTitle:TR(@"Load from file...") action:@selector(loadResults:) keyEquivalent:@""];
|
NSMenuItem *mi = [m addItemWithTitle:NSLocalizedString(@"Load from file...", @"") action:@selector(loadResults) keyEquivalent:@""];
|
||||||
[mi setTarget:_app];
|
[mi setTarget:_app];
|
||||||
[m addItem:[NSMenuItem separatorItem]];
|
[m addItem:[NSMenuItem separatorItem]];
|
||||||
[[_app recentResults] fillMenu:m];
|
[[_app recentResults] fillMenu:m];
|
||||||
@@ -116,11 +123,11 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[[loadRecentButtonPopUp cell] performClickWithFrame:[sender frame] inView:[sender superview]];
|
[[loadRecentButtonPopUp cell] performClickWithFrame:[sender frame] inView:[sender superview]];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[_app loadResults:nil];
|
[_app loadResults];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)removeSelectedDirectory:(id)sender
|
- (void)removeSelectedDirectory
|
||||||
{
|
{
|
||||||
[[self window] makeKeyAndOrderFront:nil];
|
[[self window] makeKeyAndOrderFront:nil];
|
||||||
[[outline model] removeSelectedDirectory];
|
[[outline model] removeSelectedDirectory];
|
||||||
@@ -130,17 +137,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
/* Public */
|
/* Public */
|
||||||
- (void)addDirectory:(NSString *)directory
|
- (void)addDirectory:(NSString *)directory
|
||||||
{
|
{
|
||||||
NSInteger r = [model addDirectory:directory];
|
[model addDirectory:directory];
|
||||||
if (r) {
|
|
||||||
NSString *m = @"";
|
|
||||||
if (r == 1) {
|
|
||||||
m = TR(@"'%@' already is in the list.");
|
|
||||||
}
|
|
||||||
else if (r == 2) {
|
|
||||||
m = TR(@"'%@' does not exist.");
|
|
||||||
}
|
|
||||||
[Dialogs showMessage:[NSString stringWithFormat:m,directory]];
|
|
||||||
}
|
|
||||||
[_recentDirectories addFile:directory];
|
[_recentDirectories addFile:directory];
|
||||||
[[self window] makeKeyAndOrderFront:nil];
|
[[self window] makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
@interface IgnoreListDialog : NSWindowController
|
@interface IgnoreListDialog : NSWindowController
|
||||||
{
|
{
|
||||||
IBOutlet NSTableView *ignoreListTableView;
|
|
||||||
|
|
||||||
PyIgnoreListDialog *model;
|
PyIgnoreListDialog *model;
|
||||||
HSTable *ignoreListTable;
|
HSTable *ignoreListTable;
|
||||||
|
NSTableView *ignoreListTableView;
|
||||||
}
|
}
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef;
|
|
||||||
|
|
||||||
|
@property (readwrite, retain) PyIgnoreListDialog *model;
|
||||||
|
@property (readwrite, retain) NSTableView *ignoreListTableView;
|
||||||
|
|
||||||
|
- (id)initWithPyRef:(PyObject *)aPyRef;
|
||||||
- (void)initializeColumns;
|
- (void)initializeColumns;
|
||||||
- (IBAction)removeSelected:(id)sender;
|
|
||||||
- (IBAction)clear:(id)sender;
|
|
||||||
@end
|
@end
|
||||||
@@ -7,15 +7,20 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "IgnoreListDialog.h"
|
#import "IgnoreListDialog.h"
|
||||||
#import "Utils.h"
|
#import "IgnoreListDialog_UI.h"
|
||||||
|
#import "HSPyUtil.h"
|
||||||
|
|
||||||
@implementation IgnoreListDialog
|
@implementation IgnoreListDialog
|
||||||
|
|
||||||
|
@synthesize model;
|
||||||
|
@synthesize ignoreListTableView;
|
||||||
|
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef
|
- (id)initWithPyRef:(PyObject *)aPyRef
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"IgnoreListDialog"];
|
self = [super initWithWindow:nil];
|
||||||
[self window]; //So the detailsTable is initialized.
|
self.model = [[[PyIgnoreListDialog alloc] initWithModel:aPyRef] autorelease];
|
||||||
model = [[PyIgnoreListDialog alloc] initWithModel:aPyRef];
|
[self.model bindCallback:createCallback(@"IgnoreListDialogView", self)];
|
||||||
[model bindCallback:createCallback(@"IgnoreListDialogView", self)];
|
[self setWindow:createIgnoreListDialog_UI(self)];
|
||||||
ignoreListTable = [[HSTable alloc] initWithPyRef:[model ignoreListTable] tableView:ignoreListTableView];
|
ignoreListTable = [[HSTable alloc] initWithPyRef:[model ignoreListTable] tableView:ignoreListTableView];
|
||||||
[self initializeColumns];
|
[self initializeColumns];
|
||||||
return self;
|
return self;
|
||||||
@@ -24,7 +29,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
[ignoreListTable release];
|
[ignoreListTable release];
|
||||||
[model release];
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,16 +43,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[[ignoreListTable columns] setColumnsAsReadOnly];
|
[[ignoreListTable columns] setColumnsAsReadOnly];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)removeSelected:(id)sender
|
|
||||||
{
|
|
||||||
[model removeSelected];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)clear:(id)sender
|
|
||||||
{
|
|
||||||
[model clear];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* model --> view */
|
/* model --> view */
|
||||||
- (void)show
|
- (void)show
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,20 +15,23 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
@interface PrioritizeDialog : NSWindowController
|
@interface PrioritizeDialog : NSWindowController
|
||||||
{
|
{
|
||||||
IBOutlet NSPopUpButton *categoryPopUpView;
|
NSPopUpButton *categoryPopUpView;
|
||||||
IBOutlet NSTableView *criteriaTableView;
|
NSTableView *criteriaTableView;
|
||||||
IBOutlet NSTableView *prioritizationTableView;
|
NSTableView *prioritizationTableView;
|
||||||
|
|
||||||
PyPrioritizeDialog *model;
|
PyPrioritizeDialog *model;
|
||||||
HSPopUpList *categoryPopUp;
|
HSPopUpList *categoryPopUp;
|
||||||
HSSelectableList *criteriaList;
|
HSSelectableList *criteriaList;
|
||||||
PrioritizeList *prioritizationList;
|
PrioritizeList *prioritizationList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSPopUpButton *categoryPopUpView;
|
||||||
|
@property (readwrite, retain) NSTableView *criteriaTableView;
|
||||||
|
@property (readwrite, retain) NSTableView *prioritizationTableView;
|
||||||
|
|
||||||
- (id)initWithApp:(PyDupeGuru *)aApp;
|
- (id)initWithApp:(PyDupeGuru *)aApp;
|
||||||
- (PyPrioritizeDialog *)model;
|
- (PyPrioritizeDialog *)model;
|
||||||
|
|
||||||
- (IBAction)addSelected:(id)sender;
|
- (void)ok;
|
||||||
- (IBAction)removeSelected:(id)sender;
|
- (void)cancel;
|
||||||
- (IBAction)ok:(id)sender;
|
|
||||||
- (IBAction)cancel:(id)sender;
|
|
||||||
@end;
|
@end;
|
||||||
@@ -7,14 +7,20 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "PrioritizeDialog.h"
|
#import "PrioritizeDialog.h"
|
||||||
#import "Utils.h"
|
#import "PrioritizeDialog_UI.h"
|
||||||
|
#import "HSPyUtil.h"
|
||||||
|
|
||||||
@implementation PrioritizeDialog
|
@implementation PrioritizeDialog
|
||||||
|
|
||||||
|
@synthesize categoryPopUpView;
|
||||||
|
@synthesize criteriaTableView;
|
||||||
|
@synthesize prioritizationTableView;
|
||||||
|
|
||||||
- (id)initWithApp:(PyDupeGuru *)aApp
|
- (id)initWithApp:(PyDupeGuru *)aApp
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"PrioritizeDialog"];
|
self = [super initWithWindowNibName:@"PrioritizeDialog"];
|
||||||
[self window];
|
|
||||||
model = [[PyPrioritizeDialog alloc] initWithApp:[aApp pyRef]];
|
model = [[PyPrioritizeDialog alloc] initWithApp:[aApp pyRef]];
|
||||||
|
[self setWindow:createPrioritizeDialog_UI(self)];
|
||||||
categoryPopUp = [[HSPopUpList alloc] initWithPyRef:[[self model] categoryList] popupView:categoryPopUpView];
|
categoryPopUp = [[HSPopUpList alloc] initWithPyRef:[[self model] categoryList] popupView:categoryPopUpView];
|
||||||
criteriaList = [[HSSelectableList alloc] initWithPyRef:[[self model] criteriaList] tableView:criteriaTableView];
|
criteriaList = [[HSSelectableList alloc] initWithPyRef:[[self model] criteriaList] tableView:criteriaTableView];
|
||||||
prioritizationList = [[PrioritizeList alloc] initWithPyRef:[[self model] prioritizationList] tableView:prioritizationTableView];
|
prioritizationList = [[PrioritizeList alloc] initWithPyRef:[[self model] prioritizationList] tableView:prioritizationTableView];
|
||||||
@@ -36,23 +42,13 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
return (PyPrioritizeDialog *)model;
|
return (PyPrioritizeDialog *)model;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)addSelected:(id)sender
|
- (void)ok
|
||||||
{
|
|
||||||
[[self model] addSelected];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)removeSelected:(id)sender
|
|
||||||
{
|
|
||||||
[[self model] removeSelected];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)ok:(id)sender
|
|
||||||
{
|
{
|
||||||
[NSApp stopModal];
|
[NSApp stopModal];
|
||||||
[self close];
|
[self close];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)cancel:(id)sender
|
- (void)cancel
|
||||||
{
|
{
|
||||||
[NSApp abortModal];
|
[NSApp abortModal];
|
||||||
[self close];
|
[self close];
|
||||||
|
|||||||
@@ -12,13 +12,15 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
@interface ProblemDialog : NSWindowController
|
@interface ProblemDialog : NSWindowController
|
||||||
{
|
{
|
||||||
IBOutlet NSTableView *problemTableView;
|
|
||||||
|
|
||||||
PyProblemDialog *model;
|
PyProblemDialog *model;
|
||||||
HSTable *problemTable;
|
HSTable *problemTable;
|
||||||
|
NSTableView *problemTableView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) PyProblemDialog *model;
|
||||||
|
@property (readwrite, retain) NSTableView *problemTableView;
|
||||||
|
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef;
|
- (id)initWithPyRef:(PyObject *)aPyRef;
|
||||||
|
|
||||||
- (void)initializeColumns;
|
- (void)initializeColumns;
|
||||||
- (IBAction)revealSelected:(id)sender;
|
|
||||||
@end
|
@end
|
||||||
@@ -7,15 +7,20 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "ProblemDialog.h"
|
#import "ProblemDialog.h"
|
||||||
|
#import "ProblemDialog_UI.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
|
|
||||||
@implementation ProblemDialog
|
@implementation ProblemDialog
|
||||||
|
|
||||||
|
@synthesize model;
|
||||||
|
@synthesize problemTableView;
|
||||||
|
|
||||||
- (id)initWithPyRef:(PyObject *)aPyRef
|
- (id)initWithPyRef:(PyObject *)aPyRef
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"ProblemDialog"];
|
self = [super initWithWindow:nil];
|
||||||
[self window]; //So the detailsTable is initialized.
|
self.model = [[PyProblemDialog alloc] initWithModel:aPyRef];
|
||||||
model = [[PyProblemDialog alloc] initWithModel:aPyRef];
|
[self setWindow:createProblemDialog_UI(self)];
|
||||||
problemTable = [[HSTable alloc] initWithPyRef:[model problemTable] tableView:problemTableView];
|
problemTable = [[HSTable alloc] initWithPyRef:[self.model problemTable] tableView:problemTableView];
|
||||||
[self initializeColumns];
|
[self initializeColumns];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -23,7 +28,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
[problemTable release];
|
[problemTable release];
|
||||||
[model release];
|
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,10 +39,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
nil
|
nil
|
||||||
};
|
};
|
||||||
[[problemTable columns] initializeColumns:defs];
|
[[problemTable columns] initializeColumns:defs];
|
||||||
}
|
[[problemTable columns] setColumnsAsReadOnly];
|
||||||
|
|
||||||
- (IBAction)revealSelected:(id)sender
|
|
||||||
{
|
|
||||||
[model revealSelected];
|
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
@@ -9,7 +9,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "ResultTable.h"
|
#import "ResultTable.h"
|
||||||
#import "Dialogs.h"
|
#import "Dialogs.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
#import "Consts.h"
|
|
||||||
#import "HSQuicklook.h"
|
#import "HSQuicklook.h"
|
||||||
|
|
||||||
@interface HSTable (private)
|
@interface HSTable (private)
|
||||||
@@ -99,7 +98,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
if (![newName isEqual:oldName]) {
|
if (![newName isEqual:oldName]) {
|
||||||
BOOL renamed = [[self model] renameSelected:newName];
|
BOOL renamed = [[self model] renameSelected:newName];
|
||||||
if (!renamed) {
|
if (!renamed) {
|
||||||
[Dialogs showMessage:[NSString stringWithFormat:TR(@"The name '%@' already exists."), newName]];
|
[Dialogs showMessage:[NSString stringWithFormat:NSLocalizedString(@"The name '%@' already exists.", @""), newName]];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[[self view] setNeedsDisplay:YES];
|
[[self view] setNeedsDisplay:YES];
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "StatsLabel.h"
|
#import "StatsLabel.h"
|
||||||
#import "ResultTable.h"
|
#import "ResultTable.h"
|
||||||
#import "ProblemDialog.h"
|
#import "ProblemDialog.h"
|
||||||
|
#import "DeletionOptions.h"
|
||||||
#import "HSTableView.h"
|
#import "HSTableView.h"
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
|
|
||||||
@@ -19,20 +20,27 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
@interface ResultWindowBase : NSWindowController
|
@interface ResultWindowBase : NSWindowController
|
||||||
{
|
{
|
||||||
@protected
|
@protected
|
||||||
IBOutlet NSSegmentedControl *optionsSwitch;
|
NSSegmentedControl *optionsSwitch;
|
||||||
IBOutlet NSToolbarItem *optionsToolbarItem;
|
NSToolbarItem *optionsToolbarItem;
|
||||||
IBOutlet HSTableView *matches;
|
HSTableView *matches;
|
||||||
IBOutlet NSTextField *stats;
|
NSTextField *stats;
|
||||||
IBOutlet NSSearchField *filterField;
|
NSSearchField *filterField;
|
||||||
|
|
||||||
AppDelegateBase *app;
|
AppDelegateBase *app;
|
||||||
PyDupeGuru *model;
|
PyDupeGuru *model;
|
||||||
NSMenu *columnsMenu;
|
|
||||||
ResultTable *table;
|
ResultTable *table;
|
||||||
StatsLabel *statsLabel;
|
StatsLabel *statsLabel;
|
||||||
ProblemDialog *problemDialog;
|
ProblemDialog *problemDialog;
|
||||||
|
DeletionOptions *deletionOptions;
|
||||||
QLPreviewPanel* previewPanel;
|
QLPreviewPanel* previewPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSSegmentedControl *optionsSwitch;
|
||||||
|
@property (readwrite, retain) NSToolbarItem *optionsToolbarItem;
|
||||||
|
@property (readwrite, retain) HSTableView *matches;
|
||||||
|
@property (readwrite, retain) NSTextField *stats;
|
||||||
|
@property (readwrite, retain) NSSearchField *filterField;
|
||||||
|
|
||||||
- (id)initWithParentApp:(AppDelegateBase *)app;
|
- (id)initWithParentApp:(AppDelegateBase *)app;
|
||||||
|
|
||||||
/* Virtual */
|
/* Virtual */
|
||||||
@@ -41,39 +49,37 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
/* Helpers */
|
/* Helpers */
|
||||||
- (void)fillColumnsMenu;
|
- (void)fillColumnsMenu;
|
||||||
- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted;
|
|
||||||
- (void)updateOptionSegments;
|
- (void)updateOptionSegments;
|
||||||
- (void)showProblemDialog;
|
- (void)showProblemDialog;
|
||||||
- (void)adjustUIToLocalization;
|
- (void)adjustUIToLocalization;
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)changeOptions:(id)sender;
|
- (void)changeOptions;
|
||||||
- (IBAction)copyMarked:(id)sender;
|
- (void)copyMarked;
|
||||||
- (IBAction)deleteMarked:(id)sender;
|
- (void)trashMarked;
|
||||||
- (IBAction)hardlinkMarked:(id)sender;
|
- (void)filter;
|
||||||
- (IBAction)exportToXHTML:(id)sender;
|
- (void)focusOnFilterField;
|
||||||
- (IBAction)filter:(id)sender;
|
- (void)ignoreSelected;
|
||||||
- (IBAction)ignoreSelected:(id)sender;
|
- (void)invokeCustomCommand;
|
||||||
- (IBAction)invokeCustomCommand:(id)sender;
|
- (void)markAll;
|
||||||
- (IBAction)markAll:(id)sender;
|
- (void)markInvert;
|
||||||
- (IBAction)markInvert:(id)sender;
|
- (void)markNone;
|
||||||
- (IBAction)markNone:(id)sender;
|
- (void)markSelected;
|
||||||
- (IBAction)markSelected:(id)sender;
|
- (void)moveMarked;
|
||||||
- (IBAction)moveMarked:(id)sender;
|
- (void)openClicked;
|
||||||
- (IBAction)openClicked:(id)sender;
|
- (void)openSelected;
|
||||||
- (IBAction)openSelected:(id)sender;
|
- (void)removeMarked;
|
||||||
- (IBAction)removeMarked:(id)sender;
|
- (void)removeSelected;
|
||||||
- (IBAction)removeSelected:(id)sender;
|
- (void)renameSelected;
|
||||||
- (IBAction)renameSelected:(id)sender;
|
- (void)reprioritizeResults;
|
||||||
- (IBAction)reprioritizeResults:(id)sender;
|
- (void)resetColumnsToDefault;
|
||||||
- (IBAction)resetColumnsToDefault:(id)sender;
|
- (void)revealSelected;
|
||||||
- (IBAction)revealSelected:(id)sender;
|
- (void)saveResults;
|
||||||
- (IBAction)saveResults:(id)sender;
|
- (void)startDuplicateScan;
|
||||||
- (IBAction)startDuplicateScan:(id)sender;
|
- (void)switchSelected;
|
||||||
- (IBAction)switchSelected:(id)sender;
|
- (void)toggleColumn:(id)sender;
|
||||||
- (IBAction)toggleColumn:(id)sender;
|
- (void)toggleDelta;
|
||||||
- (IBAction)toggleDelta:(id)sender;
|
- (void)toggleDetailsPanel;
|
||||||
- (IBAction)toggleDetailsPanel:(id)sender;
|
- (void)togglePowerMarker;
|
||||||
- (IBAction)togglePowerMarker:(id)sender;
|
- (void)toggleQuicklookPanel;
|
||||||
- (IBAction)toggleQuicklookPanel:(id)sender;
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "ResultWindow.h"
|
#import "ResultWindow.h"
|
||||||
|
#import "ResultWindow_UI.h"
|
||||||
#import "Dialogs.h"
|
#import "Dialogs.h"
|
||||||
#import "ProgressController.h"
|
#import "ProgressController.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
@@ -15,22 +16,31 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "PrioritizeDialog.h"
|
#import "PrioritizeDialog.h"
|
||||||
|
|
||||||
@implementation ResultWindowBase
|
@implementation ResultWindowBase
|
||||||
|
|
||||||
|
@synthesize optionsSwitch;
|
||||||
|
@synthesize optionsToolbarItem;
|
||||||
|
@synthesize matches;
|
||||||
|
@synthesize stats;
|
||||||
|
@synthesize filterField;
|
||||||
|
|
||||||
- (id)initWithParentApp:(AppDelegateBase *)aApp;
|
- (id)initWithParentApp:(AppDelegateBase *)aApp;
|
||||||
{
|
{
|
||||||
self = [super initWithWindowNibName:@"ResultWindow"];
|
self = [super initWithWindow:nil];
|
||||||
app = aApp;
|
app = aApp;
|
||||||
model = [app model];
|
model = [app model];
|
||||||
|
[self setWindow:createResultWindow_UI(self)];
|
||||||
[[self window] setTitle:fmt(@"%@ Results", [model appName])];
|
[[self window] setTitle:fmt(@"%@ Results", [model appName])];
|
||||||
columnsMenu = [app columnsMenu];
|
|
||||||
/* Put a cute iTunes-like bottom bar */
|
/* Put a cute iTunes-like bottom bar */
|
||||||
[[self window] setContentBorderThickness:28 forEdge:NSMinYEdge];
|
[[self window] setContentBorderThickness:28 forEdge:NSMinYEdge];
|
||||||
table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches];
|
table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches];
|
||||||
statsLabel = [[StatsLabel alloc] initWithPyRef:[model statsLabel] view:stats];
|
statsLabel = [[StatsLabel alloc] initWithPyRef:[model statsLabel] view:stats];
|
||||||
problemDialog = [[ProblemDialog alloc] initWithPyRef:[model problemDialog]];
|
problemDialog = [[ProblemDialog alloc] initWithPyRef:[model problemDialog]];
|
||||||
|
deletionOptions = [[DeletionOptions alloc] initWithPyRef:[model deletionOptions]];
|
||||||
[self initResultColumns];
|
[self initResultColumns];
|
||||||
|
[[table columns] setColumnsAsReadOnly];
|
||||||
[self fillColumnsMenu];
|
[self fillColumnsMenu];
|
||||||
[matches setTarget:self];
|
[matches setTarget:self];
|
||||||
[matches setDoubleAction:@selector(openClicked:)];
|
[matches setDoubleAction:@selector(openClicked)];
|
||||||
[self adjustUIToLocalization];
|
[self adjustUIToLocalization];
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobStarted:) name:JobStarted object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobStarted:) name:JobStarted object:nil];
|
||||||
@@ -58,34 +68,23 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
/* Helpers */
|
/* Helpers */
|
||||||
- (void)fillColumnsMenu
|
- (void)fillColumnsMenu
|
||||||
{
|
{
|
||||||
|
[[app columnsMenu] removeAllItems];
|
||||||
NSArray *menuItems = [[[table columns] model] menuItems];
|
NSArray *menuItems = [[[table columns] model] menuItems];
|
||||||
for (NSInteger i=0; i < [menuItems count]; i++) {
|
for (NSInteger i=0; i < [menuItems count]; i++) {
|
||||||
NSArray *pair = [menuItems objectAtIndex:i];
|
NSArray *pair = [menuItems objectAtIndex:i];
|
||||||
NSString *display = [pair objectAtIndex:0];
|
NSString *display = [pair objectAtIndex:0];
|
||||||
BOOL marked = n2b([pair objectAtIndex:1]);
|
BOOL marked = n2b([pair objectAtIndex:1]);
|
||||||
NSMenuItem *mi = [columnsMenu addItemWithTitle:display action:@selector(toggleColumn:) keyEquivalent:@""];
|
NSMenuItem *mi = [[app columnsMenu] addItemWithTitle:display action:@selector(toggleColumn:) keyEquivalent:@""];
|
||||||
[mi setTarget:self];
|
[mi setTarget:self];
|
||||||
[mi setState:marked ? NSOnState : NSOffState];
|
[mi setState:marked ? NSOnState : NSOffState];
|
||||||
[mi setTag:i];
|
[mi setTag:i];
|
||||||
}
|
}
|
||||||
[columnsMenu addItem:[NSMenuItem separatorItem]];
|
[[app columnsMenu] addItem:[NSMenuItem separatorItem]];
|
||||||
NSMenuItem *mi = [columnsMenu addItemWithTitle:TR(@"Reset to Default")
|
NSMenuItem *mi = [[app columnsMenu] addItemWithTitle:NSLocalizedString(@"Reset to Default", @"")
|
||||||
action:@selector(resetColumnsToDefault:) keyEquivalent:@""];
|
action:@selector(resetColumnsToDefault) keyEquivalent:@""];
|
||||||
[mi setTarget:self];
|
[mi setTarget:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted
|
|
||||||
{
|
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
|
||||||
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
|
||||||
if (hardlinkDeleted) {
|
|
||||||
[model hardlinkMarked];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
[model deleteMarked];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateOptionSegments
|
- (void)updateOptionSegments
|
||||||
{
|
{
|
||||||
[optionsSwitch setSelected:[[app detailsPanel] isVisible] forSegment:0];
|
[optionsSwitch setSelected:[[app detailsPanel] isVisible] forSegment:0];
|
||||||
@@ -123,21 +122,21 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)changeOptions:(id)sender
|
- (void)changeOptions
|
||||||
{
|
{
|
||||||
NSInteger seg = [optionsSwitch selectedSegment];
|
NSInteger seg = [optionsSwitch selectedSegment];
|
||||||
if (seg == 0) {
|
if (seg == 0) {
|
||||||
[self toggleDetailsPanel:sender];
|
[self toggleDetailsPanel];
|
||||||
}
|
}
|
||||||
else if (seg == 1) {
|
else if (seg == 1) {
|
||||||
[self togglePowerMarker:sender];
|
[self togglePowerMarker];
|
||||||
}
|
}
|
||||||
else if (seg == 2) {
|
else if (seg == 2) {
|
||||||
[self toggleDelta:sender];
|
[self toggleDelta];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)copyMarked:(id)sender
|
- (void)copyMarked
|
||||||
{
|
{
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
||||||
@@ -145,60 +144,56 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[model copyMarked];
|
[model copyMarked];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)deleteMarked:(id)sender
|
- (void)trashMarked
|
||||||
{
|
{
|
||||||
[self sendMarkedToTrash:NO];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
|
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
||||||
|
[model deleteMarked];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)hardlinkMarked:(id)sender
|
- (void)filter
|
||||||
{
|
|
||||||
[self sendMarkedToTrash:YES];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)exportToXHTML:(id)sender
|
|
||||||
{
|
|
||||||
NSString *exported = [model exportToXHTML];
|
|
||||||
[[NSWorkspace sharedWorkspace] openFile:exported];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)filter:(id)sender
|
|
||||||
{
|
{
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
[model setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])];
|
[model setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])];
|
||||||
[model applyFilter:[filterField stringValue]];
|
[model applyFilter:[filterField stringValue]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)ignoreSelected:(id)sender
|
- (void)focusOnFilterField
|
||||||
|
{
|
||||||
|
[[self window] makeFirstResponder:filterField];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)ignoreSelected
|
||||||
{
|
{
|
||||||
[model addSelectedToIgnoreList];
|
[model addSelectedToIgnoreList];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)invokeCustomCommand:(id)sender
|
- (void)invokeCustomCommand
|
||||||
{
|
{
|
||||||
[model invokeCustomCommand];
|
[model invokeCustomCommand];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)markAll:(id)sender
|
- (void)markAll
|
||||||
{
|
{
|
||||||
[model markAll];
|
[model markAll];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)markInvert:(id)sender
|
- (void)markInvert
|
||||||
{
|
{
|
||||||
[model markInvert];
|
[model markInvert];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)markNone:(id)sender
|
- (void)markNone
|
||||||
{
|
{
|
||||||
[model markNone];
|
[model markNone];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)markSelected:(id)sender
|
- (void)markSelected
|
||||||
{
|
{
|
||||||
[model toggleSelectedMark];
|
[model toggleSelectedMark];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)moveMarked:(id)sender
|
- (void)moveMarked
|
||||||
{
|
{
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
[model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
|
||||||
@@ -206,7 +201,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[model moveMarked];
|
[model moveMarked];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)openClicked:(id)sender
|
- (void)openClicked
|
||||||
{
|
{
|
||||||
if ([matches clickedRow] < 0) {
|
if ([matches clickedRow] < 0) {
|
||||||
return;
|
return;
|
||||||
@@ -215,29 +210,29 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[model openSelected];
|
[model openSelected];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)openSelected:(id)sender
|
- (void)openSelected
|
||||||
{
|
{
|
||||||
[model openSelected];
|
[model openSelected];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)removeMarked:(id)sender
|
- (void)removeMarked
|
||||||
{
|
{
|
||||||
[model removeMarked];
|
[model removeMarked];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)removeSelected:(id)sender
|
- (void)removeSelected
|
||||||
{
|
{
|
||||||
[model removeSelected];
|
[model removeSelected];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)renameSelected:(id)sender
|
- (void)renameSelected
|
||||||
{
|
{
|
||||||
NSInteger col = [matches columnWithIdentifier:@"0"];
|
NSInteger col = [matches columnWithIdentifier:@"name"];
|
||||||
NSInteger row = [matches selectedRow];
|
NSInteger row = [matches selectedRow];
|
||||||
[matches editColumn:col row:row withEvent:[NSApp currentEvent] select:YES];
|
[matches editColumn:col row:row withEvent:[NSApp currentEvent] select:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)reprioritizeResults:(id)sender
|
- (void)reprioritizeResults
|
||||||
{
|
{
|
||||||
PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithApp:model];
|
PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithApp:model];
|
||||||
NSInteger result = [NSApp runModalForWindow:[dlg window]];
|
NSInteger result = [NSApp runModalForWindow:[dlg window]];
|
||||||
@@ -248,69 +243,70 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
[[self window] makeKeyAndOrderFront:nil];
|
[[self window] makeKeyAndOrderFront:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)resetColumnsToDefault:(id)sender
|
- (void)resetColumnsToDefault
|
||||||
{
|
{
|
||||||
[[[table columns] model] resetToDefaults];
|
[[[table columns] model] resetToDefaults];
|
||||||
|
[self fillColumnsMenu];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)revealSelected:(id)sender
|
- (void)revealSelected
|
||||||
{
|
{
|
||||||
[model revealSelected];
|
[model revealSelected];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)saveResults:(id)sender
|
- (void)saveResults
|
||||||
{
|
{
|
||||||
NSSavePanel *sp = [NSSavePanel savePanel];
|
NSSavePanel *sp = [NSSavePanel savePanel];
|
||||||
[sp setCanCreateDirectories:YES];
|
[sp setCanCreateDirectories:YES];
|
||||||
[sp setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
|
[sp setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
|
||||||
[sp setTitle:TR(@"Select a file to save your results to")];
|
[sp setTitle:NSLocalizedString(@"Select a file to save your results to", @"")];
|
||||||
if ([sp runModal] == NSOKButton) {
|
if ([sp runModal] == NSOKButton) {
|
||||||
[model saveResultsAs:[sp filename]];
|
[model saveResultsAs:[sp filename]];
|
||||||
[[app recentResults] addFile:[sp filename]];
|
[[app recentResults] addFile:[sp filename]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)startDuplicateScan:(id)sender
|
- (void)startDuplicateScan
|
||||||
{
|
{
|
||||||
if ([model resultsAreModified]) {
|
if ([model resultsAreModified]) {
|
||||||
if ([Dialogs askYesNo:TR(@"You have unsaved results, do you really want to continue?")] == NSAlertSecondButtonReturn) // NO
|
if ([Dialogs askYesNo:NSLocalizedString(@"You have unsaved results, do you really want to continue?", @"")] == NSAlertSecondButtonReturn) // NO
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
[self setScanOptions];
|
[self setScanOptions];
|
||||||
[model doScan];
|
[model doScan];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)switchSelected:(id)sender
|
- (void)switchSelected
|
||||||
{
|
{
|
||||||
[model makeSelectedReference];
|
[model makeSelectedReference];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)toggleColumn:(id)sender
|
- (void)toggleColumn:(id)sender
|
||||||
{
|
{
|
||||||
NSMenuItem *mi = sender;
|
NSMenuItem *mi = sender;
|
||||||
BOOL checked = [[[table columns] model] toggleMenuItem:[mi tag]];
|
BOOL checked = [[[table columns] model] toggleMenuItem:[mi tag]];
|
||||||
[mi setState:checked ? NSOnState : NSOffState];
|
[mi setState:checked ? NSOnState : NSOffState];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)toggleDetailsPanel:(id)sender
|
- (void)toggleDetailsPanel
|
||||||
{
|
{
|
||||||
[[app detailsPanel] toggleVisibility];
|
[[app detailsPanel] toggleVisibility];
|
||||||
[self updateOptionSegments];
|
[self updateOptionSegments];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)toggleDelta:(id)sender
|
- (void)toggleDelta
|
||||||
{
|
{
|
||||||
[table setDeltaValuesMode:![table deltaValuesMode]];
|
[table setDeltaValuesMode:![table deltaValuesMode]];
|
||||||
[self updateOptionSegments];
|
[self updateOptionSegments];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)togglePowerMarker:(id)sender
|
- (void)togglePowerMarker
|
||||||
{
|
{
|
||||||
[table setPowerMarkerMode:![table powerMarkerMode]];
|
[table setPowerMarkerMode:![table powerMarkerMode]];
|
||||||
[self updateOptionSegments];
|
[self updateOptionSegments];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)toggleQuicklookPanel:(id)sender
|
- (void)toggleQuicklookPanel
|
||||||
{
|
{
|
||||||
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) {
|
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) {
|
||||||
[[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
|
[[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
|
||||||
@@ -346,7 +342,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
- (void)jobInProgress:(NSNotification *)aNotification
|
- (void)jobInProgress:(NSNotification *)aNotification
|
||||||
{
|
{
|
||||||
[Dialogs showMessage:TR(@"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.")];
|
[Dialogs showMessage:NSLocalizedString(@"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.", @"")];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)jobStarted:(NSNotification *)aNotification
|
- (void)jobStarted:(NSNotification *)aNotification
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSPanel"; title = "Details of Selected File"; ObjectID = "5"; */
|
|
||||||
"5.title" = "Details of Selected File";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Selected"; ObjectID = "9"; */
|
|
||||||
"9.headerCell.title" = "Selected";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Reference"; ObjectID = "10"; */
|
|
||||||
"10.headerCell.title" = "Reference";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Attribute"; ObjectID = "11"; */
|
|
||||||
"11.headerCell.title" = "Attribute";
|
|
||||||
@@ -1,519 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1060</int>
|
|
||||||
<string key="IBDocument.SystemVersion">11B26</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">1617</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1138</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">566.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">1617</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
<string>NSScrollView</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSTextFieldCell</string>
|
|
||||||
<string>NSTableHeaderView</string>
|
|
||||||
<string>NSTableColumn</string>
|
|
||||||
<string>NSScroller</string>
|
|
||||||
<string>NSTableView</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="247693826">
|
|
||||||
<object class="NSCustomObject" id="449947658">
|
|
||||||
<string key="NSClassName">DetailsPanel</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="176092317">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="492866996">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="476890502">
|
|
||||||
<int key="NSWindowStyleMask">155</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{33, 261}, {451, 146}}</string>
|
|
||||||
<int key="NSWTFlags">-260571136</int>
|
|
||||||
<string key="NSWindowTitle">Details of Selected File</string>
|
|
||||||
<object class="NSMutableString" key="NSWindowClass">
|
|
||||||
<characters key="NS.bytes">NSPanel</characters>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableString" key="NSViewClass">
|
|
||||||
<characters key="NS.bytes">View</characters>
|
|
||||||
</object>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<string key="NSWindowContentMinSize">{451, 146}</string>
|
|
||||||
<object class="NSView" key="NSWindowView" id="1027711962">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSScrollView" id="362108788">
|
|
||||||
<reference key="NSNextResponder" ref="1027711962"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="488480549">
|
|
||||||
<reference key="NSNextResponder" ref="362108788"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="251969872">
|
|
||||||
<reference key="NSNextResponder" ref="488480549"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{449, 128}</string>
|
|
||||||
<reference key="NSSuperview" ref="488480549"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSTag">2</int>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTableHeaderView" key="NSHeaderView" id="374654484">
|
|
||||||
<reference key="NSNextResponder" ref="110085834"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{449, 17}</string>
|
|
||||||
<reference key="NSSuperview" ref="110085834"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTableView" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView" id="717380566">
|
|
||||||
<reference key="NSNextResponder" ref="362108788"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-26, 0}, {16, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="362108788"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns">
|
|
||||||
<object class="NSTableColumn" id="920315484">
|
|
||||||
<string key="NSIdentifier">0</string>
|
|
||||||
<double key="NSWidth">70</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Attribute</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="26">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">11</double>
|
|
||||||
<int key="NSfFlags">3100</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="690482064">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="427935076">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">headerTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="45430568">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="402714943">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="251969872"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="1015576963">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="183338835">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlTextColor</string>
|
|
||||||
<reference key="NSColor" ref="45430568"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">2</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTableColumn" id="683288430">
|
|
||||||
<string key="NSIdentifier">1</string>
|
|
||||||
<double key="NSWidth">198</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Selected</string>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="690482064"/>
|
|
||||||
<reference key="NSTextColor" ref="427935076"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="649788063">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="251969872"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="1015576963"/>
|
|
||||||
<reference key="NSTextColor" ref="183338835"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTableColumn" id="694550305">
|
|
||||||
<string key="NSIdentifier">2</string>
|
|
||||||
<double key="NSWidth">172</double>
|
|
||||||
<double key="NSMinWidth">56.4755859375</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Reference</string>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">headerColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="666582600">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<reference key="NSTextColor" ref="427935076"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="915876533">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="251969872"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="1015576963"/>
|
|
||||||
<reference key="NSTextColor" ref="183338835"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<reference key="NSBackgroundColor" ref="666582600"/>
|
|
||||||
<object class="NSColor" key="NSGridColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">gridColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<double key="NSRowHeight">14</double>
|
|
||||||
<int key="NSTvFlags">1111523328</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">1</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">YES</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 17}, {449, 128}}</string>
|
|
||||||
<reference key="NSSuperview" ref="362108788"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="251969872"/>
|
|
||||||
<reference key="NSDocView" ref="251969872"/>
|
|
||||||
<reference key="NSBGColor" ref="1015576963"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="733942317">
|
|
||||||
<reference key="NSNextResponder" ref="362108788"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-30, 17}, {15, 129}}</string>
|
|
||||||
<reference key="NSSuperview" ref="362108788"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTarget" ref="362108788"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.89375001192092896</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="168632382">
|
|
||||||
<reference key="NSNextResponder" ref="362108788"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-100, -100}, {394, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="362108788"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="362108788"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.96332520246505737</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSClipView" id="110085834">
|
|
||||||
<reference key="NSNextResponder" ref="362108788"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<reference ref="374654484"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 0}, {449, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="362108788"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="374654484"/>
|
|
||||||
<reference key="NSDocView" ref="374654484"/>
|
|
||||||
<reference key="NSBGColor" ref="1015576963"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="717380566"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{451, 146}</string>
|
|
||||||
<reference key="NSSuperview" ref="1027711962"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="488480549"/>
|
|
||||||
<int key="NSsFlags">133650</int>
|
|
||||||
<reference key="NSVScroller" ref="733942317"/>
|
|
||||||
<reference key="NSHScroller" ref="168632382"/>
|
|
||||||
<reference key="NSContentView" ref="488480549"/>
|
|
||||||
<reference key="NSHeaderClipView" ref="110085834"/>
|
|
||||||
<reference key="NSCornerView" ref="717380566"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBgAAAQYAAAA</bytes>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{451, 146}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
|
|
||||||
<string key="NSMinSize">{451, 162}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<string key="NSFrameAutosaveName">DetailsPanel</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="449947658"/>
|
|
||||||
<reference key="destination" ref="476890502"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">12</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">dataSource</string>
|
|
||||||
<reference key="source" ref="251969872"/>
|
|
||||||
<reference key="destination" ref="449947658"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">21</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">detailsTable</string>
|
|
||||||
<reference key="source" ref="449947658"/>
|
|
||||||
<reference key="destination" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">22</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="247693826"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="449947658"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="176092317"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">5</int>
|
|
||||||
<reference key="object" ref="476890502"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1027711962"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">details</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">6</int>
|
|
||||||
<reference key="object" ref="1027711962"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="362108788"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="476890502"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">7</int>
|
|
||||||
<reference key="object" ref="362108788"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="251969872"/>
|
|
||||||
<reference ref="733942317"/>
|
|
||||||
<reference ref="168632382"/>
|
|
||||||
<reference ref="374654484"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1027711962"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">8</int>
|
|
||||||
<reference key="object" ref="251969872"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="683288430"/>
|
|
||||||
<reference ref="694550305"/>
|
|
||||||
<reference ref="920315484"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="362108788"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">9</int>
|
|
||||||
<reference key="object" ref="683288430"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="649788063"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">10</int>
|
|
||||||
<reference key="object" ref="694550305"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="915876533"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">11</int>
|
|
||||||
<reference key="object" ref="920315484"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="402714943"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="251969872"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">15</int>
|
|
||||||
<reference key="object" ref="649788063"/>
|
|
||||||
<reference key="parent" ref="683288430"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">16</int>
|
|
||||||
<reference key="object" ref="915876533"/>
|
|
||||||
<reference key="parent" ref="694550305"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">17</int>
|
|
||||||
<reference key="object" ref="402714943"/>
|
|
||||||
<reference key="parent" ref="920315484"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">18</int>
|
|
||||||
<reference key="object" ref="733942317"/>
|
|
||||||
<reference key="parent" ref="362108788"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">19</int>
|
|
||||||
<reference key="object" ref="168632382"/>
|
|
||||||
<reference key="parent" ref="362108788"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">20</int>
|
|
||||||
<reference key="object" ref="374654484"/>
|
|
||||||
<reference key="parent" ref="362108788"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="492866996"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="15.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="16.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="17.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="18.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="19.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="20.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="5.IBWindowTemplateEditedContentRect">{{109, 671}, {451, 146}}</string>
|
|
||||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">22</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">DetailsPanel</string>
|
|
||||||
<string key="superclassName">HSWindowController</string>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">detailsTable</string>
|
|
||||||
<string key="NS.object.0">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">detailsTable</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">detailsTable</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/DetailsPanel.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">HSWindowController</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/HSWindowController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<integer value="1050" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
|
||||||
<real value="4100" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/* Class = "NSTableColumn"; headerCell.title = "State"; ObjectID = "13"; */
|
|
||||||
"13.headerCell.title" = "State";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Name"; ObjectID = "15"; */
|
|
||||||
"15.headerCell.title" = "Name";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Scan"; ObjectID = "48"; */
|
|
||||||
"48.title" = "Scan";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Normal"; ObjectID = "55"; */
|
|
||||||
"55.title" = "Normal";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Reference"; ObjectID = "56"; */
|
|
||||||
"56.title" = "Reference";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Excluded"; ObjectID = "57"; */
|
|
||||||
"57.title" = "Excluded";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Select folders to scan and press \"Scan\"."; ObjectID = "71"; */
|
|
||||||
"71.title" = "Select folders to scan and press \"Scan\".";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Load Results"; ObjectID = "73"; */
|
|
||||||
"73.title" = "Load Results";
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
/* 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";
|
|
||||||
@@ -1,504 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1060</int>
|
|
||||||
<string key="IBDocument.SystemVersion">11D50</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">2177</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">2177</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSTableView</string>
|
|
||||||
<string>NSScrollView</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSTableHeaderView</string>
|
|
||||||
<string>NSButtonCell</string>
|
|
||||||
<string>NSButton</string>
|
|
||||||
<string>NSScroller</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
|
||||||
<integer value="1" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
|
||||||
<object class="NSCustomObject" id="1001">
|
|
||||||
<string key="NSClassName">IgnoreListDialog</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1003">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1004">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="359561441">
|
|
||||||
<int key="NSWindowStyleMask">11</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{477, 306}, {574, 347}}</string>
|
|
||||||
<int key="NSWTFlags">1685585920</int>
|
|
||||||
<string key="NSWindowTitle">Ignore List</string>
|
|
||||||
<string key="NSWindowClass">NSWindow</string>
|
|
||||||
<nil key="NSViewClass"/>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<object class="NSView" key="NSWindowView" id="976198330">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSScrollView" id="458371270">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="831830981">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="252791348">
|
|
||||||
<reference key="NSNextResponder" ref="831830981"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{532, 211}</string>
|
|
||||||
<reference key="NSSuperview" ref="831830981"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="777677330"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTableHeaderView" key="NSHeaderView" id="903452051">
|
|
||||||
<reference key="NSNextResponder" ref="777677330"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{532, 17}</string>
|
|
||||||
<reference key="NSSuperview" ref="777677330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="564034022"/>
|
|
||||||
<reference key="NSTableView" ref="252791348"/>
|
|
||||||
</object>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView" id="564034022">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 0}, {16, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="831830981"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns"/>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSGridColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">gridColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<double key="NSRowHeight">17</double>
|
|
||||||
<int key="NSTvFlags">1512046592</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">4</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">NO</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 17}, {532, 249}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="252791348"/>
|
|
||||||
<reference key="NSDocView" ref="252791348"/>
|
|
||||||
<object class="NSColor" key="NSBGColor" id="765209443">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="99096694">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="47224920"/>
|
|
||||||
<reference key="NSTarget" ref="458371270"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.99052132701421802</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="47224920">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{1, 154}, {438, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="253286088"/>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="458371270"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSCurValue">1</double>
|
|
||||||
<double key="NSPercent">0.98871331828442433</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSClipView" id="777677330">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<reference ref="903452051"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 0}, {532, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="903452051"/>
|
|
||||||
<reference key="NSDocView" ref="903452051"/>
|
|
||||||
<reference key="NSBGColor" ref="765209443"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="564034022"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{20, 60}, {534, 267}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="831830981"/>
|
|
||||||
<int key="NSsFlags">133682</int>
|
|
||||||
<reference key="NSVScroller" ref="99096694"/>
|
|
||||||
<reference key="NSHScroller" ref="47224920"/>
|
|
||||||
<reference key="NSContentView" ref="831830981"/>
|
|
||||||
<reference key="NSHeaderClipView" ref="777677330"/>
|
|
||||||
<reference key="NSCornerView" ref="564034022"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="4380169">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">289</int>
|
|
||||||
<string key="NSFrame">{{464, 12}, {96, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="373771329">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Close</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="680801460">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">13</double>
|
|
||||||
<int key="NSfFlags">1044</int>
|
|
||||||
</object>
|
|
||||||
<reference key="NSControlView" ref="4380169"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="253286088">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">292</int>
|
|
||||||
<string key="NSFrame">{{14, 12}, {154, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="983148229"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="671547957">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Remove Selected</string>
|
|
||||||
<reference key="NSSupport" ref="680801460"/>
|
|
||||||
<reference key="NSControlView" ref="253286088"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="983148229">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">292</int>
|
|
||||||
<string key="NSFrame">{{162, 12}, {154, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="4380169"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="409951495">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Clear</string>
|
|
||||||
<reference key="NSSupport" ref="680801460"/>
|
|
||||||
<reference key="NSControlView" ref="983148229"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{574, 347}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="359561441"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">22</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">ignoreListTableView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="252791348"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">30</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">removeSelected:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="253286088"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">31</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">clear:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="983148229"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">32</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">performClose:</string>
|
|
||||||
<reference key="source" ref="359561441"/>
|
|
||||||
<reference key="destination" ref="4380169"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">25</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="359561441"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="976198330"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">2</int>
|
|
||||||
<reference key="object" ref="976198330"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="458371270"/>
|
|
||||||
<reference ref="4380169"/>
|
|
||||||
<reference ref="253286088"/>
|
|
||||||
<reference ref="983148229"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="359561441"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">5</int>
|
|
||||||
<reference key="object" ref="458371270"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="99096694"/>
|
|
||||||
<reference ref="47224920"/>
|
|
||||||
<reference ref="252791348"/>
|
|
||||||
<reference ref="903452051"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">6</int>
|
|
||||||
<reference key="object" ref="99096694"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">7</int>
|
|
||||||
<reference key="object" ref="47224920"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">8</int>
|
|
||||||
<reference key="object" ref="252791348"/>
|
|
||||||
<array class="NSMutableArray" key="children"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">9</int>
|
|
||||||
<reference key="object" ref="903452051"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">18</int>
|
|
||||||
<reference key="object" ref="4380169"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="373771329"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">19</int>
|
|
||||||
<reference key="object" ref="373771329"/>
|
|
||||||
<reference key="parent" ref="4380169"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">20</int>
|
|
||||||
<reference key="object" ref="253286088"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="671547957"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">21</int>
|
|
||||||
<reference key="object" ref="671547957"/>
|
|
||||||
<reference key="parent" ref="253286088"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">27</int>
|
|
||||||
<reference key="object" ref="983148229"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="409951495"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">28</int>
|
|
||||||
<reference key="object" ref="409951495"/>
|
|
||||||
<reference key="parent" ref="983148229"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBWindowTemplateEditedContentRect">{{477, 306}, {480, 309}}</string>
|
|
||||||
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
|
|
||||||
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">32</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">IgnoreListDialog</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actions">
|
|
||||||
<string key="clear:">id</string>
|
|
||||||
<string key="removeSelected:">id</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actionInfosByName">
|
|
||||||
<object class="IBActionInfo" key="clear:">
|
|
||||||
<string key="name">clear:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="removeSelected:">
|
|
||||||
<string key="name">removeSelected:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">ignoreListTableView</string>
|
|
||||||
<string key="NS.object.0">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">ignoreListTableView</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">ignoreListTableView</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/IgnoreListDialog.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
|
||||||
<real value="4100" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
@@ -1,27 +1,150 @@
|
|||||||
"Add New Folder..." = "Add New Folder...";
|
|
||||||
"Load from file..." = "Load from file...";
|
|
||||||
"Reset to Default" = "Reset to Default";
|
|
||||||
|
|
||||||
"Select a results file to load" = "Select a results file to load";
|
"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again." = "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.";
|
||||||
"You have unsaved results, do you really want to quit?" = "You have unsaved results, do you really want to quit?";
|
"About dupeGuru" = "About dupeGuru";
|
||||||
|
"Action" = "Action";
|
||||||
|
"Actions" = "Actions";
|
||||||
|
"Add Aperture Library" = "Add Aperture Library";
|
||||||
|
"Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information." = "Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information.";
|
||||||
|
"Add iPhoto Library" = "Add iPhoto Library";
|
||||||
|
"Add iTunes Library" = "Add iTunes Library";
|
||||||
|
"Add New Folder..." = "Add New Folder...";
|
||||||
|
"Add Selected to Ignore List" = "Add Selected to Ignore List";
|
||||||
|
"Advanced" = "Advanced";
|
||||||
|
"After having deleted a duplicate, place a link targeting the reference file to replace the deleted file." = "After having deleted a duplicate, place a link targeting the reference file to replace the deleted file.";
|
||||||
|
"Album" = "Album";
|
||||||
|
"Artist" = "Artist";
|
||||||
|
"Attribute" = "Attribute";
|
||||||
|
"Audio Content" = "Audio Content";
|
||||||
|
"Automatically check for updates" = "Automatically check for updates";
|
||||||
|
"Basic" = "Basic";
|
||||||
|
"Bring All to Front" = "Bring All to Front";
|
||||||
|
"Can mix file kind" = "Can mix file kind";
|
||||||
|
"Cancel" = "Cancel";
|
||||||
|
"Check for update..." = "Check for update...";
|
||||||
|
"Clear" = "Clear";
|
||||||
|
"Clear Picture Cache" = "Clear Picture Cache";
|
||||||
|
"Close" = "Close";
|
||||||
|
"Close Window" = "Close Window";
|
||||||
|
"Columns" = "Columns";
|
||||||
|
"Content" = "Content";
|
||||||
|
"Contents" = "Contents";
|
||||||
|
"Copy" = "Copy";
|
||||||
|
"Copy and Move:" = "Copy and Move:";
|
||||||
|
"Copy Marked to..." = "Copy Marked to...";
|
||||||
|
"Custom command (arguments: %d for dupe, %r for ref):" = "Custom command (arguments: %d for dupe, %r for ref):";
|
||||||
|
"Cut" = "Cut";
|
||||||
|
"Debug mode (restart required)" = "Debug mode (restart required)";
|
||||||
|
"Deletion Options" = "Deletion Options";
|
||||||
|
"Delta" = "Delta";
|
||||||
|
"Details" = "Details";
|
||||||
|
"Details of Selected File" = "Details of Selected File";
|
||||||
|
"Details Panel" = "Details Panel";
|
||||||
|
"Directly delete files" = "Directly delete files";
|
||||||
|
"Directories" = "Directories";
|
||||||
|
"Do you really want to remove all your cached picture analysis?" = "Do you really want to remove all your cached picture analysis?";
|
||||||
|
"dupeGuru" = "dupeGuru";
|
||||||
|
"dupeGuru Help" = "dupeGuru Help";
|
||||||
|
"dupeGuru ME Preferences" = "dupeGuru ME Preferences";
|
||||||
|
"dupeGuru PE Preferences" = "dupeGuru PE Preferences";
|
||||||
|
"dupeGuru Preferences" = "dupeGuru Preferences";
|
||||||
|
"dupeGuru Results" = "dupeGuru Results";
|
||||||
|
"dupeGuru Website" = "dupeGuru Website";
|
||||||
|
"Dupes Only" = "Dupes Only";
|
||||||
|
"Edit" = "Edit";
|
||||||
|
"Excluded" = "Excluded";
|
||||||
|
"EXIF Timestamp" = "EXIF Timestamp";
|
||||||
|
"Export Results to CSV" = "Export Results to CSV";
|
||||||
|
"Export Results to XHTML" = "Export Results to XHTML";
|
||||||
|
"Fewer results" = "Fewer results";
|
||||||
|
"File" = "File";
|
||||||
|
"Filename" = "Filename";
|
||||||
|
"Filename - Fields" = "Filename - Fields";
|
||||||
|
"Filename - Fields (No Order)" = "Filename - Fields (No Order)";
|
||||||
|
"Filter" = "Filter";
|
||||||
|
"Filter hardness:" = "Filter hardness:";
|
||||||
|
"Filter Results..." = "Filter Results...";
|
||||||
|
"Folder Selection Window" = "Folder Selection Window";
|
||||||
|
"Folders" = "Folders";
|
||||||
|
"Font Size:" = "Font Size:";
|
||||||
|
"Genre" = "Genre";
|
||||||
|
"Help" = "Help";
|
||||||
|
"Hide dupeGuru" = "Hide dupeGuru";
|
||||||
|
"Hide Others" = "Hide Others";
|
||||||
|
"Ignore duplicates hardlinking to the same file" = "Ignore duplicates hardlinking to the same file";
|
||||||
|
"Ignore files smaller than:" = "Ignore files smaller than:";
|
||||||
|
"Ignore List" = "Ignore List";
|
||||||
|
"Instead of sending files to trash, delete them directly. This option is usually used as a workaround when the normal deletion method doesn't work." = "Instead of sending files to trash, delete them directly. This option is usually used as a workaround when the normal deletion method doesn't work.";
|
||||||
|
"Invert Marking" = "Invert Marking";
|
||||||
|
"Invoke Custom Command" = "Invoke Custom Command";
|
||||||
|
"KB" = "KB";
|
||||||
|
"Link deleted files" = "Link deleted files";
|
||||||
|
"Load from file..." = "Load from file...";
|
||||||
|
"Load Recent Results" = "Load Recent Results";
|
||||||
|
"Load Results" = "Load Results";
|
||||||
|
"Load Results..." = "Load Results...";
|
||||||
|
"Make Selected Reference" = "Make Selected Reference";
|
||||||
|
"Mark All" = "Mark All";
|
||||||
|
"Mark None" = "Mark None";
|
||||||
|
"Mark Selected" = "Mark Selected";
|
||||||
|
"Match pictures of different dimensions" = "Match pictures of different dimensions";
|
||||||
|
"Match similar words" = "Match similar words";
|
||||||
|
"Minimize" = "Minimize";
|
||||||
|
"Mode" = "Mode";
|
||||||
|
"More results" = "More results";
|
||||||
|
"Move Marked to..." = "Move Marked to...";
|
||||||
|
"Name" = "Name";
|
||||||
|
"Normal" = "Normal";
|
||||||
|
"Ok" = "Ok";
|
||||||
|
"Open Selected with Default Application" = "Open Selected with Default Application";
|
||||||
|
"Options" = "Options";
|
||||||
|
"Paste" = "Paste";
|
||||||
|
"Preferences..." = "Preferences...";
|
||||||
|
"Problems!" = "Problems!";
|
||||||
|
"Proceed" = "Proceed";
|
||||||
|
"Quick Look" = "Quick Look";
|
||||||
|
"Quit dupeGuru" = "Quit dupeGuru";
|
||||||
|
"Re-Prioritize duplicates" = "Re-Prioritize duplicates";
|
||||||
|
"Re-Prioritize Results" = "Re-Prioritize Results";
|
||||||
|
"Recreate absolute path" = "Recreate absolute path";
|
||||||
|
"Recreate relative path" = "Recreate relative path";
|
||||||
|
"Reference" = "Reference";
|
||||||
|
"Remove Dead Tracks in iTunes" = "Remove Dead Tracks in iTunes";
|
||||||
|
"Remove empty folders on delete or move" = "Remove empty folders on delete or move";
|
||||||
|
"Remove Marked from Results" = "Remove Marked from Results";
|
||||||
|
"Remove Selected" = "Remove Selected";
|
||||||
|
"Remove Selected from Results" = "Remove Selected from Results";
|
||||||
|
"Rename Selected" = "Rename Selected";
|
||||||
|
"Reset to Default" = "Reset to Default";
|
||||||
|
"Reset To Defaults" = "Reset To Defaults";
|
||||||
|
"Results Window" = "Results Window";
|
||||||
|
"Reveal" = "Reveal";
|
||||||
|
"Reveal Selected in Finder" = "Reveal Selected in Finder";
|
||||||
|
"Right in destination" = "Right in destination";
|
||||||
|
"Save Results..." = "Save Results...";
|
||||||
|
"Scan" = "Scan";
|
||||||
|
"Scan Type:" = "Scan Type:";
|
||||||
"Select a file to save your results to" = "Select a file to save your results to";
|
"Select a file to save your results to" = "Select a file to save your results to";
|
||||||
"Select a folder to add to the scanning list" = "Select a folder to add to the scanning list";
|
"Select a folder to add to the scanning list" = "Select a folder to add to the scanning list";
|
||||||
"You have unsaved results, do you really want to continue?" = "You have unsaved results, do you really want to continue?";
|
"Select a results file to load" = "Select a results file to load";
|
||||||
"'%@' already is in the list." = "'%@' already is in the list.";
|
"Select folders to scan and press \"Scan\"." = "Select folders to scan and press \"Scan\".";
|
||||||
"'%@' does not exist." = "'%@' does not exist.";
|
"Selected" = "Selected";
|
||||||
|
"Send Marked to Trash..." = "Send Marked to Trash...";
|
||||||
|
"Services" = "Services";
|
||||||
|
"Show All" = "Show All";
|
||||||
|
"Show Delta Values" = "Show Delta Values";
|
||||||
|
"Show Dupes Only" = "Show Dupes Only";
|
||||||
|
"Start Duplicate Scan" = "Start Duplicate Scan";
|
||||||
|
"State" = "State";
|
||||||
|
"Tags" = "Tags";
|
||||||
|
"Tags to scan:" = "Tags to scan:";
|
||||||
"The name '%@' already exists." = "The name '%@' already exists.";
|
"The name '%@' already exists." = "The name '%@' already exists.";
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again." = "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.";
|
"There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results." = "There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results.";
|
||||||
"Your iTunes Library contains %d dead tracks ready to be removed. Continue?" = "Your iTunes Library contains %d dead tracks ready to be removed. Continue?";
|
"Title" = "Title";
|
||||||
"You have no dead tracks in your iTunes Library" = "You have no dead tracks in your iTunes Library";
|
"Track" = "Track";
|
||||||
"Do you really want to remove all your cached picture analysis?" = "Do you really want to remove all your cached picture analysis?";
|
"Use regular expressions when filtering" = "Use regular expressions when filtering";
|
||||||
|
"Window" = "Window";
|
||||||
|
"Word weighting" = "Word weighting";
|
||||||
"Add iTunes Directory" = "Add iTunes Directory";
|
"Year" = "Year";
|
||||||
"Remove Dead Tracks in iTunes" = "Remove Dead Tracks in iTunes";
|
"You have unsaved results, do you really want to continue?" = "You have unsaved results, do you really want to continue?";
|
||||||
|
"You have unsaved results, do you really want to quit?" = "You have unsaved results, do you really want to quit?";
|
||||||
"Add iPhoto Library" = "Add iPhoto Library";
|
"Zoom" = "Zoom";
|
||||||
"Clear Picture Cache" = "Clear Picture Cache";
|
|
||||||
|
|
||||||
"Yes" = "Yes";
|
|
||||||
"No" = "No";
|
|
||||||
"OK" = "OK";
|
|
||||||
|
|||||||
@@ -1,177 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
|
|
||||||
"5.title" = "Bring All to Front";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */
|
|
||||||
"19.title" = "Window";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */
|
|
||||||
"23.title" = "Minimize";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */
|
|
||||||
"24.title" = "Window";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "About dupeGuru"; ObjectID = "58"; */
|
|
||||||
"58.title" = "About dupeGuru";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Help"; ObjectID = "103"; */
|
|
||||||
"103.title" = "Help";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Help"; ObjectID = "106"; */
|
|
||||||
"106.title" = "Help";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "dupeGuru Help"; ObjectID = "111"; */
|
|
||||||
"111.title" = "dupeGuru Help";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hide dupeGuru"; ObjectID = "134"; */
|
|
||||||
"134.title" = "Hide dupeGuru";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quit dupeGuru"; ObjectID = "136"; */
|
|
||||||
"136.title" = "Quit dupeGuru";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "145"; */
|
|
||||||
"145.title" = "Hide Others";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "150"; */
|
|
||||||
"150.title" = "Show All";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "197"; */
|
|
||||||
"197.title" = "Zoom";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Details Panel"; ObjectID = "398"; */
|
|
||||||
"398.title" = "Details Panel";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Preferences..."; ObjectID = "541"; */
|
|
||||||
"541.title" = "Preferences...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Folder Selection Window"; ObjectID = "579"; */
|
|
||||||
"579.title" = "Folder Selection Window";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Actions"; ObjectID = "597"; */
|
|
||||||
"597.title" = "Actions";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Actions"; ObjectID = "598"; */
|
|
||||||
"598.title" = "Actions";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Send Marked to Trash"; ObjectID = "599"; */
|
|
||||||
"599.title" = "Send Marked to Trash";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Move Marked to..."; ObjectID = "600"; */
|
|
||||||
"600.title" = "Move Marked to...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Copy Marked to..."; ObjectID = "601"; */
|
|
||||||
"601.title" = "Copy Marked to...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Make Selected Reference"; ObjectID = "602"; */
|
|
||||||
"602.title" = "Make Selected Reference";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Remove Marked from Results"; ObjectID = "603"; */
|
|
||||||
"603.title" = "Remove Marked from Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Remove Selected from Results"; ObjectID = "605"; */
|
|
||||||
"605.title" = "Remove Selected from Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Columns"; ObjectID = "618"; */
|
|
||||||
"618.title" = "Columns";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Columns"; ObjectID = "619"; */
|
|
||||||
"619.title" = "Columns";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Open Selected with Default Application"; ObjectID = "708"; */
|
|
||||||
"708.title" = "Open Selected with Default Application";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Reveal Selected in Finder"; ObjectID = "710"; */
|
|
||||||
"710.title" = "Reveal Selected in Finder";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Add Selected to Ignore List"; ObjectID = "922"; */
|
|
||||||
"922.title" = "Add Selected to Ignore List";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "924"; */
|
|
||||||
"924.title" = "Close Window";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Start Duplicate Scan"; ObjectID = "926"; */
|
|
||||||
"926.title" = "Start Duplicate Scan";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Rename Selected"; ObjectID = "933"; */
|
|
||||||
"933.title" = "Rename Selected";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Export Results to XHTML"; ObjectID = "947"; */
|
|
||||||
"947.title" = "Export Results to XHTML";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Check for update..."; ObjectID = "950"; */
|
|
||||||
"950.title" = "Check for update...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Mode"; ObjectID = "959"; */
|
|
||||||
"959.title" = "Mode";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Mode"; ObjectID = "960"; */
|
|
||||||
"960.title" = "Mode";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Show Dupes Only"; ObjectID = "961"; */
|
|
||||||
"961.title" = "Show Dupes Only";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Show Delta Values"; ObjectID = "962"; */
|
|
||||||
"962.title" = "Show Delta Values";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "965"; */
|
|
||||||
"965.title" = "Edit";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Edit"; ObjectID = "966"; */
|
|
||||||
"966.title" = "Edit";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "985"; */
|
|
||||||
"985.title" = "Cut";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "986"; */
|
|
||||||
"986.title" = "Copy";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "991"; */
|
|
||||||
"991.title" = "Paste";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Mark All"; ObjectID = "1011"; */
|
|
||||||
"1011.title" = "Mark All";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Mark None"; ObjectID = "1012"; */
|
|
||||||
"1012.title" = "Mark None";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Invert Marking"; ObjectID = "1013"; */
|
|
||||||
"1013.title" = "Invert Marking";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Mark Selected"; ObjectID = "1014"; */
|
|
||||||
"1014.title" = "Mark Selected";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "dupeGuru Website"; ObjectID = "1023"; */
|
|
||||||
"1023.title" = "dupeGuru Website";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Invoke Custom Command"; ObjectID = "1177"; */
|
|
||||||
"1177.title" = "Invoke Custom Command";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "File"; ObjectID = "1203"; */
|
|
||||||
"1203.title" = "File";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "File"; ObjectID = "1204"; */
|
|
||||||
"1204.title" = "File";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Load Results..."; ObjectID = "1205"; */
|
|
||||||
"1205.title" = "Load Results...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Save Results..."; ObjectID = "1206"; */
|
|
||||||
"1206.title" = "Save Results...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Delete Marked and Replace with Hardlinks"; ObjectID = "1227"; */
|
|
||||||
"1227.title" = "Delete Marked and Replace with Hardlinks";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Load Recent Results"; ObjectID = "1239"; */
|
|
||||||
"1239.title" = "Load Recent Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Load Recent Results"; ObjectID = "1240"; */
|
|
||||||
"1240.title" = "Load Recent Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Results Window"; ObjectID = "1272"; */
|
|
||||||
"1272.title" = "Results Window";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Re-Prioritize Results"; ObjectID = "1276"; */
|
|
||||||
"1276.title" = "Re-Prioritize Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Ignore List"; ObjectID = "1283"; */
|
|
||||||
"1283.title" = "Ignore List";
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "Re-Prioritize duplicates"; ObjectID = "1"; */
|
|
||||||
"1.title" = "Re-Prioritize duplicates";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Ok"; ObjectID = "37"; */
|
|
||||||
"37.title" = "Ok";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "39"; */
|
|
||||||
"39.title" = "Cancel";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information."; ObjectID = "41"; */
|
|
||||||
"41.title" = "Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information.";
|
|
||||||
@@ -1,897 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1060</int>
|
|
||||||
<string key="IBDocument.SystemVersion">11D50</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">2182</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>NSTextField</string>
|
|
||||||
<string>NSPopUpButton</string>
|
|
||||||
<string>NSScroller</string>
|
|
||||||
<string>NSButton</string>
|
|
||||||
<string>NSMenu</string>
|
|
||||||
<string>NSScrollView</string>
|
|
||||||
<string>NSTextFieldCell</string>
|
|
||||||
<string>NSButtonCell</string>
|
|
||||||
<string>NSTableView</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSPopUpButtonCell</string>
|
|
||||||
<string>NSTableColumn</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
|
||||||
<integer value="1" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
|
||||||
<object class="NSCustomObject" id="1001">
|
|
||||||
<string key="NSClassName">PrioritizeDialog</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1003">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1004">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="1005">
|
|
||||||
<int key="NSWindowStyleMask">9</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{196, 240}, {609, 401}}</string>
|
|
||||||
<int key="NSWTFlags">1618477056</int>
|
|
||||||
<string key="NSWindowTitle">Re-Prioritize duplicates</string>
|
|
||||||
<string key="NSWindowClass">NSWindow</string>
|
|
||||||
<nil key="NSViewClass"/>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<object class="NSView" key="NSWindowView" id="1006">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSPopUpButton" id="357095790">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{17, 298}, {268, 26}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="386461059"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:179</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSPopUpButtonCell" key="NSCell" id="892922362">
|
|
||||||
<int key="NSCellFlags">-2076049856</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<object class="NSFont" key="NSSupport" id="591283433">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">13</double>
|
|
||||||
<int key="NSfFlags">1044</int>
|
|
||||||
</object>
|
|
||||||
<string key="NSCellIdentifier">_NS:179</string>
|
|
||||||
<reference key="NSControlView" ref="357095790"/>
|
|
||||||
<int key="NSButtonFlags">109199615</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">400</int>
|
|
||||||
<int key="NSPeriodicInterval">75</int>
|
|
||||||
<nil key="NSMenuItem"/>
|
|
||||||
<bool key="NSMenuItemRespectAlignment">YES</bool>
|
|
||||||
<object class="NSMenu" key="NSMenu" id="309249465">
|
|
||||||
<string key="NSTitle">OtherViews</string>
|
|
||||||
<array class="NSMutableArray" key="NSMenuItems"/>
|
|
||||||
<reference key="NSMenuFont" ref="591283433"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSSelectedIndex">-1</int>
|
|
||||||
<int key="NSPreferredEdge">1</int>
|
|
||||||
<bool key="NSUsesItemFromMenu">YES</bool>
|
|
||||||
<bool key="NSAltersState">YES</bool>
|
|
||||||
<int key="NSArrowPosition">2</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSScrollView" id="386461059">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">276</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="991694656">
|
|
||||||
<reference key="NSNextResponder" ref="386461059"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="675311684">
|
|
||||||
<reference key="NSNextResponder" ref="991694656"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{260, 233}</string>
|
|
||||||
<reference key="NSSuperview" ref="991694656"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="978953877"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1197</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView">
|
|
||||||
<nil key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 0}, {16, 17}}</string>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1202</string>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns">
|
|
||||||
<object class="NSTableColumn" id="331887935">
|
|
||||||
<double key="NSWidth">257</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<object class="NSFont" key="NSSupport" id="26">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">11</double>
|
|
||||||
<int key="NSfFlags">3100</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="165509352">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">headerTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="95789318">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="252516817">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2560</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<reference key="NSControlView" ref="675311684"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="768431893">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="857981892">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="983887457">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlTextColor</string>
|
|
||||||
<reference key="NSColor" ref="95789318"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<bool key="NSIsEditable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="675311684"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="949356842">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSGridColor" id="353256269">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">gridColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<double key="NSRowHeight">17</double>
|
|
||||||
<int key="NSTvFlags">306184192</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">4</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">NO</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 1}, {260, 233}}</string>
|
|
||||||
<reference key="NSSuperview" ref="386461059"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="675311684"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1195</string>
|
|
||||||
<reference key="NSDocView" ref="675311684"/>
|
|
||||||
<reference key="NSBGColor" ref="768431893"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="978953877">
|
|
||||||
<reference key="NSNextResponder" ref="386461059"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
|
|
||||||
<reference key="NSSuperview" ref="386461059"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="1055237002"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1214</string>
|
|
||||||
<reference key="NSTarget" ref="386461059"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.9925373134328358</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="1055237002">
|
|
||||||
<reference key="NSNextResponder" ref="386461059"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{1, 119}, {223, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="386461059"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="878293971"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1216</string>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="386461059"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.99581589958159</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{20, 60}, {262, 235}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="991694656"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1193</string>
|
|
||||||
<int key="NSsFlags">133682</int>
|
|
||||||
<reference key="NSVScroller" ref="978953877"/>
|
|
||||||
<reference key="NSHScroller" ref="1055237002"/>
|
|
||||||
<reference key="NSContentView" ref="991694656"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSScrollView" id="687805562">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="256485327">
|
|
||||||
<reference key="NSNextResponder" ref="687805562"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="69698213">
|
|
||||||
<reference key="NSNextResponder" ref="256485327"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{248, 260}</string>
|
|
||||||
<reference key="NSSuperview" ref="256485327"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="258173410"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1197</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView">
|
|
||||||
<nil key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 0}, {16, 17}}</string>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1202</string>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns">
|
|
||||||
<object class="NSTableColumn" id="604129553">
|
|
||||||
<double key="NSWidth">245</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
|
|
||||||
</object>
|
|
||||||
<reference key="NSTextColor" ref="165509352"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="998326916">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents"/>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<reference key="NSControlView" ref="69698213"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="768431893"/>
|
|
||||||
<reference key="NSTextColor" ref="983887457"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<bool key="NSIsEditable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="69698213"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<reference key="NSBackgroundColor" ref="949356842"/>
|
|
||||||
<reference key="NSGridColor" ref="353256269"/>
|
|
||||||
<double key="NSRowHeight">17</double>
|
|
||||||
<int key="NSTvFlags">306184192</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">4</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">NO</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 1}, {248, 260}}</string>
|
|
||||||
<reference key="NSSuperview" ref="687805562"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="69698213"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1195</string>
|
|
||||||
<reference key="NSDocView" ref="69698213"/>
|
|
||||||
<reference key="NSBGColor" ref="768431893"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="258173410">
|
|
||||||
<reference key="NSNextResponder" ref="687805562"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
|
|
||||||
<reference key="NSSuperview" ref="687805562"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="218354894"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1214</string>
|
|
||||||
<reference key="NSTarget" ref="687805562"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.9925373134328358</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="218354894">
|
|
||||||
<reference key="NSNextResponder" ref="687805562"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{1, 119}, {223, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="687805562"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="955319632"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1216</string>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="687805562"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.99581589958159</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{339, 60}, {250, 262}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="256485327"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:1193</string>
|
|
||||||
<int key="NSsFlags">133682</int>
|
|
||||||
<reference key="NSVScroller" ref="258173410"/>
|
|
||||||
<reference key="NSHScroller" ref="218354894"/>
|
|
||||||
<reference key="NSContentView" ref="256485327"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="878293971">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{284, 186}, {53, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="596965746"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:161</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="208161580">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">--></string>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:161</string>
|
|
||||||
<reference key="NSControlView" ref="878293971"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="596965746">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{284, 160}, {53, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="687805562"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:161</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="410417059">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents"><--</string>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:161</string>
|
|
||||||
<reference key="NSControlView" ref="596965746"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="620738811">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">289</int>
|
|
||||||
<string key="NSFrame">{{495, 12}, {100, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:161</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="468133349">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Ok</string>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:161</string>
|
|
||||||
<reference key="NSControlView" ref="620738811"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="955319632">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">289</int>
|
|
||||||
<string key="NSFrame">{{395, 12}, {100, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="620738811"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:161</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="323479517">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Cancel</string>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:161</string>
|
|
||||||
<reference key="NSControlView" ref="955319632"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextField" id="970734229">
|
|
||||||
<reference key="NSNextResponder" ref="1006"/>
|
|
||||||
<int key="NSvFlags">268</int>
|
|
||||||
<string key="NSFrame">{{17, 330}, {575, 51}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="357095790"/>
|
|
||||||
<string key="NSReuseIdentifierKey">_NS:3936</string>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTextFieldCell" key="NSCell" id="424127272">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">4194304</int>
|
|
||||||
<string key="NSContents">Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information.</string>
|
|
||||||
<reference key="NSSupport" ref="591283433"/>
|
|
||||||
<string key="NSCellIdentifier">_NS:3936</string>
|
|
||||||
<reference key="NSControlView" ref="970734229"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlColor</string>
|
|
||||||
<reference key="NSColor" ref="857981892"/>
|
|
||||||
</object>
|
|
||||||
<reference key="NSTextColor" ref="983887457"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{609, 401}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="970734229"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">categoryPopUpView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="357095790"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">10</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">criteriaTableView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="675311684"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">20</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">prioritizationTableView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="69698213"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">33</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">addSelected:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="878293971"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">34</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">removeSelected:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="596965746"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">35</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">cancel:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="955319632"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">42</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">ok:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="620738811"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">43</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">44</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="1005"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1006"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">2</int>
|
|
||||||
<reference key="object" ref="1006"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="970734229"/>
|
|
||||||
<reference ref="357095790"/>
|
|
||||||
<reference ref="386461059"/>
|
|
||||||
<reference ref="878293971"/>
|
|
||||||
<reference ref="596965746"/>
|
|
||||||
<reference ref="687805562"/>
|
|
||||||
<reference ref="620738811"/>
|
|
||||||
<reference ref="955319632"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1005"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">3</int>
|
|
||||||
<reference key="object" ref="357095790"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="892922362"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">4</int>
|
|
||||||
<reference key="object" ref="892922362"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="309249465"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="357095790"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">5</int>
|
|
||||||
<reference key="object" ref="309249465"/>
|
|
||||||
<array class="NSMutableArray" key="children"/>
|
|
||||||
<reference key="parent" ref="892922362"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">11</int>
|
|
||||||
<reference key="object" ref="386461059"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="978953877"/>
|
|
||||||
<reference ref="1055237002"/>
|
|
||||||
<reference ref="675311684"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">12</int>
|
|
||||||
<reference key="object" ref="978953877"/>
|
|
||||||
<reference key="parent" ref="386461059"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">14</int>
|
|
||||||
<reference key="object" ref="1055237002"/>
|
|
||||||
<reference key="parent" ref="386461059"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">15</int>
|
|
||||||
<reference key="object" ref="675311684"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="331887935"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="386461059"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">16</int>
|
|
||||||
<reference key="object" ref="331887935"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="252516817"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="675311684"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">19</int>
|
|
||||||
<reference key="object" ref="252516817"/>
|
|
||||||
<reference key="parent" ref="331887935"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">21</int>
|
|
||||||
<reference key="object" ref="878293971"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="208161580"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">22</int>
|
|
||||||
<reference key="object" ref="208161580"/>
|
|
||||||
<reference key="parent" ref="878293971"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">23</int>
|
|
||||||
<reference key="object" ref="596965746"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="410417059"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">24</int>
|
|
||||||
<reference key="object" ref="410417059"/>
|
|
||||||
<reference key="parent" ref="596965746"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">25</int>
|
|
||||||
<reference key="object" ref="687805562"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="69698213"/>
|
|
||||||
<reference ref="218354894"/>
|
|
||||||
<reference ref="258173410"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">26</int>
|
|
||||||
<reference key="object" ref="69698213"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="604129553"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="687805562"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">27</int>
|
|
||||||
<reference key="object" ref="218354894"/>
|
|
||||||
<reference key="parent" ref="687805562"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">28</int>
|
|
||||||
<reference key="object" ref="258173410"/>
|
|
||||||
<reference key="parent" ref="687805562"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">29</int>
|
|
||||||
<reference key="object" ref="604129553"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="998326916"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="69698213"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">30</int>
|
|
||||||
<reference key="object" ref="998326916"/>
|
|
||||||
<reference key="parent" ref="604129553"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">36</int>
|
|
||||||
<reference key="object" ref="620738811"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="468133349"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">37</int>
|
|
||||||
<reference key="object" ref="468133349"/>
|
|
||||||
<reference key="parent" ref="620738811"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">38</int>
|
|
||||||
<reference key="object" ref="955319632"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="323479517"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">39</int>
|
|
||||||
<reference key="object" ref="323479517"/>
|
|
||||||
<reference key="parent" ref="955319632"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">40</int>
|
|
||||||
<reference key="object" ref="970734229"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="424127272"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">41</int>
|
|
||||||
<reference key="object" ref="424127272"/>
|
|
||||||
<reference key="parent" ref="970734229"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBWindowTemplateEditedContentRect">{{357, 418}, {480, 270}}</string>
|
|
||||||
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
|
|
||||||
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="25.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="26.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="37.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="39.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="40.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="41.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">44</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">PrioritizeDialog</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actions">
|
|
||||||
<string key="addSelected:">id</string>
|
|
||||||
<string key="cancel:">id</string>
|
|
||||||
<string key="ok:">id</string>
|
|
||||||
<string key="removeSelected:">id</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="actionInfosByName">
|
|
||||||
<object class="IBActionInfo" key="addSelected:">
|
|
||||||
<string key="name">addSelected:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="cancel:">
|
|
||||||
<string key="name">cancel:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="ok:">
|
|
||||||
<string key="name">ok:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBActionInfo" key="removeSelected:">
|
|
||||||
<string key="name">removeSelected:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="categoryPopUpView">NSPopUpButton</string>
|
|
||||||
<string key="criteriaTableView">NSTableView</string>
|
|
||||||
<string key="prioritizationTableView">NSTableView</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<object class="IBToOneOutletInfo" key="categoryPopUpView">
|
|
||||||
<string key="name">categoryPopUpView</string>
|
|
||||||
<string key="candidateClassName">NSPopUpButton</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="criteriaTableView">
|
|
||||||
<string key="name">criteriaTableView</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="prioritizationTableView">
|
|
||||||
<string key="name">prioritizationTableView</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/PrioritizeDialog.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
|
||||||
<real value="4100" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "Problems!"; ObjectID = "1"; */
|
|
||||||
"1.title" = "Problems!";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results."; ObjectID = "4"; */
|
|
||||||
"4.title" = "There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results.";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Close"; ObjectID = "19"; */
|
|
||||||
"19.title" = "Close";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Reveal Selected"; ObjectID = "21"; */
|
|
||||||
"21.title" = "Reveal Selected";
|
|
||||||
@@ -1,500 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1060</int>
|
|
||||||
<string key="IBDocument.SystemVersion">11D50</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">2182</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>NSTextField</string>
|
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSScrollView</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
<string>NSTableView</string>
|
|
||||||
<string>NSTableHeaderView</string>
|
|
||||||
<string>NSButtonCell</string>
|
|
||||||
<string>NSButton</string>
|
|
||||||
<string>NSScroller</string>
|
|
||||||
<string>NSTextFieldCell</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
|
||||||
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
|
||||||
<integer value="1" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
|
||||||
<object class="NSCustomObject" id="1001">
|
|
||||||
<string key="NSClassName">ProblemDialog</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1003">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="1004">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="359561441">
|
|
||||||
<int key="NSWindowStyleMask">11</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{477, 306}, {480, 309}}</string>
|
|
||||||
<int key="NSWTFlags">1685585920</int>
|
|
||||||
<string key="NSWindowTitle">Problems!</string>
|
|
||||||
<string key="NSWindowClass">NSWindow</string>
|
|
||||||
<nil key="NSViewClass"/>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<object class="NSView" key="NSWindowView" id="976198330">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTextField" id="573725554">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">266</int>
|
|
||||||
<string key="NSFrame">{{17, 238}, {446, 51}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTextFieldCell" key="NSCell" id="1063844428">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">272891904</int>
|
|
||||||
<string key="NSContents">There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results.</string>
|
|
||||||
<object class="NSFont" key="NSSupport">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">13</double>
|
|
||||||
<int key="NSfFlags">16</int>
|
|
||||||
</object>
|
|
||||||
<reference key="NSControlView" ref="573725554"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="869923403">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSScrollView" id="458371270">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="831830981">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="252791348">
|
|
||||||
<reference key="NSNextResponder" ref="831830981"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{438, 152}</string>
|
|
||||||
<reference key="NSSuperview" ref="831830981"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTableHeaderView" key="NSHeaderView" id="903452051">
|
|
||||||
<reference key="NSNextResponder" ref="777677330"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{438, 17}</string>
|
|
||||||
<reference key="NSSuperview" ref="777677330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTableView" ref="252791348"/>
|
|
||||||
</object>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView" id="564034022">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 0}, {16, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns"/>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSGridColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">gridColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<double key="NSRowHeight">17</double>
|
|
||||||
<int key="NSTvFlags">-702545920</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">4</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">YES</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 17}, {438, 152}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="252791348"/>
|
|
||||||
<reference key="NSDocView" ref="252791348"/>
|
|
||||||
<object class="NSColor" key="NSBGColor" id="765209443">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<reference key="NSColor" ref="869923403"/>
|
|
||||||
</object>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="99096694">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTarget" ref="458371270"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.90131578947368418</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="47224920">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{1, 154}, {438, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="458371270"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSCurValue">1</double>
|
|
||||||
<double key="NSPercent">0.98871331828442433</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSClipView" id="777677330">
|
|
||||||
<reference key="NSNextResponder" ref="458371270"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<reference ref="903452051"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 0}, {438, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="458371270"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="903452051"/>
|
|
||||||
<reference key="NSDocView" ref="903452051"/>
|
|
||||||
<reference key="NSBGColor" ref="765209443"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="564034022"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{20, 60}, {440, 170}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="831830981"/>
|
|
||||||
<int key="NSsFlags">133682</int>
|
|
||||||
<reference key="NSVScroller" ref="99096694"/>
|
|
||||||
<reference key="NSHScroller" ref="47224920"/>
|
|
||||||
<reference key="NSContentView" ref="831830981"/>
|
|
||||||
<reference key="NSHeaderClipView" ref="777677330"/>
|
|
||||||
<reference key="NSCornerView" ref="564034022"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="4380169">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">289</int>
|
|
||||||
<string key="NSFrame">{{356, 12}, {110, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="373771329">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Close</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="680801460">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">13</double>
|
|
||||||
<int key="NSfFlags">1044</int>
|
|
||||||
</object>
|
|
||||||
<reference key="NSControlView" ref="4380169"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSButton" id="253286088">
|
|
||||||
<reference key="NSNextResponder" ref="976198330"/>
|
|
||||||
<int key="NSvFlags">292</int>
|
|
||||||
<string key="NSFrame">{{14, 12}, {162, 32}}</string>
|
|
||||||
<reference key="NSSuperview" ref="976198330"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSButtonCell" key="NSCell" id="671547957">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">134217728</int>
|
|
||||||
<string key="NSContents">Reveal Selected</string>
|
|
||||||
<reference key="NSSupport" ref="680801460"/>
|
|
||||||
<reference key="NSControlView" ref="253286088"/>
|
|
||||||
<int key="NSButtonFlags">-2038284033</int>
|
|
||||||
<int key="NSButtonFlags2">129</int>
|
|
||||||
<string key="NSAlternateContents"/>
|
|
||||||
<string key="NSKeyEquivalent"/>
|
|
||||||
<int key="NSPeriodicDelay">200</int>
|
|
||||||
<int key="NSPeriodicInterval">25</int>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{480, 309}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="359561441"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">22</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">revealSelected:</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="253286088"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">24</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">problemTableView</string>
|
|
||||||
<reference key="source" ref="1001"/>
|
|
||||||
<reference key="destination" ref="252791348"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">26</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBActionConnection" key="connection">
|
|
||||||
<string key="label">performClose:</string>
|
|
||||||
<reference key="source" ref="359561441"/>
|
|
||||||
<reference key="destination" ref="4380169"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">25</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="1000"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="1001"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="1003"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="1004"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">1</int>
|
|
||||||
<reference key="object" ref="359561441"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="976198330"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">2</int>
|
|
||||||
<reference key="object" ref="976198330"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="573725554"/>
|
|
||||||
<reference ref="458371270"/>
|
|
||||||
<reference ref="4380169"/>
|
|
||||||
<reference ref="253286088"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="359561441"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">3</int>
|
|
||||||
<reference key="object" ref="573725554"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1063844428"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">4</int>
|
|
||||||
<reference key="object" ref="1063844428"/>
|
|
||||||
<reference key="parent" ref="573725554"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">5</int>
|
|
||||||
<reference key="object" ref="458371270"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="99096694"/>
|
|
||||||
<reference ref="47224920"/>
|
|
||||||
<reference ref="252791348"/>
|
|
||||||
<reference ref="903452051"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">6</int>
|
|
||||||
<reference key="object" ref="99096694"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">7</int>
|
|
||||||
<reference key="object" ref="47224920"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">8</int>
|
|
||||||
<reference key="object" ref="252791348"/>
|
|
||||||
<array class="NSMutableArray" key="children"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">9</int>
|
|
||||||
<reference key="object" ref="903452051"/>
|
|
||||||
<reference key="parent" ref="458371270"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">18</int>
|
|
||||||
<reference key="object" ref="4380169"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="373771329"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">19</int>
|
|
||||||
<reference key="object" ref="373771329"/>
|
|
||||||
<reference key="parent" ref="4380169"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">20</int>
|
|
||||||
<reference key="object" ref="253286088"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="671547957"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="976198330"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">21</int>
|
|
||||||
<reference key="object" ref="671547957"/>
|
|
||||||
<reference key="parent" ref="253286088"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="1.IBWindowTemplateEditedContentRect">{{477, 306}, {480, 309}}</string>
|
|
||||||
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
|
|
||||||
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">26</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">ProblemDialog</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<object class="NSMutableDictionary" key="actions">
|
|
||||||
<string key="NS.key.0">revealSelected:</string>
|
|
||||||
<string key="NS.object.0">id</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="actionInfosByName">
|
|
||||||
<string key="NS.key.0">revealSelected:</string>
|
|
||||||
<object class="IBActionInfo" key="NS.object.0">
|
|
||||||
<string key="name">revealSelected:</string>
|
|
||||||
<string key="candidateClassName">id</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">problemTableView</string>
|
|
||||||
<string key="NS.object.0">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">problemTableView</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">problemTableView</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/ProblemDialog.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
|
||||||
<real value="4100" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "dupeGuru Results"; ObjectID = "1"; */
|
|
||||||
"1.title" = "dupeGuru Results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Marked: 0 files, 0 B. Total: 0 files, 0 B."; ObjectID = "6"; */
|
|
||||||
"6.title" = "Marked: 0 files, 0 B. Total: 0 files, 0 B.";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; label = "Options"; ObjectID = "15"; */
|
|
||||||
"15.label" = "Options";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; paletteLabel = "Options"; ObjectID = "15"; */
|
|
||||||
"15.paletteLabel" = "Options";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; label = "Filter"; ObjectID = "16"; */
|
|
||||||
"16.label" = "Filter";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; paletteLabel = "Filter"; ObjectID = "16"; */
|
|
||||||
"16.paletteLabel" = "Filter";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; label = "Action"; ObjectID = "17"; */
|
|
||||||
"17.label" = "Action";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; paletteLabel = "Action"; ObjectID = "17"; */
|
|
||||||
"17.paletteLabel" = "Action";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; label = "Directories"; ObjectID = "19"; */
|
|
||||||
"19.label" = "Directories";
|
|
||||||
|
|
||||||
/* Class = "NSToolbarItem"; paletteLabel = "Directories"; ObjectID = "19"; */
|
|
||||||
"19.paletteLabel" = "Directories";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Delete Marked and Replace with Hardlinks"; ObjectID = "27"; */
|
|
||||||
"27.title" = "Delete Marked and Replace with Hardlinks";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Send Marked to Trash"; ObjectID = "29"; */
|
|
||||||
"29.title" = "Send Marked to Trash";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Move Marked to..."; ObjectID = "30"; */
|
|
||||||
"30.title" = "Move Marked to...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Copy Marked to..."; ObjectID = "31"; */
|
|
||||||
"31.title" = "Copy Marked to...";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Remove Marked from Results"; ObjectID = "32"; */
|
|
||||||
"32.title" = "Remove Marked from Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Remove Selected from Results"; ObjectID = "34"; */
|
|
||||||
"34.title" = "Remove Selected from Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Add Selected to Ignore List"; ObjectID = "35"; */
|
|
||||||
"35.title" = "Add Selected to Ignore List";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Make Selected Reference"; ObjectID = "36"; */
|
|
||||||
"36.title" = "Make Selected Reference";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Open Selected with Default Application"; ObjectID = "38"; */
|
|
||||||
"38.title" = "Open Selected with Default Application";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Reveal Selected in Finder"; ObjectID = "39"; */
|
|
||||||
"39.title" = "Reveal Selected in Finder";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Rename Selected"; ObjectID = "40"; */
|
|
||||||
"40.title" = "Rename Selected";
|
|
||||||
|
|
||||||
/* Class = "NSSearchFieldCell"; placeholderString = "Filter"; ObjectID = "42"; */
|
|
||||||
"42.placeholderString" = "Filter";
|
|
||||||
|
|
||||||
/* Class = "NSSegmentedCell"; 44.ibShadowedLabels[0] = "Details"; ObjectID = "44"; */
|
|
||||||
"44.ibShadowedLabels[0]" = "Details";
|
|
||||||
|
|
||||||
/* Class = "NSSegmentedCell"; 44.ibShadowedLabels[1] = "Dupes Only"; ObjectID = "44"; */
|
|
||||||
"44.ibShadowedLabels[1]" = "Dupes Only";
|
|
||||||
|
|
||||||
/* Class = "NSSegmentedCell"; 44.ibShadowedLabels[2] = "Delta"; ObjectID = "44"; */
|
|
||||||
"44.ibShadowedLabels[2]" = "Delta";
|
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Menu"; ObjectID = "67"; */
|
|
||||||
"67.title" = "Menu";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Add Selected to Ignore List"; ObjectID = "68"; */
|
|
||||||
"68.title" = "Add Selected to Ignore List";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Rename Selected"; ObjectID = "70"; */
|
|
||||||
"70.title" = "Rename Selected";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Remove Selected from Results"; ObjectID = "71"; */
|
|
||||||
"71.title" = "Remove Selected from Results";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Make Selected Reference"; ObjectID = "72"; */
|
|
||||||
"72.title" = "Make Selected Reference";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Reveal Selected in Finder"; ObjectID = "73"; */
|
|
||||||
"73.title" = "Reveal Selected in Finder";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Open Selected with Default Application"; ObjectID = "74"; */
|
|
||||||
"74.title" = "Open Selected with Default Application";
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import <Python.h>
|
#import <Python.h>
|
||||||
#import <wchar.h>
|
#import <wchar.h>
|
||||||
#import <locale.h>
|
#import <locale.h>
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
#import "MainMenu_UI.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -34,8 +36,14 @@ int main(int argc, char *argv[])
|
|||||||
PyThreadState_Swap(NULL);
|
PyThreadState_Swap(NULL);
|
||||||
PyEval_ReleaseLock();
|
PyEval_ReleaseLock();
|
||||||
}
|
}
|
||||||
int result = NSApplicationMain(argc, (const char **) argv);
|
|
||||||
Py_Finalize();
|
[NSApplication sharedApplication];
|
||||||
|
AppDelegate *appDelegate = [[AppDelegate alloc] init];
|
||||||
|
[NSApp setDelegate:appDelegate];
|
||||||
|
[NSApp setMainMenu:createMainMenu_UI(appDelegate)];
|
||||||
|
[appDelegate finalizeInit];
|
||||||
[pool release];
|
[pool release];
|
||||||
return result;
|
[NSApp run];
|
||||||
|
Py_Finalize();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
49
cocoa/base/ui/deletion_options.py
Normal file
49
cocoa/base/ui/deletion_options.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
ownerclass = 'DeletionOptions'
|
||||||
|
ownerimport = 'DeletionOptions.h'
|
||||||
|
|
||||||
|
result = Window(450, 240, "Deletion Options")
|
||||||
|
messageLabel = Label(result, "")
|
||||||
|
linkCheckbox = Checkbox(result, "Link deleted files")
|
||||||
|
linkLabel = Label(result, "After having deleted a duplicate, place a link targeting the "
|
||||||
|
"reference file to replace the deleted file.")
|
||||||
|
linkTypeChoice = RadioButtons(result, ["Symlink", "Hardlink"], columns=2)
|
||||||
|
directCheckbox = Checkbox(result, "Directly delete files")
|
||||||
|
directLabel = Label(result, "Instead of sending files to trash, delete them directly. This option "
|
||||||
|
"is usually used as a workaround when the normal deletion method doesn't work.")
|
||||||
|
proceedButton = Button(result, "Proceed")
|
||||||
|
cancelButton = Button(result, "Cancel")
|
||||||
|
|
||||||
|
owner.linkButton = linkCheckbox
|
||||||
|
owner.linkTypeRadio = linkTypeChoice
|
||||||
|
owner.directButton = directCheckbox
|
||||||
|
owner.messageTextField = messageLabel
|
||||||
|
|
||||||
|
result.canMinimize = False
|
||||||
|
result.canResize = False
|
||||||
|
linkLabel.controlSize = ControlSize.Small
|
||||||
|
directLabel.controlSize = ControlSize.Small
|
||||||
|
linkTypeChoice.controlSize = ControlSize.Small
|
||||||
|
proceedButton.keyEquivalent = '\\r'
|
||||||
|
cancelButton.keyEquivalent = '\\e'
|
||||||
|
linkCheckbox.action = directCheckbox.action = linkTypeChoice.action = Action(owner, 'updateOptions')
|
||||||
|
proceedButton.action = Action(owner, 'proceed')
|
||||||
|
cancelButton.action = Action(owner, 'cancel')
|
||||||
|
|
||||||
|
linkLabel.height *= 2 # 2 lines
|
||||||
|
directLabel.height *= 3 # 3 lines
|
||||||
|
proceedButton.width = 92
|
||||||
|
cancelButton.width = 92
|
||||||
|
|
||||||
|
mainLayout = VLayout([messageLabel, linkCheckbox, linkLabel, linkTypeChoice, directCheckbox,
|
||||||
|
directLabel])
|
||||||
|
mainLayout.packToCorner(Pack.UpperLeft)
|
||||||
|
mainLayout.fill(Pack.Right)
|
||||||
|
buttonLayout = HLayout([cancelButton, proceedButton])
|
||||||
|
buttonLayout.packToCorner(Pack.LowerRight)
|
||||||
|
|
||||||
|
# indent the labels under checkboxes a little bit to the right
|
||||||
|
for indentedView in (linkLabel, directLabel, linkTypeChoice):
|
||||||
|
indentedView.x += 20
|
||||||
|
indentedView.width -= 20
|
||||||
|
# We actually don't want the link choice radio buttons to take all the width, it looks weird.
|
||||||
|
linkTypeChoice.width = 170
|
||||||
32
cocoa/base/ui/details_panel.py
Normal file
32
cocoa/base/ui/details_panel.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
ownerclass = 'DetailsPanel'
|
||||||
|
ownerimport = 'DetailsPanel.h'
|
||||||
|
|
||||||
|
result = Panel(451, 146, "Details of Selected File")
|
||||||
|
table = TableView(result)
|
||||||
|
|
||||||
|
owner.detailsTable = table
|
||||||
|
|
||||||
|
result.style = PanelStyle.Utility
|
||||||
|
result.xProportion = 0.2
|
||||||
|
result.yProportion = 0.4
|
||||||
|
result.canMinimize = False
|
||||||
|
result.autosaveName = 'DetailsPanel'
|
||||||
|
result.minSize = Size(result.width, result.height)
|
||||||
|
|
||||||
|
table.dataSource = owner
|
||||||
|
table.allowsColumnReordering = False
|
||||||
|
table.allowsColumnSelection = False
|
||||||
|
table.allowsMultipleSelection = False
|
||||||
|
table.font = Font(FontFamily.System, FontSize.SmallSystem)
|
||||||
|
table.rowHeight = 14
|
||||||
|
table.editable = False
|
||||||
|
col = table.addColumn('0', "Attribute", 70)
|
||||||
|
col.autoResizable = True
|
||||||
|
col = table.addColumn('1', "Selected", 198)
|
||||||
|
col.autoResizable = True
|
||||||
|
col = table.addColumn('2', "Reference", 172)
|
||||||
|
col.autoResizable = True
|
||||||
|
|
||||||
|
table.packToCorner(Pack.UpperLeft, margin=0)
|
||||||
|
table.fill(Pack.LowerRight, margin=0)
|
||||||
|
table.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
64
cocoa/base/ui/directory_panel.py
Normal file
64
cocoa/base/ui/directory_panel.py
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
ownerclass = 'DirectoryPanel'
|
||||||
|
ownerimport = 'DirectoryPanel.h'
|
||||||
|
|
||||||
|
result = Window(425, 300, "dupeGuru")
|
||||||
|
promptLabel = Label(result, "Select folders to scan and press \"Scan\".")
|
||||||
|
directoryOutline = OutlineView(result)
|
||||||
|
directoryOutline.OBJC_CLASS = 'HSOutlineView'
|
||||||
|
addButton = Button(result, "")
|
||||||
|
removeButton = Button(result, "")
|
||||||
|
loadResultsButton = Button(result, "Load Results")
|
||||||
|
scanButton = Button(result, "Scan")
|
||||||
|
addPopup = Popup(None)
|
||||||
|
loadRecentPopup = Popup(None)
|
||||||
|
|
||||||
|
owner.outlineView = directoryOutline
|
||||||
|
owner.removeButton = removeButton
|
||||||
|
owner.loadResultsButton = loadResultsButton
|
||||||
|
owner.addButtonPopUp = addPopup
|
||||||
|
owner.loadRecentButtonPopUp = loadRecentPopup
|
||||||
|
|
||||||
|
result.autosaveName = 'DirectoryPanel'
|
||||||
|
result.canMinimize = False
|
||||||
|
result.minSize = Size(370, 270)
|
||||||
|
addButton.bezelStyle = removeButton.bezelStyle = const.NSTexturedRoundedBezelStyle
|
||||||
|
addButton.image = 'NSAddTemplate'
|
||||||
|
removeButton.image = 'NSRemoveTemplate'
|
||||||
|
for button in (addButton, removeButton):
|
||||||
|
button.style = const.NSTexturedRoundedBezelStyle
|
||||||
|
button.imagePosition = const.NSImageOnly
|
||||||
|
scanButton.keyEquivalent = '\\r'
|
||||||
|
addButton.action = Action(owner, 'popupAddDirectoryMenu:')
|
||||||
|
removeButton.action = Action(owner, 'removeSelectedDirectory')
|
||||||
|
loadResultsButton.action = Action(owner, 'popupLoadRecentMenu:')
|
||||||
|
scanButton.action = Action(None, 'startScanning')
|
||||||
|
|
||||||
|
directoryOutline.font = Font(FontFamily.System, FontSize.SmallSystem)
|
||||||
|
col = directoryOutline.addColumn('name', "Name", 100)
|
||||||
|
col.editable = False
|
||||||
|
col.autoResizable = True
|
||||||
|
col = directoryOutline.addColumn('state', "State", 85)
|
||||||
|
col.editable = True
|
||||||
|
col.autoResizable = False
|
||||||
|
col.dataCell = Popup(None, ["Normal", "Reference", "Excluded"])
|
||||||
|
col.dataCell.controlSize = const.NSSmallControlSize
|
||||||
|
directoryOutline.allowsColumnReordering = False
|
||||||
|
directoryOutline.allowsColumnSelection = False
|
||||||
|
directoryOutline.allowsMultipleSelection = True
|
||||||
|
|
||||||
|
for button in (addButton, removeButton):
|
||||||
|
button.width = 28
|
||||||
|
for button in (loadResultsButton, scanButton):
|
||||||
|
button.width = 118
|
||||||
|
|
||||||
|
buttonLayout = HLayout([addButton, removeButton, None, loadResultsButton, scanButton])
|
||||||
|
promptLabel.packToCorner(Pack.UpperLeft)
|
||||||
|
promptLabel.fill(Pack.Right)
|
||||||
|
directoryOutline.packRelativeTo(promptLabel, Pack.Below)
|
||||||
|
buttonLayout.packRelativeTo(directoryOutline, Pack.Below, margin=8)
|
||||||
|
directoryOutline.fill(Pack.LowerRight)
|
||||||
|
buttonLayout.fill(Pack.Right)
|
||||||
|
|
||||||
|
promptLabel.setAnchor(Pack.UpperLeft, growX=True)
|
||||||
|
directoryOutline.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
buttonLayout.setAnchor(Pack.Below)
|
||||||
30
cocoa/base/ui/ignore_list_dialog.py
Normal file
30
cocoa/base/ui/ignore_list_dialog.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
ownerclass = 'IgnoreListDialog'
|
||||||
|
ownerimport = 'IgnoreListDialog.h'
|
||||||
|
|
||||||
|
result = Window(550, 350, "Ignore List")
|
||||||
|
table = TableView(result)
|
||||||
|
removeSelectedButton = Button(result, "Remove Selected")
|
||||||
|
clearButton = Button(result, "Clear")
|
||||||
|
closeButton = Button(result, "Close")
|
||||||
|
|
||||||
|
owner.ignoreListTableView = table
|
||||||
|
|
||||||
|
result.canMinimize = False
|
||||||
|
removeSelectedButton.action = Action(owner.model, 'removeSelected')
|
||||||
|
clearButton.action = Action(owner.model, 'clear')
|
||||||
|
closeButton.action = Action(result, 'performClose:')
|
||||||
|
closeButton.keyEquivalent = '\\r'
|
||||||
|
table.allowsColumnReordering = False
|
||||||
|
table.allowsColumnSelection = False
|
||||||
|
table.allowsMultipleSelection = True
|
||||||
|
|
||||||
|
removeSelectedButton.width = 142
|
||||||
|
clearButton.width = 142
|
||||||
|
closeButton.width = 84
|
||||||
|
buttonLayout = HLayout([removeSelectedButton, clearButton, None, closeButton])
|
||||||
|
buttonLayout.packToCorner(Pack.LowerLeft)
|
||||||
|
buttonLayout.fill(Pack.Right)
|
||||||
|
buttonLayout.setAnchor(Pack.Below)
|
||||||
|
table.packRelativeTo(buttonLayout, Pack.Above)
|
||||||
|
table.fill(Pack.UpperRight)
|
||||||
|
table.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
82
cocoa/base/ui/main_menu.py
Normal file
82
cocoa/base/ui/main_menu.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
ownerclass = 'AppDelegateBase'
|
||||||
|
ownerimport = 'AppDelegateBase.h'
|
||||||
|
edition = args.get('edition', 'se')
|
||||||
|
|
||||||
|
result = Menu("")
|
||||||
|
appMenu = result.addMenu("dupeGuru")
|
||||||
|
fileMenu = result.addMenu("File")
|
||||||
|
editMenu = result.addMenu("Edit")
|
||||||
|
actionMenu = result.addMenu("Actions")
|
||||||
|
owner.columnsMenu = result.addMenu("Columns")
|
||||||
|
modeMenu = result.addMenu("Mode")
|
||||||
|
windowMenu = result.addMenu("Window")
|
||||||
|
helpMenu = result.addMenu("Help")
|
||||||
|
|
||||||
|
appMenu.addItem("About dupeGuru", Action(owner, 'showAboutBox'))
|
||||||
|
appMenu.addItem("Check for update...", Action(owner.updater, 'checkForUpdates:'))
|
||||||
|
appMenu.addSeparator()
|
||||||
|
appMenu.addItem("Preferences...", Action(owner, 'showPreferencesPanel'), 'cmd+,')
|
||||||
|
appMenu.addSeparator()
|
||||||
|
NSApp.servicesMenu = appMenu.addMenu("Services")
|
||||||
|
appMenu.addSeparator()
|
||||||
|
appMenu.addItem("Hide dupeGuru", Action(NSApp, 'hide:'), 'cmd+h')
|
||||||
|
appMenu.addItem("Hide Others", Action(NSApp, 'hideOtherApplications:'), 'cmd+alt+h')
|
||||||
|
appMenu.addItem("Show All", Action(NSApp, 'unhideAllApplications:'))
|
||||||
|
appMenu.addSeparator()
|
||||||
|
appMenu.addItem("Quit dupeGuru", Action(NSApp, 'terminate:'), 'cmd+q')
|
||||||
|
|
||||||
|
fileMenu.addItem("Load Results...", Action(None, 'loadResults'), 'cmd+o')
|
||||||
|
owner.recentResultsMenu = fileMenu.addMenu("Load Recent Results")
|
||||||
|
fileMenu.addItem("Save Results...", Action(None, 'saveResults'), 'cmd+s')
|
||||||
|
fileMenu.addItem("Export Results to XHTML", Action(owner.model, 'exportToXHTML'), 'cmd+shift+e')
|
||||||
|
fileMenu.addItem("Export Results to CSV", Action(owner.model, 'exportToCSV'))
|
||||||
|
if edition == 'pe':
|
||||||
|
fileMenu.addItem("Clear Picture Cache", Action(owner, 'clearPictureCache'), 'cmd+shift+p')
|
||||||
|
elif edition == 'me':
|
||||||
|
fileMenu.addItem("Remove Dead Tracks in iTunes", Action(owner, 'removeDeadTracks'))
|
||||||
|
|
||||||
|
editMenu.addItem("Mark All", Action(None, 'markAll'), 'cmd+a')
|
||||||
|
editMenu.addItem("Mark None", Action(None, 'markNone'), 'cmd+shift+a')
|
||||||
|
editMenu.addItem("Invert Marking", Action(None, 'markInvert'), 'cmd+alt+a')
|
||||||
|
editMenu.addItem("Mark Selected", Action(None, 'markSelected'), 'ctrl+cmd+a')
|
||||||
|
editMenu.addSeparator()
|
||||||
|
editMenu.addItem("Cut", Action(None, 'cut:'), 'cmd+x')
|
||||||
|
editMenu.addItem("Copy", Action(None, 'copy:'), 'cmd+c')
|
||||||
|
editMenu.addItem("Paste", Action(None, 'paste:'), 'cmd+v')
|
||||||
|
editMenu.addSeparator()
|
||||||
|
editMenu.addItem("Filter Results...", Action(None, 'focusOnFilterField'), 'cmd+alt+f')
|
||||||
|
|
||||||
|
actionMenu.addItem("Start Duplicate Scan", Action(owner, 'startScanning'), 'cmd+d')
|
||||||
|
actionMenu.addSeparator()
|
||||||
|
actionMenu.addItem("Send Marked to Trash...", Action(None, 'trashMarked'), 'cmd+t')
|
||||||
|
actionMenu.addItem("Move Marked to...", Action(None, 'moveMarked'), 'cmd+m')
|
||||||
|
actionMenu.addItem("Copy Marked to...", Action(None, 'copyMarked'), 'cmd+alt+m')
|
||||||
|
actionMenu.addItem("Remove Marked from Results", Action(None, 'removeMarked'), 'cmd+r')
|
||||||
|
actionMenu.addItem("Re-Prioritize Results", Action(None, 'reprioritizeResults'))
|
||||||
|
actionMenu.addSeparator()
|
||||||
|
actionMenu.addItem("Remove Selected from Results", Action(None, 'removeSelected'), 'cmd+backspace')
|
||||||
|
actionMenu.addItem("Add Selected to Ignore List", Action(None, 'ignoreSelected'), 'cmd+g')
|
||||||
|
actionMenu.addItem("Make Selected Reference", Action(None, 'switchSelected'), 'cmd+arrowup')
|
||||||
|
actionMenu.addSeparator()
|
||||||
|
actionMenu.addItem("Open Selected with Default Application", Action(None, 'openSelected'), 'cmd+return')
|
||||||
|
actionMenu.addItem("Reveal Selected in Finder", Action(None, 'revealSelected'), 'cmd+alt+return')
|
||||||
|
actionMenu.addItem("Invoke Custom Command", Action(None, 'invokeCustomCommand'), 'cmd+shift+c')
|
||||||
|
actionMenu.addItem("Rename Selected", Action(None, 'renameSelected'), 'enter')
|
||||||
|
|
||||||
|
modeMenu.addItem("Show Dupes Only", Action(None, 'togglePowerMarker'), 'cmd+1')
|
||||||
|
modeMenu.addItem("Show Delta Values", Action(None, 'toggleDelta'), 'cmd+2')
|
||||||
|
|
||||||
|
windowMenu.addItem("Results Window", Action(owner, 'showResultWindow'))
|
||||||
|
windowMenu.addItem("Folder Selection Window", Action(owner, 'showDirectoryWindow'))
|
||||||
|
windowMenu.addItem("Ignore List", Action(owner, 'showIgnoreList'))
|
||||||
|
windowMenu.addItem("Details Panel", Action(None, 'toggleDetailsPanel'), 'cmd+i')
|
||||||
|
windowMenu.addItem("Quick Look", Action(None, 'toggleQuicklookPanel'), 'cmd+l')
|
||||||
|
windowMenu.addSeparator()
|
||||||
|
windowMenu.addItem("Minimize", Action(None, 'performMinimize:'))
|
||||||
|
windowMenu.addItem("Zoom", Action(None, 'performZoom:'))
|
||||||
|
windowMenu.addItem("Close Window", Action(None, 'performClose:'), 'cmd+w')
|
||||||
|
windowMenu.addSeparator()
|
||||||
|
windowMenu.addItem("Bring All to Front", Action(None, 'arrangeInFront:'))
|
||||||
|
|
||||||
|
helpMenu.addItem("dupeGuru Help", Action(owner, 'openHelp'), 'cmd+?')
|
||||||
|
helpMenu.addItem("dupeGuru Website", Action(owner, 'openWebsite'))
|
||||||
189
cocoa/base/ui/preferences_panel.py
Normal file
189
cocoa/base/ui/preferences_panel.py
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
edition = args.get('edition', 'se')
|
||||||
|
dialogTitles = {
|
||||||
|
'se': "dupeGuru Preferences",
|
||||||
|
'me': "dupeGuru ME Preferences",
|
||||||
|
'pe': "dupeGuru PE Preferences",
|
||||||
|
}
|
||||||
|
dialogHeights = {
|
||||||
|
'se': 345,
|
||||||
|
'me': 365,
|
||||||
|
'pe': 275,
|
||||||
|
}
|
||||||
|
scanTypeNames = {
|
||||||
|
'se': ["Filename", "Content", "Folders"],
|
||||||
|
'me': ["Filename", "Filename - Fields", "Filename - Fields (No Order)", "Tags", "Content", "Audio Content"],
|
||||||
|
'pe': ["Contents", "EXIF Timestamp"],
|
||||||
|
}
|
||||||
|
|
||||||
|
result = Window(410, dialogHeights[edition], dialogTitles[edition])
|
||||||
|
tabView = TabView(result)
|
||||||
|
basicTab = tabView.addTab("Basic")
|
||||||
|
advancedTab = tabView.addTab("Advanced")
|
||||||
|
scanTypePopup = Popup(basicTab.view, scanTypeNames[edition])
|
||||||
|
scanTypeLabel = Label(basicTab.view, "Scan Type:")
|
||||||
|
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 edition in ('se', 'me'):
|
||||||
|
wordWeightingBox = Checkbox(basicTab.view, "Word weighting")
|
||||||
|
matchSimilarWordsBox = Checkbox(basicTab.view, "Match similar words")
|
||||||
|
elif edition == 'pe':
|
||||||
|
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 edition == 'se':
|
||||||
|
ignoreSmallFilesBox = Checkbox(basicTab.view, "Ignore files smaller than:")
|
||||||
|
smallFilesThresholdText = TextField(basicTab.view, "")
|
||||||
|
smallFilesThresholdSuffixLabel = Label(basicTab.view, "KB")
|
||||||
|
elif edition == 'me':
|
||||||
|
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")
|
||||||
|
|
||||||
|
scanTypePopup.bind('selectedIndex', defaults, 'values.scanType')
|
||||||
|
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 edition in ('se', 'me'):
|
||||||
|
wordWeightingBox.bind('value', defaults, 'values.wordWeighting')
|
||||||
|
matchSimilarWordsBox.bind('value', defaults, 'values.matchSimilarWords')
|
||||||
|
disableWhenContentScan = [thresholdSlider, wordWeightingBox, matchSimilarWordsBox]
|
||||||
|
for control in disableWhenContentScan:
|
||||||
|
control.bind('enabled', defaults, 'values.scanType', valueTransformer='vtScanTypeIsNotContent')
|
||||||
|
if edition == 'se':
|
||||||
|
ignoreSmallFilesBox.bind('value', defaults, 'values.ignoreSmallFiles')
|
||||||
|
smallFilesThresholdText.bind('value', defaults, 'values.smallFileThreshold')
|
||||||
|
elif edition == 'me':
|
||||||
|
for box in tagBoxes:
|
||||||
|
box.bind('enabled', defaults, 'values.scanType', 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 edition == 'pe':
|
||||||
|
matchDifferentDimensionsBox.bind('value', defaults, 'values.matchScaled')
|
||||||
|
thresholdSlider.bind('enabled', defaults, 'values.scanType', valueTransformer='vtScanTypeIsFuzzy')
|
||||||
|
|
||||||
|
result.canResize = False
|
||||||
|
result.canMinimize = False
|
||||||
|
thresholdValueLabel.formatter = NumberFormatter(NumberStyle.Decimal)
|
||||||
|
thresholdValueLabel.formatter.maximumFractionDigits = 0
|
||||||
|
allLabels = [scanTypeLabel, thresholdValueLabel, moreResultsLabel, fewerResultsLabel,
|
||||||
|
thresholdLabel, fontSizeLabel, customCommandLabel, copyMoveLabel]
|
||||||
|
allCheckboxes = [mixKindBox, removeEmptyFoldersBox, checkForUpdatesBox, regexpCheckbox,
|
||||||
|
ignoreHardlinksBox, debugModeCheckbox]
|
||||||
|
if edition == 'se':
|
||||||
|
allLabels += [smallFilesThresholdSuffixLabel]
|
||||||
|
allCheckboxes += [ignoreSmallFilesBox, wordWeightingBox, matchSimilarWordsBox]
|
||||||
|
elif edition == 'me':
|
||||||
|
allLabels += [tagsToScanLabel]
|
||||||
|
allCheckboxes += tagBoxes + [wordWeightingBox, matchSimilarWordsBox]
|
||||||
|
elif edition == 'pe':
|
||||||
|
allCheckboxes += [matchDifferentDimensionsBox]
|
||||||
|
for label in allLabels:
|
||||||
|
label.controlSize = ControlSize.Small
|
||||||
|
fewerResultsLabel.alignment = TextAlignment.Right
|
||||||
|
for checkbox in allCheckboxes:
|
||||||
|
checkbox.font = scanTypeLabel.font
|
||||||
|
resetToDefaultsButton.action = Action(defaults, 'revertToInitialValues:')
|
||||||
|
|
||||||
|
scanTypeLabel.width = thresholdLabel.width = fontSizeLabel.width = 94
|
||||||
|
fontSizeCombo.width = 66
|
||||||
|
thresholdValueLabel.width = 25
|
||||||
|
resetToDefaultsButton.width = 136
|
||||||
|
if edition == 'se':
|
||||||
|
smallFilesThresholdText.width = 60
|
||||||
|
smallFilesThresholdSuffixLabel.width = 40
|
||||||
|
elif edition == 'me':
|
||||||
|
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)
|
||||||
|
scanTypePopup.packToCorner(Pack.UpperRight)
|
||||||
|
scanTypeLabel.packRelativeTo(scanTypePopup, Pack.Left)
|
||||||
|
scanTypePopup.fill(Pack.Left)
|
||||||
|
thresholdSlider.packRelativeTo(scanTypePopup, Pack.Below)
|
||||||
|
thresholdValueLabel.packRelativeTo(thresholdSlider, Pack.Right)
|
||||||
|
thresholdSlider.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)
|
||||||
|
thresholdLabel.packRelativeTo(thresholdSlider, Pack.Left)
|
||||||
|
fontSizeCombo.packRelativeTo(moreResultsLabel, Pack.Below)
|
||||||
|
fontSizeLabel.packRelativeTo(fontSizeCombo, Pack.Left)
|
||||||
|
|
||||||
|
if edition == 'me':
|
||||||
|
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 edition == 'se':
|
||||||
|
checkboxesToLayout = [wordWeightingBox, matchSimilarWordsBox, mixKindBox, removeEmptyFoldersBox,
|
||||||
|
ignoreSmallFilesBox]
|
||||||
|
elif edition == 'me':
|
||||||
|
checkboxesToLayout = [wordWeightingBox, matchSimilarWordsBox, mixKindBox, removeEmptyFoldersBox,
|
||||||
|
checkForUpdatesBox]
|
||||||
|
elif edition == 'pe':
|
||||||
|
checkboxesToLayout = [matchDifferentDimensionsBox, mixKindBox, removeEmptyFoldersBox,
|
||||||
|
checkForUpdatesBox]
|
||||||
|
checkboxLayout = VLayout(checkboxesToLayout)
|
||||||
|
checkboxLayout.packRelativeTo(viewToPackCheckboxesUnder, Pack.Below)
|
||||||
|
checkboxLayout.fill(Pack.Left)
|
||||||
|
checkboxLayout.fill(Pack.Right)
|
||||||
|
|
||||||
|
if edition == 'se':
|
||||||
|
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)
|
||||||
50
cocoa/base/ui/prioritize_dialog.py
Normal file
50
cocoa/base/ui/prioritize_dialog.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
ownerclass = 'PrioritizeDialog'
|
||||||
|
ownerimport = 'PrioritizeDialog.h'
|
||||||
|
|
||||||
|
result = Window(610, 400, "Re-Prioritize duplicates")
|
||||||
|
promptLabel = Label(result, "Add criteria to the right box and click OK to send the dupes that "
|
||||||
|
"correspond the best to these criteria to their respective group's reference position. Read "
|
||||||
|
"the help file for more information.")
|
||||||
|
categoryPopup = Popup(result)
|
||||||
|
criteriaTable = ListView(result)
|
||||||
|
prioritizationTable = ListView(result)
|
||||||
|
addButton = Button(result, NLSTR("-->"))
|
||||||
|
removeButton = Button(result, NLSTR("<--"))
|
||||||
|
okButton = Button(result, "Ok")
|
||||||
|
cancelButton = Button(result, "Cancel")
|
||||||
|
|
||||||
|
owner.categoryPopUpView = categoryPopup
|
||||||
|
owner.criteriaTableView = criteriaTable
|
||||||
|
owner.prioritizationTableView = prioritizationTable
|
||||||
|
|
||||||
|
result.canMinimize = False
|
||||||
|
result.canClose = False
|
||||||
|
result.minSize = Size(result.width, result.height)
|
||||||
|
addButton.action = Action(owner.model, 'addSelected')
|
||||||
|
removeButton.action = Action(owner.model, 'removeSelected')
|
||||||
|
okButton.action = Action(owner, 'ok')
|
||||||
|
cancelButton.action = Action(owner, 'cancel')
|
||||||
|
okButton.keyEquivalent = '\\r'
|
||||||
|
cancelButton.keyEquivalent = '\\e'
|
||||||
|
|
||||||
|
promptLabel.height *= 3 # 3 lines
|
||||||
|
|
||||||
|
leftLayout = VLayout([categoryPopup, criteriaTable], width=262, filler=criteriaTable)
|
||||||
|
middleLayout = VLayout([addButton, removeButton], width=41)
|
||||||
|
buttonLayout = HLayout([None, cancelButton, okButton])
|
||||||
|
|
||||||
|
promptLabel.packToCorner(Pack.UpperLeft)
|
||||||
|
promptLabel.fill(Pack.Right)
|
||||||
|
leftLayout.packRelativeTo(promptLabel, Pack.Below)
|
||||||
|
middleLayout.packRelativeTo(leftLayout, Pack.Right, align=Pack.Above)
|
||||||
|
prioritizationTable.packRelativeTo(middleLayout, Pack.Right, align=Pack.Above)
|
||||||
|
buttonLayout.packRelativeTo(leftLayout, Pack.Below)
|
||||||
|
buttonLayout.fill(Pack.Right)
|
||||||
|
leftLayout.fill(Pack.Below)
|
||||||
|
middleLayout.packRelativeTo(leftLayout, Pack.Right, align=Pack.Middle)
|
||||||
|
prioritizationTable.fill(Pack.Below, goal=leftLayout.y)
|
||||||
|
prioritizationTable.fill(Pack.Right)
|
||||||
|
|
||||||
|
promptLabel.setAnchor(Pack.UpperLeft, growX=True)
|
||||||
|
prioritizationTable.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
buttonLayout.setAnchor(Pack.Below)
|
||||||
35
cocoa/base/ui/problem_dialog.py
Normal file
35
cocoa/base/ui/problem_dialog.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
ownerclass = 'ProblemDialog'
|
||||||
|
ownerimport = 'ProblemDialog.h'
|
||||||
|
|
||||||
|
result = Window(480, 310, "Problems!")
|
||||||
|
messageLabel = Label(result, "There were problems processing some (or all) of the files. The cause "
|
||||||
|
"of these problems are described in the table below. Those files were not removed from your "
|
||||||
|
"results.")
|
||||||
|
problemTable = TableView(result)
|
||||||
|
revealButton = Button(result, "Reveal")
|
||||||
|
closeButton = Button(result, "Close")
|
||||||
|
|
||||||
|
owner.problemTableView = problemTable
|
||||||
|
|
||||||
|
result.canMinimize = False
|
||||||
|
result.minSize = Size(300, 300)
|
||||||
|
closeButton.keyEquivalent = '\\r'
|
||||||
|
revealButton.action = Action(owner.model, 'revealSelected')
|
||||||
|
closeButton.action = Action(result, 'performClose:')
|
||||||
|
|
||||||
|
messageLabel.height *= 3 # 3 lines
|
||||||
|
revealButton.width = 150
|
||||||
|
closeButton.width = 98
|
||||||
|
|
||||||
|
messageLabel.packToCorner(Pack.UpperLeft)
|
||||||
|
messageLabel.fill(Pack.Right)
|
||||||
|
problemTable.packRelativeTo(messageLabel, Pack.Below)
|
||||||
|
problemTable.fill(Pack.Right)
|
||||||
|
revealButton.packRelativeTo(problemTable, Pack.Below)
|
||||||
|
closeButton.packRelativeTo(problemTable, Pack.Below, align=Pack.Right)
|
||||||
|
problemTable.fill(Pack.Below)
|
||||||
|
|
||||||
|
messageLabel.setAnchor(Pack.UpperLeft, growX=True)
|
||||||
|
problemTable.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
revealButton.setAnchor(Pack.LowerLeft)
|
||||||
|
closeButton.setAnchor(Pack.LowerRight)
|
||||||
97
cocoa/base/ui/result_window.py
Normal file
97
cocoa/base/ui/result_window.py
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
wnerclass = 'ResultWindow'
|
||||||
|
ownerimport = 'ResultWindow.h'
|
||||||
|
|
||||||
|
result = Window(557, 400, "dupeGuru Results")
|
||||||
|
toolbar = result.createToolbar('ResultsToolbar')
|
||||||
|
table = TableView(result)
|
||||||
|
table.OBJC_CLASS = 'HSTableView'
|
||||||
|
statsLabel = Label(result, "")
|
||||||
|
contextMenu = Menu("")
|
||||||
|
|
||||||
|
#Setup toolbar items
|
||||||
|
toolbar.displayMode = const.NSToolbarDisplayModeIconOnly
|
||||||
|
directoriesToolItem = toolbar.addItem('Directories', "Directories", image='folder32')
|
||||||
|
actionToolItem = toolbar.addItem('Action', "Action")
|
||||||
|
filterToolItem = toolbar.addItem('Filter', "Filter")
|
||||||
|
optionsToolItem = toolbar.addItem('Options', "Options")
|
||||||
|
quicklookToolItem = toolbar.addItem('QuickLook', "Quick Look")
|
||||||
|
toolbar.defaultItems = [actionToolItem, optionsToolItem, quicklookToolItem, directoriesToolItem,
|
||||||
|
toolbar.flexibleSpace(), filterToolItem]
|
||||||
|
actionPopup = Popup(None)
|
||||||
|
actionPopup.pullsdown = True
|
||||||
|
actionPopup.bezelStyle = const.NSTexturedRoundedBezelStyle
|
||||||
|
actionPopup.arrowPosition = const.NSPopUpArrowAtBottom
|
||||||
|
item = actionPopup.menu.addItem("") # First item is invisible
|
||||||
|
item.hidden = True
|
||||||
|
item.image = 'NSActionTemplate'
|
||||||
|
actionPopup.width = 44
|
||||||
|
actionToolItem.view = actionPopup
|
||||||
|
filterField = SearchField(None, "Filter")
|
||||||
|
filterField.action = Action(owner, 'filter')
|
||||||
|
filterField.sendsWholeSearchString = True
|
||||||
|
filterToolItem.view = filterField
|
||||||
|
filterToolItem.minSize = Size(80, 22)
|
||||||
|
filterToolItem.maxSize = Size(300, 22)
|
||||||
|
quickLookButton = Button(None, "")
|
||||||
|
quickLookButton.bezelStyle = const.NSTexturedRoundedBezelStyle
|
||||||
|
quickLookButton.image = 'NSQuickLookTemplate'
|
||||||
|
quickLookButton.width = 44
|
||||||
|
quickLookButton.action = Action(owner, 'toggleQuicklookPanel')
|
||||||
|
quicklookToolItem.view = quickLookButton
|
||||||
|
optionsSegments = SegmentedControl(None)
|
||||||
|
optionsSegments.segmentStyle = const.NSSegmentStyleCapsule
|
||||||
|
optionsSegments.trackingMode = const.NSSegmentSwitchTrackingSelectAny
|
||||||
|
optionsSegments.font = Font(FontFamily.System, 11)
|
||||||
|
optionsSegments.addSegment("Details", 57)
|
||||||
|
optionsSegments.addSegment("Dupes Only", 82)
|
||||||
|
optionsSegments.addSegment("Delta", 48)
|
||||||
|
optionsSegments.action = Action(owner, 'changeOptions')
|
||||||
|
optionsToolItem.view = optionsSegments
|
||||||
|
|
||||||
|
# Popuplate menus
|
||||||
|
actionPopup.menu.addItem("Send Marked to Trash...", action=Action(owner, 'trashMarked'))
|
||||||
|
actionPopup.menu.addItem("Move Marked to...", action=Action(owner, 'moveMarked'))
|
||||||
|
actionPopup.menu.addItem("Copy Marked to...", action=Action(owner, 'copyMarked'))
|
||||||
|
actionPopup.menu.addItem("Remove Marked from Results", action=Action(owner, 'removeMarked'))
|
||||||
|
actionPopup.menu.addSeparator()
|
||||||
|
for menu in (actionPopup.menu, contextMenu):
|
||||||
|
menu.addItem("Remove Selected from Results", action=Action(owner, 'removeSelected'))
|
||||||
|
menu.addItem("Add Selected to Ignore List", action=Action(owner, 'ignoreSelected'))
|
||||||
|
menu.addItem("Make Selected Reference", action=Action(owner, 'switchSelected'))
|
||||||
|
menu.addSeparator()
|
||||||
|
menu.addItem("Open Selected with Default Application", action=Action(owner, 'openSelected'))
|
||||||
|
menu.addItem("Reveal Selected in Finder", action=Action(owner, 'revealSelected'))
|
||||||
|
menu.addItem("Rename Selected", action=Action(owner, 'renameSelected'))
|
||||||
|
|
||||||
|
# Doing connections
|
||||||
|
owner.filterField = filterField
|
||||||
|
owner.matches = table
|
||||||
|
owner.optionsSwitch = optionsSegments
|
||||||
|
owner.optionsToolbarItem = optionsToolItem
|
||||||
|
owner.stats = statsLabel
|
||||||
|
table.bind('rowHeight', defaults, 'values.TableFontSize', valueTransformer='vtRowHeightOffset')
|
||||||
|
|
||||||
|
# Rest of the setup
|
||||||
|
result.minSize = Size(340, 340)
|
||||||
|
result.autosaveName = 'MainWindow'
|
||||||
|
statsLabel.alignment = TextAlignment.Center
|
||||||
|
table.alternatingRows = True
|
||||||
|
table.menu = contextMenu
|
||||||
|
table.allowsColumnReordering = True
|
||||||
|
table.allowsColumnResizing = True
|
||||||
|
table.allowsColumnSelection = False
|
||||||
|
table.allowsEmptySelection = False
|
||||||
|
table.allowsMultipleSelection = True
|
||||||
|
table.allowsTypeSelect = True
|
||||||
|
table.gridStyleMask = const.NSTableViewSolidHorizontalGridLineMask
|
||||||
|
table.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
statsLabel.setAnchor(Pack.LowerLeft, growX=True)
|
||||||
|
|
||||||
|
# Layout
|
||||||
|
# It's a little weird to pack with a margin of -1, but if I don't do that, I get too thick of a
|
||||||
|
# border on the upper side of the table.
|
||||||
|
table.packToCorner(Pack.UpperLeft, margin=-1)
|
||||||
|
table.fill(Pack.Right, margin=0)
|
||||||
|
statsLabel.packRelativeTo(table, Pack.Below, margin=6)
|
||||||
|
statsLabel.fill(Pack.Right, margin=0)
|
||||||
|
table.fill(Pack.Below, margin=5)
|
||||||
9
cocoa/inter/all.py
Normal file
9
cocoa/inter/all.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from .deletion_options import PyDeletionOptions
|
||||||
|
from .details_panel import PyDetailsPanel
|
||||||
|
from .directory_outline import PyDirectoryOutline
|
||||||
|
from .prioritize_dialog import PyPrioritizeDialog
|
||||||
|
from .prioritize_list import PyPrioritizeList
|
||||||
|
from .problem_dialog import PyProblemDialog
|
||||||
|
from .ignore_list_dialog import PyIgnoreListDialog
|
||||||
|
from .result_table import PyResultTable
|
||||||
|
from .stats_label import PyStatsLabel
|
||||||
@@ -3,7 +3,7 @@ import logging
|
|||||||
from objp.util import pyref, dontwrap
|
from objp.util import pyref, dontwrap
|
||||||
from jobprogress import job
|
from jobprogress import job
|
||||||
import cocoa
|
import cocoa
|
||||||
from cocoa import install_exception_hook, proxy
|
from cocoa import install_exception_hook, install_cocoa_logger, proxy
|
||||||
from cocoa.inter import PyFairware, FairwareView
|
from cocoa.inter import PyFairware, FairwareView
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
|
|
||||||
@@ -23,6 +23,7 @@ class DupeGuruView(FairwareView):
|
|||||||
def askYesNoWithPrompt_(self, prompt: str) -> bool: pass
|
def askYesNoWithPrompt_(self, prompt: str) -> bool: pass
|
||||||
def showProblemDialog(self): pass
|
def showProblemDialog(self): pass
|
||||||
def selectDestFolderWithPrompt_(self, prompt: str) -> str: pass
|
def selectDestFolderWithPrompt_(self, prompt: str) -> str: pass
|
||||||
|
def selectDestFileWithPrompt_extension_(self, prompt: str, extension: str) -> str: pass
|
||||||
|
|
||||||
class PyDupeGuruBase(PyFairware):
|
class PyDupeGuruBase(PyFairware):
|
||||||
FOLLOW_PROTOCOLS = ['Worker']
|
FOLLOW_PROTOCOLS = ['Worker']
|
||||||
@@ -31,6 +32,7 @@ class PyDupeGuruBase(PyFairware):
|
|||||||
def _init(self, modelclass):
|
def _init(self, modelclass):
|
||||||
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s')
|
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s')
|
||||||
install_exception_hook()
|
install_exception_hook()
|
||||||
|
install_cocoa_logger()
|
||||||
appdata = proxy.getAppdataPath()
|
appdata = proxy.getAppdataPath()
|
||||||
self.model = modelclass(self, appdata)
|
self.model = modelclass(self, appdata)
|
||||||
self.progress = cocoa.ThreadedJobPerformer()
|
self.progress = cocoa.ThreadedJobPerformer()
|
||||||
@@ -54,16 +56,22 @@ class PyDupeGuruBase(PyFairware):
|
|||||||
def ignoreListDialog(self) -> pyref:
|
def ignoreListDialog(self) -> pyref:
|
||||||
return self.model.ignore_list_dialog
|
return self.model.ignore_list_dialog
|
||||||
|
|
||||||
|
def deletionOptions(self) -> pyref:
|
||||||
|
return self.model.deletion_options
|
||||||
|
|
||||||
#---Directories
|
#---Directories
|
||||||
def addDirectory_(self, directory: str) -> int:
|
def addDirectory_(self, directory: str):
|
||||||
return self.model.add_directory(directory)
|
self.model.add_directory(directory)
|
||||||
|
|
||||||
#---Results
|
#---Results
|
||||||
def doScan(self):
|
def doScan(self):
|
||||||
self.model.start_scanning()
|
self.model.start_scanning()
|
||||||
|
|
||||||
def exportToXHTML(self) -> str:
|
def exportToXHTML(self):
|
||||||
return self.model.export_to_xhtml()
|
self.model.export_to_xhtml()
|
||||||
|
|
||||||
|
def exportToCSV(self):
|
||||||
|
self.model.export_to_csv()
|
||||||
|
|
||||||
def loadSession(self):
|
def loadSession(self):
|
||||||
self.model.load()
|
self.model.load()
|
||||||
@@ -99,9 +107,6 @@ class PyDupeGuruBase(PyFairware):
|
|||||||
def deleteMarked(self):
|
def deleteMarked(self):
|
||||||
self.model.delete_marked()
|
self.model.delete_marked()
|
||||||
|
|
||||||
def hardlinkMarked(self):
|
|
||||||
self.model.delete_marked(replace_with_hardlinks=True)
|
|
||||||
|
|
||||||
def applyFilter_(self, filter: str):
|
def applyFilter_(self, filter: str):
|
||||||
self.model.apply_filter(filter)
|
self.model.apply_filter(filter)
|
||||||
|
|
||||||
@@ -217,3 +222,7 @@ class PyDupeGuruBase(PyFairware):
|
|||||||
def select_dest_folder(self, prompt):
|
def select_dest_folder(self, prompt):
|
||||||
return self.callback.selectDestFolderWithPrompt_(prompt)
|
return self.callback.selectDestFolderWithPrompt_(prompt)
|
||||||
|
|
||||||
|
@dontwrap
|
||||||
|
def select_dest_file(self, prompt, extension):
|
||||||
|
return self.callback.selectDestFileWithPrompt_extension_(prompt, extension)
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,16 @@
|
|||||||
# http://www.hardcoded.net/licenses/bsd_license
|
# http://www.hardcoded.net/licenses/bsd_license
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from appscript import app, its, k, CommandError, ApplicationNotFoundError
|
|
||||||
import plistlib
|
import plistlib
|
||||||
import time
|
import time
|
||||||
import os.path as op
|
import os.path as op
|
||||||
|
from appscript import app, its, k, CommandError, ApplicationNotFoundError
|
||||||
|
from . import tunes
|
||||||
|
|
||||||
from cocoa import as_fetch, proxy
|
from cocoa import as_fetch, proxy
|
||||||
from hscommon import io
|
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from hscommon.path import Path
|
from hscommon.path import Path
|
||||||
|
from hscommon.util import remove_invalid_xml
|
||||||
|
|
||||||
from core import directories
|
from core import directories
|
||||||
from core.app import JobType
|
from core.app import JobType
|
||||||
@@ -54,7 +55,7 @@ class ITunesSong(fs.MusicFile):
|
|||||||
|
|
||||||
def remove_from_library(self):
|
def remove_from_library(self):
|
||||||
try:
|
try:
|
||||||
a = app(ITUNES)
|
a = app(ITUNES, terms=tunes)
|
||||||
library = get_itunes_library(a)
|
library = get_itunes_library(a)
|
||||||
if library is None:
|
if library is None:
|
||||||
return
|
return
|
||||||
@@ -76,15 +77,21 @@ def get_itunes_database_path():
|
|||||||
return Path(plistpath)
|
return Path(plistpath)
|
||||||
|
|
||||||
def get_itunes_songs(plistpath):
|
def get_itunes_songs(plistpath):
|
||||||
if not io.exists(plistpath):
|
if not plistpath.exists():
|
||||||
return []
|
return []
|
||||||
plist = plistlib.readPlist(str(plistpath))
|
s = plistpath.open('rt', encoding='utf-8').read()
|
||||||
|
# iTunes sometimes produces XML files with invalid characters in it.
|
||||||
|
s = remove_invalid_xml(s, replace_with='')
|
||||||
|
plist = plistlib.readPlistFromBytes(s.encode('utf-8'))
|
||||||
result = []
|
result = []
|
||||||
for song_data in plist['Tracks'].values():
|
for song_data in plist['Tracks'].values():
|
||||||
if song_data['Track Type'] != 'File':
|
try:
|
||||||
|
if song_data['Track Type'] != 'File':
|
||||||
|
continue
|
||||||
|
song = ITunesSong(song_data)
|
||||||
|
except KeyError: # No "Track Type", "Location" or "Track ID" key in track
|
||||||
continue
|
continue
|
||||||
song = ITunesSong(song_data)
|
if song.path.exists():
|
||||||
if io.exists(song.path):
|
|
||||||
result.append(song)
|
result.append(song)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@@ -143,28 +150,28 @@ class DupeGuruME(DupeGuruBase):
|
|||||||
self.directories = Directories(fileclasses=self.directories.fileclasses)
|
self.directories = Directories(fileclasses=self.directories.fileclasses)
|
||||||
self.dead_tracks = []
|
self.dead_tracks = []
|
||||||
|
|
||||||
def _do_delete(self, j, replace_with_hardlinks):
|
def _do_delete(self, j, *args):
|
||||||
# XXX If I read correctly, Python 3.3 will allow us to go fetch inner function easily, so
|
# XXX If I read correctly, Python 3.3 will allow us to go fetch inner function easily, so
|
||||||
# we'll be able to replace "op" below with DupeGuruBase._do_delete.op.
|
# we'll be able to replace "op" below with DupeGuruBase._do_delete.op.
|
||||||
def op(dupe):
|
def op(dupe):
|
||||||
j.add_progress()
|
j.add_progress()
|
||||||
return self._do_delete_dupe(dupe, replace_with_hardlinks)
|
return self._do_delete_dupe(dupe, *args)
|
||||||
|
|
||||||
marked = [dupe for dupe in self.results.dupes if self.results.is_marked(dupe)]
|
marked = [dupe for dupe in self.results.dupes if self.results.is_marked(dupe)]
|
||||||
j.start_job(self.results.mark_count, tr("Sending dupes to the Trash"))
|
j.start_job(self.results.mark_count, tr("Sending dupes to the Trash"))
|
||||||
if any(isinstance(dupe, ITunesSong) for dupe in marked):
|
if any(isinstance(dupe, ITunesSong) for dupe in marked):
|
||||||
j.add_progress(0, desc=tr("Talking to iTunes. Don't touch it!"))
|
j.add_progress(0, desc=tr("Talking to iTunes. Don't touch it!"))
|
||||||
try:
|
try:
|
||||||
a = app(ITUNES)
|
a = app(ITUNES, terms=tunes)
|
||||||
a.activate(timeout=0)
|
a.activate(timeout=0)
|
||||||
except (CommandError, RuntimeError, ApplicationNotFoundError):
|
except (CommandError, RuntimeError, ApplicationNotFoundError):
|
||||||
pass
|
pass
|
||||||
self.results.perform_on_marked(op, True)
|
self.results.perform_on_marked(op, True)
|
||||||
|
|
||||||
def _do_delete_dupe(self, dupe, replace_with_hardlinks):
|
def _do_delete_dupe(self, dupe, *args):
|
||||||
if isinstance(dupe, ITunesSong):
|
if isinstance(dupe, ITunesSong):
|
||||||
dupe.remove_from_library()
|
dupe.remove_from_library()
|
||||||
DupeGuruBase._do_delete_dupe(self, dupe, replace_with_hardlinks)
|
DupeGuruBase._do_delete_dupe(self, dupe, *args)
|
||||||
|
|
||||||
def _create_file(self, path):
|
def _create_file(self, path):
|
||||||
if (self.directories.itunes_libpath is not None) and (path in self.directories.itunes_libpath[:-1]):
|
if (self.directories.itunes_libpath is not None) and (path in self.directories.itunes_libpath[:-1]):
|
||||||
@@ -205,7 +212,7 @@ class DupeGuruME(DupeGuruBase):
|
|||||||
def start_scanning(self):
|
def start_scanning(self):
|
||||||
if self.directories.has_itunes_path():
|
if self.directories.has_itunes_path():
|
||||||
try:
|
try:
|
||||||
app(ITUNES)
|
app(ITUNES, terms=tunes)
|
||||||
except ApplicationNotFoundError:
|
except ApplicationNotFoundError:
|
||||||
self.view.show_message(tr("The iTunes application couldn't be found."))
|
self.view.show_message(tr("The iTunes application couldn't be found."))
|
||||||
return
|
return
|
||||||
@@ -213,7 +220,7 @@ class DupeGuruME(DupeGuruBase):
|
|||||||
|
|
||||||
def remove_dead_tracks(self):
|
def remove_dead_tracks(self):
|
||||||
def do(j):
|
def do(j):
|
||||||
a = app(ITUNES)
|
a = app(ITUNES, terms=tunes)
|
||||||
a.activate(timeout=0)
|
a.activate(timeout=0)
|
||||||
for index, track in enumerate(j.iter_with_progress(self.dead_tracks)):
|
for index, track in enumerate(j.iter_with_progress(self.dead_tracks)):
|
||||||
if index % 100 == 0:
|
if index % 100 == 0:
|
||||||
@@ -227,7 +234,7 @@ class DupeGuruME(DupeGuruBase):
|
|||||||
|
|
||||||
def scan_dead_tracks(self):
|
def scan_dead_tracks(self):
|
||||||
def do(j):
|
def do(j):
|
||||||
a = app(ITUNES)
|
a = app(ITUNES, terms=tunes)
|
||||||
a.activate(timeout=0)
|
a.activate(timeout=0)
|
||||||
library = get_itunes_library(a)
|
library = get_itunes_library(a)
|
||||||
if library is None:
|
if library is None:
|
||||||
|
|||||||
@@ -11,16 +11,17 @@ import plistlib
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from appscript import app, its, CommandError, ApplicationNotFoundError
|
from appscript import app, its, k, CommandError, ApplicationNotFoundError
|
||||||
|
|
||||||
from hscommon import io
|
from hscommon import io
|
||||||
from hscommon.util import remove_invalid_xml
|
from hscommon.util import remove_invalid_xml, first
|
||||||
from hscommon.path import Path
|
from hscommon.path import Path
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
from cocoa import proxy
|
from cocoa import proxy
|
||||||
|
|
||||||
from core.scanner import ScanType
|
from core.scanner import ScanType
|
||||||
from core import directories
|
from core import directories
|
||||||
|
from core.app import JobType
|
||||||
from core_pe import _block_osx
|
from core_pe import _block_osx
|
||||||
from core_pe.photo import Photo as PhotoBase
|
from core_pe.photo import Photo as PhotoBase
|
||||||
from core_pe.app import DupeGuru as DupeGuruBase
|
from core_pe.app import DupeGuru as DupeGuruBase
|
||||||
@@ -29,6 +30,7 @@ from .app import PyDupeGuruBase
|
|||||||
tr = trget('ui')
|
tr = trget('ui')
|
||||||
|
|
||||||
IPHOTO_PATH = Path('iPhoto Library')
|
IPHOTO_PATH = Path('iPhoto Library')
|
||||||
|
APERTURE_PATH = Path('Aperture Library')
|
||||||
|
|
||||||
class Photo(PhotoBase):
|
class Photo(PhotoBase):
|
||||||
HANDLED_EXTS = PhotoBase.HANDLED_EXTS.copy()
|
HANDLED_EXTS = PhotoBase.HANDLED_EXTS.copy()
|
||||||
@@ -48,18 +50,25 @@ class Photo(PhotoBase):
|
|||||||
|
|
||||||
|
|
||||||
class IPhoto(Photo):
|
class IPhoto(Photo):
|
||||||
|
def __init__(self, path, db_id):
|
||||||
|
# In IPhoto, we don't care about the db_id, we find photos by path.
|
||||||
|
Photo.__init__(self, path)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def display_folder_path(self):
|
def display_folder_path(self):
|
||||||
return IPHOTO_PATH
|
return IPHOTO_PATH
|
||||||
|
|
||||||
def get_iphoto_database_path():
|
|
||||||
plisturls = proxy.prefValue_inDomain_('iPhotoRecentDatabases', 'com.apple.iApps')
|
|
||||||
if not plisturls:
|
|
||||||
raise directories.InvalidPathError()
|
|
||||||
plistpath = proxy.url2path_(plisturls[0])
|
|
||||||
return Path(plistpath)
|
|
||||||
|
|
||||||
def get_iphoto_pictures(plistpath):
|
class AperturePhoto(Photo):
|
||||||
|
def __init__(self, path, db_id):
|
||||||
|
Photo.__init__(self, path)
|
||||||
|
self.db_id = db_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def display_folder_path(self):
|
||||||
|
return APERTURE_PATH
|
||||||
|
|
||||||
|
def get_iphoto_or_aperture_pictures(plistpath, photo_class):
|
||||||
|
# The structure of iPhoto and Aperture libraries for the base photo list are excactly the same.
|
||||||
if not io.exists(plistpath):
|
if not io.exists(plistpath):
|
||||||
return []
|
return []
|
||||||
s = io.open(plistpath, 'rt', encoding='utf-8').read()
|
s = io.open(plistpath, 'rt', encoding='utf-8').read()
|
||||||
@@ -73,14 +82,33 @@ def get_iphoto_pictures(plistpath):
|
|||||||
logging.warning("%d invalid XML entities replacement made", count)
|
logging.warning("%d invalid XML entities replacement made", count)
|
||||||
plist = plistlib.readPlistFromBytes(s.encode('utf-8'))
|
plist = plistlib.readPlistFromBytes(s.encode('utf-8'))
|
||||||
result = []
|
result = []
|
||||||
for photo_data in plist['Master Image List'].values():
|
for key, photo_data in plist['Master Image List'].items():
|
||||||
if photo_data['MediaType'] != 'Image':
|
if photo_data['MediaType'] != 'Image':
|
||||||
continue
|
continue
|
||||||
photo_path = Path(photo_data['ImagePath'])
|
photo_path = Path(photo_data['ImagePath'])
|
||||||
photo = IPhoto(photo_path)
|
photo = photo_class(photo_path, key)
|
||||||
result.append(photo)
|
result.append(photo)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def get_iphoto_pictures(plistpath):
|
||||||
|
return get_iphoto_or_aperture_pictures(plistpath, IPhoto)
|
||||||
|
|
||||||
|
def get_aperture_pictures(plistpath):
|
||||||
|
return get_iphoto_or_aperture_pictures(plistpath, AperturePhoto)
|
||||||
|
|
||||||
|
def get_iapps_database_path(prefname):
|
||||||
|
plisturls = proxy.prefValue_inDomain_(prefname, 'com.apple.iApps')
|
||||||
|
if not plisturls:
|
||||||
|
raise directories.InvalidPathError()
|
||||||
|
plistpath = proxy.url2path_(plisturls[0])
|
||||||
|
return Path(plistpath)
|
||||||
|
|
||||||
|
def get_iphoto_database_path():
|
||||||
|
return get_iapps_database_path('iPhotoRecentDatabases')
|
||||||
|
|
||||||
|
def get_aperture_database_path():
|
||||||
|
return get_iapps_database_path('ApertureLibraries')
|
||||||
|
|
||||||
class Directories(directories.Directories):
|
class Directories(directories.Directories):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
directories.Directories.__init__(self, fileclasses=[Photo])
|
directories.Directories.__init__(self, fileclasses=[Photo])
|
||||||
@@ -89,6 +117,11 @@ class Directories(directories.Directories):
|
|||||||
self.set_state(self.iphoto_libpath[:-1], directories.DirectoryState.Excluded)
|
self.set_state(self.iphoto_libpath[:-1], directories.DirectoryState.Excluded)
|
||||||
except directories.InvalidPathError:
|
except directories.InvalidPathError:
|
||||||
self.iphoto_libpath = None
|
self.iphoto_libpath = None
|
||||||
|
try:
|
||||||
|
self.aperture_libpath = get_aperture_database_path()
|
||||||
|
self.set_state(self.aperture_libpath[:-1], directories.DirectoryState.Excluded)
|
||||||
|
except directories.InvalidPathError:
|
||||||
|
self.aperture_libpath = None
|
||||||
|
|
||||||
def _get_files(self, from_path, j):
|
def _get_files(self, from_path, j):
|
||||||
if from_path == IPHOTO_PATH:
|
if from_path == IPHOTO_PATH:
|
||||||
@@ -99,25 +132,33 @@ class Directories(directories.Directories):
|
|||||||
for photo in photos:
|
for photo in photos:
|
||||||
photo.is_ref = is_ref
|
photo.is_ref = is_ref
|
||||||
return photos
|
return photos
|
||||||
|
elif from_path == APERTURE_PATH:
|
||||||
|
if self.aperture_libpath is None:
|
||||||
|
return []
|
||||||
|
is_ref = self.get_state(from_path) == directories.DirectoryState.Reference
|
||||||
|
photos = get_aperture_pictures(self.aperture_libpath)
|
||||||
|
for photo in photos:
|
||||||
|
photo.is_ref = is_ref
|
||||||
|
return photos
|
||||||
else:
|
else:
|
||||||
return directories.Directories._get_files(self, from_path, j)
|
return directories.Directories._get_files(self, from_path, j)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_subfolders(path):
|
def get_subfolders(path):
|
||||||
if path == IPHOTO_PATH:
|
if path in {IPHOTO_PATH, APERTURE_PATH}:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
return directories.Directories.get_subfolders(path)
|
return directories.Directories.get_subfolders(path)
|
||||||
|
|
||||||
def add_path(self, path):
|
def add_path(self, path):
|
||||||
if path == IPHOTO_PATH:
|
if path in {IPHOTO_PATH, APERTURE_PATH}:
|
||||||
if path not in self:
|
if path not in self:
|
||||||
self._dirs.append(path)
|
self._dirs.append(path)
|
||||||
else:
|
else:
|
||||||
directories.Directories.add_path(self, path)
|
directories.Directories.add_path(self, path)
|
||||||
|
|
||||||
def has_iphoto_path(self):
|
def has_iphoto_path(self):
|
||||||
return any(path == IPHOTO_PATH for path in self._dirs)
|
return any(path in {IPHOTO_PATH, APERTURE_PATH} for path in self._dirs)
|
||||||
|
|
||||||
def has_any_file(self):
|
def has_any_file(self):
|
||||||
# If we don't do that, it causes a hangup in the GUI when we click Start Scanning because
|
# If we don't do that, it causes a hangup in the GUI when we click Start Scanning because
|
||||||
@@ -135,11 +176,12 @@ class DupeGuruPE(DupeGuruBase):
|
|||||||
DupeGuruBase.__init__(self, view, appdata)
|
DupeGuruBase.__init__(self, view, appdata)
|
||||||
self.directories = Directories()
|
self.directories = Directories()
|
||||||
|
|
||||||
def _do_delete(self, j, replace_with_hardlinks):
|
def _do_delete(self, j, *args):
|
||||||
def op(dupe):
|
def op(dupe):
|
||||||
j.add_progress()
|
j.add_progress()
|
||||||
return self._do_delete_dupe(dupe, replace_with_hardlinks)
|
return self._do_delete_dupe(dupe, *args)
|
||||||
|
|
||||||
|
self.deleted_aperture_photos = False
|
||||||
marked = [dupe for dupe in self.results.dupes if self.results.is_marked(dupe)]
|
marked = [dupe for dupe in self.results.dupes if self.results.is_marked(dupe)]
|
||||||
j.start_job(self.results.mark_count, tr("Sending dupes to the Trash"))
|
j.start_job(self.results.mark_count, tr("Sending dupes to the Trash"))
|
||||||
if any(isinstance(dupe, IPhoto) for dupe in marked):
|
if any(isinstance(dupe, IPhoto) for dupe in marked):
|
||||||
@@ -150,9 +192,17 @@ class DupeGuruPE(DupeGuruBase):
|
|||||||
a.select(a.photo_library_album(timeout=0), timeout=0)
|
a.select(a.photo_library_album(timeout=0), timeout=0)
|
||||||
except (CommandError, RuntimeError, ApplicationNotFoundError):
|
except (CommandError, RuntimeError, ApplicationNotFoundError):
|
||||||
pass
|
pass
|
||||||
|
if any(isinstance(dupe, AperturePhoto) for dupe in marked):
|
||||||
|
self.deleted_aperture_photos = True
|
||||||
|
j.add_progress(0, desc=tr("Talking to Aperture. Don't touch it!"))
|
||||||
|
try:
|
||||||
|
a = app('Aperture')
|
||||||
|
a.activate(timeout=0)
|
||||||
|
except (CommandError, RuntimeError, ApplicationNotFoundError):
|
||||||
|
pass
|
||||||
self.results.perform_on_marked(op, True)
|
self.results.perform_on_marked(op, True)
|
||||||
|
|
||||||
def _do_delete_dupe(self, dupe, replace_with_hardlinks):
|
def _do_delete_dupe(self, dupe, *args):
|
||||||
if isinstance(dupe, IPhoto):
|
if isinstance(dupe, IPhoto):
|
||||||
try:
|
try:
|
||||||
a = app('iPhoto')
|
a = app('iPhoto')
|
||||||
@@ -167,16 +217,61 @@ class DupeGuruPE(DupeGuruBase):
|
|||||||
raise EnvironmentError(msg)
|
raise EnvironmentError(msg)
|
||||||
except (CommandError, RuntimeError) as e:
|
except (CommandError, RuntimeError) as e:
|
||||||
raise EnvironmentError(str(e))
|
raise EnvironmentError(str(e))
|
||||||
|
if isinstance(dupe, AperturePhoto):
|
||||||
|
try:
|
||||||
|
a = app('Aperture')
|
||||||
|
# I'm flying blind here. In my own test library, all photos are in an album with the
|
||||||
|
# id "LibraryFolder", so I'm going to guess that it's the case at least most of the
|
||||||
|
# time. As a safeguard, if we don't find any library with that id, we'll use the
|
||||||
|
# first album.
|
||||||
|
# Now, about deleting: All attempts I've made at sending photos to trash failed,
|
||||||
|
# even with normal applescript. So, what we're going to do here is to create a
|
||||||
|
# "dupeGuru Trash" project and tell the user to manually send those photos to trash.
|
||||||
|
libraries = a.libraries()
|
||||||
|
library = first(l for l in libraries if l.id == 'LibraryFolder')
|
||||||
|
if library is None:
|
||||||
|
library = libraries[0]
|
||||||
|
trash_project = a.projects["dupeGuru Trash"]
|
||||||
|
if trash_project.exists():
|
||||||
|
trash_project = trash_project()
|
||||||
|
else:
|
||||||
|
trash_project = library.make(new=k.project, with_properties={k.name: "dupeGuru Trash"})
|
||||||
|
[photo] = library.image_versions[its.id == dupe.db_id]()
|
||||||
|
photo.move(to=trash_project)
|
||||||
|
except (IndexError, ValueError):
|
||||||
|
msg = "Could not find photo '{}' in Aperture Library".format(str(dupe.path))
|
||||||
|
raise EnvironmentError(msg)
|
||||||
|
except (CommandError, RuntimeError) as e:
|
||||||
|
raise EnvironmentError(str(e))
|
||||||
else:
|
else:
|
||||||
DupeGuruBase._do_delete_dupe(self, dupe, replace_with_hardlinks)
|
DupeGuruBase._do_delete_dupe(self, dupe, *args)
|
||||||
|
|
||||||
def _create_file(self, path):
|
def _create_file(self, path):
|
||||||
if (self.directories.iphoto_libpath is not None) and (path in self.directories.iphoto_libpath[:-1]):
|
if (self.directories.iphoto_libpath is not None) and (path in self.directories.iphoto_libpath[:-1]):
|
||||||
return IPhoto(path)
|
if not hasattr(self, 'path2iphoto'):
|
||||||
|
photos = get_iphoto_pictures(self.directories.iphoto_libpath)
|
||||||
|
self.path2iphoto = {p.path: p for p in photos}
|
||||||
|
return self.path2iphoto.get(path)
|
||||||
|
if (self.directories.aperture_libpath is not None) and (path in self.directories.aperture_libpath[:-1]):
|
||||||
|
if not hasattr(self, 'path2aperture'):
|
||||||
|
photos = get_aperture_pictures(self.directories.aperture_libpath)
|
||||||
|
self.path2aperture = {p.path: p for p in photos}
|
||||||
|
return self.path2aperture.get(path)
|
||||||
return DupeGuruBase._create_file(self, path)
|
return DupeGuruBase._create_file(self, path)
|
||||||
|
|
||||||
|
def _job_completed(self, jobid, exc):
|
||||||
|
DupeGuruBase._job_completed(self, jobid, exc)
|
||||||
|
if jobid == JobType.Load:
|
||||||
|
if hasattr(self, 'path2iphoto'):
|
||||||
|
del self.path2iphoto
|
||||||
|
if hasattr(self, 'path2aperture'):
|
||||||
|
del self.path2aperture
|
||||||
|
if jobid == JobType.Delete and self.deleted_aperture_photos:
|
||||||
|
msg = tr("Deleted Aperture photos were sent to a project called \"dupeGuru Trash\".")
|
||||||
|
self.view.show_message(msg)
|
||||||
|
|
||||||
def copy_or_move(self, dupe, copy, destination, dest_type):
|
def copy_or_move(self, dupe, copy, destination, dest_type):
|
||||||
if isinstance(dupe, IPhoto):
|
if isinstance(dupe, (IPhoto, AperturePhoto)):
|
||||||
copy = True
|
copy = True
|
||||||
return DupeGuruBase.copy_or_move(self, dupe, copy, destination, dest_type)
|
return DupeGuruBase.copy_or_move(self, dupe, copy, destination, dest_type)
|
||||||
|
|
||||||
|
|||||||
33
cocoa/inter/deletion_options.py
Normal file
33
cocoa/inter/deletion_options.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Created On: 2012-05-30
|
||||||
|
# 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 objp.util import dontwrap
|
||||||
|
from cocoa.inter import PyGUIObject, GUIObjectView
|
||||||
|
|
||||||
|
class DeletionOptionsView(GUIObjectView):
|
||||||
|
def updateMsg_(self, msg: str): pass
|
||||||
|
def show(self) -> bool: pass
|
||||||
|
|
||||||
|
class PyDeletionOptions(PyGUIObject):
|
||||||
|
def setLinkDeleted_(self, link_deleted: bool):
|
||||||
|
self.model.link_deleted = link_deleted
|
||||||
|
|
||||||
|
def setUseHardlinks_(self, use_hardlinks: bool):
|
||||||
|
self.model.use_hardlinks = use_hardlinks
|
||||||
|
|
||||||
|
def setDirect_(self, direct: bool):
|
||||||
|
self.model.direct = direct
|
||||||
|
|
||||||
|
#--- model --> view
|
||||||
|
@dontwrap
|
||||||
|
def update_msg(self, msg):
|
||||||
|
self.callback.updateMsg_(msg)
|
||||||
|
|
||||||
|
@dontwrap
|
||||||
|
def show(self):
|
||||||
|
return self.callback.show()
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
from objp.util import pyref
|
from objp.util import pyref, dontwrap
|
||||||
from cocoa.inter import PyGUIObject, GUIObjectView
|
from cocoa.inter import PyGUIObject, GUIObjectView
|
||||||
|
|
||||||
class IgnoreListDialogView(GUIObjectView):
|
class IgnoreListDialogView(GUIObjectView):
|
||||||
@@ -15,6 +15,7 @@ class PyIgnoreListDialog(PyGUIObject):
|
|||||||
self.model.clear()
|
self.model.clear()
|
||||||
|
|
||||||
#--- model --> view
|
#--- model --> view
|
||||||
|
@dontwrap
|
||||||
def show(self):
|
def show(self):
|
||||||
self.callback.show()
|
self.callback.show()
|
||||||
|
|
||||||
|
|||||||
282
cocoa/inter/tunes.py
Normal file
282
cocoa/inter/tunes.py
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
# Taken from https://github.com/abarnert/itunesterms
|
||||||
|
|
||||||
|
version = 1.1
|
||||||
|
path = '/Applications/iTunes.app'
|
||||||
|
|
||||||
|
classes = \
|
||||||
|
[('print_settings', b'pset'),
|
||||||
|
('application', b'capp'),
|
||||||
|
('artwork', b'cArt'),
|
||||||
|
('audio_CD_playlist', b'cCDP'),
|
||||||
|
('audio_CD_track', b'cCDT'),
|
||||||
|
('browser_window', b'cBrW'),
|
||||||
|
('device_playlist', b'cDvP'),
|
||||||
|
('device_track', b'cDvT'),
|
||||||
|
('encoder', b'cEnc'),
|
||||||
|
('EQ_preset', b'cEQP'),
|
||||||
|
('EQ_window', b'cEQW'),
|
||||||
|
('file_track', b'cFlT'),
|
||||||
|
('folder_playlist', b'cFoP'),
|
||||||
|
('item', b'cobj'),
|
||||||
|
('library_playlist', b'cLiP'),
|
||||||
|
('playlist', b'cPly'),
|
||||||
|
('playlist_window', b'cPlW'),
|
||||||
|
('radio_tuner_playlist', b'cRTP'),
|
||||||
|
('shared_track', b'cShT'),
|
||||||
|
('source', b'cSrc'),
|
||||||
|
('track', b'cTrk'),
|
||||||
|
('URL_track', b'cURT'),
|
||||||
|
('user_playlist', b'cUsP'),
|
||||||
|
('visual', b'cVis'),
|
||||||
|
('window', b'cwin')]
|
||||||
|
|
||||||
|
enums = \
|
||||||
|
[('track_listing', b'kTrk'),
|
||||||
|
('album_listing', b'kAlb'),
|
||||||
|
('cd_insert', b'kCDi'),
|
||||||
|
('standard', b'lwst'),
|
||||||
|
('detailed', b'lwdt'),
|
||||||
|
('stopped', b'kPSS'),
|
||||||
|
('playing', b'kPSP'),
|
||||||
|
('paused', b'kPSp'),
|
||||||
|
('fast_forwarding', b'kPSF'),
|
||||||
|
('rewinding', b'kPSR'),
|
||||||
|
('off', b'kRpO'),
|
||||||
|
('one', b'kRp1'),
|
||||||
|
('all', b'kAll'),
|
||||||
|
('small', b'kVSS'),
|
||||||
|
('medium', b'kVSM'),
|
||||||
|
('large', b'kVSL'),
|
||||||
|
('library', b'kLib'),
|
||||||
|
('iPod', b'kPod'),
|
||||||
|
('audio_CD', b'kACD'),
|
||||||
|
('MP3_CD', b'kMCD'),
|
||||||
|
('device', b'kDev'),
|
||||||
|
('radio_tuner', b'kTun'),
|
||||||
|
('shared_library', b'kShd'),
|
||||||
|
('unknown', b'kUnk'),
|
||||||
|
('albums', b'kSrL'),
|
||||||
|
('artists', b'kSrR'),
|
||||||
|
('composers', b'kSrC'),
|
||||||
|
('displayed', b'kSrV'),
|
||||||
|
('songs', b'kSrS'),
|
||||||
|
('none', b'kNon'),
|
||||||
|
('Books', b'kSpA'),
|
||||||
|
('folder', b'kSpF'),
|
||||||
|
('Genius', b'kSpG'),
|
||||||
|
('iTunes_U', b'kSpU'),
|
||||||
|
('Library', b'kSpL'),
|
||||||
|
('Movies', b'kSpI'),
|
||||||
|
('Music', b'kSpZ'),
|
||||||
|
('Party_Shuffle', b'kSpS'),
|
||||||
|
('Podcasts', b'kSpP'),
|
||||||
|
('Purchased_Music', b'kSpM'),
|
||||||
|
('TV_Shows', b'kSpT'),
|
||||||
|
('movie', b'kVdM'),
|
||||||
|
('music_video', b'kVdV'),
|
||||||
|
('TV_show', b'kVdT'),
|
||||||
|
('user', b'kRtU'),
|
||||||
|
('computed', b'kRtC')]
|
||||||
|
|
||||||
|
properties = \
|
||||||
|
[('copies', b'lwcp'),
|
||||||
|
('collating', b'lwcl'),
|
||||||
|
('starting_page', b'lwfp'),
|
||||||
|
('ending_page', b'lwlp'),
|
||||||
|
('pages_across', b'lwla'),
|
||||||
|
('pages_down', b'lwld'),
|
||||||
|
('error_handling', b'lweh'),
|
||||||
|
('requested_print_time', b'lwqt'),
|
||||||
|
('printer_features', b'lwpf'),
|
||||||
|
('fax_number', b'faxn'),
|
||||||
|
('target_printer', b'trpr'),
|
||||||
|
('current_encoder', b'pEnc'),
|
||||||
|
('current_EQ_preset', b'pEQP'),
|
||||||
|
('current_playlist', b'pPla'),
|
||||||
|
('current_stream_title', b'pStT'),
|
||||||
|
('current_stream_URL', b'pStU'),
|
||||||
|
('current_track', b'pTrk'),
|
||||||
|
('current_visual', b'pVis'),
|
||||||
|
('EQ_enabled', b'pEQ '),
|
||||||
|
('fixed_indexing', b'pFix'),
|
||||||
|
('frontmost', b'pisf'),
|
||||||
|
('full_screen', b'pFSc'),
|
||||||
|
('name', b'pnam'),
|
||||||
|
('mute', b'pMut'),
|
||||||
|
('player_position', b'pPos'),
|
||||||
|
('player_state', b'pPlS'),
|
||||||
|
('selection', b'sele'),
|
||||||
|
('sound_volume', b'pVol'),
|
||||||
|
('version', b'vers'),
|
||||||
|
('visuals_enabled', b'pVsE'),
|
||||||
|
('visual_size', b'pVSz'),
|
||||||
|
('data', b'pPCT'),
|
||||||
|
('description', b'pDes'),
|
||||||
|
('downloaded', b'pDlA'),
|
||||||
|
('format', b'pFmt'),
|
||||||
|
('kind', b'pKnd'),
|
||||||
|
('raw_data', b'pRaw'),
|
||||||
|
('artist', b'pArt'),
|
||||||
|
('compilation', b'pAnt'),
|
||||||
|
('composer', b'pCmp'),
|
||||||
|
('disc_count', b'pDsC'),
|
||||||
|
('disc_number', b'pDsN'),
|
||||||
|
('genre', b'pGen'),
|
||||||
|
('year', b'pYr '),
|
||||||
|
('location', b'pLoc'),
|
||||||
|
('minimized', b'pMin'),
|
||||||
|
('view', b'pPly'),
|
||||||
|
('band_1', b'pEQ1'),
|
||||||
|
('band_2', b'pEQ2'),
|
||||||
|
('band_3', b'pEQ3'),
|
||||||
|
('band_4', b'pEQ4'),
|
||||||
|
('band_5', b'pEQ5'),
|
||||||
|
('band_6', b'pEQ6'),
|
||||||
|
('band_7', b'pEQ7'),
|
||||||
|
('band_8', b'pEQ8'),
|
||||||
|
('band_9', b'pEQ9'),
|
||||||
|
('band_10', b'pEQ0'),
|
||||||
|
('modifiable', b'pMod'),
|
||||||
|
('preamp', b'pEQA'),
|
||||||
|
('update_tracks', b'pUTC'),
|
||||||
|
('container', b'ctnr'),
|
||||||
|
('id', b'ID '),
|
||||||
|
('index', b'pidx'),
|
||||||
|
('persistent_ID', b'pPIS'),
|
||||||
|
('duration', b'pDur'),
|
||||||
|
('parent', b'pPlP'),
|
||||||
|
('shuffle', b'pShf'),
|
||||||
|
('size', b'pSiz'),
|
||||||
|
('song_repeat', b'pRpt'),
|
||||||
|
('special_kind', b'pSpK'),
|
||||||
|
('time', b'pTim'),
|
||||||
|
('visible', b'pvis'),
|
||||||
|
('capacity', b'capa'),
|
||||||
|
('free_space', b'frsp'),
|
||||||
|
('album', b'pAlb'),
|
||||||
|
('album_artist', b'pAlA'),
|
||||||
|
('album_rating', b'pAlR'),
|
||||||
|
('album_rating_kind', b'pARk'),
|
||||||
|
('bit_rate', b'pBRt'),
|
||||||
|
('bookmark', b'pBkt'),
|
||||||
|
('bookmarkable', b'pBkm'),
|
||||||
|
('bpm', b'pBPM'),
|
||||||
|
('category', b'pCat'),
|
||||||
|
('comment', b'pCmt'),
|
||||||
|
('database_ID', b'pDID'),
|
||||||
|
('date_added', b'pAdd'),
|
||||||
|
('enabled', b'enbl'),
|
||||||
|
('episode_ID', b'pEpD'),
|
||||||
|
('episode_number', b'pEpN'),
|
||||||
|
('EQ', b'pEQp'),
|
||||||
|
('finish', b'pStp'),
|
||||||
|
('gapless', b'pGpl'),
|
||||||
|
('grouping', b'pGrp'),
|
||||||
|
('long_description', b'pLds'),
|
||||||
|
('lyrics', b'pLyr'),
|
||||||
|
('modification_date', b'asmo'),
|
||||||
|
('played_count', b'pPlC'),
|
||||||
|
('played_date', b'pPlD'),
|
||||||
|
('podcast', b'pTPc'),
|
||||||
|
('rating', b'pRte'),
|
||||||
|
('rating_kind', b'pRtk'),
|
||||||
|
('release_date', b'pRlD'),
|
||||||
|
('sample_rate', b'pSRt'),
|
||||||
|
('season_number', b'pSeN'),
|
||||||
|
('shufflable', b'pSfa'),
|
||||||
|
('skipped_count', b'pSkC'),
|
||||||
|
('skipped_date', b'pSkD'),
|
||||||
|
('show', b'pShw'),
|
||||||
|
('sort_album', b'pSAl'),
|
||||||
|
('sort_artist', b'pSAr'),
|
||||||
|
('sort_album_artist', b'pSAA'),
|
||||||
|
('sort_name', b'pSNm'),
|
||||||
|
('sort_composer', b'pSCm'),
|
||||||
|
('sort_show', b'pSSN'),
|
||||||
|
('start', b'pStr'),
|
||||||
|
('track_count', b'pTrC'),
|
||||||
|
('track_number', b'pTrN'),
|
||||||
|
('unplayed', b'pUnp'),
|
||||||
|
('video_kind', b'pVdK'),
|
||||||
|
('volume_adjustment', b'pAdj'),
|
||||||
|
('address', b'pURL'),
|
||||||
|
('shared', b'pShr'),
|
||||||
|
('smart', b'pSmt'),
|
||||||
|
('bounds', b'pbnd'),
|
||||||
|
('closeable', b'hclb'),
|
||||||
|
('collapseable', b'pWSh'),
|
||||||
|
('collapsed', b'wshd'),
|
||||||
|
('position', b'ppos'),
|
||||||
|
('resizable', b'prsz'),
|
||||||
|
('zoomable', b'iszm'),
|
||||||
|
('zoomed', b'pzum')]
|
||||||
|
|
||||||
|
elements = \
|
||||||
|
[('artworks', b'cArt'),
|
||||||
|
('audio_CD_playlists', b'cCDP'),
|
||||||
|
('audio_CD_tracks', b'cCDT'),
|
||||||
|
('browser_windows', b'cBrW'),
|
||||||
|
('device_playlists', b'cDvP'),
|
||||||
|
('device_tracks', b'cDvT'),
|
||||||
|
('encoders', b'cEnc'),
|
||||||
|
('EQ_presets', b'cEQP'),
|
||||||
|
('EQ_windows', b'cEQW'),
|
||||||
|
('file_tracks', b'cFlT'),
|
||||||
|
('folder_playlists', b'cFoP'),
|
||||||
|
('items', b'cobj'),
|
||||||
|
('library_playlists', b'cLiP'),
|
||||||
|
('playlists', b'cPly'),
|
||||||
|
('playlist_windows', b'cPlW'),
|
||||||
|
('radio_tuner_playlists', b'cRTP'),
|
||||||
|
('shared_tracks', b'cShT'),
|
||||||
|
('sources', b'cSrc'),
|
||||||
|
('tracks', b'cTrk'),
|
||||||
|
('URL_tracks', b'cURT'),
|
||||||
|
('user_playlists', b'cUsP'),
|
||||||
|
('visuals', b'cVis'),
|
||||||
|
('windows', b'cwin'),
|
||||||
|
('application', b'capp'),
|
||||||
|
('print_settings', b'pset')]
|
||||||
|
|
||||||
|
commands = \
|
||||||
|
[('set', b'coresetd', [('to', b'data')]),
|
||||||
|
('exists', b'coredoex', []),
|
||||||
|
('move', b'coremove', [('to', b'insh')]),
|
||||||
|
('subscribe', b'hookpSub', []),
|
||||||
|
('playpause', b'hookPlPs', []),
|
||||||
|
('download', b'hookDwnl', []),
|
||||||
|
('close', b'coreclos', []),
|
||||||
|
('open', b'aevtodoc', []),
|
||||||
|
('open_location', b'GURLGURL', []),
|
||||||
|
('quit', b'aevtquit', []),
|
||||||
|
('pause', b'hookPaus', []),
|
||||||
|
('make',
|
||||||
|
'corecrel',
|
||||||
|
[('new', b'kocl'), ('at', b'insh'), ('with_properties', b'prdt')]),
|
||||||
|
('duplicate', b'coreclon', [('to', b'insh')]),
|
||||||
|
('print_',
|
||||||
|
'aevtpdoc',
|
||||||
|
[('print_dialog', b'pdlg'),
|
||||||
|
('with_properties', b'prdt'),
|
||||||
|
('kind', b'pKnd'),
|
||||||
|
('theme', b'pThm')]),
|
||||||
|
('add', b'hookAdd ', [('to', b'insh')]),
|
||||||
|
('rewind', b'hookRwnd', []),
|
||||||
|
('play', b'hookPlay', [('once', b'POne')]),
|
||||||
|
('run', b'aevtoapp', []),
|
||||||
|
('resume', b'hookResu', []),
|
||||||
|
('updatePodcast', b'hookUpd1', []),
|
||||||
|
('next_track', b'hookNext', []),
|
||||||
|
('stop', b'hookStop', []),
|
||||||
|
('search', b'hookSrch', [('for_', b'pTrm'), ('only', b'pAre')]),
|
||||||
|
('updateAllPodcasts', b'hookUpdp', []),
|
||||||
|
('update', b'hookUpdt', []),
|
||||||
|
('previous_track', b'hookPrev', []),
|
||||||
|
('fast_forward', b'hookFast', []),
|
||||||
|
('count', b'corecnte', [('each', b'kocl')]),
|
||||||
|
('reveal', b'hookRevl', []),
|
||||||
|
('convert', b'hookConv', []),
|
||||||
|
('eject', b'hookEjct', []),
|
||||||
|
('back_track', b'hookBack', []),
|
||||||
|
('refresh', b'hookRfrs', []),
|
||||||
|
('delete', b'coredelo', [])]
|
||||||
@@ -7,9 +7,10 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "../base/AppDelegate.h"
|
#import "AppDelegateBase.h"
|
||||||
#import "ResultWindow.h"
|
#import "ResultWindow.h"
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
|
|
||||||
@interface AppDelegate : AppDelegateBase {}
|
@interface AppDelegate : AppDelegateBase {}
|
||||||
|
- (void)removeDeadTracks;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -17,33 +17,20 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "Consts.h"
|
#import "Consts.h"
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
+ (void)initialize
|
+ (NSDictionary *)defaultPreferences
|
||||||
{
|
{
|
||||||
[super initialize];
|
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary:[super defaultPreferences]];
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
|
||||||
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:10];
|
|
||||||
[d setObject:i2n(3) forKey:@"scanType"];
|
[d setObject:i2n(3) forKey:@"scanType"];
|
||||||
[d setObject:i2n(80) forKey:@"minMatchPercentage"];
|
[d setObject:i2n(80) forKey:@"minMatchPercentage"];
|
||||||
[d setObject:i2n(1) forKey:@"recreatePathType"];
|
|
||||||
[d setObject:i2n(11) forKey:TableFontSize];
|
|
||||||
[d setObject:b2n(NO) forKey:@"wordWeighting"];
|
[d setObject:b2n(NO) forKey:@"wordWeighting"];
|
||||||
[d setObject:b2n(NO) forKey:@"matchSimilarWords"];
|
[d setObject:b2n(NO) forKey:@"matchSimilarWords"];
|
||||||
[d setObject:b2n(YES) forKey:@"mixFileKind"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"useRegexpFilter"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"ignoreHardlinkMatches"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"removeEmptyFolders"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"debug"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"scanTagTrack"];
|
[d setObject:b2n(NO) forKey:@"scanTagTrack"];
|
||||||
[d setObject:b2n(YES) forKey:@"scanTagArtist"];
|
[d setObject:b2n(YES) forKey:@"scanTagArtist"];
|
||||||
[d setObject:b2n(YES) forKey:@"scanTagAlbum"];
|
[d setObject:b2n(YES) forKey:@"scanTagAlbum"];
|
||||||
[d setObject:b2n(YES) forKey:@"scanTagTitle"];
|
[d setObject:b2n(YES) forKey:@"scanTagTitle"];
|
||||||
[d setObject:b2n(NO) forKey:@"scanTagGenre"];
|
[d setObject:b2n(NO) forKey:@"scanTagGenre"];
|
||||||
[d setObject:b2n(NO) forKey:@"scanTagYear"];
|
[d setObject:b2n(NO) forKey:@"scanTagYear"];
|
||||||
[d setObject:[NSArray array] forKey:@"recentDirectories"];
|
return d;
|
||||||
[d setObject:[NSArray array] forKey:@"columnsOrder"];
|
|
||||||
[d setObject:[NSDictionary dictionary] forKey:@"columnsWidth"];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:d];
|
|
||||||
[ud registerDefaults:d];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
@@ -74,13 +61,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
return [[DirectoryPanelME alloc] initWithParentApp:self];
|
return [[DirectoryPanelME alloc] initWithParentApp:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Delegate
|
- (void)removeDeadTracks
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
|
||||||
{
|
{
|
||||||
// index 3 is just after "Export Results to XHTML"
|
[(ResultWindow *)[self resultWindow] removeDeadTracks];
|
||||||
NSMenuItem *mi = [actionsMenu insertItemWithTitle:TR(@"Remove Dead Tracks in iTunes")
|
|
||||||
action:@selector(removeDeadTracks:) keyEquivalent:@"" atIndex:3];
|
|
||||||
[mi setTarget:[self resultWindow]];
|
|
||||||
[super applicationDidFinishLaunching:aNotification];
|
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
13
cocoa/me/DetailsPanel.h
Normal file
13
cocoa/me/DetailsPanel.h
Normal file
@@ -0,0 +1,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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "DetailsPanelBase.h"
|
||||||
|
|
||||||
|
@interface DetailsPanel : DetailsPanelBase
|
||||||
|
@end
|
||||||
17
cocoa/me/DetailsPanel.m
Normal file
17
cocoa/me/DetailsPanel.m
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
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 "DetailsPanel.h"
|
||||||
|
#import "DetailsPanel_UI.h"
|
||||||
|
|
||||||
|
@implementation DetailsPanel
|
||||||
|
- (NSWindow *)createWindow
|
||||||
|
{
|
||||||
|
return createDetailsPanel_UI(self);
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -7,7 +7,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "DirectoryPanel.h"
|
#import "DirectoryPanel.h"
|
||||||
#import "Consts.h"
|
|
||||||
|
|
||||||
@implementation DirectoryPanelME
|
@implementation DirectoryPanelME
|
||||||
- (id)initWithParentApp:(id)aParentApp
|
- (id)initWithParentApp:(id)aParentApp
|
||||||
@@ -21,7 +20,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
{
|
{
|
||||||
[super fillPopUpMenu];
|
[super fillPopUpMenu];
|
||||||
NSMenu *m = [addButtonPopUp menu];
|
NSMenu *m = [addButtonPopUp menu];
|
||||||
NSMenuItem *mi = [m insertItemWithTitle:TR(@"Add iTunes Library") action:@selector(addiTunes:)
|
NSMenuItem *mi = [m insertItemWithTitle:NSLocalizedString(@"Add iTunes Library", @"") action:@selector(addiTunes:)
|
||||||
keyEquivalent:@"" atIndex:1];
|
keyEquivalent:@"" atIndex:1];
|
||||||
[mi setTarget:self];
|
[mi setTarget:self];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>English</string>
|
<string>English</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>dupeGuru</string>
|
||||||
<key>CFBundleHelpBookFolder</key>
|
<key>CFBundleHelpBookFolder</key>
|
||||||
<string>dupeguru_me_help</string>
|
<string>dupeguru_me_help</string>
|
||||||
<key>CFBundleHelpBookName</key>
|
<key>CFBundleHelpBookName</key>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>${PRODUCT_NAME}</string>
|
<string>dupeGuru ME</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "../base/ResultWindow.h"
|
#import "../base/ResultWindow.h"
|
||||||
|
|
||||||
@interface ResultWindow : ResultWindowBase {}
|
@interface ResultWindow : ResultWindowBase {}
|
||||||
- (IBAction)removeDeadTracks:(id)sender;
|
- (void)removeDeadTracks;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)removeDeadTracks:(id)sender
|
- (void)removeDeadTracks
|
||||||
{
|
{
|
||||||
[model scanDeadTracks];
|
[model scanDeadTracks];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,9 @@ install_gettext_trans_under_cocoa()
|
|||||||
|
|
||||||
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
||||||
|
|
||||||
from inter.details_panel import PyDetailsPanel
|
from inter.all import *
|
||||||
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
|
from inter.app_me import PyDupeGuru
|
||||||
|
|
||||||
|
# When built under virtualenv, the dependency collector misses this module, so we have to force it
|
||||||
|
# to see the module.
|
||||||
|
import distutils.sysconfig
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:dupeguru.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "dupeGuru ME Preferences"; ObjectID = "2"; */
|
|
||||||
"2.title" = "dupeGuru ME Preferences";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "More results"; ObjectID = "29"; */
|
|
||||||
"29.title" = "More results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Fewer results"; ObjectID = "30"; */
|
|
||||||
"30.title" = "Fewer results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Filter hardness:"; ObjectID = "31"; */
|
|
||||||
"31.title" = "Filter hardness:";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Scan type:"; ObjectID = "32"; */
|
|
||||||
"32.title" = "Scan type:";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Content"; ObjectID = "35"; */
|
|
||||||
"35.title" = "Content";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Filename"; ObjectID = "36"; */
|
|
||||||
"36.title" = "Filename";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Filename - Fields"; ObjectID = "37"; */
|
|
||||||
"37.title" = "Filename - Fields";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Tags"; ObjectID = "38"; */
|
|
||||||
"38.title" = "Tags";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Audio Content"; ObjectID = "39"; */
|
|
||||||
"39.title" = "Audio Content";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Filename - Fields (No Order)"; ObjectID = "40"; */
|
|
||||||
"40.title" = "Filename - Fields (No Order)";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Word weighting"; ObjectID = "41"; */
|
|
||||||
"41.title" = "Word weighting";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Can mix file kind"; ObjectID = "42"; */
|
|
||||||
"42.title" = "Can mix file kind";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Reset to Defaults"; ObjectID = "45"; */
|
|
||||||
"45.title" = "Reset to Defaults";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Match similar words"; ObjectID = "46"; */
|
|
||||||
"46.title" = "Match similar words";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Copy and Move:"; ObjectID = "54"; */
|
|
||||||
"54.title" = "Copy and Move:";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate relative path"; ObjectID = "57"; */
|
|
||||||
"57.title" = "Recreate relative path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate absolute path"; ObjectID = "58"; */
|
|
||||||
"58.title" = "Recreate absolute path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Right in destination"; ObjectID = "59"; */
|
|
||||||
"59.title" = "Right in destination";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "60"; */
|
|
||||||
"60.title" = "Automatically check for updates";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use regular expressions when filtering"; ObjectID = "61"; */
|
|
||||||
"61.title" = "Use regular expressions when filtering";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Remove empty folders after delete and move"; ObjectID = "62"; */
|
|
||||||
"62.title" = "Remove empty folders after delete and move";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Tags to scan:"; ObjectID = "63"; */
|
|
||||||
"63.title" = "Tags to scan:";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Track"; ObjectID = "64"; */
|
|
||||||
"64.title" = "Track";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Artist"; ObjectID = "65"; */
|
|
||||||
"65.title" = "Artist";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Album"; ObjectID = "66"; */
|
|
||||||
"66.title" = "Album";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Title"; ObjectID = "67"; */
|
|
||||||
"67.title" = "Title";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Genre"; ObjectID = "68"; */
|
|
||||||
"68.title" = "Genre";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Year"; ObjectID = "69"; */
|
|
||||||
"69.title" = "Year";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Basic"; ObjectID = "116"; */
|
|
||||||
"116.label" = "Basic";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "117"; */
|
|
||||||
"117.label" = "Advanced";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Custom Command (arguments: %d for dupe, %r for ref):"; ObjectID = "121"; */
|
|
||||||
"121.title" = "Custom Command (arguments: %d for dupe, %r for ref):";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Ignore duplicates hardlinking to the same file"; ObjectID = "126"; */
|
|
||||||
"126.title" = "Ignore duplicates hardlinking to the same file";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug mode (restart required)"; ObjectID = "130"; */
|
|
||||||
"130.title" = "Debug mode (restart required)";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Font size:"; ObjectID = "136"; */
|
|
||||||
"136.title" = "Font size:";
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,8 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "../base/AppDelegate.h"
|
#import "AppDelegateBase.h"
|
||||||
|
|
||||||
@interface AppDelegate : AppDelegateBase {}
|
@interface AppDelegate : AppDelegateBase {}
|
||||||
|
- (void)clearPictureCache;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -16,26 +16,13 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "ResultWindow.h"
|
#import "ResultWindow.h"
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
+ (void)initialize
|
+ (NSDictionary *)defaultPreferences
|
||||||
{
|
{
|
||||||
[super initialize];
|
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary:[super defaultPreferences]];
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
|
||||||
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithCapacity:10];
|
|
||||||
[d setObject:i2n(0) forKey:@"scanType"];
|
[d setObject:i2n(0) forKey:@"scanType"];
|
||||||
[d setObject:i2n(95) forKey:@"minMatchPercentage"];
|
[d setObject:i2n(95) forKey:@"minMatchPercentage"];
|
||||||
[d setObject:i2n(1) forKey:@"recreatePathType"];
|
|
||||||
[d setObject:i2n(11) forKey:TableFontSize];
|
|
||||||
[d setObject:b2n(NO) forKey:@"matchScaled"];
|
[d setObject:b2n(NO) forKey:@"matchScaled"];
|
||||||
[d setObject:b2n(YES) forKey:@"mixFileKind"];
|
return d;
|
||||||
[d setObject:b2n(NO) forKey:@"useRegexpFilter"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"ignoreHardlinkMatches"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"removeEmptyFolders"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"debug"];
|
|
||||||
[d setObject:[NSArray array] forKey:@"recentDirectories"];
|
|
||||||
[d setObject:[NSArray array] forKey:@"columnsOrder"];
|
|
||||||
[d setObject:[NSDictionary dictionary] forKey:@"columnsWidth"];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:d];
|
|
||||||
[ud registerDefaults:d];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
@@ -64,17 +51,11 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
|
|
||||||
- (DetailsPanel *)createDetailsPanel
|
- (DetailsPanel *)createDetailsPanel
|
||||||
{
|
{
|
||||||
return [[DetailsPanelPE alloc] initWithApp:model];
|
return [[DetailsPanel alloc] initWithApp:model];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Delegate
|
- (void)clearPictureCache
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
|
||||||
{
|
{
|
||||||
// index 2 is just after "Clear Ingore List"
|
[(ResultWindow *)[self resultWindow] clearPictureCache];
|
||||||
NSMenuItem *mi = [actionsMenu insertItemWithTitle:TR(@"Clear Picture Cache")
|
|
||||||
action:@selector(clearPictureCache:) keyEquivalent:@"P" atIndex:2];
|
|
||||||
[mi setTarget:[self resultWindow]];
|
|
||||||
[mi setKeyEquivalentModifierMask:NSCommandKeyMask|NSShiftKeyMask];
|
|
||||||
[super applicationDidFinishLaunching:aNotification];
|
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,15 +7,15 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "../base/DetailsPanel.h"
|
#import "DetailsPanelBase.h"
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
|
|
||||||
@interface DetailsPanelPE : DetailsPanel
|
@interface DetailsPanel : DetailsPanelBase
|
||||||
{
|
{
|
||||||
IBOutlet NSImageView *dupeImage;
|
NSImageView *dupeImage;
|
||||||
IBOutlet NSProgressIndicator *dupeProgressIndicator;
|
NSProgressIndicator *dupeProgressIndicator;
|
||||||
IBOutlet NSImageView *refImage;
|
NSImageView *refImage;
|
||||||
IBOutlet NSProgressIndicator *refProgressIndicator;
|
NSProgressIndicator *refProgressIndicator;
|
||||||
|
|
||||||
PyDupeGuru *pyApp;
|
PyDupeGuru *pyApp;
|
||||||
BOOL _needsRefresh;
|
BOOL _needsRefresh;
|
||||||
@@ -23,5 +23,10 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
NSString *_refPath;
|
NSString *_refPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@property (readwrite, retain) NSImageView *dupeImage;
|
||||||
|
@property (readwrite, retain) NSProgressIndicator *dupeProgressIndicator;
|
||||||
|
@property (readwrite, retain) NSImageView *refImage;
|
||||||
|
@property (readwrite, retain) NSProgressIndicator *refProgressIndicator;
|
||||||
|
|
||||||
- (id)initWithApp:(PyDupeGuru *)aApp;
|
- (id)initWithApp:(PyDupeGuru *)aApp;
|
||||||
@end
|
@end
|
||||||
@@ -12,8 +12,15 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
#import "DetailsPanel.h"
|
#import "DetailsPanel.h"
|
||||||
#import "Consts.h"
|
#import "Consts.h"
|
||||||
|
#import "DetailsPanel_UI.h"
|
||||||
|
|
||||||
|
@implementation DetailsPanel
|
||||||
|
|
||||||
|
@synthesize dupeImage;
|
||||||
|
@synthesize dupeProgressIndicator;
|
||||||
|
@synthesize refImage;
|
||||||
|
@synthesize refProgressIndicator;
|
||||||
|
|
||||||
@implementation DetailsPanelPE
|
|
||||||
- (id)initWithApp:(PyDupeGuru *)aApp
|
- (id)initWithApp:(PyDupeGuru *)aApp
|
||||||
{
|
{
|
||||||
self = [super initWithPyRef:[aApp detailsPanel]];
|
self = [super initWithPyRef:[aApp detailsPanel]];
|
||||||
@@ -23,6 +30,11 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSWindow *)createWindow
|
||||||
|
{
|
||||||
|
return createDetailsPanel_UI(self);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)loadImageAsync:(NSString *)imagePath
|
- (void)loadImageAsync:(NSString *)imagePath
|
||||||
{
|
{
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|||||||
@@ -13,4 +13,5 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
- (IBAction)addiPhoto:(id)sender;
|
- (IBAction)addiPhoto:(id)sender;
|
||||||
|
- (IBAction)addAperture:(id)sender;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "DirectoryPanel.h"
|
#import "DirectoryPanel.h"
|
||||||
#import "Consts.h"
|
|
||||||
|
|
||||||
@implementation DirectoryPanelPE
|
@implementation DirectoryPanelPE
|
||||||
- (id)initWithParentApp:(id)aParentApp
|
- (id)initWithParentApp:(id)aParentApp
|
||||||
@@ -21,13 +20,21 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
{
|
{
|
||||||
[super fillPopUpMenu];
|
[super fillPopUpMenu];
|
||||||
NSMenu *m = [addButtonPopUp menu];
|
NSMenu *m = [addButtonPopUp menu];
|
||||||
NSMenuItem *mi = [m insertItemWithTitle:TR(@"Add iPhoto Library") action:@selector(addiPhoto:)
|
NSMenuItem *mi = [m insertItemWithTitle:NSLocalizedString(@"Add iPhoto Library", @"") action:@selector(addiPhoto:)
|
||||||
keyEquivalent:@"" atIndex:1];
|
keyEquivalent:@"" atIndex:1];
|
||||||
[mi setTarget:self];
|
[mi setTarget:self];
|
||||||
|
mi = [m insertItemWithTitle:NSLocalizedString(@"Add Aperture Library", @"") action:@selector(addAperture:)
|
||||||
|
keyEquivalent:@"" atIndex:2];
|
||||||
|
[mi setTarget:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)addiPhoto:(id)sender
|
- (IBAction)addiPhoto:(id)sender
|
||||||
{
|
{
|
||||||
[self addDirectory:@"iPhoto Library"];
|
[self addDirectory:@"iPhoto Library"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)addAperture:(id)sender
|
||||||
|
{
|
||||||
|
[self addDirectory:@"Aperture Library"];
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>English</string>
|
<string>English</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>dupeGuru</string>
|
||||||
<key>CFBundleHelpBookFolder</key>
|
<key>CFBundleHelpBookFolder</key>
|
||||||
<string>dupeguru_pe_help</string>
|
<string>dupeguru_pe_help</string>
|
||||||
<key>CFBundleHelpBookName</key>
|
<key>CFBundleHelpBookName</key>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>${PRODUCT_NAME}</string>
|
<string>dupeGuru PE</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "../base/ResultWindow.h"
|
#import "../base/ResultWindow.h"
|
||||||
|
|
||||||
@interface ResultWindow : ResultWindowBase {}
|
@interface ResultWindow : ResultWindowBase {}
|
||||||
- (IBAction)clearPictureCache:(id)sender;
|
- (void)clearPictureCache;
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "ResultWindow.h"
|
#import "ResultWindow.h"
|
||||||
#import "Dialogs.h"
|
#import "Dialogs.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
#import "Consts.h"
|
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
|
|
||||||
@implementation ResultWindow
|
@implementation ResultWindow
|
||||||
@@ -23,6 +22,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
{@"size", 63, 16, 0, YES, nil},
|
{@"size", 63, 16, 0, YES, nil},
|
||||||
{@"extension", 40, 16, 0, YES, nil},
|
{@"extension", 40, 16, 0, YES, nil},
|
||||||
{@"dimensions", 73, 16, 0, YES, nil},
|
{@"dimensions", 73, 16, 0, YES, nil},
|
||||||
|
{@"exif_timestamp", 120, 16, 0, YES, nil},
|
||||||
{@"mtime", 120, 16, 0, YES, nil},
|
{@"mtime", 120, 16, 0, YES, nil},
|
||||||
{@"percentage", 58, 16, 0, YES, nil},
|
{@"percentage", 58, 16, 0, YES, nil},
|
||||||
{@"dupe_count", 80, 16, 0, YES, nil},
|
{@"dupe_count", 80, 16, 0, YES, nil},
|
||||||
@@ -48,9 +48,9 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
- (IBAction)clearPictureCache:(id)sender
|
- (void)clearPictureCache
|
||||||
{
|
{
|
||||||
NSString *msg = TR(@"Do you really want to remove all your cached picture analysis?");
|
NSString *msg = NSLocalizedString(@"Do you really want to remove all your cached picture analysis?", @"");
|
||||||
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
|
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
|
||||||
return;
|
return;
|
||||||
[model clearPictureCache];
|
[model clearPictureCache];
|
||||||
|
|||||||
@@ -9,13 +9,9 @@ install_gettext_trans_under_cocoa()
|
|||||||
|
|
||||||
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
||||||
|
|
||||||
from inter.details_panel import PyDetailsPanel
|
from inter.all import *
|
||||||
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
|
from inter.app_pe import PyDupeGuru
|
||||||
|
|
||||||
|
# When built under virtualenv, the dependency collector misses this module, so we have to force it
|
||||||
|
# to see the module.
|
||||||
|
import distutils.sysconfig
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:dupeguru.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSPanel"; title = "Details of Selected File"; ObjectID = "5"; */
|
|
||||||
"5.title" = "Details of Selected File";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Selected"; ObjectID = "9"; */
|
|
||||||
"9.headerCell.title" = "Selected";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Reference"; ObjectID = "10"; */
|
|
||||||
"10.headerCell.title" = "Reference";
|
|
||||||
|
|
||||||
/* Class = "NSTableColumn"; headerCell.title = "Attribute"; ObjectID = "11"; */
|
|
||||||
"11.headerCell.title" = "Attribute";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Selected"; ObjectID = "33"; */
|
|
||||||
"33.title" = "Selected";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Reference"; ObjectID = "35"; */
|
|
||||||
"35.title" = "Reference";
|
|
||||||
@@ -1,846 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
|
||||||
<data>
|
|
||||||
<int key="IBDocument.SystemTarget">1060</int>
|
|
||||||
<string key="IBDocument.SystemVersion">11B26</string>
|
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">1617</string>
|
|
||||||
<string key="IBDocument.AppKitVersion">1138</string>
|
|
||||||
<string key="IBDocument.HIToolboxVersion">566.00</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="NS.object.0">1617</string>
|
|
||||||
</object>
|
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
|
||||||
<string>NSScroller</string>
|
|
||||||
<string>NSSplitView</string>
|
|
||||||
<string>NSTableHeaderView</string>
|
|
||||||
<string>NSScrollView</string>
|
|
||||||
<string>NSImageView</string>
|
|
||||||
<string>NSTextFieldCell</string>
|
|
||||||
<string>NSProgressIndicator</string>
|
|
||||||
<string>NSTableView</string>
|
|
||||||
<string>NSImageCell</string>
|
|
||||||
<string>NSCustomObject</string>
|
|
||||||
<string>NSCustomView</string>
|
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSTextField</string>
|
|
||||||
<string>NSTableColumn</string>
|
|
||||||
</array>
|
|
||||||
<array key="IBDocument.PluginDependencies">
|
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</array>
|
|
||||||
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
|
|
||||||
<array class="NSMutableArray" key="IBDocument.RootObjects" id="433298071">
|
|
||||||
<object class="NSCustomObject" id="449950342">
|
|
||||||
<string key="NSClassName">DetailsPanelPE</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="175405098">
|
|
||||||
<string key="NSClassName">FirstResponder</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomObject" id="757309215">
|
|
||||||
<string key="NSClassName">NSApplication</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSWindowTemplate" id="1023276826">
|
|
||||||
<int key="NSWindowStyleMask">155</int>
|
|
||||||
<int key="NSWindowBacking">2</int>
|
|
||||||
<string key="NSWindowRect">{{634, 317}, {593, 398}}</string>
|
|
||||||
<int key="NSWTFlags">-260571136</int>
|
|
||||||
<string key="NSWindowTitle">Details of Selected File</string>
|
|
||||||
<object class="NSMutableString" key="NSWindowClass">
|
|
||||||
<characters key="NS.bytes">NSPanel</characters>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableString" key="NSViewClass">
|
|
||||||
<characters key="NS.bytes">View</characters>
|
|
||||||
</object>
|
|
||||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
|
||||||
<string key="NSWindowContentMinSize">{451, 161}</string>
|
|
||||||
<object class="NSView" key="NSWindowView" id="1024886486">
|
|
||||||
<reference key="NSNextResponder"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSScrollView" id="842494181">
|
|
||||||
<reference key="NSNextResponder" ref="1024886486"/>
|
|
||||||
<int key="NSvFlags">266</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSClipView" id="47651407">
|
|
||||||
<reference key="NSNextResponder" ref="842494181"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTableView" id="1061505056">
|
|
||||||
<reference key="NSNextResponder" ref="47651407"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{591, 147}</string>
|
|
||||||
<reference key="NSSuperview" ref="47651407"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSTag">2</int>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTableHeaderView" key="NSHeaderView" id="449183719">
|
|
||||||
<reference key="NSNextResponder" ref="205382409"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<string key="NSFrameSize">{591, 17}</string>
|
|
||||||
<reference key="NSSuperview" ref="205382409"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTableView" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="_NSCornerView" key="NSCornerView" id="429654016">
|
|
||||||
<reference key="NSNextResponder" ref="842494181"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-26, 0}, {16, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="842494181"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<array class="NSMutableArray" key="NSTableColumns">
|
|
||||||
<object class="NSTableColumn" id="761242770">
|
|
||||||
<string key="NSIdentifier">0</string>
|
|
||||||
<double key="NSWidth">74</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Attribute</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="26">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">11</double>
|
|
||||||
<int key="NSfFlags">3100</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="77031760">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="578432702">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">headerTextColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="585838671">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MAA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="1001899861">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="1061505056"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="240658091">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlBackgroundColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="823392961">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSColor" key="NSTextColor" id="194446219">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlTextColor</string>
|
|
||||||
<reference key="NSColor" ref="585838671"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">2</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTableColumn" id="245708436">
|
|
||||||
<string key="NSIdentifier">1</string>
|
|
||||||
<double key="NSWidth">260</double>
|
|
||||||
<double key="NSMinWidth">40</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Selected</string>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="77031760"/>
|
|
||||||
<reference key="NSTextColor" ref="578432702"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="322739197">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="1061505056"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="240658091"/>
|
|
||||||
<reference key="NSTextColor" ref="194446219"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTableColumn" id="421059304">
|
|
||||||
<string key="NSIdentifier">2</string>
|
|
||||||
<double key="NSWidth">248</double>
|
|
||||||
<double key="NSMinWidth">56.4755859375</double>
|
|
||||||
<double key="NSMaxWidth">1000</double>
|
|
||||||
<object class="NSTableHeaderCell" key="NSHeaderCell">
|
|
||||||
<int key="NSCellFlags">75628096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<string key="NSContents">Reference</string>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">headerColor</string>
|
|
||||||
<object class="NSColor" key="NSColor" id="401909016">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MQA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<reference key="NSTextColor" ref="578432702"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSTextFieldCell" key="NSDataCell" id="999491006">
|
|
||||||
<int key="NSCellFlags">337772096</int>
|
|
||||||
<int key="NSCellFlags2">2048</int>
|
|
||||||
<reference key="NSSupport" ref="26"/>
|
|
||||||
<reference key="NSControlView" ref="1061505056"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="240658091"/>
|
|
||||||
<reference key="NSTextColor" ref="194446219"/>
|
|
||||||
</object>
|
|
||||||
<int key="NSResizingMask">3</int>
|
|
||||||
<bool key="NSIsResizeable">YES</bool>
|
|
||||||
<reference key="NSTableView" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<double key="NSIntercellSpacingWidth">3</double>
|
|
||||||
<double key="NSIntercellSpacingHeight">2</double>
|
|
||||||
<reference key="NSBackgroundColor" ref="401909016"/>
|
|
||||||
<object class="NSColor" key="NSGridColor">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">gridColor</string>
|
|
||||||
<object class="NSColor" key="NSColor">
|
|
||||||
<int key="NSColorSpace">3</int>
|
|
||||||
<bytes key="NSWhite">MC41AA</bytes>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<double key="NSRowHeight">14</double>
|
|
||||||
<int key="NSTvFlags">1111523328</int>
|
|
||||||
<reference key="NSDelegate"/>
|
|
||||||
<reference key="NSDataSource"/>
|
|
||||||
<int key="NSColumnAutoresizingStyle">1</int>
|
|
||||||
<int key="NSDraggingSourceMaskForLocal">15</int>
|
|
||||||
<int key="NSDraggingSourceMaskForNonLocal">0</int>
|
|
||||||
<bool key="NSAllowsTypeSelect">YES</bool>
|
|
||||||
<int key="NSTableViewDraggingDestinationStyle">0</int>
|
|
||||||
<int key="NSTableViewGroupRowStyle">1</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 17}, {591, 147}}</string>
|
|
||||||
<reference key="NSSuperview" ref="842494181"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="1061505056"/>
|
|
||||||
<reference key="NSDocView" ref="1061505056"/>
|
|
||||||
<reference key="NSBGColor" ref="240658091"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="90145020">
|
|
||||||
<reference key="NSNextResponder" ref="842494181"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-30, 17}, {15, 147}}</string>
|
|
||||||
<reference key="NSSuperview" ref="842494181"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSTarget" ref="842494181"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.91874998807907104</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSScroller" id="23980189">
|
|
||||||
<reference key="NSNextResponder" ref="842494181"/>
|
|
||||||
<int key="NSvFlags">-2147483392</int>
|
|
||||||
<string key="NSFrame">{{-100, -100}, {394, 15}}</string>
|
|
||||||
<reference key="NSSuperview" ref="842494181"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSsFlags">1</int>
|
|
||||||
<reference key="NSTarget" ref="842494181"/>
|
|
||||||
<string key="NSAction">_doScroller:</string>
|
|
||||||
<double key="NSPercent">0.96332520246505737</double>
|
|
||||||
</object>
|
|
||||||
<object class="NSClipView" id="205382409">
|
|
||||||
<reference key="NSNextResponder" ref="842494181"/>
|
|
||||||
<int key="NSvFlags">2304</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<reference ref="449183719"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{1, 0}, {591, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="842494181"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="449183719"/>
|
|
||||||
<reference key="NSDocView" ref="449183719"/>
|
|
||||||
<reference key="NSBGColor" ref="240658091"/>
|
|
||||||
<int key="NScvFlags">4</int>
|
|
||||||
</object>
|
|
||||||
<reference ref="429654016"/>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{0, 233}, {593, 165}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1024886486"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<reference key="NSNextKeyView" ref="47651407"/>
|
|
||||||
<int key="NSsFlags">133650</int>
|
|
||||||
<reference key="NSVScroller" ref="90145020"/>
|
|
||||||
<reference key="NSHScroller" ref="23980189"/>
|
|
||||||
<reference key="NSContentView" ref="47651407"/>
|
|
||||||
<reference key="NSHeaderClipView" ref="205382409"/>
|
|
||||||
<reference key="NSCornerView" ref="429654016"/>
|
|
||||||
<bytes key="NSScrollAmts">QSAAAEEgAABBgAAAQYAAAA</bytes>
|
|
||||||
</object>
|
|
||||||
<object class="NSSplitView" id="1006675149">
|
|
||||||
<reference key="NSNextResponder" ref="1024886486"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSCustomView" id="101939068">
|
|
||||||
<reference key="NSNextResponder" ref="1006675149"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTextField" id="723437775">
|
|
||||||
<reference key="NSNextResponder" ref="101939068"/>
|
|
||||||
<int key="NSvFlags">266</int>
|
|
||||||
<string key="NSFrame">{{-3, 201}, {294, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="101939068"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTextFieldCell" key="NSCell" id="517184416">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">138412032</int>
|
|
||||||
<string key="NSContents">Selected</string>
|
|
||||||
<object class="NSFont" key="NSSupport" id="872545298">
|
|
||||||
<string key="NSName">LucidaGrande</string>
|
|
||||||
<double key="NSSize">13</double>
|
|
||||||
<int key="NSfFlags">1044</int>
|
|
||||||
</object>
|
|
||||||
<reference key="NSControlView" ref="723437775"/>
|
|
||||||
<object class="NSColor" key="NSBackgroundColor" id="125808400">
|
|
||||||
<int key="NSColorSpace">6</int>
|
|
||||||
<string key="NSCatalogName">System</string>
|
|
||||||
<string key="NSColorName">controlColor</string>
|
|
||||||
<reference key="NSColor" ref="823392961"/>
|
|
||||||
</object>
|
|
||||||
<reference key="NSTextColor" ref="194446219"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSImageView" id="664547713">
|
|
||||||
<reference key="NSNextResponder" ref="101939068"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<set class="NSMutableSet" key="NSDragTypes">
|
|
||||||
<string>Apple PDF pasteboard type</string>
|
|
||||||
<string>Apple PICT pasteboard type</string>
|
|
||||||
<string>Apple PNG pasteboard type</string>
|
|
||||||
<string>NSFilenamesPboardType</string>
|
|
||||||
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
|
|
||||||
<string>NeXT TIFF v4.0 pasteboard type</string>
|
|
||||||
</set>
|
|
||||||
<string key="NSFrameSize">{288, 193}</string>
|
|
||||||
<reference key="NSSuperview" ref="101939068"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSImageCell" key="NSCell" id="327656199">
|
|
||||||
<int key="NSCellFlags">130560</int>
|
|
||||||
<int key="NSCellFlags2">33554432</int>
|
|
||||||
<object class="NSCustomResource" key="NSContents" id="548486768">
|
|
||||||
<string key="NSClassName">NSImage</string>
|
|
||||||
<string key="NSResourceName">NSApplicationIcon</string>
|
|
||||||
</object>
|
|
||||||
<int key="NSAlign">0</int>
|
|
||||||
<int key="NSScale">0</int>
|
|
||||||
<int key="NSStyle">0</int>
|
|
||||||
<bool key="NSAnimates">NO</bool>
|
|
||||||
</object>
|
|
||||||
<bool key="NSEditable">YES</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSProgressIndicator" id="127754691">
|
|
||||||
<reference key="NSNextResponder" ref="101939068"/>
|
|
||||||
<int key="NSvFlags">1289</int>
|
|
||||||
<object class="NSPSMatrix" key="NSDrawMatrix"/>
|
|
||||||
<string key="NSFrame">{{255, 201}, {16, 16}}</string>
|
|
||||||
<reference key="NSSuperview" ref="101939068"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSpiFlags">28938</int>
|
|
||||||
<double key="NSMaxValue">100</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{291, 225}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006675149"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<string key="NSClassName">NSView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSCustomView" id="971244171">
|
|
||||||
<reference key="NSNextResponder" ref="1006675149"/>
|
|
||||||
<int key="NSvFlags">256</int>
|
|
||||||
<array class="NSMutableArray" key="NSSubviews">
|
|
||||||
<object class="NSTextField" id="905396720">
|
|
||||||
<reference key="NSNextResponder" ref="971244171"/>
|
|
||||||
<int key="NSvFlags">266</int>
|
|
||||||
<string key="NSFrame">{{-3, 203}, {295, 17}}</string>
|
|
||||||
<reference key="NSSuperview" ref="971244171"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSTextFieldCell" key="NSCell" id="334112854">
|
|
||||||
<int key="NSCellFlags">67239424</int>
|
|
||||||
<int key="NSCellFlags2">138412032</int>
|
|
||||||
<string key="NSContents">Reference</string>
|
|
||||||
<reference key="NSSupport" ref="872545298"/>
|
|
||||||
<reference key="NSControlView" ref="905396720"/>
|
|
||||||
<reference key="NSBackgroundColor" ref="125808400"/>
|
|
||||||
<reference key="NSTextColor" ref="194446219"/>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="NSImageView" id="89184363">
|
|
||||||
<reference key="NSNextResponder" ref="971244171"/>
|
|
||||||
<int key="NSvFlags">274</int>
|
|
||||||
<set class="NSMutableSet" key="NSDragTypes">
|
|
||||||
<string>Apple PDF pasteboard type</string>
|
|
||||||
<string>Apple PICT pasteboard type</string>
|
|
||||||
<string>Apple PNG pasteboard type</string>
|
|
||||||
<string>NSFilenamesPboardType</string>
|
|
||||||
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
|
|
||||||
<string>NeXT TIFF v4.0 pasteboard type</string>
|
|
||||||
</set>
|
|
||||||
<string key="NSFrameSize">{289, 195}</string>
|
|
||||||
<reference key="NSSuperview" ref="971244171"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSEnabled">YES</bool>
|
|
||||||
<object class="NSImageCell" key="NSCell" id="966367135">
|
|
||||||
<int key="NSCellFlags">130560</int>
|
|
||||||
<int key="NSCellFlags2">33554432</int>
|
|
||||||
<reference key="NSContents" ref="548486768"/>
|
|
||||||
<int key="NSAlign">0</int>
|
|
||||||
<int key="NSScale">0</int>
|
|
||||||
<int key="NSStyle">0</int>
|
|
||||||
<bool key="NSAnimates">NO</bool>
|
|
||||||
</object>
|
|
||||||
<bool key="NSEditable">YES</bool>
|
|
||||||
</object>
|
|
||||||
<object class="NSProgressIndicator" id="40327027">
|
|
||||||
<reference key="NSNextResponder" ref="971244171"/>
|
|
||||||
<int key="NSvFlags">1289</int>
|
|
||||||
<object class="NSPSMatrix" key="NSDrawMatrix"/>
|
|
||||||
<string key="NSFrame">{{257, 203}, {16, 16}}</string>
|
|
||||||
<reference key="NSSuperview" ref="971244171"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<int key="NSpiFlags">28938</int>
|
|
||||||
<double key="NSMaxValue">100</double>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrame">{{300, 0}, {293, 225}}</string>
|
|
||||||
<reference key="NSSuperview" ref="1006675149"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<string key="NSClassName">NSView</string>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{593, 225}</string>
|
|
||||||
<reference key="NSSuperview" ref="1024886486"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
<bool key="NSIsVertical">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<string key="NSFrameSize">{593, 398}</string>
|
|
||||||
<reference key="NSSuperview"/>
|
|
||||||
<reference key="NSWindow"/>
|
|
||||||
</object>
|
|
||||||
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
|
||||||
<string key="NSMinSize">{451, 177}</string>
|
|
||||||
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
|
||||||
<string key="NSFrameAutosaveName">DetailsPanel</string>
|
|
||||||
<bool key="NSWindowIsRestorable">YES</bool>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
|
||||||
<array class="NSMutableArray" key="connectionRecords">
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">window</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="1023276826"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">12</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">detailsTable</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">13</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">refImage</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="89184363"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">25</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">dupeImage</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="664547713"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">26</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">dupeProgressIndicator</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="127754691"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">30</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">refProgressIndicator</string>
|
|
||||||
<reference key="source" ref="449950342"/>
|
|
||||||
<reference key="destination" ref="40327027"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">31</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBConnectionRecord">
|
|
||||||
<object class="IBOutletConnection" key="connection">
|
|
||||||
<string key="label">dataSource</string>
|
|
||||||
<reference key="source" ref="1061505056"/>
|
|
||||||
<reference key="destination" ref="449950342"/>
|
|
||||||
</object>
|
|
||||||
<int key="connectionID">43</int>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
|
||||||
<array key="orderedObjects">
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">0</int>
|
|
||||||
<array key="object" id="0"/>
|
|
||||||
<reference key="children" ref="433298071"/>
|
|
||||||
<nil key="parent"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-2</int>
|
|
||||||
<reference key="object" ref="449950342"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">File's Owner</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-1</int>
|
|
||||||
<reference key="object" ref="175405098"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">First Responder</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">5</int>
|
|
||||||
<reference key="object" ref="1023276826"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1024886486"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">details</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">6</int>
|
|
||||||
<reference key="object" ref="1024886486"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="842494181"/>
|
|
||||||
<reference ref="1006675149"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1023276826"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">7</int>
|
|
||||||
<reference key="object" ref="842494181"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1061505056"/>
|
|
||||||
<reference ref="90145020"/>
|
|
||||||
<reference ref="23980189"/>
|
|
||||||
<reference ref="449183719"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1024886486"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">8</int>
|
|
||||||
<reference key="object" ref="1061505056"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="245708436"/>
|
|
||||||
<reference ref="421059304"/>
|
|
||||||
<reference ref="761242770"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="842494181"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">9</int>
|
|
||||||
<reference key="object" ref="245708436"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="322739197"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">10</int>
|
|
||||||
<reference key="object" ref="421059304"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="999491006"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">11</int>
|
|
||||||
<reference key="object" ref="761242770"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="1001899861"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1061505056"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">20</int>
|
|
||||||
<reference key="object" ref="1006675149"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="101939068"/>
|
|
||||||
<reference ref="971244171"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1024886486"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">18</int>
|
|
||||||
<reference key="object" ref="101939068"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="723437775"/>
|
|
||||||
<reference ref="664547713"/>
|
|
||||||
<reference ref="127754691"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006675149"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">14</int>
|
|
||||||
<reference key="object" ref="723437775"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="517184416"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="101939068"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">16</int>
|
|
||||||
<reference key="object" ref="664547713"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="327656199"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="101939068"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">27</int>
|
|
||||||
<reference key="object" ref="127754691"/>
|
|
||||||
<reference key="parent" ref="101939068"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">19</int>
|
|
||||||
<reference key="object" ref="971244171"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="905396720"/>
|
|
||||||
<reference ref="89184363"/>
|
|
||||||
<reference ref="40327027"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="1006675149"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">15</int>
|
|
||||||
<reference key="object" ref="905396720"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="334112854"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="971244171"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">17</int>
|
|
||||||
<reference key="object" ref="89184363"/>
|
|
||||||
<array class="NSMutableArray" key="children">
|
|
||||||
<reference ref="966367135"/>
|
|
||||||
</array>
|
|
||||||
<reference key="parent" ref="971244171"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">29</int>
|
|
||||||
<reference key="object" ref="40327027"/>
|
|
||||||
<reference key="parent" ref="971244171"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">33</int>
|
|
||||||
<reference key="object" ref="517184416"/>
|
|
||||||
<reference key="parent" ref="723437775"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">34</int>
|
|
||||||
<reference key="object" ref="327656199"/>
|
|
||||||
<reference key="parent" ref="664547713"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">35</int>
|
|
||||||
<reference key="object" ref="334112854"/>
|
|
||||||
<reference key="parent" ref="905396720"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">36</int>
|
|
||||||
<reference key="object" ref="966367135"/>
|
|
||||||
<reference key="parent" ref="89184363"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">37</int>
|
|
||||||
<reference key="object" ref="322739197"/>
|
|
||||||
<reference key="parent" ref="245708436"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">38</int>
|
|
||||||
<reference key="object" ref="999491006"/>
|
|
||||||
<reference key="parent" ref="421059304"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">39</int>
|
|
||||||
<reference key="object" ref="1001899861"/>
|
|
||||||
<reference key="parent" ref="761242770"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">40</int>
|
|
||||||
<reference key="object" ref="90145020"/>
|
|
||||||
<reference key="parent" ref="842494181"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">41</int>
|
|
||||||
<reference key="object" ref="23980189"/>
|
|
||||||
<reference key="parent" ref="842494181"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">42</int>
|
|
||||||
<reference key="object" ref="449183719"/>
|
|
||||||
<reference key="parent" ref="842494181"/>
|
|
||||||
</object>
|
|
||||||
<object class="IBObjectRecord">
|
|
||||||
<int key="objectID">-3</int>
|
|
||||||
<reference key="object" ref="757309215"/>
|
|
||||||
<reference key="parent" ref="0"/>
|
|
||||||
<string key="objectName">Application</string>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
|
||||||
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="33.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="37.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="37.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="38.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="39.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="39.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="40.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="40.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="41.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="41.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="42.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<boolean value="YES" key="42.IBShouldRemoveOnLegacySave"/>
|
|
||||||
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="5.IBWindowTemplateEditedContentRect">{{88, 453}, {593, 398}}</string>
|
|
||||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
|
||||||
<nil key="activeLocalization"/>
|
|
||||||
<dictionary class="NSMutableDictionary" key="localizations"/>
|
|
||||||
<nil key="sourceID"/>
|
|
||||||
<int key="maxID">43</int>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
|
||||||
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">DetailsPanel</string>
|
|
||||||
<string key="superclassName">HSWindowController</string>
|
|
||||||
<object class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="NS.key.0">detailsTable</string>
|
|
||||||
<string key="NS.object.0">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<string key="NS.key.0">detailsTable</string>
|
|
||||||
<object class="IBToOneOutletInfo" key="NS.object.0">
|
|
||||||
<string key="name">detailsTable</string>
|
|
||||||
<string key="candidateClassName">NSTableView</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/DetailsPanel.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">DetailsPanelPE</string>
|
|
||||||
<string key="superclassName">DetailsPanel</string>
|
|
||||||
<dictionary class="NSMutableDictionary" key="outlets">
|
|
||||||
<string key="dupeImage">NSImageView</string>
|
|
||||||
<string key="dupeProgressIndicator">NSProgressIndicator</string>
|
|
||||||
<string key="refImage">NSImageView</string>
|
|
||||||
<string key="refProgressIndicator">NSProgressIndicator</string>
|
|
||||||
</dictionary>
|
|
||||||
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
|
|
||||||
<object class="IBToOneOutletInfo" key="dupeImage">
|
|
||||||
<string key="name">dupeImage</string>
|
|
||||||
<string key="candidateClassName">NSImageView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="dupeProgressIndicator">
|
|
||||||
<string key="name">dupeProgressIndicator</string>
|
|
||||||
<string key="candidateClassName">NSProgressIndicator</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="refImage">
|
|
||||||
<string key="name">refImage</string>
|
|
||||||
<string key="candidateClassName">NSImageView</string>
|
|
||||||
</object>
|
|
||||||
<object class="IBToOneOutletInfo" key="refProgressIndicator">
|
|
||||||
<string key="name">refProgressIndicator</string>
|
|
||||||
<string key="candidateClassName">NSProgressIndicator</string>
|
|
||||||
</object>
|
|
||||||
</dictionary>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/DetailsPanelPE.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">HSWindowController</string>
|
|
||||||
<string key="superclassName">NSWindowController</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/HSWindowController.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
|
||||||
</object>
|
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
|
||||||
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<real value="1060" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
|
|
||||||
<integer value="1050" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
|
|
||||||
<real value="4100" key="NS.object.0"/>
|
|
||||||
</object>
|
|
||||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
|
||||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
|
||||||
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
|
|
||||||
<string key="NS.key.0">NSApplicationIcon</string>
|
|
||||||
<string key="NS.object.0">{128, 128}</string>
|
|
||||||
</object>
|
|
||||||
</data>
|
|
||||||
</archive>
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "dupeGuru PE Preferences"; ObjectID = "2"; */
|
|
||||||
"2.title" = "dupeGuru PE Preferences";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "More results"; ObjectID = "18"; */
|
|
||||||
"18.title" = "More results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Fewer results"; ObjectID = "19"; */
|
|
||||||
"19.title" = "Fewer results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Filter hardness:"; ObjectID = "20"; */
|
|
||||||
"20.title" = "Filter hardness:";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Can mix file kind"; ObjectID = "21"; */
|
|
||||||
"21.title" = "Can mix file kind";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Reset to Defaults"; ObjectID = "24"; */
|
|
||||||
"24.title" = "Reset to Defaults";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Copy and Move:"; ObjectID = "25"; */
|
|
||||||
"25.title" = "Copy and Move:";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate relative path"; ObjectID = "28"; */
|
|
||||||
"28.title" = "Recreate relative path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate absolute path"; ObjectID = "29"; */
|
|
||||||
"29.title" = "Recreate absolute path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Right in destination"; ObjectID = "30"; */
|
|
||||||
"30.title" = "Right in destination";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Match pictures of different dimensions"; ObjectID = "31"; */
|
|
||||||
"31.title" = "Match pictures of different dimensions";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "32"; */
|
|
||||||
"32.title" = "Automatically check for updates";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Remove empty folders on delete or move"; ObjectID = "33"; */
|
|
||||||
"33.title" = "Remove empty folders on delete or move";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use regular expressions when filtering"; ObjectID = "34"; */
|
|
||||||
"34.title" = "Use regular expressions when filtering";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Basic"; ObjectID = "60"; */
|
|
||||||
"60.label" = "Basic";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "61"; */
|
|
||||||
"61.label" = "Advanced";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Custom Command (arguments: %d for dupe, %r for ref):"; ObjectID = "65"; */
|
|
||||||
"65.title" = "Custom Command (arguments: %d for dupe, %r for ref):";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Ignore duplicates hardlinking to the same file"; ObjectID = "70"; */
|
|
||||||
"70.title" = "Ignore duplicates hardlinking to the same file";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug mode (restart required)"; ObjectID = "75"; */
|
|
||||||
"75.title" = "Debug mode (restart required)";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "EXIF Timestamp"; ObjectID = "92"; */
|
|
||||||
"92.title" = "EXIF Timestamp";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Contents"; ObjectID = "93"; */
|
|
||||||
"93.title" = "Contents";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Scan type:"; ObjectID = "94"; */
|
|
||||||
"94.title" = "Scan type:";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Font size:"; ObjectID = "104"; */
|
|
||||||
"104.title" = "Font size:";
|
|
||||||
File diff suppressed because it is too large
Load Diff
70
cocoa/pe/ui/details_panel.py
Normal file
70
cocoa/pe/ui/details_panel.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
ownerclass = 'DetailsPanel'
|
||||||
|
ownerimport = 'DetailsPanel.h'
|
||||||
|
|
||||||
|
result = Panel(593, 398, "Details of Selected File")
|
||||||
|
table = TableView(result)
|
||||||
|
split = SplitView(result, 2, vertical=True)
|
||||||
|
leftSplit, rightSplit = split.subviews
|
||||||
|
selectedLabel = Label(leftSplit, "Selected")
|
||||||
|
selectedImage = ImageView(leftSplit, 'NSApplicationIcon')
|
||||||
|
leftSpinner = ProgressIndicator(leftSplit)
|
||||||
|
referenceLabel = Label(rightSplit, "Reference")
|
||||||
|
referenceImage = ImageView(rightSplit, 'NSApplicationIcon')
|
||||||
|
rightSpinner = ProgressIndicator(rightSplit)
|
||||||
|
|
||||||
|
owner.detailsTable = table
|
||||||
|
owner.dupeImage = selectedImage
|
||||||
|
owner.dupeProgressIndicator = leftSpinner
|
||||||
|
owner.refImage = referenceImage
|
||||||
|
owner.refProgressIndicator = rightSpinner
|
||||||
|
table.dataSource = owner
|
||||||
|
|
||||||
|
result.style = PanelStyle.Utility
|
||||||
|
result.xProportion = 0.6
|
||||||
|
result.yProportion = 0.6
|
||||||
|
result.canMinimize = False
|
||||||
|
result.autosaveName = 'DetailsPanel'
|
||||||
|
result.minSize = Size(451, 240)
|
||||||
|
|
||||||
|
table.allowsColumnReordering = False
|
||||||
|
table.allowsColumnSelection = False
|
||||||
|
table.allowsMultipleSelection = False
|
||||||
|
table.font = Font(FontFamily.System, FontSize.SmallSystem)
|
||||||
|
table.rowHeight = 14
|
||||||
|
table.editable = False
|
||||||
|
col = table.addColumn('0', "Attribute", 70)
|
||||||
|
col.autoResizable = True
|
||||||
|
col = table.addColumn('1', "Selected", 198)
|
||||||
|
col.autoResizable = True
|
||||||
|
col = table.addColumn('2', "Reference", 172)
|
||||||
|
col.autoResizable = True
|
||||||
|
table.height = 165
|
||||||
|
|
||||||
|
sides = [
|
||||||
|
(leftSplit, selectedLabel, selectedImage, leftSpinner),
|
||||||
|
(rightSplit, referenceLabel, referenceImage, rightSpinner),
|
||||||
|
]
|
||||||
|
for subSplit, label, image, spinner in sides:
|
||||||
|
label.alignment = TextAlignment.Center
|
||||||
|
spinner.style = const.NSProgressIndicatorSpinningStyle
|
||||||
|
spinner.controlSize = const.NSSmallControlSize
|
||||||
|
spinner.displayedWhenStopped = False
|
||||||
|
|
||||||
|
label.packToCorner(Pack.UpperLeft, margin=0)
|
||||||
|
label.fill(Pack.Right, margin=0)
|
||||||
|
label.setAnchor(Pack.UpperLeft, growX=True)
|
||||||
|
image.packRelativeTo(label, Pack.Below)
|
||||||
|
image.fill(Pack.LowerRight, margin=0)
|
||||||
|
image.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
spinner.y = label.y
|
||||||
|
spinner.x = subSplit.width - 30
|
||||||
|
spinner.setAnchor(Pack.UpperRight)
|
||||||
|
|
||||||
|
table.packToCorner(Pack.UpperLeft, margin=0)
|
||||||
|
table.fill(Pack.Right, margin=0)
|
||||||
|
table.setAnchor(Pack.UpperLeft, growX=True)
|
||||||
|
|
||||||
|
split.packRelativeTo(table, Pack.Below)
|
||||||
|
split.fill(Pack.LowerRight, margin=0)
|
||||||
|
split.setAnchor(Pack.UpperLeft, growX=True, growY=True)
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "../base/AppDelegate.h"
|
#import "AppDelegateBase.h"
|
||||||
#import "PyDupeGuru.h"
|
#import "PyDupeGuru.h"
|
||||||
|
|
||||||
@interface AppDelegate : AppDelegateBase {}
|
@interface AppDelegate : AppDelegateBase {}
|
||||||
|
|||||||
@@ -16,29 +16,16 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
#import "Consts.h"
|
#import "Consts.h"
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
+ (void)initialize
|
+ (NSDictionary *)defaultPreferences
|
||||||
{
|
{
|
||||||
[super initialize];
|
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary:[super defaultPreferences]];
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
|
||||||
NSMutableDictionary *d = [NSMutableDictionary dictionary];
|
|
||||||
[d setObject:i2n(1) forKey:@"scanType"];
|
[d setObject:i2n(1) forKey:@"scanType"];
|
||||||
[d setObject:i2n(80) forKey:@"minMatchPercentage"];
|
[d setObject:i2n(80) forKey:@"minMatchPercentage"];
|
||||||
[d setObject:i2n(30) forKey:@"smallFileThreshold"];
|
[d setObject:i2n(30) forKey:@"smallFileThreshold"];
|
||||||
[d setObject:i2n(1) forKey:@"recreatePathType"];
|
|
||||||
[d setObject:i2n(11) forKey:TableFontSize];
|
|
||||||
[d setObject:b2n(YES) forKey:@"wordWeighting"];
|
[d setObject:b2n(YES) forKey:@"wordWeighting"];
|
||||||
[d setObject:b2n(NO) forKey:@"matchSimilarWords"];
|
[d setObject:b2n(NO) forKey:@"matchSimilarWords"];
|
||||||
[d setObject:b2n(YES) forKey:@"mixFileKind"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"useRegexpFilter"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"ignoreHardlinkMatches"];
|
|
||||||
[d setObject:b2n(NO) forKey:@"removeEmptyFolders"];
|
|
||||||
[d setObject:b2n(YES) forKey:@"ignoreSmallFiles"];
|
[d setObject:b2n(YES) forKey:@"ignoreSmallFiles"];
|
||||||
[d setObject:b2n(NO) forKey:@"debug"];
|
return d;
|
||||||
[d setObject:[NSArray array] forKey:@"recentDirectories"];
|
|
||||||
[d setObject:[NSArray array] forKey:@"columnsOrder"];
|
|
||||||
[d setObject:[NSDictionary dictionary] forKey:@"columnsWidth"];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:d];
|
|
||||||
[ud registerDefaults:d];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)init
|
- (id)init
|
||||||
|
|||||||
13
cocoa/se/DetailsPanel.h
Normal file
13
cocoa/se/DetailsPanel.h
Normal file
@@ -0,0 +1,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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "DetailsPanelBase.h"
|
||||||
|
|
||||||
|
@interface DetailsPanel : DetailsPanelBase
|
||||||
|
@end
|
||||||
17
cocoa/se/DetailsPanel.m
Normal file
17
cocoa/se/DetailsPanel.m
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
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 "DetailsPanel.h"
|
||||||
|
#import "DetailsPanel_UI.h"
|
||||||
|
|
||||||
|
@implementation DetailsPanel
|
||||||
|
- (NSWindow *)createWindow
|
||||||
|
{
|
||||||
|
return createDetailsPanel_UI(self);
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>English</string>
|
<string>English</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>${EXECUTABLE_NAME}</string>
|
<string>dupeGuru</string>
|
||||||
<key>CFBundleHelpBookFolder</key>
|
<key>CFBundleHelpBookFolder</key>
|
||||||
<string>dupeguru_help</string>
|
<string>dupeguru_help</string>
|
||||||
<key>CFBundleHelpBookName</key>
|
<key>CFBundleHelpBookName</key>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>${PRODUCT_NAME}</string>
|
<string>dupeGuru</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
@@ -26,8 +26,6 @@
|
|||||||
<string>{version}</string>
|
<string>{version}</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>{version}</string>
|
<string>{version}</string>
|
||||||
<key>NSMainNibFile</key>
|
|
||||||
<string>MainMenu</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string>NSApplication</string>
|
<string>NSApplication</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ http://www.hardcoded.net/licenses/bsd_license
|
|||||||
- (void)setScanOptions
|
- (void)setScanOptions
|
||||||
{
|
{
|
||||||
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
|
||||||
[model setScanType:n2b([ud objectForKey:@"scanType"])];
|
[model setScanType:n2i([ud objectForKey:@"scanType"])];
|
||||||
[model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])];
|
[model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])];
|
||||||
[model setWordWeighting:n2b([ud objectForKey:@"wordWeighting"])];
|
[model setWordWeighting:n2b([ud objectForKey:@"wordWeighting"])];
|
||||||
[model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
|
[model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
|
||||||
|
|||||||
@@ -9,12 +9,9 @@ install_gettext_trans_under_cocoa()
|
|||||||
|
|
||||||
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
from cocoa.inter import PySelectableList, PyColumns, PyTable
|
||||||
|
|
||||||
from inter.details_panel import PyDetailsPanel
|
from inter.all import *
|
||||||
from inter.directory_outline import PyDirectoryOutline
|
from inter.app_se import PyDupeGuru
|
||||||
from inter.prioritize_dialog import PyPrioritizeDialog
|
|
||||||
from inter.prioritize_list import PyPrioritizeList
|
# When built under virtualenv, the dependency collector misses this module, so we have to force it
|
||||||
from inter.problem_dialog import PyProblemDialog
|
# to see the module.
|
||||||
from inter.ignore_list_dialog import PyIgnoreListDialog
|
import distutils.sysconfig
|
||||||
from inter.result_table import PyResultTable
|
|
||||||
from inter.stats_label import PyStatsLabel
|
|
||||||
from inter.app_se import PyDupeGuru
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Workspace
|
|
||||||
version = "1.0">
|
|
||||||
<FileRef
|
|
||||||
location = "self:dupeguru.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
|
|
||||||
/* Class = "NSWindow"; title = "dupeGuru Preferences"; ObjectID = "52"; */
|
|
||||||
"52.title" = "dupeGuru Preferences";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "More results"; ObjectID = "74"; */
|
|
||||||
"74.title" = "More results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Fewer results"; ObjectID = "75"; */
|
|
||||||
"75.title" = "Fewer results";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Filter hardness:"; ObjectID = "76"; */
|
|
||||||
"76.title" = "Filter hardness:";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Scan type:"; ObjectID = "77"; */
|
|
||||||
"77.title" = "Scan type:";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Content"; ObjectID = "80"; */
|
|
||||||
"80.title" = "Content";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Filename"; ObjectID = "81"; */
|
|
||||||
"81.title" = "Filename";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Word weighting"; ObjectID = "82"; */
|
|
||||||
"82.title" = "Word weighting";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Can mix file kind"; ObjectID = "83"; */
|
|
||||||
"83.title" = "Can mix file kind";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Reset to Defaults"; ObjectID = "86"; */
|
|
||||||
"86.title" = "Reset to Defaults";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Match similar words"; ObjectID = "87"; */
|
|
||||||
"87.title" = "Match similar words";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Copy and Move:"; ObjectID = "88"; */
|
|
||||||
"88.title" = "Copy and Move:";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate relative path"; ObjectID = "91"; */
|
|
||||||
"91.title" = "Recreate relative path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Recreate absolute path"; ObjectID = "92"; */
|
|
||||||
"92.title" = "Recreate absolute path";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Right in destination"; ObjectID = "93"; */
|
|
||||||
"93.title" = "Right in destination";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "94"; */
|
|
||||||
"94.title" = "Automatically check for updates";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Remove empty folders on delete or move"; ObjectID = "96"; */
|
|
||||||
"96.title" = "Remove empty folders on delete or move";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Ignore files smaller than:"; ObjectID = "97"; */
|
|
||||||
"97.title" = "Ignore files smaller than:";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "KB"; ObjectID = "100"; */
|
|
||||||
"100.title" = "KB";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Basic"; ObjectID = "124"; */
|
|
||||||
"124.label" = "Basic";
|
|
||||||
|
|
||||||
/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "125"; */
|
|
||||||
"125.label" = "Advanced";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Use regular expressions when filtering"; ObjectID = "129"; */
|
|
||||||
"129.title" = "Use regular expressions when filtering";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Custom command (arguments: %d for dupe, %r for ref):"; ObjectID = "134"; */
|
|
||||||
"134.title" = "Custom command (arguments: %d for dupe, %r for ref):";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Ignore duplicates hardlinking to the same file"; ObjectID = "142"; */
|
|
||||||
"142.title" = "Ignore duplicates hardlinking to the same file";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Debug mode (restart required)"; ObjectID = "146"; */
|
|
||||||
"146.title" = "Debug mode (restart required)";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Folders"; ObjectID = "149"; */
|
|
||||||
"149.title" = "Folders";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Font size:"; ObjectID = "155"; */
|
|
||||||
"155.title" = "Font size:";
|
|
||||||
File diff suppressed because it is too large
Load Diff
75
cocoa/wscript
Normal file
75
cocoa/wscript
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path as op
|
||||||
|
|
||||||
|
top = '.'
|
||||||
|
out = 'build'
|
||||||
|
|
||||||
|
def options(opt):
|
||||||
|
opt.load('compiler_c python')
|
||||||
|
opt.add_option('--edition', default='se', help="dupeGuru edition to build (se, me pe)")
|
||||||
|
|
||||||
|
def configure(conf):
|
||||||
|
if conf.options.edition not in ('se', 'me', 'pe'):
|
||||||
|
conf.options.edition = 'se'
|
||||||
|
print("Building dupeGuru {}".format(conf.options.edition.upper()))
|
||||||
|
conf.env.DGEDITION = conf.options.edition
|
||||||
|
# We use clang to compile our app
|
||||||
|
conf.env.CC = 'clang'
|
||||||
|
# WAF has a "pyembed" feature allowing us to automatically find Python and compile by linking
|
||||||
|
# to it. The problem is that because we made a copy of the Python library to mangle with its
|
||||||
|
# "install name", we don't actually want to link to our installed python, but to our mangled
|
||||||
|
# Python. The line below tells the "pyembed" WAF feature to look in ../build for Python.
|
||||||
|
conf.env.LIBPATH_PYEMBED = op.abspath('../build')
|
||||||
|
# I did a lot of fiddling-around, but I didn't find how to tell WAF the Python library name
|
||||||
|
# to look for without making the whole compilation process fail, so I just create a symlink
|
||||||
|
# with the name WAF is looking for.
|
||||||
|
if not op.exists('../build/libpython3.2.dylib'):
|
||||||
|
os.symlink('../build/Python', '../build/libpython3.2.dylib')
|
||||||
|
# The rest is standard WAF code that you can find the the python and macapp demos.
|
||||||
|
conf.load('compiler_c python')
|
||||||
|
conf.check_python_version((3,2,0))
|
||||||
|
conf.check_python_headers()
|
||||||
|
conf.env.FRAMEWORK_COCOA = 'Cocoa'
|
||||||
|
conf.env.ARCH_COCOA = ['i386', 'x86_64']
|
||||||
|
# Add cocoalib dir to the framework search path so we can find Sparkle.
|
||||||
|
conf.env.CFLAGS = ['-F'+op.abspath('../cocoalib')]
|
||||||
|
conf.env.LINKFLAGS = ['-F'+op.abspath('../cocoalib')]
|
||||||
|
|
||||||
|
def build(ctx):
|
||||||
|
# What do we compile?
|
||||||
|
cocoalib_node = ctx.srcnode.find_dir('..').find_dir('cocoalib')
|
||||||
|
cocoalib_folders = ['controllers', 'views']
|
||||||
|
cocoalib_includes = [cocoalib_node] + [cocoalib_node.find_dir(folder) for folder in cocoalib_folders]
|
||||||
|
cocoalib_uses = ['NSEventAdditions', 'Dialogs', 'HSAboutBox', 'HSFairwareReminder', 'Utils',
|
||||||
|
'HSPyUtil', 'ProgressController', 'HSRecentFiles', 'HSQuicklook', 'ValueTransformers',
|
||||||
|
'NSImageAdditions', 'NSNotificationAdditions',
|
||||||
|
'views/HSTableView', 'views/HSOutlineView', 'views/NSIndexPathAdditions',
|
||||||
|
'views/NSTableViewAdditions',
|
||||||
|
'controllers/HSColumns', 'controllers/HSGUIController', 'controllers/HSTable',
|
||||||
|
'controllers/HSOutline', 'controllers/HSPopUpList', 'controllers/HSSelectableList']
|
||||||
|
cocoalib_src = [cocoalib_node.find_node(usename + '.m') for usename in cocoalib_uses] + cocoalib_node.ant_glob('autogen/*.m')
|
||||||
|
project_folders = ['autogen', 'base', ctx.env.DGEDITION]
|
||||||
|
project_src = sum([ctx.srcnode.ant_glob('%s/*.m' % folder) for folder in project_folders], [])
|
||||||
|
|
||||||
|
# Compile
|
||||||
|
ctx.program(
|
||||||
|
# "pyembed" takes care of the include and linking stuff to compile an app that embed Python.
|
||||||
|
features = 'c cprogram pyembed',
|
||||||
|
target = ctx.bldnode.make_node("dupeGuru"),
|
||||||
|
source = cocoalib_src + project_src,
|
||||||
|
includes = project_folders + cocoalib_includes,
|
||||||
|
use = 'COCOA',
|
||||||
|
# Because our python lib's install name is "@rpath/Python", we need to set the executable's
|
||||||
|
# rpath. Fortunately, WAF supports it and we just need to supply the "rpath" argument.
|
||||||
|
rpath = '@executable_path/../Frameworks',
|
||||||
|
framework = ['Sparkle', 'Quartz'],
|
||||||
|
)
|
||||||
|
|
||||||
|
from waflib import TaskGen
|
||||||
|
@TaskGen.extension('.m')
|
||||||
|
def m_hook(self, node):
|
||||||
|
"""Alias .m files to be compiled the same as .c files, gcc will do the right thing."""
|
||||||
|
return self.create_compiled_task('c', node)
|
||||||
|
|
||||||
90
core/app.py
90
core/app.py
@@ -12,9 +12,9 @@ import logging
|
|||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
import shutil
|
||||||
|
|
||||||
from send2trash import send2trash
|
from send2trash import send2trash
|
||||||
from hscommon import io
|
|
||||||
from hscommon.reg import RegistrableApplication
|
from hscommon.reg import RegistrableApplication
|
||||||
from hscommon.notify import Broadcaster
|
from hscommon.notify import Broadcaster
|
||||||
from hscommon.path import Path
|
from hscommon.path import Path
|
||||||
@@ -24,6 +24,7 @@ from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_d
|
|||||||
from hscommon.trans import tr
|
from hscommon.trans import tr
|
||||||
|
|
||||||
from . import directories, results, scanner, export, fs
|
from . import directories, results, scanner, export, fs
|
||||||
|
from .gui.deletion_options import DeletionOptions
|
||||||
from .gui.details_panel import DetailsPanel
|
from .gui.details_panel import DetailsPanel
|
||||||
from .gui.directory_tree import DirectoryTree
|
from .gui.directory_tree import DirectoryTree
|
||||||
from .gui.ignore_list_dialog import IgnoreListDialog
|
from .gui.ignore_list_dialog import IgnoreListDialog
|
||||||
@@ -88,6 +89,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
# show_results_window()
|
# show_results_window()
|
||||||
# show_problem_dialog()
|
# show_problem_dialog()
|
||||||
# select_dest_folder(prompt: str) --> str
|
# select_dest_folder(prompt: str) --> str
|
||||||
|
# select_dest_file(prompt: str, ext: str) --> str
|
||||||
|
|
||||||
# in fairware prompts, we don't mention the edition, it's too long.
|
# in fairware prompts, we don't mention the edition, it's too long.
|
||||||
PROMPT_NAME = "dupeGuru"
|
PROMPT_NAME = "dupeGuru"
|
||||||
@@ -118,6 +120,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
self.ignore_list_dialog = IgnoreListDialog(self)
|
self.ignore_list_dialog = IgnoreListDialog(self)
|
||||||
self.stats_label = StatsLabel(self)
|
self.stats_label = StatsLabel(self)
|
||||||
self.result_table = self._create_result_table()
|
self.result_table = self._create_result_table()
|
||||||
|
self.deletion_options = DeletionOptions()
|
||||||
children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel]
|
children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel]
|
||||||
for child in children:
|
for child in children:
|
||||||
child.connect()
|
child.connect()
|
||||||
@@ -155,23 +158,31 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
return len([dupe for dupe in group.dupes if self.results.is_marked(dupe)])
|
return len([dupe for dupe in group.dupes if self.results.is_marked(dupe)])
|
||||||
return cmp_value(group.ref, key)
|
return cmp_value(group.ref, key)
|
||||||
|
|
||||||
def _do_delete(self, j, replace_with_hardlinks):
|
def _do_delete(self, j, link_deleted, use_hardlinks, direct_deletion):
|
||||||
def op(dupe):
|
def op(dupe):
|
||||||
j.add_progress()
|
j.add_progress()
|
||||||
return self._do_delete_dupe(dupe, replace_with_hardlinks)
|
return self._do_delete_dupe(dupe, link_deleted, use_hardlinks, direct_deletion)
|
||||||
|
|
||||||
j.start_job(self.results.mark_count)
|
j.start_job(self.results.mark_count)
|
||||||
self.results.perform_on_marked(op, True)
|
self.results.perform_on_marked(op, True)
|
||||||
|
|
||||||
def _do_delete_dupe(self, dupe, replace_with_hardlinks):
|
def _do_delete_dupe(self, dupe, link_deleted, use_hardlinks, direct_deletion):
|
||||||
if not io.exists(dupe.path):
|
if not dupe.path.exists():
|
||||||
return
|
return
|
||||||
logging.debug("Sending '%s' to trash", dupe.path)
|
logging.debug("Sending '%s' to trash", dupe.path)
|
||||||
send2trash(str(dupe.path)) # Raises OSError when there's a problem
|
str_path = str(dupe.path)
|
||||||
if replace_with_hardlinks:
|
if direct_deletion:
|
||||||
|
if op.isdir(str_path):
|
||||||
|
shutil.rmtree(str_path)
|
||||||
|
else:
|
||||||
|
os.remove(str_path)
|
||||||
|
else:
|
||||||
|
send2trash(str_path) # Raises OSError when there's a problem
|
||||||
|
if link_deleted:
|
||||||
group = self.results.get_group_of_duplicate(dupe)
|
group = self.results.get_group_of_duplicate(dupe)
|
||||||
ref = group.ref
|
ref = group.ref
|
||||||
os.link(str(ref.path), str(dupe.path))
|
linkfunc = os.link if use_hardlinks else os.symlink
|
||||||
|
linkfunc(str(ref.path), str_path)
|
||||||
self.clean_empty_dirs(dupe.path[:-1])
|
self.clean_empty_dirs(dupe.path[:-1])
|
||||||
|
|
||||||
def _create_file(self, path):
|
def _create_file(self, path):
|
||||||
@@ -189,6 +200,19 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
except EnvironmentError:
|
except EnvironmentError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _get_export_data(self):
|
||||||
|
columns = [col for col in self.result_table.columns.ordered_columns
|
||||||
|
if col.visible and col.name != 'marked']
|
||||||
|
colnames = [col.display for col in columns]
|
||||||
|
rows = []
|
||||||
|
for group_id, group in enumerate(self.results.groups):
|
||||||
|
for dupe in group:
|
||||||
|
data = self.get_display_info(dupe, group)
|
||||||
|
row = [data[col.name] for col in columns]
|
||||||
|
row.insert(0, group_id)
|
||||||
|
rows.append(row)
|
||||||
|
return colnames, rows
|
||||||
|
|
||||||
def _results_changed(self):
|
def _results_changed(self):
|
||||||
self.selected_dupes = [d for d in self.selected_dupes
|
self.selected_dupes = [d for d in self.selected_dupes
|
||||||
if self.results.get_group_of_duplicate(d) is not None]
|
if self.results.get_group_of_duplicate(d) is not None]
|
||||||
@@ -228,7 +252,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
result = []
|
result = []
|
||||||
for file in files:
|
for file in files:
|
||||||
try:
|
try:
|
||||||
inode = io.stat(file.path).st_ino
|
inode = file.path.stat().st_ino
|
||||||
except OSError:
|
except OSError:
|
||||||
# The file was probably deleted or something
|
# The file was probably deleted or something
|
||||||
continue
|
continue
|
||||||
@@ -255,11 +279,10 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
try:
|
try:
|
||||||
self.directories.add_path(Path(d))
|
self.directories.add_path(Path(d))
|
||||||
self.notify('directories_changed')
|
self.notify('directories_changed')
|
||||||
return 0
|
|
||||||
except directories.AlreadyThereError:
|
except directories.AlreadyThereError:
|
||||||
return 1
|
self.view.show_message(tr("'{}' already is in the list.").format(d))
|
||||||
except directories.InvalidPathError:
|
except directories.InvalidPathError:
|
||||||
return 2
|
self.view.show_message(tr("'{}' does not exist.").format(d))
|
||||||
|
|
||||||
def add_selected_to_ignore_list(self):
|
def add_selected_to_ignore_list(self):
|
||||||
dupes = self.without_ref(self.selected_dupes)
|
dupes = self.without_ref(self.selected_dupes)
|
||||||
@@ -300,8 +323,8 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
if dest_type == DestType.Relative:
|
if dest_type == DestType.Relative:
|
||||||
source_base = source_base[location_path:]
|
source_base = source_base[location_path:]
|
||||||
dest_path = dest_path + source_base
|
dest_path = dest_path + source_base
|
||||||
if not io.exists(dest_path):
|
if not dest_path.exists():
|
||||||
io.makedirs(dest_path)
|
dest_path.makedirs()
|
||||||
# Add filename to dest_path. For file move/copy, it's not required, but for folders, yes.
|
# Add filename to dest_path. For file move/copy, it's not required, but for folders, yes.
|
||||||
dest_path = dest_path + source_path[-1]
|
dest_path = dest_path + source_path[-1]
|
||||||
logging.debug("Copy/Move operation from '%s' to '%s'", source_path, dest_path)
|
logging.debug("Copy/Move operation from '%s' to '%s'", source_path, dest_path)
|
||||||
@@ -334,32 +357,29 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
jobid = JobType.Copy if copy else JobType.Move
|
jobid = JobType.Copy if copy else JobType.Move
|
||||||
self.view.start_job(jobid, do)
|
self.view.start_job(jobid, do)
|
||||||
|
|
||||||
def delete_marked(self, replace_with_hardlinks=False):
|
def delete_marked(self):
|
||||||
if not self._check_demo():
|
if not self._check_demo():
|
||||||
return
|
return
|
||||||
if not self.results.mark_count:
|
if not self.results.mark_count:
|
||||||
self.view.show_message(MSG_NO_MARKED_DUPES)
|
self.view.show_message(MSG_NO_MARKED_DUPES)
|
||||||
return
|
return
|
||||||
if replace_with_hardlinks:
|
if not self.deletion_options.show(self.results.mark_count):
|
||||||
msg = tr("You are about to send %d files to Trash (and hardlink them afterwards). Continue?")
|
|
||||||
else:
|
|
||||||
msg = tr("You are about to send %d files to Trash. Continue?")
|
|
||||||
if not self.view.ask_yes_no(msg % self.results.mark_count):
|
|
||||||
return
|
return
|
||||||
self.view.start_job(JobType.Delete, self._do_delete, args=[replace_with_hardlinks])
|
args = [self.deletion_options.link_deleted, self.deletion_options.use_hardlinks,
|
||||||
|
self.deletion_options.direct]
|
||||||
|
logging.debug("Starting deletion job with args %r", args)
|
||||||
|
self.view.start_job(JobType.Delete, self._do_delete, args=args)
|
||||||
|
|
||||||
def export_to_xhtml(self):
|
def export_to_xhtml(self):
|
||||||
columns = [col for col in self.result_table.columns.ordered_columns
|
colnames, rows = self._get_export_data()
|
||||||
if col.visible and col.name != 'marked']
|
export_path = export.export_to_xhtml(colnames, rows)
|
||||||
colnames = [col.display for col in columns]
|
self.view.open_path(export_path)
|
||||||
rows = []
|
|
||||||
for group in self.results.groups:
|
def export_to_csv(self):
|
||||||
for dupe in group:
|
dest_file = self.view.select_dest_file(tr("Select a destination for your exported CSV"), 'csv')
|
||||||
data = self.get_display_info(dupe, group)
|
if dest_file:
|
||||||
row = [data[col.name] for col in columns]
|
colnames, rows = self._get_export_data()
|
||||||
row.insert(0, dupe is not group.ref)
|
export.export_to_csv(dest_file, colnames, rows)
|
||||||
rows.append(row)
|
|
||||||
return export.export_to_xhtml(colnames, rows)
|
|
||||||
|
|
||||||
def get_display_info(self, dupe, group, delta=False):
|
def get_display_info(self, dupe, group, delta=False):
|
||||||
def empty_data():
|
def empty_data():
|
||||||
@@ -494,9 +514,13 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def reprioritize_groups(self, sort_key):
|
def reprioritize_groups(self, sort_key):
|
||||||
|
count = 0
|
||||||
for group in self.results.groups:
|
for group in self.results.groups:
|
||||||
group.prioritize(key_func=sort_key)
|
if group.prioritize(key_func=sort_key):
|
||||||
|
count += 1
|
||||||
self._results_changed()
|
self._results_changed()
|
||||||
|
msg = tr("{} duplicate groups were changed by the re-prioritization.").format(count)
|
||||||
|
self.view.show_message(msg)
|
||||||
|
|
||||||
def reveal_selected(self):
|
def reveal_selected(self):
|
||||||
if self.selected_dupes:
|
if self.selected_dupes:
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ from xml.etree import ElementTree as ET
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from jobprogress import job
|
from jobprogress import job
|
||||||
from hscommon import io
|
|
||||||
from hscommon.path import Path
|
from hscommon.path import Path
|
||||||
from hscommon.util import FileOrPath
|
from hscommon.util import FileOrPath
|
||||||
|
|
||||||
@@ -73,9 +72,9 @@ class Directories:
|
|||||||
file.is_ref = state == DirectoryState.Reference
|
file.is_ref = state == DirectoryState.Reference
|
||||||
filepaths.add(file.path)
|
filepaths.add(file.path)
|
||||||
yield file
|
yield file
|
||||||
subpaths = [from_path + name for name in io.listdir(from_path)]
|
subpaths = [from_path + name for name in from_path.listdir()]
|
||||||
# it's possible that a folder (bundle) gets into the file list. in that case, we don't want to recurse into it
|
# it's possible that a folder (bundle) gets into the file list. in that case, we don't want to recurse into it
|
||||||
subfolders = [p for p in subpaths if not io.islink(p) and io.isdir(p) and p not in filepaths]
|
subfolders = [p for p in subpaths if not p.islink() and p.isdir() and p not in filepaths]
|
||||||
for subfolder in subfolders:
|
for subfolder in subfolders:
|
||||||
for file in self._get_files(subfolder, j):
|
for file in self._get_files(subfolder, j):
|
||||||
yield file
|
yield file
|
||||||
@@ -106,7 +105,7 @@ class Directories:
|
|||||||
"""
|
"""
|
||||||
if path in self:
|
if path in self:
|
||||||
raise AlreadyThereError()
|
raise AlreadyThereError()
|
||||||
if not io.exists(path):
|
if not path.exists():
|
||||||
raise InvalidPathError()
|
raise InvalidPathError()
|
||||||
self._dirs = [p for p in self._dirs if p not in path]
|
self._dirs = [p for p in self._dirs if p not in path]
|
||||||
self._dirs.append(path)
|
self._dirs.append(path)
|
||||||
@@ -115,7 +114,7 @@ class Directories:
|
|||||||
def get_subfolders(path):
|
def get_subfolders(path):
|
||||||
"""returns a sorted list of paths corresponding to subfolders in `path`"""
|
"""returns a sorted list of paths corresponding to subfolders in `path`"""
|
||||||
try:
|
try:
|
||||||
names = [name for name in io.listdir(path) if io.isdir(path + name)]
|
names = [name for name in path.listdir() if (path + name).isdir()]
|
||||||
names.sort(key=lambda x:x.lower())
|
names.sort(key=lambda x:x.lower())
|
||||||
return [path + name for name in names]
|
return [path + name for name in names]
|
||||||
except EnvironmentError:
|
except EnvironmentError:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user