1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-25 08:01:39 +00:00

Compare commits

...

72 Commits

Author SHA1 Message Date
Virgil Dupras
d885bf0b18 Fixed tests. 2012-01-23 15:09:13 -05:00
Virgil Dupras
5f7e7fbb13 pe v2.4.1 2012-01-23 14:39:41 -05:00
Virgil Dupras
757f8569e6 Added "crash" terminology notice in changelog. 2012-01-23 14:38:15 -05:00
Virgil Dupras
bf86f56371 Added tag me6.2.1 for changeset 6a08c1205dfe 2012-01-20 12:31:33 -05:00
Virgil Dupras
7d0948cd23 me v6.2.1 2012-01-20 11:42:28 -05:00
Virgil Dupras
c4824b0f16 [#185 state:fixed] Made an iPhoto-appscript error a bit friendlier. 2012-01-20 11:34:46 -05:00
Virgil Dupras
ea32af04fb Fixed cocoa dev build. 2012-01-18 12:33:54 -05:00
Virgil Dupras
e519e41e42 Ukrainian help file by Yuri Petrashko. 2012-01-17 20:51:16 -05:00
Virgil Dupras
c937f2b20f Ukrainian localization by Yuri Petrashko. 2012-01-17 20:15:09 -05:00
Virgil Dupras
fc477ab3b5 Added tag se3.3.2 for changeset 2a96f2fb3ddb 2012-01-16 14:41:00 -05:00
Virgil Dupras
c53ddcdee1 Fixed crash under Cocoa when dupeGuru was launched from a path containing non-ascii characters. 2012-01-16 14:20:51 -05:00
Virgil Dupras
9e668b11b8 se v3.3.2 2012-01-16 13:09:20 -05:00
Virgil Dupras
f53a4c261c Updated requirements for Cocoa. 2012-01-16 13:02:40 -05:00
Virgil Dupras
9a2554d24e Merge with objp branch. 2012-01-16 12:52:50 -05:00
Virgil Dupras
b9ac135b89 Fixed a crash on sorting by dimensions (in PE) while being in dupesonly/delta mode. 2012-01-16 12:00:14 -05:00
Virgil Dupras
235d3ae521 Fixed a crash under Qt on Export to HTML. 2012-01-16 11:52:51 -05:00
Virgil Dupras
a487e83f3c Converted ME and PE cocoa projects to objp.
--HG--
branch : objp
rename : cocoa/se/main.m => cocoa/base/main.m
2012-01-16 10:30:45 -05:00
Virgil Dupras
4aaff8ffb1 Adapted qt layer to recent changes to the core (core initialization and core connection).
--HG--
branch : objp
2012-01-16 09:29:57 -05:00
Virgil Dupras
302050b2d6 Delegate model instantiation to HSGUIController where possible.
--HG--
branch : objp
2012-01-15 18:07:32 -05:00
Virgil Dupras
1b571f6fd2 Create the extra fairware reminder on-the-fly rather than on launch time.
--HG--
branch : objp
2012-01-15 17:31:15 -05:00
Virgil Dupras
baa2177439 Fixed a bug where re-prioritization criteria list would initially be empty.
That was because the dialog was created on launch time rather than on-the-fly.

--HG--
branch : objp
2012-01-15 17:24:30 -05:00
Virgil Dupras
29796e87b7 Put all cocoa callback views in the same extension module.
--HG--
branch : objp
2012-01-15 11:49:04 -05:00
Virgil Dupras
017e483b5a Re-added error handling.
--HG--
branch : objp
2012-01-15 11:00:34 -05:00
Virgil Dupras
7a167208d0 Allow cocoa dev builds again.
--HG--
branch : objp
2012-01-13 17:03:00 -05:00
Virgil Dupras
475f2c7238 Fixed PyDupeGuru which didn't have its callback set.
--HG--
branch : objp
2012-01-13 17:02:41 -05:00
Virgil Dupras
9392f818cc Pushed connect() calls in objc into the core.
--HG--
branch : objp
2012-01-13 16:34:21 -05:00
Virgil Dupras
58347bc36f Removed view arguments from core.gui classes's init methods.
--HG--
branch : objp
2012-01-13 16:14:06 -05:00
Virgil Dupras
55db21f3e0 Removed temporary objp conversion hacks.
--HG--
branch : objp
2012-01-13 15:25:34 -05:00
Virgil Dupras
950cd0c341 Completed the conversion wo objp with the conversion of PyDupeGuru. I had to temporarily disable error handling though.
--HG--
branch : objp
2012-01-13 14:43:43 -05:00
Virgil Dupras
937ea73c87 Converted ProblemDialog to objp.
--HG--
branch : objp
2012-01-13 12:19:23 -05:00
Virgil Dupras
7bce70c128 Converted ResultsTable to objp.
--HG--
branch : objp
2012-01-13 11:49:34 -05:00
Virgil Dupras
f9ced08e6d Fixed the mess I had to introduce earlier to make selectable list work by using objp's new inheritance capabilities.
--HG--
branch : objp
2012-01-13 10:20:46 -05:00
Virgil Dupras
4c8ce4b52d Converted the prioritize dialog to objp. A bit hackish though. Refactorings required before going further.
--HG--
branch : objp
2012-01-12 17:40:23 -05:00
Virgil Dupras
0d78201548 Comverted DirectoryOutline to objp. I converted HSColumns and I realized at the end that I didn't need to do it yet, but well, it will be done for ResultsTable.
--HG--
branch : objp
2012-01-12 15:19:40 -05:00
Virgil Dupras
45d4915d88 Converted objp code to 2-steps instantiation.
--HG--
branch : objp
2012-01-12 14:23:10 -05:00
Virgil Dupras
a699a2ef45 Converted .h view objp bridge interfaces to python ones. It simplifies them and allows for subclassing.
--HG--
branch : objp
2012-01-12 12:34:20 -05:00
Virgil Dupras
f6dd1a6a42 Pushed common py wrapper creation code to cocoalib.
--HG--
branch : objp
2012-01-12 10:23:31 -05:00
Virgil Dupras
e6819781f6 Converted details_panel to objp.
--HG--
branch : objp
2012-01-12 09:41:03 -05:00
Virgil Dupras
12467c9493 Converted extra_fairware_reminder to objp.
--HG--
branch : objp
2012-01-11 15:55:25 -05:00
Virgil Dupras
0c7d73854d Converted stats_label to objp.
--HG--
branch : objp
2012-01-11 15:14:59 -05:00
Virgil Dupras
a7eeb7db89 Directly embed python rather than going through a plugin.
--HG--
branch : objp
2012-01-11 12:18:03 -05:00
Virgil Dupras
989026051c Converted PyStatsLabel to a core instance mode.
--HG--
branch : objp
2012-01-09 11:15:20 -05:00
Virgil Dupras
56fd94e205 Added tag pe2.4.0 for changeset 8178bda48324 2012-01-06 16:49:03 -05:00
Virgil Dupras
c8e00cf0f7 Tweaked localized help files. 2012-01-06 15:40:21 -05:00
Virgil Dupras
0cca745d0d pe v2.4.0 2012-01-06 12:29:40 -05:00
Virgil Dupras
80043ccbea Added link to russian help document in english help index page. 2012-01-06 12:25:32 -05:00
Virgil Dupras
d62bfac95e Merge with objp branch. 2012-01-05 17:20:02 -05:00
Virgil Dupras
f636333938 Simplified the dev cocoa build process.
--HG--
branch : objp
2012-01-05 17:08:56 -05:00
Virgil Dupras
01f1e5e46e Moved hscommon.cocoa to cocoalib.
--HG--
branch : objp
2012-01-05 16:57:31 -05:00
Virgil Dupras
7ce72b1998 Adapted build script to changes in hscommon's CocoaProxy and objp.
--HG--
branch : objp
2012-01-05 14:12:52 -05:00
Virgil Dupras
c4f95a4901 Pushed LANGNAMES (and their localizations) from dupeGuru to qtlib. 2012-01-03 17:03:53 -05:00
Virgil Dupras
5b0d9f311c Added Russian localization for the help file by Igor Pavlov. 2012-01-03 15:35:17 -05:00
Virgil Dupras
11d8f824e9 Added Russian localization by Igor Pavlov. 2012-01-03 15:03:10 -05:00
Virgil Dupras
ceaf2ee4ba Fixed bogus imports.
--HG--
branch : objp
2011-12-28 15:04:42 -05:00
Virgil Dupras
3b80de869a Replaced objcmin with objp-based proxy.
--HG--
branch : objp
2011-12-28 14:51:33 -05:00
Virgil Dupras
08813ce39c Added Armenian help file translation by Hrant Ohanyan. 2011-12-19 16:02:47 -05:00
Virgil Dupras
478f462ecc Updated subrepos 2011-12-12 14:14:13 -05:00
Virgil Dupras
be53b6de76 Fixed Clear Picture Cache action under Qt which was broken. 2011-12-12 13:37:45 -05:00
Virgil Dupras
ca602480d9 Added Armenian loc by Hrant Ohanyan. Also, fixed the dgpe Cocoa project which was broken. 2011-12-08 11:06:25 -05:00
Virgil Dupras
185cdbb6fa Added tag me6.2.0 for changeset 015ba7e2c10d 2011-12-07 16:48:51 -05:00
Virgil Dupras
2d4903da26 Fixed the Qt-marked-column-deletion hack on ME, it was performed on SE columns instead. 2011-12-07 16:03:14 -05:00
Virgil Dupras
98954bd582 Added CFBundleShortVersionString to Cocoa's Info.plist. 2011-12-07 15:26:24 -05:00
Virgil Dupras
f862f32fb4 me v6.2.0 2011-12-07 15:12:38 -05:00
Virgil Dupras
804a5a1bbf Fixed ME project and columns under Cocoa. 2011-12-07 15:09:29 -05:00
Virgil Dupras
f004535820 Merge heads. 2011-12-07 12:06:54 -05:00
Virgil Dupras
2abd932709 Updated jobprogress requirement. 2011-12-07 12:05:22 -05:00
Virgil Dupras
2a78b8ce41 Added a startup warning message about wrong locale (causing surrogate-type-thing crashes on Linux). 2011-12-07 12:04:02 -05:00
Virgil Dupras
2301082307 Added tag se3.3.1 for changeset 6e3379be6821 2011-12-02 11:41:34 -05:00
Virgil Dupras
168546608d se v3.3.1 2011-12-02 10:59:44 -05:00
Virgil Dupras
27c1a03496 Updated qtlib. 2011-12-02 10:54:40 -05:00
Virgil Dupras
d382cec0fe Added an install destination in Cocoa projects because the built product location changed with XCode 4.2 and it became complicated, in build/package scripts, to locate it. 2011-12-02 10:48:59 -05:00
Virgil Dupras
c5b7f6b3d5 Added tag se3.3.0 for changeset 9ea9af1b886c 2011-11-30 16:16:30 -05:00
172 changed files with 7797 additions and 1840 deletions

View File

@@ -6,6 +6,7 @@ run.py
*.so *.so
*.mo *.mo
*.pyd *.pyd
.tm_*
*.xcodeproj/xcuserdata *.xcodeproj/xcuserdata
*.xcodeproj/project.xcworkspace/xcuserdata *.xcodeproj/project.xcworkspace/xcuserdata
conf.json conf.json
@@ -13,18 +14,21 @@ build
dist dist
install install
installer_tmp-cache installer_tmp-cache
cocoa/autogen
cocoa/*/Info.plist cocoa/*/Info.plist
cocoa/*/build cocoa/*/build
cocoa/*/*.app
cocoa/*/dg_cocoa.plugin cocoa/*/dg_cocoa.plugin
cocoa/*/fr.lproj/*.xib cocoa/*/fr.lproj/*.xib
cocoa/*/de.lproj/*.xib cocoa/*/de.lproj/*.xib
cocoa/*/zh_CN.lproj/*.xib cocoa/*/zh_CN.lproj/*.xib
cocoa/*/cs.lproj/*.xib cocoa/*/cs.lproj/*.xib
cocoa/*/it.lproj/*.xib cocoa/*/it.lproj/*.xib
# We keep old strings files in the repo for a while to be sure that auto-generated strings work
# fine, but we'll eventually only have en.lproj in the repo.
hy.lproj
ru.lproj
uk.lproj
qt/base/*_rc.py qt/base/*_rc.py
qt/lang/fr.qm
qt/lang/en.qm
qt/lang/de.qm
qt/lang/zh.qm
help/*/conf.py help/*/conf.py
help/*/changelog.rst help/*/changelog.rst

View File

@@ -60,3 +60,9 @@ a2f7b7302e178f08725a6404ddc28464409510b1 se3.2.0
0fd77be57ff716d5c93232e829dc02acec036d7c se3.2.1 0fd77be57ff716d5c93232e829dc02acec036d7c se3.2.1
3dd08060135b0b9cef70b6f5a81f191ea339c8d5 me6.1.1 3dd08060135b0b9cef70b6f5a81f191ea339c8d5 me6.1.1
4e6cbef6bcdfcc0e56ff9690fbfe1cac1f4b1b09 pe2.3.0 4e6cbef6bcdfcc0e56ff9690fbfe1cac1f4b1b09 pe2.3.0
9ea9af1b886cd1adc4f42fd2276cc2b38376eab0 se3.3.0
6e3379be6821bb36d7f0877a17dd6c07aa037b0a se3.3.1
015ba7e2c10d09afb944f387c2a9c97f7eff7571 me6.2.0
8178bda48324461a17118c98634241952c074f29 pe2.4.0
2a96f2fb3ddb6f1e0ae87951586733fc3e4a28a0 se3.3.2
6a08c1205dfe5e537e5c2dc99d05e05d1d3928f6 me6.2.1

6
README
View File

@@ -29,7 +29,7 @@ General dependencies
- Python 3.2 (http://www.python.org) - Python 3.2 (http://www.python.org)
- Send2Trash3k (http://hg.hardcoded.net/send2trash) - Send2Trash3k (http://hg.hardcoded.net/send2trash)
- hsaudiotag3k 1.1.0 (for ME) (http://hg.hardcoded.net/hsaudiotag) - hsaudiotag3k 1.1.0 (for ME) (http://hg.hardcoded.net/hsaudiotag)
- jobprogress 1.0.2 (http://hg.hardcoded.net/jobprogress) - jobprogress 1.0.3 (http://hg.hardcoded.net/jobprogress)
- Sphinx 1.1 (http://sphinx.pocoo.org/) - Sphinx 1.1 (http://sphinx.pocoo.org/)
- polib 0.7.0 (http://bitbucket.org/izi/polib) - polib 0.7.0 (http://bitbucket.org/izi/polib)
- pytest 2.0.0, to run unit tests. (http://pytest.org/) - pytest 2.0.0, to run unit tests. (http://pytest.org/)
@@ -39,8 +39,8 @@ OS X prerequisites
- XCode 4.1 - XCode 4.1
- Sparkle (http://sparkle.andymatuschak.org/) - Sparkle (http://sparkle.andymatuschak.org/)
- PyObjC 2.3 (http://pyobjc.sourceforge.net/) - objp 1.1.0 (http://bitbucket.org/hsoft/objp)
- pluginbuilder 1.0.1 (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/)
Windows prerequisites Windows prerequisites

120
build.py
View File

@@ -6,18 +6,20 @@
# which should be included with this package. The terms are also available at # 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 sys
import os import os
import os.path as op import os.path as op
from optparse import OptionParser from optparse import OptionParser
import shutil import shutil
import json import json
import importlib
from setuptools import setup from setuptools import setup, Extension
from distutils.extension import 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) get_module_version, build_all_cocoa_locs, move_all, copy_sysconfig_files_for_embed, copy_all,
move)
from hscommon import loc from hscommon import loc
def parse_args(): def parse_args():
@@ -29,6 +31,8 @@ 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',
help="Build only Cocoa modules")
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',
@@ -37,33 +41,32 @@ def parse_args():
return options return options
def build_cocoa(edition, dev): def build_cocoa(edition, dev):
from pluginbuilder import build_plugin build_cocoa_proxy_module()
print("Building dg_cocoa.plugin") build_cocoa_bridging_interfaces(edition)
if dev: print("Building the cocoa layer")
tocopy = ['cocoa/inter'] from pluginbuilder import copy_embeddable_python_dylib, get_python_header_folder, collect_dependencies
else: copy_embeddable_python_dylib('build')
specific_packages = { if not op.exists('build/PythonHeaders'):
'se': ['core_se'], os.symlink(get_python_header_folder(), 'build/PythonHeaders')
'me': ['core_me'], if not op.exists('build/py'):
'pe': ['core_pe'], os.mkdir('build/py')
}[edition]
tocopy = ['core', 'hscommon', 'cocoa/inter'] + specific_packages
copy_packages(tocopy, 'build')
cocoa_project_path = 'cocoa/{0}'.format(edition) 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')
os.chdir('build') specific_packages = {
# We have to exclude PyQt4 specifically because it's conditionally imported in hscommon.trans 'se': ['core_se'],
build_plugin('dg_cocoa.py', excludes=['PyQt4'], alias=dev) 'me': ['core_me'],
os.chdir('..') 'pe': ['core_pe'],
pluginpath = op.join(cocoa_project_path, 'dg_cocoa.plugin') }[edition]
if op.exists(pluginpath): tocopy = ['core', 'hscommon', 'cocoa/inter', 'cocoalib/cocoa'] + specific_packages
shutil.rmtree(pluginpath) copy_packages(tocopy, 'build')
shutil.move('build/dist/dg_cocoa.plugin', pluginpath) sys.path.insert(0, 'build')
collect_dependencies('build/dg_cocoa.py', 'build/py', excludes=['PyQt4'])
del sys.path[0]
if dev: if dev:
# In alias mode, the tweakings we do to the pythonpath aren't counted in. We have to copy_packages(tocopy, 'build/py', create_links=True)
# manually put a .pth in the plugin # Views are not referenced by python code, so they're not found by the collector.
pthpath = op.join(pluginpath, 'Contents/Resources/dev.pth') copy_all('build/inter/*.so', 'build/py/inter')
open(pthpath, 'w').write(op.abspath('.')) copy_sysconfig_files_for_embed('build/py')
os.chdir(cocoa_project_path) os.chdir(cocoa_project_path)
print('Generating Info.plist') print('Generating Info.plist')
app_version = get_module_version('core_{}'.format(edition)) app_version = get_module_version('core_{}'.format(edition))
@@ -78,12 +81,11 @@ def build_cocoa(edition, dev):
os.system('xcodebuild {0}'.format(args)) os.system('xcodebuild {0}'.format(args))
os.chdir('../..') os.chdir('../..')
print("Creating the run.py file") print("Creating the run.py file")
subfolder = 'dev' if dev else 'release'
app_path = { app_path = {
'se': 'cocoa/se/build/{0}/dupeGuru.app', 'se': 'cocoa/se/dupeGuru.app',
'me': 'cocoa/me/build/{0}/dupeGuru\\ ME.app', 'me': 'cocoa/me/dupeGuru\\ ME.app',
'pe': 'cocoa/pe/build/{0}/dupeGuru\\ PE.app', 'pe': 'cocoa/pe/dupeGuru\\ PE.app',
}[edition].format(subfolder) }[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_path)
open('run.py', 'wt').write(run_contents) open('run.py', 'wt').write(run_contents)
@@ -162,6 +164,57 @@ def build_mergepot():
print("Updating .po files using .pot files") print("Updating .po files using .pot files")
loc.merge_pots_into_pos('locale') loc.merge_pots_into_pos('locale')
loc.merge_pots_into_pos(op.join('hscommon', 'locale')) loc.merge_pots_into_pos(op.join('hscommon', 'locale'))
loc.merge_pots_into_pos(op.join('qtlib', 'locale'))
def build_cocoa_ext(extname, dest, source_files, extra_frameworks=(), extra_includes=()):
extra_link_args = ["-framework", "CoreFoundation", "-framework", "Foundation"]
for extra in extra_frameworks:
extra_link_args += ['-framework', extra]
ext = Extension(extname, source_files, extra_link_args=extra_link_args, include_dirs=extra_includes)
setup(script_args=['build_ext', '--inplace'], ext_modules=[ext])
fn = extname + '.so'
assert op.exists(fn)
move(fn, op.join(dest, fn))
def build_cocoa_proxy_module():
print("Building Cocoa Proxy")
import objp.p2o
objp.p2o.generate_python_proxy_code('cocoalib/cocoa/CocoaProxy.h', 'build/CocoaProxy.m')
build_cocoa_ext("CocoaProxy", 'cocoalib/cocoa',
['cocoalib/cocoa/CocoaProxy.m', 'build/CocoaProxy.m', 'build/ObjP.m', 'cocoalib/HSErrorReportWindow.m'],
['AppKit', 'CoreServices'],
['cocoalib'])
def build_cocoa_bridging_interfaces(edition):
print("Building Cocoa Bridging Interfaces")
import objp.o2p
import objp.p2o
add_to_pythonpath('cocoa')
add_to_pythonpath('cocoalib')
from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline,
OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyFairware)
from inter.details_panel import PyDetailsPanel, DetailsPanelView
from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView
from inter.extra_fairware_reminder import PyExtraFairwareReminder, ExtraFairwareReminderView
from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView
from inter.prioritize_list import PyPrioritizeList, PrioritizeListView
from inter.problem_dialog import PyProblemDialog
from inter.result_table import PyResultTable, ResultTableView
from inter.stats_label import PyStatsLabel, StatsLabelView
from inter.app import PyDupeGuruBase, DupeGuruView
appmod = importlib.import_module('inter.app_{}'.format(edition))
allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware,
PyDetailsPanel, PyDirectoryOutline, PyExtraFairwareReminder, PyPrioritizeDialog,
PyPrioritizeList, PyProblemDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase,
appmod.PyDupeGuru]
for class_ in allclasses:
objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True)
allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView,
DetailsPanelView, DirectoryOutlineView, ExtraFairwareReminderView, PrioritizeDialogView,
PrioritizeListView, ResultTableView, StatsLabelView, DupeGuruView]
clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses]
objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m')
build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m'])
def build_pe_modules(ui): def build_pe_modules(ui):
print("Building PE Modules") print("Building PE Modules")
@@ -221,6 +274,9 @@ def main():
build_updatepot() build_updatepot()
elif options.mergepot: elif options.mergepot:
build_mergepot() build_mergepot()
elif options.cocoamod:
build_cocoa_proxy_module()
build_cocoa_bridging_interfaces(edition)
else: else:
build_normal(edition, ui, dev) build_normal(edition, ui, dev)

View File

@@ -16,11 +16,11 @@ http://www.hardcoded.net/licenses/bsd_license
@interface AppDelegateBase : NSObject @interface AppDelegateBase : NSObject
{ {
IBOutlet PyDupeGuruBase *py;
IBOutlet NSMenu *recentResultsMenu; IBOutlet NSMenu *recentResultsMenu;
IBOutlet NSMenu *actionsMenu; IBOutlet NSMenu *actionsMenu;
IBOutlet NSMenu *columnsMenu; IBOutlet NSMenu *columnsMenu;
PyDupeGuru *model;
ResultWindowBase *_resultWindow; ResultWindowBase *_resultWindow;
DirectoryPanel *_directoryPanel; DirectoryPanel *_directoryPanel;
DetailsPanel *_detailsPanel; DetailsPanel *_detailsPanel;
@@ -30,7 +30,7 @@ http://www.hardcoded.net/licenses/bsd_license
} }
/* Virtual */ /* Virtual */
- (PyDupeGuruBase *)py; - (PyDupeGuru *)model;
- (ResultWindowBase *)createResultWindow; - (ResultWindowBase *)createResultWindow;
- (DirectoryPanel *)createDirectoryPanel; - (DirectoryPanel *)createDirectoryPanel;
- (DetailsPanel *)createDetailsPanel; - (DetailsPanel *)createDetailsPanel;

View File

@@ -25,7 +25,8 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)awakeFromNib - (void)awakeFromNib
{ {
[py bindCocoa:self]; model = [[PyDupeGuru alloc] init];
[model bindCallback:createCallback(@"DupeGuruView", self)];
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.
@@ -45,7 +46,10 @@ http://www.hardcoded.net/licenses/bsd_license
/* Virtual */ /* Virtual */
- (PyDupeGuruBase *)py { return py; } - (PyDupeGuru *)model
{
return model;
}
- (ResultWindowBase *)createResultWindow - (ResultWindowBase *)createResultWindow
{ {
@@ -59,7 +63,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (DetailsPanel *)createDetailsPanel - (DetailsPanel *)createDetailsPanel
{ {
return [[DetailsPanel alloc] initWithPy:py]; return [[DetailsPanel alloc] initWithPyRef:[model detailsPanel]];
} }
- (NSString *)homepageURL - (NSString *)homepageURL
@@ -104,7 +108,7 @@ http://www.hardcoded.net/licenses/bsd_license
[op setTitle:TR(@"Select a results file to load")]; [op setTitle:TR(@"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];
[py loadResultsFrom:filename]; [model loadResultsFrom:filename];
[[self recentResults] addFile:filename]; [[self recentResults] addFile:filename];
} }
} }
@@ -125,7 +129,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)showAboutBox:(id)sender - (IBAction)showAboutBox:(id)sender
{ {
if (_aboutBox == nil) { if (_aboutBox == nil) {
_aboutBox = [[HSAboutBox alloc] initWithApp:py]; _aboutBox = [[HSAboutBox alloc] initWithApp:model];
} }
[[_aboutBox window] makeKeyAndOrderFront:sender]; [[_aboutBox window] makeKeyAndOrderFront:sender];
} }
@@ -157,9 +161,9 @@ http://www.hardcoded.net/licenses/bsd_license
/* Delegate */ /* Delegate */
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ {
[[ProgressController mainProgressController] setWorker:py]; [[ProgressController mainProgressController] setWorker:model];
[py initialRegistrationSetup]; [model initialRegistrationSetup];
[py loadSession]; [model loadSession];
} }
- (void)applicationWillBecomeActive:(NSNotification *)aNotification - (void)applicationWillBecomeActive:(NSNotification *)aNotification
@@ -171,7 +175,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{ {
if ([py resultsAreModified]) { if ([model resultsAreModified]) {
NSString *msg = TR(@"You have unsaved results, do you really want to quit?"); NSString *msg = TR(@"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;
@@ -186,10 +190,10 @@ http://www.hardcoded.net/licenses/bsd_license
NSInteger sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"]; NSInteger sc = [ud integerForKey:@"sessionCountSinceLastIgnorePurge"];
if (sc >= 10) { if (sc >= 10) {
sc = -1; sc = -1;
[py purgeIgnoreList]; [model purgeIgnoreList];
} }
sc++; sc++;
[py saveSession]; [model saveSession];
[ud setInteger:sc forKey:@"sessionCountSinceLastIgnorePurge"]; [ud setInteger:sc forKey:@"sessionCountSinceLastIgnorePurge"];
// NSApplication does not release nib instances objects, we must do it manually // NSApplication does not release nib instances objects, we must do it manually
// Well, it isn't needed because the memory is freed anyway (we are quitting the application // Well, it isn't needed because the memory is freed anyway (we are quitting the application
@@ -200,16 +204,17 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)recentFileClicked:(NSString *)path - (void)recentFileClicked:(NSString *)path
{ {
[py loadResultsFrom:path]; [model loadResultsFrom:path];
} }
/* model --> view */ /* model --> view */
- (void)showExtraFairwareReminder - (void)showExtraFairwareReminder
{ {
ExtraFairwareReminder *dialog = [[ExtraFairwareReminder alloc] initWithPy:py]; ExtraFairwareReminder *dialog = [[ExtraFairwareReminder alloc] initWithApp:model];
[dialog start]; [dialog start];
[NSApp runModalForWindow:[dialog window]]; [NSApp runModalForWindow:[dialog window]];
[dialog close];
[dialog release]; [dialog release];
} }
@@ -225,11 +230,11 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)showFairwareNagWithPrompt:(NSString *)prompt - (void)showFairwareNagWithPrompt:(NSString *)prompt
{ {
[HSFairwareReminder showFairwareNagWithApp:[self py] prompt:prompt]; [HSFairwareReminder showFairwareNagWithApp:[self model] prompt:prompt];
} }
- (void)showDemoNagWithPrompt:(NSString *)prompt - (void)showDemoNagWithPrompt:(NSString *)prompt
{ {
[HSFairwareReminder showDemoNagWithApp:[self py] prompt:prompt]; [HSFairwareReminder showDemoNagWithApp:[self model] prompt:prompt];
} }
@end @end

View File

@@ -7,16 +7,17 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "HSWindowController.h" #import <Python.h>
#import "PyApp.h"
#import "PyDetailsPanel.h" #import "PyDetailsPanel.h"
@interface DetailsPanel : HSWindowController @interface DetailsPanel : NSWindowController
{ {
IBOutlet NSTableView *detailsTable; IBOutlet NSTableView *detailsTable;
PyDetailsPanel *model;
} }
- (id)initWithPy:(PyApp *)aPy; - (id)initWithPyRef:(PyObject *)aPyRef;
- (PyDetailsPanel *)py; - (PyDetailsPanel *)model;
- (BOOL)isVisible; - (BOOL)isVisible;
- (void)toggleVisibility; - (void)toggleVisibility;

View File

@@ -10,23 +10,24 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Utils.h" #import "Utils.h"
@implementation DetailsPanel @implementation DetailsPanel
- (id)initWithPy:(PyApp *)aPy - (id)initWithPyRef:(PyObject *)aPyRef
{ {
self = [super initWithNibName:@"DetailsPanel" pyClassName:@"PyDetailsPanel" pyParent:aPy]; self = [super initWithWindowNibName:@"DetailsPanel"];
[self window]; //So the detailsTable is initialized. [self window]; //So the detailsTable is initialized.
[self connect]; model = [[PyDetailsPanel alloc] initWithModel:aPyRef];
[model bindCallback:createCallback(@"DetailsPanelView", self)];
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
[self disconnect]; [model release];
[super dealloc]; [super dealloc];
} }
- (PyDetailsPanel *)py - (PyDetailsPanel *)model
{ {
return (PyDetailsPanel *)py; return (PyDetailsPanel *)model;
} }
- (void)refreshDetails - (void)refreshDetails
@@ -53,12 +54,12 @@ http://www.hardcoded.net/licenses/bsd_license
/* NSTableView Delegate */ /* NSTableView Delegate */
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{ {
return [[self py] numberOfRows]; return [[self model] numberOfRows];
} }
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)column row:(NSInteger)row - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)column row:(NSInteger)row
{ {
return [[self py] valueForColumn:[column identifier] row:row]; return [[self model] valueForColumn:[column identifier] row:row];
} }
/* Python --> Cocoa */ /* Python --> Cocoa */

View File

@@ -7,12 +7,13 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import <Python.h>
#import "HSOutline.h" #import "HSOutline.h"
#import "PyDirectoryOutline.h" #import "PyDirectoryOutline.h"
#define DGAddedFoldersNotification @"DGAddedFoldersNotification" #define DGAddedFoldersNotification @"DGAddedFoldersNotification"
@interface DirectoryOutline : HSOutline {} @interface DirectoryOutline : HSOutline {}
- (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView; - (id)initWithPyRef:(PyObject *)aPyRef outlineView:(HSOutlineView *)aOutlineView;
- (PyDirectoryOutline *)py; - (PyDirectoryOutline *)model;
@end; @end;

View File

@@ -9,23 +9,17 @@ http://www.hardcoded.net/licenses/bsd_license
#import "DirectoryOutline.h" #import "DirectoryOutline.h"
@implementation DirectoryOutline @implementation DirectoryOutline
- (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView - (id)initWithPyRef:(PyObject *)aPyRef outlineView:(HSOutlineView *)aOutlineView
{ {
self = [super initWithPyClassName:@"PyDirectoryOutline" pyParent:aPyParent view:aOutlineView]; self = [super initWithPyRef:aPyRef wrapperClass:[PyDirectoryOutline class]
[outlineView registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; callbackClassName:@"DirectoryOutlineView" view:aOutlineView];
[self connect]; [[self view] registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
return self; return self;
} }
- (void)dealloc - (PyDirectoryOutline *)model
{ {
[self disconnect]; return (PyDirectoryOutline *)model;
[super dealloc];
}
- (PyDirectoryOutline *)py
{
return (PyDirectoryOutline *)py;
} }
/* Delegate */ /* Delegate */
@@ -53,7 +47,7 @@ http://www.hardcoded.net/licenses/bsd_license
if (!(sourceDragMask & NSDragOperationLink)) if (!(sourceDragMask & NSDragOperationLink))
return NO; return NO;
for (NSString *foldername in foldernames) { for (NSString *foldername in foldernames) {
[[self py] addDirectory:foldername]; [[self model] addDirectory:foldername];
} }
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:foldernames forKey:@"foldernames"]; NSDictionary *userInfo = [NSDictionary dictionaryWithObject:foldernames forKey:@"foldernames"];
[[NSNotificationCenter defaultCenter] postNotificationName:DGAddedFoldersNotification [[NSNotificationCenter defaultCenter] postNotificationName:DGAddedFoldersNotification
@@ -67,7 +61,7 @@ http://www.hardcoded.net/licenses/bsd_license
if ([cell isKindOfClass:[NSTextFieldCell class]]) { if ([cell isKindOfClass:[NSTextFieldCell class]]) {
NSTextFieldCell *textCell = cell; NSTextFieldCell *textCell = cell;
NSIndexPath *path = item; NSIndexPath *path = item;
BOOL selected = [path isEqualTo:[outlineView selectedPath]]; BOOL selected = [path isEqualTo:[[self view] selectedPath]];
if (selected) { if (selected) {
[textCell setTextColor:[NSColor blackColor]]; [textCell setTextColor:[NSColor blackColor]];
return; return;

View File

@@ -22,7 +22,7 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSButton *removeButton; IBOutlet NSButton *removeButton;
AppDelegateBase *_app; AppDelegateBase *_app;
PyDupeGuruBase *_py; PyDupeGuru *model;
HSRecentFiles *_recentDirectories; HSRecentFiles *_recentDirectories;
DirectoryOutline *outline; DirectoryOutline *outline;
BOOL _alwaysShowPopUp; BOOL _alwaysShowPopUp;

View File

@@ -18,13 +18,13 @@ http://www.hardcoded.net/licenses/bsd_license
self = [super initWithWindowNibName:@"DirectoryPanel"]; self = [super initWithWindowNibName:@"DirectoryPanel"];
[self window]; [self window];
_app = aParentApp; _app = aParentApp;
_py = [_app py]; model = [_app model];
[[self window] setTitle:[_py appName]]; [[self window] setTitle:[model appName]];
_alwaysShowPopUp = NO; _alwaysShowPopUp = NO;
[self fillPopUpMenu]; [self fillPopUpMenu];
_recentDirectories = [[HSRecentFiles alloc] initWithName:@"recentDirectories" menu:[addButtonPopUp menu]]; _recentDirectories = [[HSRecentFiles alloc] initWithName:@"recentDirectories" menu:[addButtonPopUp menu]];
[_recentDirectories setDelegate:self]; [_recentDirectories setDelegate:self];
outline = [[DirectoryOutline alloc] initWithPyParent:_py view:outlineView]; outline = [[DirectoryOutline alloc] initWithPyRef:[model directoryTree] outlineView:outlineView];
[self refreshRemoveButtonText]; [self refreshRemoveButtonText];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(directorySelectionChanged:) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(directorySelectionChanged:)
name:NSOutlineViewSelectionDidChangeNotification object:outlineView]; name:NSOutlineViewSelectionDidChangeNotification object:outlineView];
@@ -100,14 +100,14 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)removeSelectedDirectory:(id)sender - (IBAction)removeSelectedDirectory:(id)sender
{ {
[[self window] makeKeyAndOrderFront:nil]; [[self window] makeKeyAndOrderFront:nil];
[[outline py] removeSelectedDirectory]; [[outline model] removeSelectedDirectory];
[self refreshRemoveButtonText]; [self refreshRemoveButtonText];
} }
/* Public */ /* Public */
- (void)addDirectory:(NSString *)directory - (void)addDirectory:(NSString *)directory
{ {
NSInteger r = [[_py addDirectory:directory] intValue]; NSInteger r = [model addDirectory:directory];
if (r) { if (r) {
NSString *m = @""; NSString *m = @"";
if (r == 1) { if (r == 1) {

View File

@@ -8,17 +8,17 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "PyExtraFairwareReminder.h" #import "PyExtraFairwareReminder.h"
#import "HSWindowController.h" #import "PyDupeGuru.h"
#import "PyApp.h"
@interface ExtraFairwareReminder : HSWindowController @interface ExtraFairwareReminder : NSWindowController
{ {
IBOutlet NSButton *continueButton; IBOutlet NSButton *continueButton;
PyExtraFairwareReminder *model;
NSTimer *timer; NSTimer *timer;
} }
- (id)initWithPy:(PyApp *)aPy; - (id)initWithApp:(PyDupeGuru *)aApp;
- (PyExtraFairwareReminder *)py; - (PyExtraFairwareReminder *)model;
- (void)start; - (void)start;
- (void)updateButton; - (void)updateButton;

View File

@@ -7,35 +7,39 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import "ExtraFairwareReminder.h" #import "ExtraFairwareReminder.h"
#import "Utils.h"
@implementation ExtraFairwareReminder @implementation ExtraFairwareReminder
- (id)initWithPy:(PyApp *)aPy - (id)initWithApp:(PyDupeGuru *)aApp
{ {
self = [super initWithNibName:@"ExtraFairwareReminder" pyClassName:@"PyExtraFairwareReminder" pyParent:aPy]; self = [super initWithWindowNibName:@"ExtraFairwareReminder"];
[self window]; [self window];
[continueButton setEnabled:NO]; [continueButton setEnabled:NO];
model = [[PyExtraFairwareReminder alloc] initWithApp:[aApp pyRef]];
[model bindCallback:createCallback(@"ExtraFairwareReminderView", self)];
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
[model release];
[timer release]; [timer release];
[super dealloc]; [super dealloc];
} }
- (PyExtraFairwareReminder *)py - (PyExtraFairwareReminder *)model
{ {
return (PyExtraFairwareReminder *)py; return (PyExtraFairwareReminder *)model;
} }
- (void)start - (void)start
{ {
[[self py] start]; [[self model] start];
} }
- (void)updateButton - (void)updateButton
{ {
[[self py] updateButton]; [[self model] updateButton];
} }
- (IBAction)continue:(id)sender - (IBAction)continue:(id)sender

View File

@@ -7,25 +7,25 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "HSWindowController.h"
#import "PyApp.h"
#import "PyPrioritizeDialog.h" #import "PyPrioritizeDialog.h"
#import "HSPopUpList.h" #import "HSPopUpList.h"
#import "HSSelectableList.h" #import "HSSelectableList.h"
#import "PrioritizeList.h" #import "PrioritizeList.h"
#import "PyDupeGuru.h"
@interface PrioritizeDialog : HSWindowController @interface PrioritizeDialog : NSWindowController
{ {
IBOutlet NSPopUpButton *categoryPopUpView; IBOutlet NSPopUpButton *categoryPopUpView;
IBOutlet NSTableView *criteriaTableView; IBOutlet NSTableView *criteriaTableView;
IBOutlet NSTableView *prioritizationTableView; IBOutlet NSTableView *prioritizationTableView;
PyPrioritizeDialog *model;
HSPopUpList *categoryPopUp; HSPopUpList *categoryPopUp;
HSSelectableList *criteriaList; HSSelectableList *criteriaList;
PrioritizeList *prioritizationList; PrioritizeList *prioritizationList;
} }
- (id)initWithPy:(PyApp *)aPy; - (id)initWithApp:(PyDupeGuru *)aApp;
- (PyPrioritizeDialog *)py; - (PyPrioritizeDialog *)model;
- (IBAction)addSelected:(id)sender; - (IBAction)addSelected:(id)sender;
- (IBAction)removeSelected:(id)sender; - (IBAction)removeSelected:(id)sender;

View File

@@ -7,50 +7,54 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import "PrioritizeDialog.h" #import "PrioritizeDialog.h"
#import "Utils.h"
@implementation PrioritizeDialog @implementation PrioritizeDialog
- (id)initWithPy:(PyApp *)aPy - (id)initWithApp:(PyDupeGuru *)aApp
{ {
self = [super initWithNibName:@"PrioritizeDialog" pyClassName:@"PyPrioritizeDialog" pyParent:aPy]; self = [super initWithWindowNibName:@"PrioritizeDialog"];
[self window]; [self window];
categoryPopUp = [[HSPopUpList alloc] initWithPy:[[self py] categoryList] view:categoryPopUpView]; model = [[PyPrioritizeDialog alloc] initWithApp:[aApp pyRef]];
criteriaList = [[HSSelectableList alloc] initWithPy:[[self py] criteriaList] view:criteriaTableView]; [model bindCallback:createCallback(@"PrioritizeDialogView", self)];
prioritizationList = [[PrioritizeList alloc] initWithPy:[[self py] prioritizationList] view:prioritizationTableView]; categoryPopUp = [[HSPopUpList alloc] initWithPyRef:[[self model] categoryList] popupView:categoryPopUpView];
[self connect]; criteriaList = [[HSSelectableList alloc] initWithPyRef:[[self model] criteriaList] tableView:criteriaTableView];
prioritizationList = [[PrioritizeList alloc] initWithPyRef:[[self model] prioritizationList] tableView:prioritizationTableView];
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
[self disconnect];
[categoryPopUp release]; [categoryPopUp release];
[criteriaList release]; [criteriaList release];
[prioritizationList release]; [prioritizationList release];
[model release];
[super dealloc]; [super dealloc];
} }
- (PyPrioritizeDialog *)py - (PyPrioritizeDialog *)model
{ {
return (PyPrioritizeDialog *)py; return (PyPrioritizeDialog *)model;
} }
- (IBAction)addSelected:(id)sender - (IBAction)addSelected:(id)sender
{ {
[[self py] addSelected]; [[self model] addSelected];
} }
- (IBAction)removeSelected:(id)sender - (IBAction)removeSelected:(id)sender
{ {
[[self py] removeSelected]; [[self model] removeSelected];
} }
- (IBAction)ok:(id)sender - (IBAction)ok:(id)sender
{ {
[NSApp stopModal]; [NSApp stopModal];
[self close];
} }
- (IBAction)cancel:(id)sender - (IBAction)cancel:(id)sender
{ {
[NSApp abortModal]; [NSApp abortModal];
[self close];
} }
@end @end

View File

@@ -11,5 +11,6 @@ http://www.hardcoded.net/licenses/bsd_license
#import "PyPrioritizeList.h" #import "PyPrioritizeList.h"
@interface PrioritizeList : HSSelectableList {} @interface PrioritizeList : HSSelectableList {}
- (PyPrioritizeList *)py; - (id)initWithPyRef:(PyObject *)aPyRef tableView:(NSTableView *)aTableView;
- (PyPrioritizeList *)model;
@end @end

View File

@@ -11,9 +11,16 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Consts.h" #import "Consts.h"
@implementation PrioritizeList @implementation PrioritizeList
- (PyPrioritizeList *)py - (id)initWithPyRef:(PyObject *)aPyRef tableView:(NSTableView *)aTableView
{ {
return (PyPrioritizeList *)py; self = [super initWithPyRef:aPyRef wrapperClass:[PyPrioritizeList class]
callbackClassName:@"PrioritizeListView" view:aTableView];
return self;
}
- (PyPrioritizeList *)model
{
return (PyPrioritizeList *)model;
} }
- (void)setView:(NSTableView *)aTableView - (void)setView:(NSTableView *)aTableView
@@ -45,7 +52,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSPasteboard* pboard = [info draggingPasteboard]; NSPasteboard* pboard = [info draggingPasteboard];
NSData* rowData = [pboard dataForType:DGPrioritizeIndexPasteboardType]; NSData* rowData = [pboard dataForType:DGPrioritizeIndexPasteboardType];
NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData]; NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];
[[self py] moveIndexes:[Utils indexSet2Array:rowIndexes] toIndex:row]; [[self model] moveIndexes:[Utils indexSet2Array:rowIndexes] toIndex:row];
return YES; return YES;
} }
@end @end

View File

@@ -7,19 +7,17 @@ http://www.hardcoded.net/licenses/bsd_license
*/ */
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "HSWindowController.h"
#import "PyApp.h"
#import "PyProblemDialog.h" #import "PyProblemDialog.h"
#import "HSTable.h" #import "HSTable.h"
@interface ProblemDialog : HSWindowController @interface ProblemDialog : NSWindowController
{ {
IBOutlet NSTableView *problemTableView; IBOutlet NSTableView *problemTableView;
PyProblemDialog *model;
HSTable *problemTable; HSTable *problemTable;
} }
- (id)initWithPy:(PyApp *)aPy; - (id)initWithPyRef:(PyObject *)aPyRef;
- (PyProblemDialog *)py;
- (void)initializeColumns; - (void)initializeColumns;
- (IBAction)revealSelected:(id)sender; - (IBAction)revealSelected:(id)sender;

View File

@@ -10,30 +10,23 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Utils.h" #import "Utils.h"
@implementation ProblemDialog @implementation ProblemDialog
- (id)initWithPy:(PyApp *)aPy - (id)initWithPyRef:(PyObject *)aPyRef
{ {
self = [super initWithNibName:@"ProblemDialog" pyClassName:@"PyProblemDialog" pyParent:aPy]; self = [super initWithWindowNibName:@"ProblemDialog"];
[self window]; //So the detailsTable is initialized. [self window]; //So the detailsTable is initialized.
problemTable = [[HSTable alloc] initWithPyClassName:@"PyProblemTable" pyParent:[self py] view:problemTableView]; model = [[PyProblemDialog alloc] initWithModel:aPyRef];
problemTable = [[HSTable alloc] initWithPyRef:[model problemTable] tableView:problemTableView];
[self initializeColumns]; [self initializeColumns];
[self connect];
[problemTable connect];
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
[problemTable disconnect];
[self disconnect];
[problemTable release]; [problemTable release];
[model release];
[super dealloc]; [super dealloc];
} }
- (PyProblemDialog *)py
{
return (PyProblemDialog *)py;
}
- (void)initializeColumns - (void)initializeColumns
{ {
HSColumnDef defs[] = { HSColumnDef defs[] = {
@@ -46,6 +39,6 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)revealSelected:(id)sender - (IBAction)revealSelected:(id)sender
{ {
[[self py] revealSelected]; [model revealSelected];
} }
@end @end

View File

@@ -1,15 +0,0 @@
/*
Copyright 2011 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 "PyGUI.h"
@interface PyDetailsPanel : PyGUI
- (NSInteger)numberOfRows;
- (id)valueForColumn:(NSString *)column row:(NSInteger)row;
@end

View File

@@ -1,15 +0,0 @@
/*
Copyright 2011 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 "PyOutline.h"
@interface PyDirectoryOutline : PyOutline
- (void)addDirectory:(NSString *)directoryPath;
- (void)removeSelectedDirectory;
@end

View File

@@ -1,59 +0,0 @@
/*
Copyright 2011 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 "PyResultTable.h"
#import "PyApp.h"
@interface PyDupeGuruBase : PyApp
- (void)bindCocoa:(id)cocoa;
- (PyResultTable *)resultTable;
//Actions
- (NSNumber *)addDirectory:(NSString *)name;
- (void)loadResultsFrom:(NSString *)filename;
- (void)saveResultsAs:(NSString *)filename;
- (void)loadSession;
- (void)saveSession;
- (void)clearIgnoreList;
- (void)purgeIgnoreList;
- (NSString *)exportToXHTML;
- (void)invokeCommand:(NSString *)cmd;
- (void)doScan;
- (void)toggleSelectedMark;
- (void)markAll;
- (void)markInvert;
- (void)markNone;
- (void)addSelectedToIgnoreList;
- (void)openSelected;
- (void)revealSelected;
- (void)makeSelectedReference;
- (void)applyFilter:(NSString *)filter;
- (void)copyOrMove:(NSNumber *)aCopy markedTo:(NSString *)destination recreatePath:(NSNumber *)aRecreateType;
- (void)deleteMarked;
- (void)hardlinkMarked;
- (void)removeMarked;
//Data
- (NSNumber *)getIgnoreListCount;
- (NSNumber *)getMarkCount;
- (BOOL)scanWasProblematic;
- (BOOL)resultsAreModified;
//Scanning options
- (void)setScanType:(NSNumber *)scan_type;
- (void)setMinMatchPercentage:(NSNumber *)percentage;
- (void)setMixFileKind:(BOOL)mix_file_kind;
- (void)setEscapeFilterRegexp:(BOOL)escape_filter_regexp;
- (void)setRemoveEmptyFolders:(BOOL)remove_empty_folders;
- (void)setIgnoreHardlinkMatches:(BOOL)ignore_hardlink_matches;
- (void)setSizeThreshold:(NSInteger)size_threshold;
@end

View File

@@ -1,15 +0,0 @@
/*
Copyright 2011 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 "PyGUI.h"
@interface PyExtraFairwareReminder : PyGUI
- (void)start;
- (void)updateButton;
@end

View File

@@ -1,20 +0,0 @@
/*
Copyright 2011 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 "PyGUI.h"
#import "PySelectableList.h"
@interface PyPrioritizeDialog : PyGUI
- (PySelectableList *)categoryList;
- (PySelectableList *)criteriaList;
- (PySelectableList *)prioritizationList;
- (void)addSelected;
- (void)removeSelected;
- (void)performReprioritization;
@end

View File

@@ -1,14 +0,0 @@
/*
Copyright 2011 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 "PySelectableList.h"
@interface PyPrioritizeList : PySelectableList
- (void)moveIndexes:(NSArray *)indexes toIndex:(NSInteger)destIndex;
@end

View File

@@ -1,14 +0,0 @@
/*
Copyright 2011 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 "PyGUI.h"
@interface PyProblemDialog : PyGUI
- (void)revealSelected;
@end

View File

@@ -1,26 +0,0 @@
/*
Copyright 2011 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 "PyTable.h"
@interface PyResultTable : PyTable
- (BOOL)powerMarkerMode;
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
- (BOOL)deltaValuesMode;
- (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode;
- (NSArray *)deltaColumns;
- (NSString *)valueForRow:(NSInteger)rowIndex column:(NSString *)aColumn;
- (BOOL)renameSelected:(NSString *)aNewName;
- (void)sortBy:(NSString *)aIdentifier ascending:(BOOL)aAscending;
- (void)markSelected;
- (void)removeSelected;
- (NSInteger)selectedDupeCount;
- (NSString *)pathAtIndex:(NSInteger)index;
@end

View File

@@ -1,14 +0,0 @@
/*
Copyright 2011 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 "PyGUI.h"
@interface PyStatsLabel : PyGUI
- (NSString *)display;
@end

View File

@@ -15,8 +15,8 @@ http://www.hardcoded.net/licenses/bsd_license
{ {
NSSet *_deltaColumns; NSSet *_deltaColumns;
} }
- (id)initWithPy:(id)aPy view:(NSTableView *)aTableView; - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTableView *)aTableView;
- (PyResultTable *)py; - (PyResultTable *)model;
- (BOOL)powerMarkerMode; - (BOOL)powerMarkerMode;
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode; - (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode;
- (BOOL)deltaValuesMode; - (BOOL)deltaValuesMode;

View File

@@ -18,24 +18,22 @@ http://www.hardcoded.net/licenses/bsd_license
@end @end
@implementation ResultTable @implementation ResultTable
- (id)initWithPy:(id)aPy view:(NSTableView *)aTableView - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTableView *)aTableView
{ {
self = [super initWithPy:aPy view:aTableView]; self = [super initWithPyRef:aPyRef wrapperClass:[PyResultTable class] callbackClassName:@"ResultTableView" view:aTableView];
_deltaColumns = [[NSSet setWithArray:[[self py] deltaColumns]] retain]; _deltaColumns = [[NSSet setWithArray:[[self model] deltaColumns]] retain];
[self connect];
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
[self disconnect];
[_deltaColumns release]; [_deltaColumns release];
[super dealloc]; [super dealloc];
} }
- (PyResultTable *)py - (PyResultTable *)model
{ {
return (PyResultTable *)py; return (PyResultTable *)model;
} }
/* Private */ /* Private */
@@ -61,27 +59,27 @@ http://www.hardcoded.net/licenses/bsd_license
/* Public */ /* Public */
- (BOOL)powerMarkerMode - (BOOL)powerMarkerMode
{ {
return [[self py] powerMarkerMode]; return [[self model] powerMarkerMode];
} }
- (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode - (void)setPowerMarkerMode:(BOOL)aPowerMarkerMode
{ {
[[self py] setPowerMarkerMode:aPowerMarkerMode]; [[self model] setPowerMarkerMode:aPowerMarkerMode];
} }
- (BOOL)deltaValuesMode - (BOOL)deltaValuesMode
{ {
return [[self py] deltaValuesMode]; return [[self model] deltaValuesMode];
} }
- (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode - (void)setDeltaValuesMode:(BOOL)aDeltaValuesMode
{ {
[[self py] setDeltaValuesMode:aDeltaValuesMode]; [[self model] setDeltaValuesMode:aDeltaValuesMode];
} }
- (NSInteger)selectedDupeCount - (NSInteger)selectedDupeCount
{ {
return [[self py] selectedDupeCount]; return [[self model] selectedDupeCount];
} }
- (void)removeSelected - (void)removeSelected
@@ -93,7 +91,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSString *msg = [NSString stringWithFormat:msgFmt,selectedDupeCount]; NSString *msg = [NSString stringWithFormat:msgFmt,selectedDupeCount];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return; return;
[[self py] removeSelected]; [[self model] removeSelected];
} }
/* Datasource */ /* Datasource */
@@ -101,27 +99,27 @@ http://www.hardcoded.net/licenses/bsd_license
{ {
NSString *identifier = [column identifier]; NSString *identifier = [column identifier];
if ([identifier isEqual:@"marked"]) { if ([identifier isEqual:@"marked"]) {
return [[self py] valueForColumn:@"marked" row:row]; return [[self model] valueForColumn:@"marked" row:row];
} }
return [[self py] valueForRow:row column:identifier]; return [[self model] valueForRow:row column:identifier];
} }
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(NSInteger)row - (void)tableView:(NSTableView *)aTableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)column row:(NSInteger)row
{ {
NSString *identifier = [column identifier]; NSString *identifier = [column identifier];
if ([identifier isEqual:@"marked"]) { if ([identifier isEqual:@"marked"]) {
[[self py] setValue:object forColumn:identifier row:row]; [[self model] setValue:object forColumn:identifier row:row];
} }
else if ([identifier isEqual:@"name"]) { else if ([identifier isEqual:@"name"]) {
NSString *oldName = [[self py] valueForRow:row column:identifier]; NSString *oldName = [[self model] valueForRow:row column:identifier];
NSString *newName = object; NSString *newName = object;
if (![newName isEqual:oldName]) { if (![newName isEqual:oldName]) {
BOOL renamed = [[self py] 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:TR(@"The name '%@' already exists."), newName]];
} }
else { else {
[tableView setNeedsDisplay:YES]; [[self view] setNeedsDisplay:YES];
} }
} }
} }
@@ -130,16 +128,16 @@ http://www.hardcoded.net/licenses/bsd_license
/* Delegate */ /* Delegate */
- (void)tableView:(NSTableView *)aTableView didClickTableColumn:(NSTableColumn *)tableColumn - (void)tableView:(NSTableView *)aTableView didClickTableColumn:(NSTableColumn *)tableColumn
{ {
if ([[tableView sortDescriptors] count] < 1) if ([[[self view] sortDescriptors] count] < 1)
return; return;
NSSortDescriptor *sd = [[tableView sortDescriptors] objectAtIndex:0]; NSSortDescriptor *sd = [[[self view] sortDescriptors] objectAtIndex:0];
[[self py] sortBy:[sd key] ascending:[sd ascending]]; [[self model] sortBy:[sd key] ascending:[sd ascending]];
} }
- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)column row:(NSInteger)row - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)column row:(NSInteger)row
{ {
BOOL isSelected = [tableView isRowSelected:row]; BOOL isSelected = [[self view] isRowSelected:row];
BOOL isMarkable = n2b([[self py] valueForColumn:@"markable" row:row]); BOOL isMarkable = n2b([[self model] valueForColumn:@"markable" row:row]);
if ([[column identifier] isEqual:@"marked"]) { if ([[column identifier] isEqual:@"marked"]) {
[cell setEnabled:isMarkable]; [cell setEnabled:isMarkable];
// Low-tech solution, for indentation, but it works... // Low-tech solution, for indentation, but it works...
@@ -173,21 +171,21 @@ http://www.hardcoded.net/licenses/bsd_license
- (BOOL)tableViewHadSpacePressed:(NSTableView *)tableView - (BOOL)tableViewHadSpacePressed:(NSTableView *)tableView
{ {
[[self py] markSelected]; [[self model] markSelected];
return YES; return YES;
} }
/* Quicklook */ /* Quicklook */
- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel - (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel
{ {
return [[[self py] selectedRows] count]; return [[[self model] selectedRows] count];
} }
- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index - (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index
{ {
NSArray *selectedRows = [[self py] selectedRows]; NSArray *selectedRows = [[self model] selectedRows];
NSInteger absIndex = n2i([selectedRows objectAtIndex:index]); NSInteger absIndex = n2i([selectedRows objectAtIndex:index]);
NSString *path = [[self py] pathAtIndex:absIndex]; NSString *path = [[self model] pathAtIndex:absIndex];
return [[HSQLPreviewItem alloc] initWithUrl:[NSURL fileURLWithPath:path] title:path]; return [[HSQLPreviewItem alloc] initWithUrl:[NSURL fileURLWithPath:path] title:path];
} }
@@ -204,6 +202,6 @@ http://www.hardcoded.net/licenses/bsd_license
/* Python --> Cocoa */ /* Python --> Cocoa */
- (void)invalidateMarkings - (void)invalidateMarkings
{ {
[tableView setNeedsDisplay:YES]; [[self view] setNeedsDisplay:YES];
} }
@end @end

View File

@@ -25,7 +25,7 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSSearchField *filterField; IBOutlet NSSearchField *filterField;
AppDelegateBase *app; AppDelegateBase *app;
PyDupeGuruBase *py; PyDupeGuru *model;
NSMenu *columnsMenu; NSMenu *columnsMenu;
ResultTable *table; ResultTable *table;
StatsLabel *statsLabel; StatsLabel *statsLabel;

View File

@@ -19,14 +19,14 @@ http://www.hardcoded.net/licenses/bsd_license
{ {
self = [super initWithWindowNibName:@"ResultWindow"]; self = [super initWithWindowNibName:@"ResultWindow"];
app = aApp; app = aApp;
py = [app py]; model = [app model];
[[self window] setTitle:fmt(@"%@ Results", [py appName])]; [[self window] setTitle:fmt(@"%@ Results", [model appName])];
columnsMenu = [app columnsMenu]; 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] initWithPy:[py resultTable] view:matches]; table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches];
statsLabel = [[StatsLabel alloc] initWithPyParent:py labelView:stats]; statsLabel = [[StatsLabel alloc] initWithPyRef:[model statsLabel] view:stats];
problemDialog = [[ProblemDialog alloc] initWithPy:py]; problemDialog = [[ProblemDialog alloc] initWithPyRef:[model problemDialog]];
[self initResultColumns]; [self initResultColumns];
[self fillColumnsMenu]; [self fillColumnsMenu];
[matches setTarget:self]; [matches setTarget:self];
@@ -58,7 +58,7 @@ http://www.hardcoded.net/licenses/bsd_license
/* Helpers */ /* Helpers */
- (void)fillColumnsMenu - (void)fillColumnsMenu
{ {
NSArray *menuItems = [[[table columns] py] 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];
@@ -76,7 +76,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted - (void)sendMarkedToTrash:(BOOL)hardlinkDeleted
{ {
NSInteger mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [model getMarkCount];
if (!mark_count) { if (!mark_count) {
return; return;
} }
@@ -88,12 +88,12 @@ http://www.hardcoded.net/licenses/bsd_license
return; return;
} }
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
if (hardlinkDeleted) { if (hardlinkDeleted) {
[py hardlinkMarked]; [model hardlinkMarked];
} }
else { else {
[py deleteMarked]; [model deleteMarked];
} }
} }
@@ -107,13 +107,13 @@ http://www.hardcoded.net/licenses/bsd_license
/* Actions */ /* Actions */
- (IBAction)clearIgnoreList:(id)sender - (IBAction)clearIgnoreList:(id)sender
{ {
NSInteger i = n2i([py getIgnoreListCount]); NSInteger i = [model getIgnoreListCount];
if (!i) if (!i)
return; return;
NSString *msg = [NSString stringWithFormat:TR(@"Do you really want to remove all %d items from the ignore list?"),i]; NSString *msg = [NSString stringWithFormat:TR(@"Do you really want to remove all %d items from the ignore list?"),i];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return; return;
[py clearIgnoreList]; [model clearIgnoreList];
} }
- (IBAction)changeOptions:(id)sender - (IBAction)changeOptions:(id)sender
@@ -132,7 +132,7 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)copyMarked:(id)sender - (IBAction)copyMarked:(id)sender
{ {
NSInteger mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [model getMarkCount];
if (!mark_count) if (!mark_count)
return; return;
NSOpenPanel *op = [NSOpenPanel openPanel]; NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -144,7 +144,7 @@ http://www.hardcoded.net/licenses/bsd_license
if ([op runModal] == NSOKButton) { if ([op runModal] == NSOKButton) {
NSString *directory = [[op filenames] objectAtIndex:0]; NSString *directory = [[op filenames] objectAtIndex:0];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py copyOrMove:b2n(YES) markedTo:directory recreatePath:[ud objectForKey:@"recreatePathType"]]; [model copyOrMove:YES markedTo:directory recreatePath:n2b([ud objectForKey:@"recreatePathType"])];
} }
} }
@@ -160,15 +160,15 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)exportToXHTML:(id)sender - (IBAction)exportToXHTML:(id)sender
{ {
NSString *exported = [py exportToXHTML]; NSString *exported = [model exportToXHTML];
[[NSWorkspace sharedWorkspace] openFile:exported]; [[NSWorkspace sharedWorkspace] openFile:exported];
} }
- (IBAction)filter:(id)sender - (IBAction)filter:(id)sender
{ {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])]; [model setEscapeFilterRegexp:!n2b([ud objectForKey:@"useRegexpFilter"])];
[py applyFilter:[filterField stringValue]]; [model applyFilter:[filterField stringValue]];
} }
- (IBAction)ignoreSelected:(id)sender - (IBAction)ignoreSelected:(id)sender
@@ -179,7 +179,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSString *msg = [NSString stringWithFormat:TR(@"All selected %d matches are going to be ignored in all subsequent scans. Continue?"),selectedDupeCount]; NSString *msg = [NSString stringWithFormat:TR(@"All selected %d matches are going to be ignored in all subsequent scans. Continue?"),selectedDupeCount];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return; return;
[py addSelectedToIgnoreList]; [model addSelectedToIgnoreList];
} }
- (IBAction)invokeCustomCommand:(id)sender - (IBAction)invokeCustomCommand:(id)sender
@@ -187,7 +187,7 @@ http://www.hardcoded.net/licenses/bsd_license
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *cmd = [ud stringForKey:@"CustomCommand"]; NSString *cmd = [ud stringForKey:@"CustomCommand"];
if ((cmd != nil) && ([cmd length] > 0)) { if ((cmd != nil) && ([cmd length] > 0)) {
[py invokeCommand:cmd]; [model invokeCommand:cmd];
} }
else { else {
[Dialogs showMessage:TR(@"You have no custom command set up. Set it up in your preferences.")]; [Dialogs showMessage:TR(@"You have no custom command set up. Set it up in your preferences.")];
@@ -196,27 +196,27 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)markAll:(id)sender - (IBAction)markAll:(id)sender
{ {
[py markAll]; [model markAll];
} }
- (IBAction)markInvert:(id)sender - (IBAction)markInvert:(id)sender
{ {
[py markInvert]; [model markInvert];
} }
- (IBAction)markNone:(id)sender - (IBAction)markNone:(id)sender
{ {
[py markNone]; [model markNone];
} }
- (IBAction)markSelected:(id)sender - (IBAction)markSelected:(id)sender
{ {
[py toggleSelectedMark]; [model toggleSelectedMark];
} }
- (IBAction)moveMarked:(id)sender - (IBAction)moveMarked:(id)sender
{ {
NSInteger mark_count = [[py getMarkCount] intValue]; NSInteger mark_count = [model getMarkCount];
if (!mark_count) if (!mark_count)
return; return;
NSOpenPanel *op = [NSOpenPanel openPanel]; NSOpenPanel *op = [NSOpenPanel openPanel];
@@ -228,8 +228,8 @@ http://www.hardcoded.net/licenses/bsd_license
if ([op runModal] == NSOKButton) { if ([op runModal] == NSOKButton) {
NSString *directory = [[op filenames] objectAtIndex:0]; NSString *directory = [[op filenames] objectAtIndex:0];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[py setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])];
[py copyOrMove:b2n(NO) markedTo:directory recreatePath:[ud objectForKey:@"recreatePathType"]]; [model copyOrMove:NO markedTo:directory recreatePath:n2b([ud objectForKey:@"recreatePathType"])];
} }
} }
@@ -239,23 +239,23 @@ http://www.hardcoded.net/licenses/bsd_license
return; return;
} }
[matches selectRowIndexes:[NSIndexSet indexSetWithIndex:[matches clickedRow]] byExtendingSelection:NO]; [matches selectRowIndexes:[NSIndexSet indexSetWithIndex:[matches clickedRow]] byExtendingSelection:NO];
[py openSelected]; [model openSelected];
} }
- (IBAction)openSelected:(id)sender - (IBAction)openSelected:(id)sender
{ {
[py openSelected]; [model openSelected];
} }
- (IBAction)removeMarked:(id)sender - (IBAction)removeMarked:(id)sender
{ {
int mark_count = [[py getMarkCount] intValue]; int mark_count = [model getMarkCount];
if (!mark_count) if (!mark_count)
return; return;
NSString *msg = [NSString stringWithFormat:@"You are about to remove %d files from results. Continue?",mark_count]; NSString *msg = [NSString stringWithFormat:@"You are about to remove %d files from results. Continue?",mark_count];
if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:msg] == NSAlertSecondButtonReturn) // NO
return; return;
[py removeMarked]; [model removeMarked];
} }
- (IBAction)removeSelected:(id)sender - (IBAction)removeSelected:(id)sender
@@ -272,10 +272,10 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)reprioritizeResults:(id)sender - (IBAction)reprioritizeResults:(id)sender
{ {
PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithPy:py]; PrioritizeDialog *dlg = [[PrioritizeDialog alloc] initWithApp:model];
NSInteger result = [NSApp runModalForWindow:[dlg window]]; NSInteger result = [NSApp runModalForWindow:[dlg window]];
if (result == NSRunStoppedResponse) { if (result == NSRunStoppedResponse) {
[[dlg py] performReprioritization]; [[dlg model] performReprioritization];
} }
[dlg release]; [dlg release];
[[self window] makeKeyAndOrderFront:nil]; [[self window] makeKeyAndOrderFront:nil];
@@ -283,12 +283,12 @@ http://www.hardcoded.net/licenses/bsd_license
- (IBAction)resetColumnsToDefault:(id)sender - (IBAction)resetColumnsToDefault:(id)sender
{ {
[[[table columns] py] resetToDefaults]; [[[table columns] model] resetToDefaults];
} }
- (IBAction)revealSelected:(id)sender - (IBAction)revealSelected:(id)sender
{ {
[py revealSelected]; [model revealSelected];
} }
- (IBAction)saveResults:(id)sender - (IBAction)saveResults:(id)sender
@@ -298,30 +298,30 @@ http://www.hardcoded.net/licenses/bsd_license
[sp setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]]; [sp setAllowedFileTypes:[NSArray arrayWithObject:@"dupeguru"]];
[sp setTitle:TR(@"Select a file to save your results to")]; [sp setTitle:TR(@"Select a file to save your results to")];
if ([sp runModal] == NSOKButton) { if ([sp runModal] == NSOKButton) {
[py saveResultsAs:[sp filename]]; [model saveResultsAs:[sp filename]];
[[app recentResults] addFile:[sp filename]]; [[app recentResults] addFile:[sp filename]];
} }
} }
- (IBAction)startDuplicateScan:(id)sender - (IBAction)startDuplicateScan:(id)sender
{ {
if ([py resultsAreModified]) { if ([model resultsAreModified]) {
if ([Dialogs askYesNo:TR(@"You have unsaved results, do you really want to continue?")] == NSAlertSecondButtonReturn) // NO if ([Dialogs askYesNo:TR(@"You have unsaved results, do you really want to continue?")] == NSAlertSecondButtonReturn) // NO
return; return;
} }
[self setScanOptions]; [self setScanOptions];
[py doScan]; [model doScan];
} }
- (IBAction)switchSelected:(id)sender - (IBAction)switchSelected:(id)sender
{ {
[py makeSelectedReference]; [model makeSelectedReference];
} }
- (IBAction)toggleColumn:(id)sender - (IBAction)toggleColumn:(id)sender
{ {
NSMenuItem *mi = sender; NSMenuItem *mi = sender;
BOOL checked = [[[table columns] py] toggleMenuItem:[mi tag]]; BOOL checked = [[[table columns] model] toggleMenuItem:[mi tag]];
[mi setState:checked ? NSOnState : NSOffState]; [mi setState:checked ? NSOnState : NSOffState];
} }
@@ -382,7 +382,7 @@ http://www.hardcoded.net/licenses/bsd_license
{ {
id lastAction = [[ProgressController mainProgressController] jobId]; id lastAction = [[ProgressController mainProgressController] jobId];
if ([lastAction isEqualTo:jobCopy]) { if ([lastAction isEqualTo:jobCopy]) {
if ([py scanWasProblematic]) { if ([model scanWasProblematic]) {
[problemDialog showWindow:self]; [problemDialog showWindow:self];
} }
else { else {
@@ -390,7 +390,7 @@ http://www.hardcoded.net/licenses/bsd_license
} }
} }
else if ([lastAction isEqualTo:jobMove]) { else if ([lastAction isEqualTo:jobMove]) {
if ([py scanWasProblematic]) { if ([model scanWasProblematic]) {
[problemDialog showWindow:self]; [problemDialog showWindow:self];
} }
else { else {
@@ -398,7 +398,7 @@ http://www.hardcoded.net/licenses/bsd_license
} }
} }
else if ([lastAction isEqualTo:jobDelete]) { else if ([lastAction isEqualTo:jobDelete]) {
if ([py scanWasProblematic]) { if ([model scanWasProblematic]) {
[problemDialog showWindow:self]; [problemDialog showWindow:self];
} }
else { else {
@@ -406,7 +406,7 @@ http://www.hardcoded.net/licenses/bsd_license
} }
} }
else if ([lastAction isEqualTo:jobScan]) { else if ([lastAction isEqualTo:jobScan]) {
NSInteger rowCount = [[table py] numberOfRows]; NSInteger rowCount = [[table model] numberOfRows];
if (rowCount == 0) { if (rowCount == 0) {
[Dialogs showMessage:TR(@"No duplicates found.")]; [Dialogs showMessage:TR(@"No duplicates found.")];
} }

View File

@@ -10,10 +10,8 @@ http://www.hardcoded.net/licenses/bsd_license
#import "HSGUIController.h" #import "HSGUIController.h"
#import "PyStatsLabel.h" #import "PyStatsLabel.h"
@interface StatsLabel : HSGUIController @interface StatsLabel : HSGUIController {}
{ - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTextField *)aLabelView;
NSTextField *labelView; - (PyStatsLabel *)model;
} - (NSTextField *)labelView;
- (id)initWithPyParent:(id)aPyParent labelView:(NSTextField *)aLabelView;
- (PyStatsLabel *)py;
@end @end

View File

@@ -10,29 +10,25 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Utils.h" #import "Utils.h"
@implementation StatsLabel @implementation StatsLabel
- (id)initWithPyParent:(id)aPyParent labelView:(NSTextField *)aLabelView - (id)initWithPyRef:(PyObject *)aPyRef view:(NSTextField *)aLabelView
{ {
self = [super initWithPyClassName:@"PyStatsLabel" pyParent:aPyParent]; return [super initWithPyRef:aPyRef wrapperClass:[PyStatsLabel class]
labelView = [aLabelView retain]; callbackClassName:@"StatsLabelView" view:aLabelView];
[self connect];
return self;
} }
- (void)dealloc - (PyStatsLabel *)model
{ {
[self disconnect]; return (PyStatsLabel *)model;
[labelView release];
[super dealloc];
} }
- (PyStatsLabel *)py - (NSTextField *)labelView
{ {
return (PyStatsLabel *)py; return (NSTextField *)view;
} }
/* Python --> Cocoa */ /* Python --> Cocoa */
- (void)refresh - (void)refresh
{ {
[labelView setStringValue:[[self py] display]]; [[self labelView] setStringValue:[[self model] display]];
} }
@end @end

View File

@@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00"> <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data> <data>
<int key="IBDocument.SystemTarget">1060</int> <int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">11B26</string> <string key="IBDocument.SystemVersion">11C74</string>
<string key="IBDocument.InterfaceBuilderVersion">1617</string> <string key="IBDocument.InterfaceBuilderVersion">1938</string>
<string key="IBDocument.AppKitVersion">1138</string> <string key="IBDocument.AppKitVersion">1138.23</string>
<string key="IBDocument.HIToolboxVersion">566.00</string> <string key="IBDocument.HIToolboxVersion">567.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions"> <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">1617</string> <string key="NS.object.0">1938</string>
</object> </object>
<array key="IBDocument.IntegratedClassDependencies"> <array key="IBDocument.IntegratedClassDependencies">
<string>NSMenu</string> <string>NSMenu</string>
@@ -18,7 +18,10 @@
<array key="IBDocument.PluginDependencies"> <array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array> </array>
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/> <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="248533267"> <array class="NSMutableArray" key="IBDocument.RootObjects" id="248533267">
<object class="NSCustomObject" id="77446904"> <object class="NSCustomObject" id="77446904">
<string key="NSClassName">NSApplication</string> <string key="NSClassName">NSApplication</string>
@@ -668,31 +671,12 @@
<object class="NSCustomObject" id="91622651"> <object class="NSCustomObject" id="91622651">
<string key="NSClassName">AppDelegate</string> <string key="NSClassName">AppDelegate</string>
</object> </object>
<object class="NSCustomObject" id="875360857">
<string key="NSClassName">PyDupeGuru</string>
</object>
<object class="NSCustomObject" id="23220930"> <object class="NSCustomObject" id="23220930">
<string key="NSClassName">SUUpdater</string> <string key="NSClassName">SUUpdater</string>
</object> </object>
</array> </array>
<object class="IBObjectContainer" key="IBDocument.Objects"> <object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords"> <array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="1033736835"/>
</object>
<int key="connectionID">37</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">arrangeInFront:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="941358624"/>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">terminate:</string> <string key="label">terminate:</string>
@@ -725,14 +709,6 @@
</object> </object>
<int key="connectionID">153</int> <int key="connectionID">153</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="781972485"/>
</object>
<int key="connectionID">198</int>
</object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection"> <object class="IBOutletConnection" key="connection">
<string key="label">delegate</string> <string key="label">delegate</string>
@@ -742,20 +718,28 @@
<int key="connectionID">207</int> <int key="connectionID">207</int>
</object> </object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">delegate</string> <string key="label">performMiniaturize:</string>
<reference key="source" ref="133452984"/> <reference key="source" ref="83466988"/>
<reference key="destination" ref="91622651"/> <reference key="destination" ref="1033736835"/>
</object> </object>
<int key="connectionID">208</int> <int key="connectionID">37</int>
</object> </object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">py</string> <string key="label">arrangeInFront:</string>
<reference key="source" ref="91622651"/> <reference key="source" ref="83466988"/>
<reference key="destination" ref="875360857"/> <reference key="destination" ref="941358624"/>
</object> </object>
<int key="connectionID">614</int> <int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="781972485"/>
</object>
<int key="connectionID">198</int>
</object> </object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBActionConnection" key="connection">
@@ -765,14 +749,6 @@
</object> </object>
<int key="connectionID">925</int> <int key="connectionID">925</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">checkForUpdates:</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="688262014"/>
</object>
<int key="connectionID">951</int>
</object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">cut:</string> <string key="label">cut:</string>
@@ -797,46 +773,6 @@
</object> </object>
<int key="connectionID">1005</int> <int key="connectionID">1005</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openWebsite:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="440547877"/>
</object>
<int key="connectionID">1024</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="23220930"/>
<reference key="destination" ref="91622651"/>
</object>
<int key="connectionID">1175</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showAboutBox:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="436112936"/>
</object>
<int key="connectionID">1232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openHelp:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="914881560"/>
</object>
<int key="connectionID">1233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">recentResultsMenu</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="782784943"/>
</object>
<int key="connectionID">1242</int>
</object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">clearIgnoreList:</string> <string key="label">clearIgnoreList:</string>
@@ -1013,6 +949,70 @@
</object> </object>
<int key="connectionID">1266</int> <int key="connectionID">1266</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">reprioritizeResults:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="200019883"/>
</object>
<int key="connectionID">1278</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">removeMarked:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="733607971"/>
</object>
<int key="connectionID">1279</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleQuicklookPanel:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="343354529"/>
</object>
<int key="connectionID">1282</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="133452984"/>
<reference key="destination" ref="91622651"/>
</object>
<int key="connectionID">208</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openWebsite:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="440547877"/>
</object>
<int key="connectionID">1024</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showAboutBox:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="436112936"/>
</object>
<int key="connectionID">1232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openHelp:</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="914881560"/>
</object>
<int key="connectionID">1233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">recentResultsMenu</string>
<reference key="source" ref="91622651"/>
<reference key="destination" ref="782784943"/>
</object>
<int key="connectionID">1242</int>
</object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection"> <object class="IBOutletConnection" key="connection">
<string key="label">columnsMenu</string> <string key="label">columnsMenu</string>
@@ -1063,27 +1063,19 @@
</object> </object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBActionConnection" key="connection">
<string key="label">reprioritizeResults:</string> <string key="label">checkForUpdates:</string>
<reference key="source" ref="83466988"/> <reference key="source" ref="23220930"/>
<reference key="destination" ref="200019883"/> <reference key="destination" ref="688262014"/>
</object> </object>
<int key="connectionID">1278</int> <int key="connectionID">951</int>
</object> </object>
<object class="IBConnectionRecord"> <object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection"> <object class="IBOutletConnection" key="connection">
<string key="label">removeMarked:</string> <string key="label">delegate</string>
<reference key="source" ref="83466988"/> <reference key="source" ref="23220930"/>
<reference key="destination" ref="733607971"/> <reference key="destination" ref="91622651"/>
</object> </object>
<int key="connectionID">1279</int> <int key="connectionID">1175</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleQuicklookPanel:</string>
<reference key="source" ref="83466988"/>
<reference key="destination" ref="343354529"/>
</object>
<int key="connectionID">1282</int>
</object> </object>
</array> </array>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
@@ -1508,12 +1500,6 @@
<reference key="parent" ref="0"/> <reference key="parent" ref="0"/>
<string key="objectName">AppDelegate</string> <string key="objectName">AppDelegate</string>
</object> </object>
<object class="IBObjectRecord">
<int key="objectID">613</int>
<reference key="object" ref="875360857"/>
<reference key="parent" ref="0"/>
<string key="objectName">PyDupeGuru</string>
</object>
<object class="IBObjectRecord"> <object class="IBObjectRecord">
<int key="objectID">949</int> <int key="objectID">949</int>
<reference key="object" ref="23220930"/> <reference key="object" ref="23220930"/>
@@ -1654,7 +1640,6 @@
<string key="603.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="603.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="604.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="604.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="605.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="605.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="613.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="618.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="618.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="619.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="619.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="707.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> <string key="707.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1772,6 +1757,25 @@
<string key="minorKey">./Classes/AppDelegateBase.h</string> <string key="minorKey">./Classes/AppDelegateBase.h</string>
</object> </object>
</object> </object>
<object class="IBPartialClassDescription">
<string key="className">HSOutlineView</string>
<string key="superclassName">NSOutlineView</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">copy:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">copy:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">copy:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/HSOutlineView.h</string>
</object>
</object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">HSTableView</string> <string key="className">HSTableView</string>
<string key="superclassName">NSTableView</string> <string key="superclassName">NSTableView</string>
@@ -1780,17 +1784,9 @@
<string key="minorKey">./Classes/HSTableView.h</string> <string key="minorKey">./Classes/HSTableView.h</string>
</object> </object>
</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>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">PrioritizeDialog</string> <string key="className">PrioritizeDialog</string>
<string key="superclassName">HSWindowController</string> <string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions"> <dictionary class="NSMutableDictionary" key="actions">
<string key="addSelected:">id</string> <string key="addSelected:">id</string>
<string key="cancel:">id</string> <string key="cancel:">id</string>
@@ -1841,7 +1837,7 @@
</object> </object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">ProblemDialog</string> <string key="className">ProblemDialog</string>
<string key="superclassName">HSWindowController</string> <string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions"> <object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">revealSelected:</string> <string key="NS.key.0">revealSelected:</string>
<string key="NS.object.0">id</string> <string key="NS.object.0">id</string>
@@ -1869,38 +1865,6 @@
<string key="minorKey">./Classes/ProblemDialog.h</string> <string key="minorKey">./Classes/ProblemDialog.h</string>
</object> </object>
</object> </object>
<object class="IBPartialClassDescription">
<string key="className">PyApp</string>
<string key="superclassName">PyFairware</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyApp.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyDupeGuru</string>
<string key="superclassName">PyDupeGuruBase</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyDupeGuru.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyDupeGuruBase</string>
<string key="superclassName">PyApp</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyDupeGuruBase.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">PyFairware</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/PyFairware.h</string>
</object>
</object>
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">ResultWindowBase</string> <string key="className">ResultWindowBase</string>
<string key="superclassName">NSWindowController</string> <string key="superclassName">NSWindowController</string>
@@ -2127,7 +2091,7 @@
</object> </object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/> <real value="1060" key="NS.object.0"/>
</object> </object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>

41
cocoa/base/main.m Normal file
View File

@@ -0,0 +1,41 @@
/*
Copyright 2011 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 <Python.h>
#import <wchar.h>
#import <locale.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
/* We have to set the locate to UTF8 for mbstowcs() to correctly convert non-ascii chars in paths */
setlocale(LC_ALL, "en_US.UTF-8");
NSString *respath = [[NSBundle mainBundle] resourcePath];
NSString *mainpy = [respath stringByAppendingPathComponent:@"dg_cocoa.py"];
wchar_t wPythonPath[PATH_MAX+1];
NSString *pypath = [respath stringByAppendingPathComponent:@"py"];
mbstowcs(wPythonPath, [pypath fileSystemRepresentation], PATH_MAX+1);
Py_SetPath(wPythonPath);
Py_SetPythonHome(wPythonPath);
Py_Initialize();
PyEval_InitThreads();
PyGILState_STATE gilState = PyGILState_Ensure();
FILE* fp = fopen([mainpy UTF8String], "r");
PyRun_SimpleFile(fp, [mainpy UTF8String]);
fclose(fp);
PyGILState_Release(gilState);
if (gilState == PyGILState_LOCKED) {
PyThreadState_Swap(NULL);
PyEval_ReleaseLock();
}
int result = NSApplicationMain(argc, (const char **) argv);
Py_Finalize();
[pool release];
return result;
}

View File

@@ -1,15 +1,13 @@
import logging import logging
from objp.util import pyref, dontwrap
from jobprogress import job from jobprogress import job
from hscommon import cocoa import cocoa
from hscommon.cocoa import install_exception_hook from cocoa import install_exception_hook, proxy
from hscommon.cocoa.inter import signature, subproxy, PyFairware from cocoa.inter import PyFairware, FairwareView
from hscommon.cocoa.objcmin import (NSNotificationCenter, NSSearchPathForDirectoriesInDomains,
NSApplicationSupportDirectory, NSUserDomainMask, NSWorkspace)
from hscommon.trans import trget from hscommon.trans import trget
from core.app import JobType from core.app import JobType
from .result_table import PyResultTable
tr = trget('ui') tr = trget('ui')
@@ -21,128 +19,136 @@ JOBID2TITLE = {
JobType.Delete: tr("Sending to Trash"), JobType.Delete: tr("Sending to Trash"),
} }
class DupeGuruView(FairwareView):
def showExtraFairwareReminder(self): pass
class PyDupeGuruBase(PyFairware): class PyDupeGuruBase(PyFairware):
FOLLOW_PROTOCOLS = ['Worker']
@dontwrap
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()
appdata = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, True)[0] appdata = proxy.getAppdataPath()
self.py = modelclass(self, appdata) self.model = modelclass(self, appdata)
self.progress = cocoa.ThreadedJobPerformer() self.progress = cocoa.ThreadedJobPerformer()
def bindCocoa_(self, cocoa): #---Sub-proxies
self.cocoa = cocoa def detailsPanel(self) -> pyref:
return self.model.details_panel
resultTable = subproxy('resultTable', 'result_table', PyResultTable) def directoryTree(self) -> pyref:
return self.model.directory_tree
def problemDialog(self) -> pyref:
return self.model.problem_dialog
def statsLabel(self) -> pyref:
return self.model.stats_label
def resultTable(self) -> pyref:
return self.model.result_table
#---Directories #---Directories
def addDirectory_(self, directory): def addDirectory_(self, directory: str) -> int:
return self.py.add_directory(directory) return self.model.add_directory(directory)
#---Results #---Results
def clearIgnoreList(self): def clearIgnoreList(self):
self.py.scanner.ignore_list.Clear() self.model.scanner.ignore_list.Clear()
def doScan(self): def doScan(self):
self.py.start_scanning() self.model.start_scanning()
def exportToXHTML(self): def exportToXHTML(self) -> str:
return self.py.export_to_xhtml() return self.model.export_to_xhtml()
def loadSession(self): def loadSession(self):
self.py.load() self.model.load()
def loadResultsFrom_(self, filename): def loadResultsFrom_(self, filename: str):
self.py.load_from(filename) self.model.load_from(filename)
def markAll(self): def markAll(self):
self.py.mark_all() self.model.mark_all()
def markNone(self): def markNone(self):
self.py.mark_none() self.model.mark_none()
def markInvert(self): def markInvert(self):
self.py.mark_invert() self.model.mark_invert()
def purgeIgnoreList(self): def purgeIgnoreList(self):
self.py.purge_ignore_list() self.model.purge_ignore_list()
def toggleSelectedMark(self): def toggleSelectedMark(self):
self.py.toggle_selected_mark_state() self.model.toggle_selected_mark_state()
def saveSession(self): def saveSession(self):
self.py.save() self.model.save()
def saveResultsAs_(self, filename): def saveResultsAs_(self, filename: str):
self.py.save_as(filename) self.model.save_as(filename)
#---Actions #---Actions
def addSelectedToIgnoreList(self): def addSelectedToIgnoreList(self):
self.py.add_selected_to_ignore_list() self.model.add_selected_to_ignore_list()
def deleteMarked(self): def deleteMarked(self):
self.py.delete_marked() self.model.delete_marked()
def hardlinkMarked(self): def hardlinkMarked(self):
self.py.delete_marked(replace_with_hardlinks=True) self.model.delete_marked(replace_with_hardlinks=True)
def applyFilter_(self, filter): def applyFilter_(self, filter: str):
self.py.apply_filter(filter) self.model.apply_filter(filter)
def makeSelectedReference(self): def makeSelectedReference(self):
self.py.make_selected_reference() self.model.make_selected_reference()
def copyOrMove_markedTo_recreatePath_(self, copy, destination, recreate_path): def copyOrMove_markedTo_recreatePath_(self, copy: bool, destination: str, recreate_path: bool):
self.py.copy_or_move_marked(copy, destination, recreate_path) self.model.copy_or_move_marked(copy, destination, recreate_path)
def openSelected(self): def openSelected(self):
self.py.open_selected() self.model.open_selected()
def removeMarked(self): def removeMarked(self):
self.py.remove_marked() self.model.remove_marked()
def renameSelected_(self,newname):
return self.py.rename_selected(newname)
def revealSelected(self): def revealSelected(self):
self.py.reveal_selected() self.model.reveal_selected()
def invokeCommand_(self, cmd): def invokeCommand_(self, cmd: str):
self.py.invoke_command(cmd) self.model.invoke_command(cmd)
#---Information #---Information
def getIgnoreListCount(self): def getIgnoreListCount(self) -> int:
return len(self.py.scanner.ignore_list) return len(self.model.scanner.ignore_list)
def getMarkCount(self): def getMarkCount(self) -> int:
return self.py.results.mark_count return self.model.results.mark_count
@signature('i@:') def scanWasProblematic(self) -> bool:
def scanWasProblematic(self): return bool(self.model.results.problems)
return bool(self.py.results.problems)
@signature('i@:') def resultsAreModified(self) -> bool:
def resultsAreModified(self): return self.model.results.is_modified
return self.py.results.is_modified
#---Properties #---Properties
@signature('v@:c') def setMixFileKind_(self, mix_file_kind: bool):
def setMixFileKind_(self, mix_file_kind): self.model.scanner.mix_file_kind = mix_file_kind
self.py.scanner.mix_file_kind = mix_file_kind
@signature('v@:c') def setEscapeFilterRegexp_(self, escape_filter_regexp: bool):
def setEscapeFilterRegexp_(self, escape_filter_regexp): self.model.options['escape_filter_regexp'] = escape_filter_regexp
self.py.options['escape_filter_regexp'] = escape_filter_regexp
@signature('v@:c') def setRemoveEmptyFolders_(self, remove_empty_folders: bool):
def setRemoveEmptyFolders_(self, remove_empty_folders): self.model.options['clean_empty_dirs'] = remove_empty_folders
self.py.options['clean_empty_dirs'] = remove_empty_folders
@signature('v@:c') def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches: bool):
def setIgnoreHardlinkMatches_(self, ignore_hardlink_matches): self.model.options['ignore_hardlink_matches'] = ignore_hardlink_matches
self.py.options['ignore_hardlink_matches'] = ignore_hardlink_matches
#---Worker #---Worker
def getJobProgress(self): def getJobProgress(self) -> object: # NSNumber
try: try:
return self.progress.last_progress return self.progress.last_progress
except AttributeError: except AttributeError:
@@ -151,7 +157,7 @@ class PyDupeGuruBase(PyFairware):
# is sent), but it happens anyway, so there we go. ref: #106 # is sent), but it happens anyway, so there we go. ref: #106
return -1 return -1
def getJobDesc(self): def getJobDesc(self) -> str:
try: try:
return self.progress.last_desc return self.progress.last_desc
except AttributeError: except AttributeError:
@@ -161,30 +167,31 @@ class PyDupeGuruBase(PyFairware):
def cancelJob(self): def cancelJob(self):
self.progress.job_cancelled = True self.progress.job_cancelled = True
def jobCompleted_(self, jobid): def jobCompleted_(self, jobid: str):
self.py._job_completed(jobid) self.model._job_completed(jobid)
#--- model --> view #--- model --> view
@dontwrap
def open_path(self, path): def open_path(self, path):
NSWorkspace.sharedWorkspace().openFile_(str(path)) proxy.openPath_(str(path))
@dontwrap
def reveal_path(self, path): def reveal_path(self, path):
NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(str(path), '') proxy.revealPath_(str(path))
@dontwrap
def start_job(self, jobid, func, args=()): def start_job(self, jobid, func, args=()):
try: try:
j = self.progress.create_job() j = self.progress.create_job()
args = tuple([j] + list(args)) args = tuple([j] + list(args))
self.progress.run_threaded(func, args=args) self.progress.run_threaded(func, args=args)
except job.JobInProgressError: except job.JobInProgressError:
NSNotificationCenter.defaultCenter().postNotificationName_object_('JobInProgress', self) proxy.postNotification_userInfo_('JobInProgress', None)
else: else:
ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid} ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid}
NSNotificationCenter.defaultCenter().postNotificationName_object_userInfo_('JobStarted', self, ud) proxy.postNotification_userInfo_('JobStarted', ud)
@dontwrap
def show_extra_fairware_reminder(self): def show_extra_fairware_reminder(self):
self.cocoa.showExtraFairwareReminder() self.cocoa.showExtraFairwareReminder()
def show_message(self, msg):
self.cocoa.showMessage_(msg)

View File

@@ -11,12 +11,13 @@ from appscript import app, k, CommandError
import time import time
import os.path as op import os.path as op
from hscommon.cocoa import as_fetch from cocoa import as_fetch
from hscommon.trans import tr from hscommon.trans import tr
from core.app import JobType from core.app import JobType
from core.scanner import ScanType
from core_me.app import DupeGuru as DupeGuruBase from core_me.app import DupeGuru as DupeGuruBase
from .app import JOBID2TITLE from .app import JOBID2TITLE, PyDupeGuruBase
JobType.RemoveDeadTracks = 'jobRemoveDeadTracks' JobType.RemoveDeadTracks = 'jobRemoveDeadTracks'
JobType.ScanDeadTracks = 'jobScanDeadTracks' JobType.ScanDeadTracks = 'jobScanDeadTracks'
@@ -67,3 +68,45 @@ class DupeGuruME(DupeGuruBase):
self.view.start_job(JobType.ScanDeadTracks, do) self.view.start_job(JobType.ScanDeadTracks, do)
class PyDupeGuru(PyDupeGuruBase):
def __init__(self):
self._init(DupeGuruME)
def removeDeadTracks(self):
self.model.remove_dead_tracks()
def scanDeadTracks(self):
self.model.scan_dead_tracks()
#---Information
def deadTrackCount(self) -> int:
return len(self.model.dead_tracks)
#---Properties
def setMinMatchPercentage_(self, percentage: int):
self.model.scanner.min_match_percentage = percentage
def setScanType_(self, scan_type: int):
try:
self.model.scanner.scan_type = [
ScanType.Filename,
ScanType.Fields,
ScanType.FieldsNoOrder,
ScanType.Tag,
ScanType.Contents,
ScanType.ContentsAudio,
][scan_type]
except IndexError:
pass
def setWordWeighting_(self, words_are_weighted: bool):
self.model.scanner.word_weighting = words_are_weighted
def setMatchSimilarWords_(self, match_similar_words: bool):
self.model.scanner.match_similar_words = match_similar_words
def enable_scanForTag_(self, enable: bool, scan_tag: str):
if enable:
self.model.scanner.scanned_tags.add(scan_tag)
else:
self.model.scanner.scanned_tags.discard(scan_tag)

View File

@@ -16,13 +16,15 @@ from appscript import app, its, CommandError, ApplicationNotFoundError
from hscommon import io from hscommon import io
from hscommon.util import remove_invalid_xml from hscommon.util import remove_invalid_xml
from hscommon.path import Path from hscommon.path import Path
from hscommon.cocoa.objcmin import NSUserDefaults, NSURL
from hscommon.trans import tr from hscommon.trans import tr
from cocoa import proxy
from core.scanner import ScanType
from core import directories from core import directories
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
from .app import PyDupeGuruBase
IPHOTO_PATH = Path('iPhoto Library') IPHOTO_PATH = Path('iPhoto Library')
@@ -49,14 +51,11 @@ class IPhoto(Photo):
return IPHOTO_PATH return IPHOTO_PATH
def get_iphoto_database_path(): def get_iphoto_database_path():
ud = NSUserDefaults.standardUserDefaults() plisturls = proxy.prefValue_inDomain_('iPhotoRecentDatabases', 'com.apple.iApps')
prefs = ud.persistentDomainForName_('com.apple.iApps') if not plisturls:
if prefs is None:
raise directories.InvalidPathError() raise directories.InvalidPathError()
if 'iPhotoRecentDatabases' not in prefs: plistpath = proxy.url2path_(plisturls[0])
raise directories.InvalidPathError() return Path(plistpath)
plisturl = NSURL.URLWithString_(prefs['iPhotoRecentDatabases'][0])
return Path(plisturl.path())
def get_iphoto_pictures(plistpath): def get_iphoto_pictures(plistpath):
if not io.exists(plistpath): if not io.exists(plistpath):
@@ -155,7 +154,11 @@ class DupeGuruPE(DupeGuruBase):
if isinstance(dupe, IPhoto): if isinstance(dupe, IPhoto):
try: try:
a = app('iPhoto') a = app('iPhoto')
[photo] = a.photo_library_album().photos[its.image_path == str(dupe.path)]() album = a.photo_library_album()
if album is None:
msg = "There are communication problems with iPhoto. Try opening iPhoto first, it might solve it."
raise EnvironmentError(msg)
[photo] = album.photos[its.image_path == str(dupe.path)]()
a.remove(photo, timeout=0) a.remove(photo, timeout=0)
except ValueError: except ValueError:
msg = "Could not find photo '{}' in iPhoto Library".format(str(dupe.path)) msg = "Could not find photo '{}' in iPhoto Library".format(str(dupe.path))
@@ -197,3 +200,32 @@ class DupeGuruPE(DupeGuruBase):
return return
DupeGuruBase.start_scanning(self) DupeGuruBase.start_scanning(self)
class PyDupeGuru(PyDupeGuruBase):
def __init__(self):
self._init(DupeGuruPE)
def clearPictureCache(self):
self.model.scanner.clear_picture_cache()
#---Information
def getSelectedDupePath(self) -> str:
return str(self.model.selected_dupe_path())
def getSelectedDupeRefPath(self) -> str:
return str(self.model.selected_dupe_ref_path())
#---Properties
def setScanType_(self, scan_type: int):
try:
self.model.scanner.scan_type = [
ScanType.FuzzyBlock,
ScanType.ExifTimestamp,
][scan_type]
except IndexError:
pass
def setMatchScaled_(self, match_scaled: bool):
self.model.scanner.match_scaled = match_scaled
def setMinMatchPercentage_(self, percentage: int):
self.model.scanner.threshold = percentage

View File

@@ -11,18 +11,19 @@ import os.path as op
from hscommon import io from hscommon import io
from hscommon.path import Path from hscommon.path import Path
from hscommon.cocoa.objcmin import NSWorkspace from cocoa import proxy
from core.scanner import ScanType
from core import fs from core import fs
from core.directories import Directories as DirectoriesBase, DirectoryState from core.directories import Directories as DirectoriesBase, DirectoryState
from core_se.app import DupeGuru as DupeGuruBase from core_se.app import DupeGuru as DupeGuruBase
from .app import PyDupeGuruBase
def is_bundle(str_path): def is_bundle(str_path):
sw = NSWorkspace.sharedWorkspace() uti = proxy.getUTI_(str_path)
uti, error = sw.typeOfFile_error_(str_path, None) if uti is None:
if error is not None:
logging.warning('There was an error trying to detect the UTI of %s', str_path) logging.warning('There was an error trying to detect the UTI of %s', str_path)
return sw.type_conformsToType_(uti, 'com.apple.bundle') or sw.type_conformsToType_(uti, 'com.apple.package') return proxy.type_conformsToType_(uti, 'com.apple.bundle') or proxy.type_conformsToType_(uti, 'com.apple.package')
class Bundle(fs.Folder): class Bundle(fs.Folder):
@classmethod @classmethod
@@ -71,3 +72,31 @@ class DupeGuru(DupeGuruBase):
DupeGuruBase.__init__(self, view, appdata) DupeGuruBase.__init__(self, view, appdata)
self.directories = Directories() self.directories = Directories()
class PyDupeGuru(PyDupeGuruBase):
def __init__(self):
self._init(DupeGuru)
#---Properties
def setMinMatchPercentage_(self, percentage: int):
self.model.scanner.min_match_percentage = int(percentage)
def setScanType_(self, scan_type: int):
try:
self.model.scanner.scan_type = [
ScanType.Filename,
ScanType.Contents,
ScanType.Folders,
][scan_type]
except IndexError:
pass
def setWordWeighting_(self, words_are_weighted: bool):
self.model.scanner.word_weighting = words_are_weighted
def setMatchSimilarWords_(self, match_similar_words: bool):
self.model.scanner.match_similar_words = match_similar_words
def setSizeThreshold_(self, size_threshold: int):
self.model.scanner.size_threshold = size_threshold

View File

@@ -1,13 +1,11 @@
from hscommon.cocoa.inter import signature, PyGUIObject from cocoa.inter import PyGUIObject, GUIObjectView
from core.gui.details_panel import DetailsPanel class DetailsPanelView(GUIObjectView):
pass
class PyDetailsPanel(PyGUIObject): class PyDetailsPanel(PyGUIObject):
py_class = DetailsPanel def numberOfRows(self) -> int:
@signature('i@:') return self.model.row_count()
def numberOfRows(self):
return self.py.row_count()
@signature('@@:@i') def valueForColumn_row_(self, column: str, row: int) -> object:
def valueForColumn_row_(self, column, row): return self.model.row(row)[int(column)]
return self.py.row(row)[int(column)]

View File

@@ -1,17 +1,18 @@
from hscommon.cocoa.inter import PyOutline from objp.util import dontwrap
from cocoa.inter import PyOutline, GUIObjectView
from core.gui.directory_tree import DirectoryTree class DirectoryOutlineView(GUIObjectView):
pass
class PyDirectoryOutline(PyOutline): class PyDirectoryOutline(PyOutline):
py_class = DirectoryTree def addDirectory_(self, path: str):
self.model.add_directory(path)
def addDirectory_(self, path):
self.py.add_directory(path)
def removeSelectedDirectory(self): def removeSelectedDirectory(self):
self.py.remove_selected() self.model.remove_selected()
# python --> cocoa # python --> cocoa
@dontwrap
def refresh_states(self): def refresh_states(self):
# Under cocoa, both refresh() and refresh_states() do the same thing. # Under cocoa, both refresh() and refresh_states() do the same thing.
self.cocoa.refresh() self.callback.refresh()

View File

@@ -1,25 +1,37 @@
from hscommon.cocoa.inter import PyGUIObject from objp.util import pyref, dontwrap
from cocoa.inter import PyGUIObject
from core.gui.extra_fairware_reminder import ExtraFairwareReminder from core.gui.extra_fairware_reminder import ExtraFairwareReminder
class ExtraFairwareReminderView:
def startTimer(self): pass
def stopTimer(self): pass
def setButtonText_(self, text: str): pass;
def enableButton(self): pass
class PyExtraFairwareReminder(PyGUIObject): class PyExtraFairwareReminder(PyGUIObject):
py_class = ExtraFairwareReminder def __init__(self, app: pyref):
model = ExtraFairwareReminder(app.model)
PyGUIObject.__init__(self, model)
def start(self): def start(self):
self.py.start() self.model.start()
def updateButton(self): def updateButton(self):
self.py.update_button() self.model.update_button()
# model --> view # model --> view
@dontwrap
def start_timer(self): def start_timer(self):
self.cocoa.startTimer() self.callback.startTimer()
@dontwrap
def stop_timer(self): def stop_timer(self):
self.cocoa.stopTimer() self.callback.stopTimer()
@dontwrap
def enable_button(self): def enable_button(self):
self.cocoa.enableButton() self.callback.enableButton()
@dontwrap
def set_button_text(self, text): def set_button_text(self, text):
self.cocoa.setButtonText_(text) self.callback.setButtonText_(text)

View File

@@ -1,31 +1,29 @@
from hscommon.cocoa.inter import PyGUIObject, PySelectableList from objp.util import pyref
from cocoa.inter import PyGUIObject, GUIObjectView
from core.gui.prioritize_dialog import PrioritizeDialog from core.gui.prioritize_dialog import PrioritizeDialog
from .prioritize_list import PyPrioritizeList
class PrioritizeDialogView(GUIObjectView):
pass
class PyPrioritizeDialog(PyGUIObject): class PyPrioritizeDialog(PyGUIObject):
py_class = PrioritizeDialog def __init__(self, app: pyref):
model = PrioritizeDialog(app.model)
PyGUIObject.__init__(self, model)
def categoryList(self): def categoryList(self) -> pyref:
if not hasattr(self, '_categoryList'): return self.model.category_list
self._categoryList = PySelectableList.alloc().initWithPy_(self.py.category_list)
return self._categoryList
def criteriaList(self): def criteriaList(self) -> pyref:
if not hasattr(self, '_criteriaList'): return self.model.criteria_list
self._criteriaList = PySelectableList.alloc().initWithPy_(self.py.criteria_list)
return self._criteriaList
def prioritizationList(self): def prioritizationList(self) -> pyref:
if not hasattr(self, '_prioritizationList'): return self.model.prioritization_list
self._prioritizationList = PyPrioritizeList.alloc().initWithPy_(self.py.prioritization_list)
return self._prioritizationList
def addSelected(self): def addSelected(self):
self.py.add_selected() self.model.add_selected()
def removeSelected(self): def removeSelected(self):
self.py.remove_selected() self.model.remove_selected()
def performReprioritization(self): def performReprioritization(self):
self.py.perform_reprioritization() self.model.perform_reprioritization()

View File

@@ -1,7 +1,8 @@
from hscommon.cocoa.inter import signature, PySelectableList from cocoa.inter import PySelectableList, SelectableListView
class PrioritizeListView(SelectableListView):
pass
class PyPrioritizeList(PySelectableList): class PyPrioritizeList(PySelectableList):
@signature('v@:@i') def moveIndexes_toIndex_(self, indexes: list, dest_index: int):
def moveIndexes_toIndex_(self, indexes, dest_index): self.model.move_indexes(indexes, dest_index)
self.py.move_indexes(indexes, dest_index)

View File

@@ -1,10 +1,9 @@
from hscommon.cocoa.inter import PyGUIObject from objp.util import pyref
from cocoa.inter import PyGUIObject
from core.gui.problem_dialog import ProblemDialog
class PyProblemDialog(PyGUIObject): class PyProblemDialog(PyGUIObject):
py_class = ProblemDialog def problemTable(self) -> pyref:
return self.model.problem_table
def revealSelected(self): def revealSelected(self):
self.py.reveal_selected_dupe() self.model.reveal_selected_dupe()

View File

@@ -1,6 +0,0 @@
from hscommon.cocoa.inter import PyTable
from core.gui.problem_table import ProblemTable
class PyProblemTable(PyTable):
py_class = ProblemTable

View File

@@ -1,53 +1,49 @@
from hscommon.cocoa.inter import signature, PyTable from objp.util import dontwrap
from cocoa.inter import PyTable, TableView
class ResultTableView(TableView):
def invalidateMarkings(self): pass
class PyResultTable(PyTable): class PyResultTable(PyTable):
@signature('c@:') def powerMarkerMode(self) -> bool:
def powerMarkerMode(self): return self.model.power_marker
return self.py.power_marker
@signature('v@:c') def setPowerMarkerMode_(self, value: bool):
def setPowerMarkerMode_(self, value): self.model.power_marker = value
self.py.power_marker = value
@signature('c@:') def deltaValuesMode(self) -> bool:
def deltaValuesMode(self): return self.model.delta_values
return self.py.delta_values
@signature('v@:c') def setDeltaValuesMode_(self, value: bool):
def setDeltaValuesMode_(self, value): self.model.delta_values = value
self.py.delta_values = value
def deltaColumns(self): def deltaColumns(self) -> list:
return list(self.py.DELTA_COLUMNS) return list(self.model.DELTA_COLUMNS)
@signature('@@:i@') def valueForRow_column_(self, row_index: int, column: str) -> object:
def valueForRow_column_(self, row_index, column): return self.model.get_row_value(row_index, column)
return self.py.get_row_value(row_index, column)
@signature('c@:@') def renameSelected_(self, newname: str) -> bool:
def renameSelected_(self, newname): return self.model.rename_selected(newname)
return self.py.rename_selected(newname)
@signature('v@:@c') def sortBy_ascending_(self, key: str, asc: bool):
def sortBy_ascending_(self, key, asc): self.model.sort(key, asc)
self.py.sort(key, asc)
def markSelected(self): def markSelected(self):
self.py.app.toggle_selected_mark_state() self.model.app.toggle_selected_mark_state()
def removeSelected(self): def removeSelected(self):
self.py.app.remove_selected() self.model.app.remove_selected()
@signature('i@:') def selectedDupeCount(self) -> int:
def selectedDupeCount(self): return self.model.selected_dupe_count
return self.py.selected_dupe_count
@signature('@@:i') def pathAtIndex_(self, index: int) -> str:
def pathAtIndex_(self, index): row = self.model[index]
row = self.py[index]
return str(row._dupe.path) return str(row._dupe.path)
# python --> cocoa # python --> cocoa
@dontwrap
def invalidate_markings(self): def invalidate_markings(self):
self.cocoa.invalidateMarkings() self.callback.invalidateMarkings()

View File

@@ -1,9 +1,9 @@
from hscommon.cocoa.inter import PyGUIObject from cocoa.inter import PyGUIObject, GUIObjectView
from core.gui.stats_label import StatsLabel class StatsLabelView(GUIObjectView):
pass
class PyStatsLabel(PyGUIObject): class PyStatsLabel(PyGUIObject):
py_class = StatsLabel
def display(self): def display(self) -> str:
return self.py.display return self.model.display

View File

@@ -12,5 +12,4 @@ http://www.hardcoded.net/licenses/bsd_license
#import "PyDupeGuru.h" #import "PyDupeGuru.h"
@interface AppDelegate : AppDelegateBase {} @interface AppDelegate : AppDelegateBase {}
- (PyDupeGuru *)py;
@end @end

View File

@@ -74,8 +74,6 @@ http://www.hardcoded.net/licenses/bsd_license
return [[DirectoryPanelME alloc] initWithParentApp:self]; return [[DirectoryPanelME alloc] initWithParentApp:self];
} }
- (PyDupeGuru *)py { return (PyDupeGuru *)py; }
//Delegate //Delegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ {

View File

@@ -22,6 +22,8 @@
<string>APPL</string> <string>APPL</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>hsft</string> <string>hsft</string>
<key>CFBundleShortVersionString</key>
<string>{version}</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>{version}</string> <string>{version}</string>
<key>NSMainNibFile</key> <key>NSMainNibFile</key>

View File

@@ -1,22 +0,0 @@
/*
Copyright 2011 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 "../base/PyDupeGuru.h"
@interface PyDupeGuru : PyDupeGuruBase
//Scanning options
- (void)setMinWordCount:(NSNumber *)word_count;
- (void)setMinWordLength:(NSNumber *)word_length;
- (void)setWordWeighting:(NSNumber *)words_are_weighted;
- (void)setMatchSimilarWords:(NSNumber *)match_similar_words;
- (void)enable:(NSNumber *)enable scanForTag:(NSString *)tag;
- (void)scanDeadTracks;
- (void)removeDeadTracks;
- (NSInteger)deadTrackCount;
@end

View File

@@ -11,25 +11,25 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Utils.h" #import "Utils.h"
#import "PyDupeGuru.h" #import "PyDupeGuru.h"
#import "Consts.h" #import "Consts.h"
#import "ProgressController.h"
@implementation ResultWindow @implementation ResultWindow
/* Override */ /* Override */
- (void)setScanOptions - (void)setScanOptions
{ {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
PyDupeGuru *_py = (PyDupeGuru *)py; [model setScanType:n2i([ud objectForKey:@"scanType"])];
[_py setScanType:[ud objectForKey:@"scanType"]]; [model enable:n2b([ud objectForKey:@"scanTagTrack"]) scanForTag:@"track"];
[_py enable:[ud objectForKey:@"scanTagTrack"] scanForTag:@"track"]; [model enable:n2b([ud objectForKey:@"scanTagArtist"]) scanForTag:@"artist"];
[_py enable:[ud objectForKey:@"scanTagArtist"] scanForTag:@"artist"]; [model enable:n2b([ud objectForKey:@"scanTagAlbum"]) scanForTag:@"album"];
[_py enable:[ud objectForKey:@"scanTagAlbum"] scanForTag:@"album"]; [model enable:n2b([ud objectForKey:@"scanTagTitle"]) scanForTag:@"title"];
[_py enable:[ud objectForKey:@"scanTagTitle"] scanForTag:@"title"]; [model enable:n2b([ud objectForKey:@"scanTagGenre"]) scanForTag:@"genre"];
[_py enable:[ud objectForKey:@"scanTagGenre"] scanForTag:@"genre"]; [model enable:n2b([ud objectForKey:@"scanTagYear"]) scanForTag:@"year"];
[_py enable:[ud objectForKey:@"scanTagYear"] scanForTag:@"year"]; [model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])];
[_py setMinMatchPercentage:[ud objectForKey:@"minMatchPercentage"]]; [model setWordWeighting:n2b([ud objectForKey:@"wordWeighting"])];
[_py setWordWeighting:[ud objectForKey:@"wordWeighting"]]; [model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
[_py setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; [model setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])];
[_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; [model setMatchSimilarWords:n2b([ud objectForKey:@"matchSimilarWords"])];
[_py setMatchSimilarWords:[ud objectForKey:@"matchSimilarWords"]];
} }
- (void)initResultColumns - (void)initResultColumns
@@ -56,15 +56,15 @@ http://www.hardcoded.net/licenses/bsd_license
{@"dupe_count", 80, 16, 0, YES, nil}, {@"dupe_count", 80, 16, 0, YES, nil},
nil nil
}; };
[[self columns] initializeColumns:defs]; [[table columns] initializeColumns:defs];
NSTableColumn *c = [matches tableColumnWithIdentifier:@"marked"]; NSTableColumn *c = [matches tableColumnWithIdentifier:@"marked"];
[[c dataCell] setButtonType:NSSwitchButton]; [[c dataCell] setButtonType:NSSwitchButton];
[[c dataCell] setControlSize:NSSmallControlSize]; [[c dataCell] setControlSize:NSSmallControlSize];
c = [[self tableView] tableColumnWithIdentifier:@"size"]; c = [matches tableColumnWithIdentifier:@"size"];
[[c dataCell] setAlignment:NSRightTextAlignment]; [[c dataCell] setAlignment:NSRightTextAlignment];
c = [[self tableView] tableColumnWithIdentifier:@"duration"]; c = [matches tableColumnWithIdentifier:@"duration"];
[[c dataCell] setAlignment:NSRightTextAlignment]; [[c dataCell] setAlignment:NSRightTextAlignment];
c = [[self tableView] tableColumnWithIdentifier:@"bitrate"]; c = [matches tableColumnWithIdentifier:@"bitrate"];
[[c dataCell] setAlignment:NSRightTextAlignment]; [[c dataCell] setAlignment:NSRightTextAlignment];
[[table columns] restoreColumns]; [[table columns] restoreColumns];
} }
@@ -72,7 +72,7 @@ http://www.hardcoded.net/licenses/bsd_license
/* Actions */ /* Actions */
- (IBAction)removeDeadTracks:(id)sender - (IBAction)removeDeadTracks:(id)sender
{ {
[(PyDupeGuru *)py scanDeadTracks]; [model scanDeadTracks];
} }
/* Notifications */ /* Notifications */
@@ -81,11 +81,11 @@ http://www.hardcoded.net/licenses/bsd_license
[super jobCompleted:aNotification]; [super jobCompleted:aNotification];
id lastAction = [[ProgressController mainProgressController] jobId]; id lastAction = [[ProgressController mainProgressController] jobId];
if ([lastAction isEqualTo:jobScanDeadTracks]) { if ([lastAction isEqualTo:jobScanDeadTracks]) {
NSInteger deadTrackCount = [(PyDupeGuru *)py deadTrackCount]; NSInteger deadTrackCount = [model deadTrackCount];
if (deadTrackCount > 0) { if (deadTrackCount > 0) {
NSString *msg = TR(@"Your iTunes Library contains %d dead tracks ready to be removed. Continue?"); NSString *msg = TR(@"Your iTunes Library contains %d dead tracks ready to be removed. Continue?");
if ([Dialogs askYesNo:[NSString stringWithFormat:msg,deadTrackCount]] == NSAlertFirstButtonReturn) if ([Dialogs askYesNo:[NSString stringWithFormat:msg,deadTrackCount]] == NSAlertFirstButtonReturn)
[(PyDupeGuru *)py removeDeadTracks]; [model removeDeadTracks];
} }
else { else {
[Dialogs showMessage:TR(@"You have no dead tracks in your iTunes Library")]; [Dialogs showMessage:TR(@"You have no dead tracks in your iTunes Library")];

View File

@@ -7,64 +7,14 @@
from hscommon.trans import install_gettext_trans_under_cocoa from hscommon.trans import install_gettext_trans_under_cocoa
install_gettext_trans_under_cocoa() install_gettext_trans_under_cocoa()
from hscommon.cocoa import signature from cocoa.inter import PySelectableList, PyColumns, PyTable
from core.scanner import ScanType
from inter.app import PyDupeGuruBase
from inter.details_panel import PyDetailsPanel from inter.details_panel import PyDetailsPanel
from inter.directory_outline import PyDirectoryOutline from inter.directory_outline import PyDirectoryOutline
from inter.extra_fairware_reminder import PyExtraFairwareReminder from inter.extra_fairware_reminder import PyExtraFairwareReminder
from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_dialog import PyPrioritizeDialog
from inter.prioritize_list import PyPrioritizeList
from inter.problem_dialog import PyProblemDialog from inter.problem_dialog import PyProblemDialog
from inter.problem_table import PyProblemTable
from inter.result_table import PyResultTable from inter.result_table import PyResultTable
from inter.stats_label import PyStatsLabel from inter.stats_label import PyStatsLabel
from inter.app_me import DupeGuruME from inter.app_me import PyDupeGuru
class PyDupeGuru(PyDupeGuruBase):
def init(self):
self = super(PyDupeGuru,self).init()
self._init(DupeGuruME)
return self
def removeDeadTracks(self):
self.py.remove_dead_tracks()
def scanDeadTracks(self):
self.py.scan_dead_tracks()
#---Information
@signature('i@:')
def deadTrackCount(self):
return len(self.py.dead_tracks)
#---Properties
def setMinMatchPercentage_(self, percentage):
self.py.scanner.min_match_percentage = int(percentage)
def setScanType_(self, scan_type):
try:
self.py.scanner.scan_type = [
ScanType.Filename,
ScanType.Fields,
ScanType.FieldsNoOrder,
ScanType.Tag,
ScanType.Contents,
ScanType.ContentsAudio,
][scan_type]
except IndexError:
pass
def setWordWeighting_(self, words_are_weighted):
self.py.scanner.word_weighting = words_are_weighted
def setMatchSimilarWords_(self, match_similar_words):
self.py.scanner.match_similar_words = match_similar_words
def enable_scanForTag_(self, enable, scan_tag):
if enable:
self.py.scanner.scanned_tags.add(scan_tag)
else:
self.py.scanner.scanned_tags.discard(scan_tag)

View File

@@ -19,11 +19,9 @@
/* End PBXAppleScriptBuildPhase section */ /* End PBXAppleScriptBuildPhase section */
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB411242D00004B0AA7 /* HSGUIController.m */; }; CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB411242D00004B0AA7 /* HSGUIController.m */; };
CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB611242D00004B0AA7 /* HSOutline.m */; }; CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB611242D00004B0AA7 /* HSOutline.m */; };
CE003CC811242D00004B0AA7 /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CB811242D00004B0AA7 /* HSWindowController.m */; };
CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */; }; CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */; };
CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC111242D00004B0AA7 /* HSOutlineView.m */; }; CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC111242D00004B0AA7 /* HSOutlineView.m */; };
CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC311242D00004B0AA7 /* NSIndexPathAdditions.m */; }; CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE003CC311242D00004B0AA7 /* NSIndexPathAdditions.m */; };
@@ -42,15 +40,14 @@
CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; }; CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; };
CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; }; CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE1425880AFB718500BD5167 /* Sparkle.framework */; };
CE1EAA0A12DF3E81009BA949 /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */; }; CE1EAA0A12DF3E81009BA949 /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */; };
CE2239A2148FFE6600B3DC99 /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2239A1148FFE6600B3DC99 /* HSColumns.m */; };
CE2E87F9142BC90A00519A68 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2E87F8142BC90A00519A68 /* Quartz.framework */; }; CE2E87F9142BC90A00519A68 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2E87F8142BC90A00519A68 /* Quartz.framework */; };
CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2E87FC142BC92C00519A68 /* HSQuicklook.m */; }; CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2E87FC142BC92C00519A68 /* HSQuicklook.m */; };
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; };
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; };
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; };
CE4B59C91119919700C06C9E /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE4B59C61119919700C06C9E /* progress.xib */; }; CE4B59C91119919700C06C9E /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE4B59C61119919700C06C9E /* progress.xib */; };
CE4F934912CCA96C0067A3AE /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4F934812CCA96C0067A3AE /* HSAboutBox.m */; }; CE4F934912CCA96C0067A3AE /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4F934812CCA96C0067A3AE /* HSAboutBox.m */; };
CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE10FC6C12E00EC695D /* Dialogs.m */; }; CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE10FC6C12E00EC695D /* Dialogs.m */; };
CE515DF40FC6C12E00EC695D /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */; };
CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE70FC6C12E00EC695D /* ProgressController.m */; }; CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DE70FC6C12E00EC695D /* ProgressController.m */; };
CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF00FC6C12E00EC695D /* Utils.m */; }; CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF00FC6C12E00EC695D /* Utils.m */; };
CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF20FC6C12E00EC695D /* ValueTransformers.m */; }; CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE515DF20FC6C12E00EC695D /* ValueTransformers.m */; };
@@ -63,12 +60,33 @@
CE6E0E9F1054EB97008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0E9E1054EB97008D9390 /* dsa_pub.pem */; }; CE6E0E9F1054EB97008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0E9E1054EB97008D9390 /* dsa_pub.pem */; };
CE74A12412537F06008A8DF0 /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */; }; CE74A12412537F06008A8DF0 /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */; };
CE74A12712537F2E008A8DF0 /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE74A12512537F2E008A8DF0 /* FairwareReminder.xib */; }; CE74A12712537F2E008A8DF0 /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE74A12512537F2E008A8DF0 /* FairwareReminder.xib */; };
CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE848A1809DD85810004CB44 /* Consts.h */; };
CE84C9B21423ADFB0050A6AD /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */; }; CE84C9B21423ADFB0050A6AD /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */; };
CE84C9B31423ADFB0050A6AD /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */; }; CE84C9B31423ADFB0050A6AD /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */; };
CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B61423AE410050A6AD /* HSPopUpList.m */; }; CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B61423AE410050A6AD /* HSPopUpList.m */; };
CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B81423AE410050A6AD /* HSSelectableList.m */; }; CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE84C9B81423AE410050A6AD /* HSSelectableList.m */; };
CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; }; CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; };
CE9705E614C46E7D007A28F6 /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C514C46E7D007A28F6 /* ObjP.m */; };
CE9705E714C46E7D007A28F6 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C714C46E7D007A28F6 /* PyColumns.m */; };
CE9705E814C46E7D007A28F6 /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */; };
CE9705E914C46E7D007A28F6 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */; };
CE9705EA14C46E7D007A28F6 /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */; };
CE9705EB14C46E7D007A28F6 /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */; };
CE9705EC14C46E7D007A28F6 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */; };
CE9705ED14C46E7D007A28F6 /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D314C46E7D007A28F6 /* PyFairware.m */; };
CE9705EE14C46E7D007A28F6 /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D514C46E7D007A28F6 /* PyGUIObject.m */; };
CE9705EF14C46E7D007A28F6 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D714C46E7D007A28F6 /* PyOutline.m */; };
CE9705F014C46E7D007A28F6 /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */; };
CE9705F114C46E7D007A28F6 /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */; };
CE9705F214C46E7D007A28F6 /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */; };
CE9705F314C46E7D007A28F6 /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705DF14C46E7D007A28F6 /* PyResultTable.m */; };
CE9705F414C46E7D007A28F6 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E114C46E7D007A28F6 /* PySelectableList.m */; };
CE9705F514C46E7D007A28F6 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */; };
CE9705F614C46E7D007A28F6 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9705E514C46E7D007A28F6 /* PyTable.m */; };
CE9705F814C46EA3007A28F6 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9705F714C46EA3007A28F6 /* Python */; };
CE9705F914C46EC3007A28F6 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE9705F714C46EA3007A28F6 /* Python */; };
CE9705FF14C46F60007A28F6 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE9705FE14C46F60007A28F6 /* py */; };
CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CE97060014C46F70007A28F6 /* dg_cocoa.py */; };
CE97060314C471F2007A28F6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97060214C471F2007A28F6 /* main.m */; };
CEA14F431461ED63007F01A5 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA14F421461ED63007F01A5 /* locale */; }; CEA14F431461ED63007F01A5 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA14F421461ED63007F01A5 /* locale */; };
CEB14D29124DFC2800FA7481 /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB14D28124DFC2800FA7481 /* ResultTable.m */; }; CEB14D29124DFC2800FA7481 /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB14D28124DFC2800FA7481 /* ResultTable.m */; };
CEB5E07813225C89009F521D /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */; }; CEB5E07813225C89009F521D /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */; };
@@ -88,7 +106,7 @@
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */, CE14259F0AFB719300BD5167 /* Sparkle.framework in CopyFiles */,
CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */, CE9705F914C46EC3007A28F6 /* Python in CopyFiles */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -97,7 +115,6 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
@@ -106,12 +123,8 @@
CE003CB411242D00004B0AA7 /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; CE003CB411242D00004B0AA7 /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; };
CE003CB511242D00004B0AA7 /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; CE003CB511242D00004B0AA7 /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; };
CE003CB611242D00004B0AA7 /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; CE003CB611242D00004B0AA7 /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; };
CE003CB711242D00004B0AA7 /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; };
CE003CB811242D00004B0AA7 /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; };
CE003CB911242D00004B0AA7 /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; CE003CB911242D00004B0AA7 /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; };
CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; };
CE003CBC11242D00004B0AA7 /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; };
CE003CBD11242D00004B0AA7 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE003CC011242D00004B0AA7 /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; CE003CC011242D00004B0AA7 /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; };
CE003CC111242D00004B0AA7 /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; CE003CC111242D00004B0AA7 /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; };
CE003CC211242D00004B0AA7 /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; CE003CC211242D00004B0AA7 /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; };
@@ -120,7 +133,6 @@
CE003CC511242D00004B0AA7 /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; CE003CC511242D00004B0AA7 /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; };
CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; };
CE003CCF11242D2C004B0AA7 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CE05330E12E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; }; CE05330E12E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; };
CE05331012E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; CE05331012E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; };
CE05331212E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; CE05331212E5D3ED0029EF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; };
@@ -141,30 +153,50 @@
CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; };
CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; };
CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE0A0C131175A28100DCA3C6 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE1425880AFB718500BD5167 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; CE1425880AFB718500BD5167 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; };
CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; };
CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; CE1EAA0912DF3E81009BA949 /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; };
CE2239A0148FFE6600B3DC99 /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; };
CE2239A1148FFE6600B3DC99 /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; };
CE2B2B5A1406ABDA0038D15A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; }; CE2B2B5A1406ABDA0038D15A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; };
CE2E87F8142BC90A00519A68 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; CE2E87F8142BC90A00519A68 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
CE2E87FB142BC92C00519A68 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; }; CE2E87FB142BC92C00519A68 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; };
CE2E87FC142BC92C00519A68 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; }; CE2E87FC142BC92C00519A68 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; };
CE335AEE14B393C60000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/about.xib; sourceTree = "<group>"; };
CE335AEF14B393C60000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE335AF014B393C60000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE335AF514B393DC0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ../base/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
CE335AF714B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CE335AF814B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CE335AF914B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CE335AFA14B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/MainMenu.xib; sourceTree = "<group>"; };
CE335AFB14B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE335AFC14B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CE335AFD14B393EE0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CE335B0514B393FB0000AF1A /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/Preferences.xib; sourceTree = "<group>"; };
CE35FCEC14C637B8004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/about.xib; sourceTree = "<group>"; };
CE35FCED14C637B8004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE35FCEE14C637B8004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE35FCF314C637C8004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = ../base/uk.lproj/Localizable.strings; sourceTree = "<group>"; };
CE35FCF514C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CE35FCF614C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CE35FCF714C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CE35FCF814C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/MainMenu.xib; sourceTree = "<group>"; };
CE35FCF914C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE35FCFA14C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CE35FCFB14C637DD004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CE35FD0314C637EC004E4864 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/Preferences.xib; sourceTree = "<group>"; };
CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; };
CE4B59C61119919700C06C9E /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; CE4B59C61119919700C06C9E /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; };
CE4F934712CCA96C0067A3AE /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; }; CE4F934712CCA96C0067A3AE /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; };
CE4F934812CCA96C0067A3AE /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; }; CE4F934812CCA96C0067A3AE /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; };
CE515DE00FC6C12E00EC695D /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; CE515DE00FC6C12E00EC695D /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; };
CE515DE10FC6C12E00EC695D /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; CE515DE10FC6C12E00EC695D /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; };
CE515DE20FC6C12E00EC695D /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; };
CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; };
CE515DE60FC6C12E00EC695D /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; CE515DE60FC6C12E00EC695D /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; };
CE515DE70FC6C12E00EC695D /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; CE515DE70FC6C12E00EC695D /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; };
CE515DE80FC6C12E00EC695D /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; };
CE515DEF0FC6C12E00EC695D /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; CE515DEF0FC6C12E00EC695D /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; };
CE515DF00FC6C12E00EC695D /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; CE515DF00FC6C12E00EC695D /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; };
CE515DF10FC6C12E00EC695D /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; CE515DF10FC6C12E00EC695D /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; };
@@ -174,7 +206,6 @@
CE515E170FC6C19300EC695D /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; CE515E170FC6C19300EC695D /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; };
CE515E180FC6C19300EC695D /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; CE515E180FC6C19300EC695D /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; };
CE515E190FC6C19300EC695D /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; CE515E190FC6C19300EC695D /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; };
CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
CE515E1B0FC6C19300EC695D /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE515E1B0FC6C19300EC695D /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE515E1C0FC6C19300EC695D /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE515E1C0FC6C19300EC695D /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE578301124DFC660004769C /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; CE578301124DFC660004769C /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; };
@@ -198,7 +229,6 @@
CE74255F1460318D002F8E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; }; CE74255F1460318D002F8E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; };
CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; };
CE74A12312537F06008A8DF0 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; };
CE74A12612537F2E008A8DF0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE74A12612537F2E008A8DF0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE7A6992146442F80007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = ../base/it.lproj/Localizable.strings; sourceTree = "<group>"; }; CE7A6992146442F80007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = ../base/it.lproj/Localizable.strings; sourceTree = "<group>"; };
CE7A6998146443090007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DetailsPanel.xib; sourceTree = "<group>"; }; CE7A6998146443090007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
@@ -217,23 +247,68 @@
CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; };
CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; };
CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; };
CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; };
CE84C9B41423AE2A0050A6AD /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; };
CE84C9B51423AE410050A6AD /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; CE84C9B51423AE410050A6AD /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; };
CE84C9B61423AE410050A6AD /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; CE84C9B61423AE410050A6AD /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; };
CE84C9B71423AE410050A6AD /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; CE84C9B71423AE410050A6AD /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; };
CE84C9B81423AE410050A6AD /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; }; CE84C9B81423AE410050A6AD /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; };
CE84C9BC1423AF200050A6AD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CE84C9BC1423AF200050A6AD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE9705C414C46E7D007A28F6 /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; };
CE9705C514C46E7D007A28F6 /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; };
CE9705C614C46E7D007A28F6 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; };
CE9705C714C46E7D007A28F6 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; };
CE9705C814C46E7D007A28F6 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; };
CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; };
CE9705CA14C46E7D007A28F6 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; };
CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; };
CE9705CC14C46E7D007A28F6 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; };
CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; };
CE9705CE14C46E7D007A28F6 /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; };
CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; };
CE9705D014C46E7D007A28F6 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; };
CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; };
CE9705D214C46E7D007A28F6 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; };
CE9705D314C46E7D007A28F6 /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; };
CE9705D414C46E7D007A28F6 /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; };
CE9705D514C46E7D007A28F6 /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; };
CE9705D614C46E7D007A28F6 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE9705D714C46E7D007A28F6 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; };
CE9705D814C46E7D007A28F6 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; };
CE9705DA14C46E7D007A28F6 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; };
CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; };
CE9705DC14C46E7D007A28F6 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; };
CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; };
CE9705DE14C46E7D007A28F6 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; };
CE9705DF14C46E7D007A28F6 /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; };
CE9705E014C46E7D007A28F6 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; };
CE9705E114C46E7D007A28F6 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; };
CE9705E214C46E7D007A28F6 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; };
CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; };
CE9705E414C46E7D007A28F6 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE9705E514C46E7D007A28F6 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; };
CE9705F714C46EA3007A28F6 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; };
CE9705FE14C46F60007A28F6 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; };
CE97060014C46F70007A28F6 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; };
CE97060214C471F2007A28F6 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; };
CEA14F421461ED63007F01A5 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; }; CEA14F421461ED63007F01A5 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; };
CEB14D26124DFC2800FA7481 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; };
CEB14D27124DFC2800FA7481 /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; CEB14D27124DFC2800FA7481 /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; };
CEB14D28124DFC2800FA7481 /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; CEB14D28124DFC2800FA7481 /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; };
CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; };
CEB5E07713225C89009F521D /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CEB5E07C13225CA2009F521D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CEB5E07C13225CA2009F521D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CEB5E07E13225CB8009F521D /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CEB5E07E13225CB8009F521D /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CEC3D37C14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CEC3D37D14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CEC3D37E14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CEC3D37F14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/MainMenu.xib; sourceTree = "<group>"; };
CEC3D38014911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CEC3D38114911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CEC3D38214911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CEC3D38B14911263006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = hy.lproj/Preferences.xib; sourceTree = "<group>"; };
CEC3D38D14911274006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = ../base/hy.lproj/Localizable.strings; sourceTree = "<group>"; };
CEC3D38F14911288006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/about.xib; sourceTree = "<group>"; };
CEC3D39014911288006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CEC3D39114911288006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CEC8F3091416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/about.xib; sourceTree = "<group>"; }; CEC8F3091416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/about.xib; sourceTree = "<group>"; };
CEC8F30A1416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CEC8F30A1416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CEC8F30B1416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; CEC8F30B1416A0D2004D28F3 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
@@ -248,8 +323,6 @@
CECE37A31423EA980005187F /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CECE37A31423EA980005187F /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CECE37A41423EA980005187F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CECE37A41423EA980005187F /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CECE37A51423EA980005187F /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CECE37A51423EA980005187F /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; };
CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; };
CEDF07A1112493B200EE5BC0 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; CEDF07A1112493B200EE5BC0 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; };
CEDF07A2112493B200EE5BC0 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; CEDF07A2112493B200EE5BC0 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; };
CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; }; CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; };
@@ -268,7 +341,6 @@
CEF5770C13CDFB250083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ResultWindow.xib; sourceTree = SOURCE_ROOT; }; CEF5770C13CDFB250083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ResultWindow.xib; sourceTree = SOURCE_ROOT; };
CEF5770D13CDFB310083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Preferences.xib; sourceTree = "<group>"; }; CEF5770D13CDFB310083CB30 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Preferences.xib; sourceTree = "<group>"; };
CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; }; CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; };
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -279,6 +351,7 @@
CE2E87F9142BC90A00519A68 /* Quartz.framework in Frameworks */, CE2E87F9142BC90A00519A68 /* Quartz.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */, CE1425890AFB718500BD5167 /* Sparkle.framework in Frameworks */,
CE9705F814C46EA3007A28F6 /* Python in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -288,13 +361,11 @@
080E96DDFE201D6D7F000001 /* DGME */ = { 080E96DDFE201D6D7F000001 /* DGME */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
29B97316FDCFA39411CA2CEA /* main.m */,
CE381C9509914ACE003581CE /* AppDelegate.h */, CE381C9509914ACE003581CE /* AppDelegate.h */,
CE381C9409914ACE003581CE /* AppDelegate.m */, CE381C9409914ACE003581CE /* AppDelegate.m */,
CE848A1809DD85810004CB44 /* Consts.h */, CE848A1809DD85810004CB44 /* Consts.h */,
CE68EE6509ABC48000971085 /* DirectoryPanel.h */, CE68EE6509ABC48000971085 /* DirectoryPanel.h */,
CE68EE6609ABC48000971085 /* DirectoryPanel.m */, CE68EE6609ABC48000971085 /* DirectoryPanel.m */,
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */,
CE381C9B09914ADF003581CE /* ResultWindow.h */, CE381C9B09914ADF003581CE /* ResultWindow.h */,
CE381C9A09914ADF003581CE /* ResultWindow.m */, CE381C9A09914ADF003581CE /* ResultWindow.m */,
); );
@@ -304,6 +375,7 @@
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE9705F714C46EA3007A28F6 /* Python */,
CE1425880AFB718500BD5167 /* Sparkle.framework */, CE1425880AFB718500BD5167 /* Sparkle.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
CE2E87F8142BC90A00519A68 /* Quartz.framework */, CE2E87F8142BC90A00519A68 /* Quartz.framework */,
@@ -334,6 +406,7 @@
children = ( children = (
080E96DDFE201D6D7F000001 /* DGME */, 080E96DDFE201D6D7F000001 /* DGME */,
CE515E140FC6C17900EC695D /* dgbase */, CE515E140FC6C17900EC695D /* dgbase */,
CE9705C314C46E7D007A28F6 /* autogen */,
CE515DDD0FC6C09400EC695D /* cocoalib */, CE515DDD0FC6C09400EC695D /* cocoalib */,
29B97317FDCFA39411CA2CEA /* Resources */, 29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */, 29B97323FDCFA39411CA2CEA /* Frameworks */,
@@ -345,9 +418,10 @@
29B97317FDCFA39411CA2CEA /* Resources */ = { 29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE97060014C46F70007A28F6 /* dg_cocoa.py */,
CE9705FE14C46F60007A28F6 /* py */,
CEA14F421461ED63007F01A5 /* locale */, CEA14F421461ED63007F01A5 /* locale */,
CE073F5409CAE1A3005C1D2F /* help */, CE073F5409CAE1A3005C1D2F /* help */,
CE381CF509915304003581CE /* dg_cocoa.plugin */,
CEFC294309C89E0000D9F998 /* images */, CEFC294309C89E0000D9F998 /* images */,
CE05330C12E5D3D70029EF25 /* xib */, CE05330C12E5D3D70029EF25 /* xib */,
CEEB135109C837A2004D2330 /* dupeguru.icns */, CEEB135109C837A2004D2330 /* dupeguru.icns */,
@@ -370,14 +444,14 @@
CE003CB211242D00004B0AA7 /* controllers */ = { CE003CB211242D00004B0AA7 /* controllers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE2239A0148FFE6600B3DC99 /* HSColumns.h */,
CE2239A1148FFE6600B3DC99 /* HSColumns.m */,
CE003CB311242D00004B0AA7 /* HSGUIController.h */, CE003CB311242D00004B0AA7 /* HSGUIController.h */,
CE003CB411242D00004B0AA7 /* HSGUIController.m */, CE003CB411242D00004B0AA7 /* HSGUIController.m */,
CE003CB511242D00004B0AA7 /* HSOutline.h */, CE003CB511242D00004B0AA7 /* HSOutline.h */,
CE003CB611242D00004B0AA7 /* HSOutline.m */, CE003CB611242D00004B0AA7 /* HSOutline.m */,
CE0A0BFE1175A1C000DCA3C6 /* HSTable.h */, CE0A0BFE1175A1C000DCA3C6 /* HSTable.h */,
CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */, CE0A0BFF1175A1C000DCA3C6 /* HSTable.m */,
CE003CB711242D00004B0AA7 /* HSWindowController.h */,
CE003CB811242D00004B0AA7 /* HSWindowController.m */,
CE84C9B51423AE410050A6AD /* HSPopUpList.h */, CE84C9B51423AE410050A6AD /* HSPopUpList.h */,
CE84C9B61423AE410050A6AD /* HSPopUpList.m */, CE84C9B61423AE410050A6AD /* HSPopUpList.m */,
CE84C9B71423AE410050A6AD /* HSSelectableList.h */, CE84C9B71423AE410050A6AD /* HSSelectableList.h */,
@@ -387,18 +461,6 @@
path = ../../cocoalib/controllers; path = ../../cocoalib/controllers;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
}; };
CE003CBB11242D00004B0AA7 /* proxies */ = {
isa = PBXGroup;
children = (
CE003CBC11242D00004B0AA7 /* PyGUI.h */,
CE003CBD11242D00004B0AA7 /* PyOutline.h */,
CE0A0C131175A28100DCA3C6 /* PyTable.h */,
CE84C9B41423AE2A0050A6AD /* PySelectableList.h */,
);
name = proxies;
path = ../../cocoalib/proxies;
sourceTree = SOURCE_ROOT;
};
CE003CBF11242D00004B0AA7 /* views */ = { CE003CBF11242D00004B0AA7 /* views */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -446,16 +508,12 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE003CB211242D00004B0AA7 /* controllers */, CE003CB211242D00004B0AA7 /* controllers */,
CE003CBB11242D00004B0AA7 /* proxies */,
CE003CBF11242D00004B0AA7 /* views */, CE003CBF11242D00004B0AA7 /* views */,
CE4B59C41119919700C06C9E /* xib */, CE4B59C41119919700C06C9E /* xib */,
CE515DE00FC6C12E00EC695D /* Dialogs.h */, CE515DE00FC6C12E00EC695D /* Dialogs.h */,
CE515DE10FC6C12E00EC695D /* Dialogs.m */, CE515DE10FC6C12E00EC695D /* Dialogs.m */,
CE515DE20FC6C12E00EC695D /* HSErrorReportWindow.h */,
CE515DE30FC6C12E00EC695D /* HSErrorReportWindow.m */,
CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */, CE74A12112537F06008A8DF0 /* HSFairwareReminder.h */,
CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */, CE74A12212537F06008A8DF0 /* HSFairwareReminder.m */,
CE74A12312537F06008A8DF0 /* PyFairware.h */,
CE4F934712CCA96C0067A3AE /* HSAboutBox.h */, CE4F934712CCA96C0067A3AE /* HSAboutBox.h */,
CE4F934812CCA96C0067A3AE /* HSAboutBox.m */, CE4F934812CCA96C0067A3AE /* HSAboutBox.m */,
CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */, CE1EAA0812DF3E81009BA949 /* HSRecentFiles.h */,
@@ -466,7 +524,6 @@
CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */, CE003CBA11242D00004B0AA7 /* NSEventAdditions.m */,
CE515DE60FC6C12E00EC695D /* ProgressController.h */, CE515DE60FC6C12E00EC695D /* ProgressController.h */,
CE515DE70FC6C12E00EC695D /* ProgressController.m */, CE515DE70FC6C12E00EC695D /* ProgressController.m */,
CE515DE80FC6C12E00EC695D /* PyApp.h */,
CE515DEF0FC6C12E00EC695D /* Utils.h */, CE515DEF0FC6C12E00EC695D /* Utils.h */,
CE515DF00FC6C12E00EC695D /* Utils.m */, CE515DF00FC6C12E00EC695D /* Utils.m */,
CE515DF10FC6C12E00EC695D /* ValueTransformers.h */, CE515DF10FC6C12E00EC695D /* ValueTransformers.h */,
@@ -480,40 +537,74 @@
children = ( children = (
CEB14D27124DFC2800FA7481 /* ResultTable.h */, CEB14D27124DFC2800FA7481 /* ResultTable.h */,
CEB14D28124DFC2800FA7481 /* ResultTable.m */, CEB14D28124DFC2800FA7481 /* ResultTable.m */,
CEB14D26124DFC2800FA7481 /* PyResultTable.h */,
CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */, CE003CCD11242D2C004B0AA7 /* DirectoryOutline.h */,
CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */, CE003CCE11242D2C004B0AA7 /* DirectoryOutline.m */,
CE003CCF11242D2C004B0AA7 /* PyDirectoryOutline.h */,
CE515E150FC6C19300EC695D /* AppDelegate.h */, CE515E150FC6C19300EC695D /* AppDelegate.h */,
CE515E160FC6C19300EC695D /* AppDelegate.m */, CE515E160FC6C19300EC695D /* AppDelegate.m */,
CE515E1A0FC6C19300EC695D /* PyDupeGuru.h */,
CE515E170FC6C19300EC695D /* Consts.h */, CE515E170FC6C19300EC695D /* Consts.h */,
CE6032BE0FE6784C007E33FF /* DetailsPanel.h */, CE6032BE0FE6784C007E33FF /* DetailsPanel.h */,
CE6032BF0FE6784C007E33FF /* DetailsPanel.m */, CE6032BF0FE6784C007E33FF /* DetailsPanel.m */,
CED0A591111C9FD10020AD7D /* PyDetailsPanel.h */,
CE515E180FC6C19300EC695D /* DirectoryPanel.h */, CE515E180FC6C19300EC695D /* DirectoryPanel.h */,
CE515E190FC6C19300EC695D /* DirectoryPanel.m */, CE515E190FC6C19300EC695D /* DirectoryPanel.m */,
CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */, CE0A0C011175A1DE00DCA3C6 /* ProblemDialog.h */,
CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */, CE0A0C021175A1DE00DCA3C6 /* ProblemDialog.m */,
CE0A0C031175A1DE00DCA3C6 /* PyProblemDialog.h */,
CE515E1B0FC6C19300EC695D /* ResultWindow.h */, CE515E1B0FC6C19300EC695D /* ResultWindow.h */,
CE515E1C0FC6C19300EC695D /* ResultWindow.m */, CE515E1C0FC6C19300EC695D /* ResultWindow.m */,
CEDF07A1112493B200EE5BC0 /* StatsLabel.h */, CEDF07A1112493B200EE5BC0 /* StatsLabel.h */,
CEDF07A2112493B200EE5BC0 /* StatsLabel.m */, CEDF07A2112493B200EE5BC0 /* StatsLabel.m */,
CEDF07A0112493B200EE5BC0 /* PyStatsLabel.h */,
CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */, CEB5E07513225C89009F521D /* ExtraFairwareReminder.h */,
CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */, CEB5E07613225C89009F521D /* ExtraFairwareReminder.m */,
CEB5E07713225C89009F521D /* PyExtraFairwareReminder.h */,
CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */, CE84C9AC1423ADFB0050A6AD /* PrioritizeDialog.h */,
CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */, CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */,
CE84C9B01423ADFB0050A6AD /* PyPrioritizeDialog.h */,
CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */, CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */,
CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */, CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */,
CE84C9B11423ADFB0050A6AD /* PyPrioritizeList.h */, CE97060214C471F2007A28F6 /* main.m */,
); );
name = dgbase; name = dgbase;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
CE9705C314C46E7D007A28F6 /* autogen */ = {
isa = PBXGroup;
children = (
CE9705C414C46E7D007A28F6 /* ObjP.h */,
CE9705C514C46E7D007A28F6 /* ObjP.m */,
CE9705C614C46E7D007A28F6 /* PyColumns.h */,
CE9705C714C46E7D007A28F6 /* PyColumns.m */,
CE9705C814C46E7D007A28F6 /* PyDetailsPanel.h */,
CE9705C914C46E7D007A28F6 /* PyDetailsPanel.m */,
CE9705CA14C46E7D007A28F6 /* PyDirectoryOutline.h */,
CE9705CB14C46E7D007A28F6 /* PyDirectoryOutline.m */,
CE9705CC14C46E7D007A28F6 /* PyDupeGuru.h */,
CE9705CD14C46E7D007A28F6 /* PyDupeGuru.m */,
CE9705CE14C46E7D007A28F6 /* PyDupeGuruBase.h */,
CE9705CF14C46E7D007A28F6 /* PyDupeGuruBase.m */,
CE9705D014C46E7D007A28F6 /* PyExtraFairwareReminder.h */,
CE9705D114C46E7D007A28F6 /* PyExtraFairwareReminder.m */,
CE9705D214C46E7D007A28F6 /* PyFairware.h */,
CE9705D314C46E7D007A28F6 /* PyFairware.m */,
CE9705D414C46E7D007A28F6 /* PyGUIObject.h */,
CE9705D514C46E7D007A28F6 /* PyGUIObject.m */,
CE9705D614C46E7D007A28F6 /* PyOutline.h */,
CE9705D714C46E7D007A28F6 /* PyOutline.m */,
CE9705D814C46E7D007A28F6 /* PyPrioritizeDialog.h */,
CE9705D914C46E7D007A28F6 /* PyPrioritizeDialog.m */,
CE9705DA14C46E7D007A28F6 /* PyPrioritizeList.h */,
CE9705DB14C46E7D007A28F6 /* PyPrioritizeList.m */,
CE9705DC14C46E7D007A28F6 /* PyProblemDialog.h */,
CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */,
CE9705DE14C46E7D007A28F6 /* PyResultTable.h */,
CE9705DF14C46E7D007A28F6 /* PyResultTable.m */,
CE9705E014C46E7D007A28F6 /* PySelectableList.h */,
CE9705E114C46E7D007A28F6 /* PySelectableList.m */,
CE9705E214C46E7D007A28F6 /* PyStatsLabel.h */,
CE9705E314C46E7D007A28F6 /* PyStatsLabel.m */,
CE9705E414C46E7D007A28F6 /* PyTable.h */,
CE9705E514C46E7D007A28F6 /* PyTable.m */,
);
name = autogen;
path = ../autogen;
sourceTree = "<group>";
};
CEFC294309C89E0000D9F998 /* images */ = { CEFC294309C89E0000D9F998 /* images */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -568,6 +659,9 @@
zh_CN, zh_CN,
cs, cs,
it, it,
hy,
ru,
uk,
); );
mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */; mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */;
projectDirPath = ""; projectDirPath = "";
@@ -583,7 +677,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */,
CE073F6309CAE1A3005C1D2F /* help in Resources */, CE073F6309CAE1A3005C1D2F /* help in Resources */,
CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */,
CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, CEFC294609C89E3D00D9F998 /* folder32.png in Resources */,
@@ -602,6 +695,8 @@
CEF3185A13D8660000B8CDCA /* ErrorReportWindow.xib in Resources */, CEF3185A13D8660000B8CDCA /* ErrorReportWindow.xib in Resources */,
CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */, CE84C9BD1423AF200050A6AD /* PrioritizeDialog.xib in Resources */,
CEA14F431461ED63007F01A5 /* locale in Resources */, CEA14F431461ED63007F01A5 /* locale in Resources */,
CE9705FF14C46F60007A28F6 /* py in Resources */,
CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -612,12 +707,10 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, CE381C9609914ACE003581CE /* AppDelegate.m in Sources */,
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */,
CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */, CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */,
CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */, CE515DF30FC6C12E00EC695D /* Dialogs.m in Sources */,
CE515DF40FC6C12E00EC695D /* HSErrorReportWindow.m in Sources */,
CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */, CE515DF60FC6C12E00EC695D /* ProgressController.m in Sources */,
CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */, CE515DFA0FC6C12E00EC695D /* Utils.m in Sources */,
CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */, CE515DFB0FC6C12E00EC695D /* ValueTransformers.m in Sources */,
@@ -627,7 +720,6 @@
CE6032C00FE6784C007E33FF /* DetailsPanel.m in Sources */, CE6032C00FE6784C007E33FF /* DetailsPanel.m in Sources */,
CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */, CE003CC611242D00004B0AA7 /* HSGUIController.m in Sources */,
CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */, CE003CC711242D00004B0AA7 /* HSOutline.m in Sources */,
CE003CC811242D00004B0AA7 /* HSWindowController.m in Sources */,
CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */, CE003CC911242D00004B0AA7 /* NSEventAdditions.m in Sources */,
CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */, CE003CCA11242D00004B0AA7 /* HSOutlineView.m in Sources */,
CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */, CE003CCB11242D00004B0AA7 /* NSIndexPathAdditions.m in Sources */,
@@ -647,6 +739,25 @@
CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */, CE84C9B91423AE410050A6AD /* HSPopUpList.m in Sources */,
CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */, CE84C9BA1423AE410050A6AD /* HSSelectableList.m in Sources */,
CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */, CE2E87FD142BC92C00519A68 /* HSQuicklook.m in Sources */,
CE2239A2148FFE6600B3DC99 /* HSColumns.m in Sources */,
CE9705E614C46E7D007A28F6 /* ObjP.m in Sources */,
CE9705E714C46E7D007A28F6 /* PyColumns.m in Sources */,
CE9705E814C46E7D007A28F6 /* PyDetailsPanel.m in Sources */,
CE9705E914C46E7D007A28F6 /* PyDirectoryOutline.m in Sources */,
CE9705EA14C46E7D007A28F6 /* PyDupeGuru.m in Sources */,
CE9705EB14C46E7D007A28F6 /* PyDupeGuruBase.m in Sources */,
CE9705EC14C46E7D007A28F6 /* PyExtraFairwareReminder.m in Sources */,
CE9705ED14C46E7D007A28F6 /* PyFairware.m in Sources */,
CE9705EE14C46E7D007A28F6 /* PyGUIObject.m in Sources */,
CE9705EF14C46E7D007A28F6 /* PyOutline.m in Sources */,
CE9705F014C46E7D007A28F6 /* PyPrioritizeDialog.m in Sources */,
CE9705F114C46E7D007A28F6 /* PyPrioritizeList.m in Sources */,
CE9705F214C46E7D007A28F6 /* PyProblemDialog.m in Sources */,
CE9705F314C46E7D007A28F6 /* PyResultTable.m in Sources */,
CE9705F414C46E7D007A28F6 /* PySelectableList.m in Sources */,
CE9705F514C46E7D007A28F6 /* PyStatsLabel.m in Sources */,
CE9705F614C46E7D007A28F6 /* PyTable.m in Sources */,
CE97060314C471F2007A28F6 /* main.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -662,6 +773,9 @@
CEC8F3141416A0FC004D28F3 /* zh_CN */, CEC8F3141416A0FC004D28F3 /* zh_CN */,
CE74255114603152002F8E3E /* cs */, CE74255114603152002F8E3E /* cs */,
CE7A6998146443090007D927 /* it */, CE7A6998146443090007D927 /* it */,
CEC3D37C14911253006B1A91 /* hy */,
CE335AF714B393EE0000AF1A /* ru */,
CE35FCF514C637DD004E4864 /* uk */,
); );
name = DetailsPanel.xib; name = DetailsPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -675,6 +789,9 @@
CEC8F3151416A0FC004D28F3 /* zh_CN */, CEC8F3151416A0FC004D28F3 /* zh_CN */,
CE74255214603152002F8E3E /* cs */, CE74255214603152002F8E3E /* cs */,
CE7A6999146443090007D927 /* it */, CE7A6999146443090007D927 /* it */,
CEC3D37D14911253006B1A91 /* hy */,
CE335AF814B393EE0000AF1A /* ru */,
CE35FCF614C637DD004E4864 /* uk */,
); );
name = DirectoryPanel.xib; name = DirectoryPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -688,6 +805,9 @@
CEC8F3171416A0FC004D28F3 /* zh_CN */, CEC8F3171416A0FC004D28F3 /* zh_CN */,
CE74255414603152002F8E3E /* cs */, CE74255414603152002F8E3E /* cs */,
CE7A699B146443090007D927 /* it */, CE7A699B146443090007D927 /* it */,
CEC3D37F14911253006B1A91 /* hy */,
CE335AFA14B393EE0000AF1A /* ru */,
CE35FCF814C637DD004E4864 /* uk */,
); );
name = MainMenu.xib; name = MainMenu.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -701,6 +821,9 @@
CEC8F3181416A0FC004D28F3 /* zh_CN */, CEC8F3181416A0FC004D28F3 /* zh_CN */,
CE74255614603152002F8E3E /* cs */, CE74255614603152002F8E3E /* cs */,
CE7A699D146443090007D927 /* it */, CE7A699D146443090007D927 /* it */,
CEC3D38114911253006B1A91 /* hy */,
CE335AFC14B393EE0000AF1A /* ru */,
CE35FCFA14C637DD004E4864 /* uk */,
); );
name = ProblemDialog.xib; name = ProblemDialog.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -714,6 +837,9 @@
CEC8F3191416A0FC004D28F3 /* zh_CN */, CEC8F3191416A0FC004D28F3 /* zh_CN */,
CE74255714603152002F8E3E /* cs */, CE74255714603152002F8E3E /* cs */,
CE7A699E146443090007D927 /* it */, CE7A699E146443090007D927 /* it */,
CEC3D38214911253006B1A91 /* hy */,
CE335AFD14B393EE0000AF1A /* ru */,
CE35FCFB14C637DD004E4864 /* uk */,
); );
name = ResultWindow.xib; name = ResultWindow.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -727,6 +853,9 @@
CEC8F3201416A109004D28F3 /* zh_CN */, CEC8F3201416A109004D28F3 /* zh_CN */,
CE74255F1460318D002F8E3E /* cs */, CE74255F1460318D002F8E3E /* cs */,
CE7A69A6146443170007D927 /* it */, CE7A69A6146443170007D927 /* it */,
CEC3D38B14911263006B1A91 /* hy */,
CE335B0514B393FB0000AF1A /* ru */,
CE35FD0314C637EC004E4864 /* uk */,
); );
name = Preferences.xib; name = Preferences.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -740,6 +869,9 @@
CEC8F3111416A0F0004D28F3 /* zh_CN */, CEC8F3111416A0F0004D28F3 /* zh_CN */,
CE74254414603143002F8E3E /* cs */, CE74254414603143002F8E3E /* cs */,
CE7A6992146442F80007D927 /* it */, CE7A6992146442F80007D927 /* it */,
CEC3D38D14911274006B1A91 /* hy */,
CE335AF514B393DC0000AF1A /* ru */,
CE35FCF314C637C8004E4864 /* uk */,
); );
name = Localizable.strings; name = Localizable.strings;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -753,6 +885,9 @@
CEC8F30B1416A0D2004D28F3 /* zh_CN */, CEC8F30B1416A0D2004D28F3 /* zh_CN */,
CE74253D14603120002F8E3E /* cs */, CE74253D14603120002F8E3E /* cs */,
CE7A69AA146443360007D927 /* it */, CE7A69AA146443360007D927 /* it */,
CEC3D39114911288006B1A91 /* hy */,
CE335AF014B393C60000AF1A /* ru */,
CE35FCEE14C637B8004E4864 /* uk */,
); );
name = FairwareReminder.xib; name = FairwareReminder.xib;
path = ../../cocoalib/xib; path = ../../cocoalib/xib;
@@ -767,6 +902,9 @@
CECE37A51423EA980005187F /* zh_CN */, CECE37A51423EA980005187F /* zh_CN */,
CE74255514603152002F8E3E /* cs */, CE74255514603152002F8E3E /* cs */,
CE7A699C146443090007D927 /* it */, CE7A699C146443090007D927 /* it */,
CEC3D38014911253006B1A91 /* hy */,
CE335AFB14B393EE0000AF1A /* ru */,
CE35FCF914C637DD004E4864 /* uk */,
); );
name = PrioritizeDialog.xib; name = PrioritizeDialog.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -780,6 +918,9 @@
CEC8F3161416A0FC004D28F3 /* zh_CN */, CEC8F3161416A0FC004D28F3 /* zh_CN */,
CE74255314603152002F8E3E /* cs */, CE74255314603152002F8E3E /* cs */,
CE7A699A146443090007D927 /* it */, CE7A699A146443090007D927 /* it */,
CEC3D37E14911253006B1A91 /* hy */,
CE335AF914B393EE0000AF1A /* ru */,
CE35FCF714C637DD004E4864 /* uk */,
); );
name = ExtraFairwareReminder.xib; name = ExtraFairwareReminder.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -793,6 +934,9 @@
CEC8F3091416A0D2004D28F3 /* zh_CN */, CEC8F3091416A0D2004D28F3 /* zh_CN */,
CE74253B14603120002F8E3E /* cs */, CE74253B14603120002F8E3E /* cs */,
CE7A69A8146443360007D927 /* it */, CE7A69A8146443360007D927 /* it */,
CEC3D38F14911288006B1A91 /* hy */,
CE335AEE14B393C60000AF1A /* ru */,
CE35FCEC14C637B8004E4864 /* uk */,
); );
name = about.xib; name = about.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -806,6 +950,9 @@
CEC8F30A1416A0D2004D28F3 /* zh_CN */, CEC8F30A1416A0D2004D28F3 /* zh_CN */,
CE74253C14603120002F8E3E /* cs */, CE74253C14603120002F8E3E /* cs */,
CE7A69A9146443360007D927 /* it */, CE7A69A9146443360007D927 /* it */,
CEC3D39014911288006B1A91 /* hy */,
CE335AEF14B393C60000AF1A /* ru */,
CE35FCED14C637B8004E4864 /* uk */,
); );
name = ErrorReportWindow.xib; name = ErrorReportWindow.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -816,9 +963,16 @@
C01FCF4C08A954540054247B /* release */ = { C01FCF4C08A954540054247B /* release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications"; INSTALL_PATH = "$(PROJECT_DIR)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../build\"",
);
PRODUCT_NAME = "dupeGuru ME"; PRODUCT_NAME = "dupeGuru ME";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
@@ -829,8 +983,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -841,8 +995,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(NATIVE_ARCH_ACTUAL)"; ARCHS = "$(NATIVE_ARCH_ACTUAL)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -851,8 +1005,15 @@
CED596C6111AF56D00C0CF2B /* dev */ = { CED596C6111AF56D00C0CF2B /* dev */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications"; INSTALL_PATH = "$(PROJECT_DIR)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../build\"",
);
PRODUCT_NAME = "dupeGuru ME"; PRODUCT_NAME = "dupeGuru ME";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };

View File

@@ -1,23 +0,0 @@
/*
Copyright 2011 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 "Utils.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[Utils setPluginName:@"dg_cocoa"];
NSString *pluginPath = [[NSBundle mainBundle]
pathForResource:@"dg_cocoa"
ofType:@"plugin"];
NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath];
[pluginBundle load];
[pool release];
return NSApplicationMain(argc, (const char **) argv);
}

View File

@@ -8,8 +8,6 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "../base/AppDelegate.h" #import "../base/AppDelegate.h"
#import "PyDupeGuru.h"
@interface AppDelegate : AppDelegateBase {} @interface AppDelegate : AppDelegateBase {}
- (PyDupeGuru *)py;
@end @end

View File

@@ -64,11 +64,9 @@ http://www.hardcoded.net/licenses/bsd_license
- (DetailsPanel *)createDetailsPanel - (DetailsPanel *)createDetailsPanel
{ {
return [[DetailsPanelPE alloc] initWithPy:py]; return [[DetailsPanelPE alloc] initWithApp:model];
} }
- (PyDupeGuru *)py { return (PyDupeGuru *)py; }
//Delegate //Delegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ {

View File

@@ -8,6 +8,7 @@ http://www.hardcoded.net/licenses/bsd_license
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "../base/DetailsPanel.h" #import "../base/DetailsPanel.h"
#import "PyDupeGuru.h"
@interface DetailsPanelPE : DetailsPanel @interface DetailsPanelPE : DetailsPanel
{ {
@@ -16,9 +17,11 @@ http://www.hardcoded.net/licenses/bsd_license
IBOutlet NSImageView *refImage; IBOutlet NSImageView *refImage;
IBOutlet NSProgressIndicator *refProgressIndicator; IBOutlet NSProgressIndicator *refProgressIndicator;
PyApp *pyApp; PyDupeGuru *pyApp;
BOOL _needsRefresh; BOOL _needsRefresh;
NSString *_dupePath; NSString *_dupePath;
NSString *_refPath; NSString *_refPath;
} }
- (id)initWithApp:(PyDupeGuru *)aApp;
@end @end

View File

@@ -14,10 +14,10 @@ http://www.hardcoded.net/licenses/bsd_license
#import "Consts.h" #import "Consts.h"
@implementation DetailsPanelPE @implementation DetailsPanelPE
- (id)initWithPy:(PyApp *)aPy - (id)initWithApp:(PyDupeGuru *)aApp
{ {
self = [super initWithPy:aPy]; self = [super initWithPyRef:[aApp detailsPanel]];
pyApp = aPy; pyApp = aApp;
_needsRefresh = YES; _needsRefresh = YES;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageLoaded:) name:ImageLoadedNotification object:self]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageLoaded:) name:ImageLoadedNotification object:self];
return self; return self;
@@ -42,12 +42,12 @@ http://www.hardcoded.net/licenses/bsd_license
return; return;
[detailsTable reloadData]; [detailsTable reloadData];
NSString *refPath = [(PyDupeGuru *)pyApp getSelectedDupeRefPath]; NSString *refPath = [pyApp getSelectedDupeRefPath];
if (_refPath != nil) if (_refPath != nil)
[_refPath autorelease]; [_refPath autorelease];
_refPath = [refPath retain]; _refPath = [refPath retain];
[NSThread detachNewThreadSelector:@selector(loadImageAsync:) toTarget:self withObject:refPath]; [NSThread detachNewThreadSelector:@selector(loadImageAsync:) toTarget:self withObject:refPath];
NSString *dupePath = [(PyDupeGuru *)pyApp getSelectedDupePath]; NSString *dupePath = [pyApp getSelectedDupePath];
if (_dupePath != nil) if (_dupePath != nil)
[_dupePath autorelease]; [_dupePath autorelease];
_dupePath = [dupePath retain]; _dupePath = [dupePath retain];

View File

@@ -22,6 +22,8 @@
<string>APPL</string> <string>APPL</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>hsft</string> <string>hsft</string>
<key>CFBundleShortVersionString</key>
<string>{version}</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>{version}</string> <string>{version}</string>
<key>NSMainNibFile</key> <key>NSMainNibFile</key>

View File

@@ -1,17 +0,0 @@
/*
Copyright 2011 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 "../base/PyDupeGuru.h"
@interface PyDupeGuru : PyDupeGuruBase
- (void)clearPictureCache;
- (NSString *)getSelectedDupePath;
- (NSString *)getSelectedDupeRefPath;
- (void)setMatchScaled:(NSNumber *)match_scaled;
@end

View File

@@ -28,11 +28,11 @@ http://www.hardcoded.net/licenses/bsd_license
{@"dupe_count", 80, 16, 0, YES, nil}, {@"dupe_count", 80, 16, 0, YES, nil},
nil nil
}; };
[[self columns] initializeColumns:defs]; [[table columns] initializeColumns:defs];
NSTableColumn *c = [matches tableColumnWithIdentifier:@"marked"]; NSTableColumn *c = [matches tableColumnWithIdentifier:@"marked"];
[[c dataCell] setButtonType:NSSwitchButton]; [[c dataCell] setButtonType:NSSwitchButton];
[[c dataCell] setControlSize:NSSmallControlSize]; [[c dataCell] setControlSize:NSSmallControlSize];
c = [[self tableView] tableColumnWithIdentifier:@"size"]; c = [matches tableColumnWithIdentifier:@"size"];
[[c dataCell] setAlignment:NSRightTextAlignment]; [[c dataCell] setAlignment:NSRightTextAlignment];
[[table columns] restoreColumns]; [[table columns] restoreColumns];
} }
@@ -40,12 +40,11 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)setScanOptions - (void)setScanOptions
{ {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
PyDupeGuru *_py = (PyDupeGuru *)py; [model setScanType:n2i([ud objectForKey:@"scanType"])];
[_py setScanType:[ud objectForKey:@"scanType"]]; [model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])];
[_py setMinMatchPercentage:[ud objectForKey:@"minMatchPercentage"]]; [model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
[_py setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; [model setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])];
[_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; [model setMatchScaled:n2b([ud objectForKey:@"matchScaled"])];
[_py setMatchScaled:[ud objectForKey:@"matchScaled"]];
} }
/* Actions */ /* Actions */
@@ -54,6 +53,6 @@ http://www.hardcoded.net/licenses/bsd_license
NSString *msg = TR(@"Do you really want to remove all your cached picture analysis?"); NSString *msg = TR(@"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;
[(PyDupeGuru *)py clearPictureCache]; [model clearPictureCache];
} }
@end @end

View File

@@ -7,48 +7,15 @@
from hscommon.trans import install_gettext_trans_under_cocoa from hscommon.trans import install_gettext_trans_under_cocoa
install_gettext_trans_under_cocoa() install_gettext_trans_under_cocoa()
from core.scanner import ScanType from cocoa.inter import PySelectableList, PyColumns, PyTable
from inter.app import PyDupeGuruBase
from inter.details_panel import PyDetailsPanel from inter.details_panel import PyDetailsPanel
from inter.directory_outline import PyDirectoryOutline from inter.directory_outline import PyDirectoryOutline
from inter.extra_fairware_reminder import PyExtraFairwareReminder from inter.extra_fairware_reminder import PyExtraFairwareReminder
from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_dialog import PyPrioritizeDialog
from inter.prioritize_list import PyPrioritizeList
from inter.problem_dialog import PyProblemDialog from inter.problem_dialog import PyProblemDialog
from inter.problem_table import PyProblemTable
from inter.result_table import PyResultTable from inter.result_table import PyResultTable
from inter.stats_label import PyStatsLabel from inter.stats_label import PyStatsLabel
from inter.app_pe import DupeGuruPE from inter.app_pe import PyDupeGuru
class PyDupeGuru(PyDupeGuruBase):
def init(self):
self = super(PyDupeGuru, self).init()
self._init(DupeGuruPE)
return self
def clearPictureCache(self):
self.py.scanner.clear_picture_cache()
#---Information
def getSelectedDupePath(self):
return str(self.py.selected_dupe_path())
def getSelectedDupeRefPath(self):
return str(self.py.selected_dupe_ref_path())
#---Properties
def setScanType_(self, scan_type):
try:
self.py.scanner.scan_type = [
ScanType.FuzzyBlock,
ScanType.ExifTimestamp,
][scan_type]
except IndexError:
pass
def setMatchScaled_(self,match_scaled):
self.py.scanner.match_scaled = match_scaled
def setMinMatchPercentage_(self,percentage):
self.py.scanner.threshold = int(percentage)

View File

@@ -7,7 +7,6 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
CE05339B12E5DA350029EF25 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; }; CE05339B12E5DA350029EF25 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; };
CE05339C12E5DA350029EF25 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; CE05339C12E5DA350029EF25 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; };
@@ -27,12 +26,33 @@
CE2A29F713213BFB005899AC /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE2A29F513213BFB005899AC /* ExtraFairwareReminder.xib */; }; CE2A29F713213BFB005899AC /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE2A29F513213BFB005899AC /* ExtraFairwareReminder.xib */; };
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; };
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; };
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; };
CE60180812DF3EA900236FDC /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE60180712DF3EA900236FDC /* HSRecentFiles.m */; }; CE60180812DF3EA900236FDC /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CE60180712DF3EA900236FDC /* HSRecentFiles.m */; };
CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6044EB0FE6796200B71262 /* DetailsPanel.m */; }; CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6044EB0FE6796200B71262 /* DetailsPanel.m */; };
CE63D9D31461EDC000A8CADD /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CE63D9D21461EDC000A8CADD /* locale */; }; CE63D9D31461EDC000A8CADD /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CE63D9D21461EDC000A8CADD /* locale */; };
CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE68EE6609ABC48000971085 /* DirectoryPanel.m */; }; CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE68EE6609ABC48000971085 /* DirectoryPanel.m */; };
CE6E0F3D1054EC62008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */; }; CE6E0F3D1054EC62008D9390 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */; };
CE75017314C4770500E2A349 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017214C4770500E2A349 /* main.m */; };
CE75017514C4771800E2A349 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE75017414C4771800E2A349 /* py */; };
CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CE75017614C4772100E2A349 /* dg_cocoa.py */; };
CE75017914C4774900E2A349 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE75017814C4774900E2A349 /* Python */; };
CE75017A14C4775B00E2A349 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE75017814C4774900E2A349 /* Python */; };
CE75019E14C477B100E2A349 /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017D14C477B100E2A349 /* ObjP.m */; };
CE75019F14C477B100E2A349 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75017F14C477B100E2A349 /* PyColumns.m */; };
CE7501A014C477B100E2A349 /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018114C477B100E2A349 /* PyDetailsPanel.m */; };
CE7501A114C477B100E2A349 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018314C477B100E2A349 /* PyDirectoryOutline.m */; };
CE7501A214C477B100E2A349 /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018514C477B100E2A349 /* PyDupeGuru.m */; };
CE7501A314C477B100E2A349 /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018714C477B100E2A349 /* PyDupeGuruBase.m */; };
CE7501A414C477B100E2A349 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */; };
CE7501A514C477B100E2A349 /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018B14C477B100E2A349 /* PyFairware.m */; };
CE7501A614C477B100E2A349 /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018D14C477B100E2A349 /* PyGUIObject.m */; };
CE7501A714C477B100E2A349 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75018F14C477B100E2A349 /* PyOutline.m */; };
CE7501A814C477B100E2A349 /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */; };
CE7501A914C477B100E2A349 /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019314C477B100E2A349 /* PyPrioritizeList.m */; };
CE7501AA14C477B100E2A349 /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019514C477B100E2A349 /* PyProblemDialog.m */; };
CE7501AB14C477B100E2A349 /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019714C477B100E2A349 /* PyResultTable.m */; };
CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019914C477B100E2A349 /* PySelectableList.m */; };
CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019B14C477B100E2A349 /* PyStatsLabel.m */; };
CE7501AE14C477B100E2A349 /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE75019D14C477B100E2A349 /* PyTable.m */; };
CE7AC9191119911200D02F6C /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7AC9161119911200D02F6C /* progress.xib */; }; CE7AC9191119911200D02F6C /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7AC9161119911200D02F6C /* progress.xib */; };
CE7D249D1423B0BD002E2297 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249A1423B0BD002E2297 /* HSPopUpList.m */; }; CE7D249D1423B0BD002E2297 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249A1423B0BD002E2297 /* HSPopUpList.m */; };
CE7D249E1423B0BD002E2297 /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249C1423B0BD002E2297 /* HSSelectableList.m */; }; CE7D249E1423B0BD002E2297 /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D249C1423B0BD002E2297 /* HSSelectableList.m */; };
@@ -40,7 +60,6 @@
CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D24A21423B106002E2297 /* PrioritizeList.m */; }; CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7D24A21423B106002E2297 /* PrioritizeList.m */; };
CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */; }; CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */; };
CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB1C0FC192D60086DCA6 /* Dialogs.m */; }; CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB1C0FC192D60086DCA6 /* Dialogs.m */; };
CE80DB2F0FC192D60086DCA6 /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */; };
CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB220FC192D60086DCA6 /* ProgressController.m */; }; CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB220FC192D60086DCA6 /* ProgressController.m */; };
CE80DB350FC192D60086DCA6 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2B0FC192D60086DCA6 /* Utils.m */; }; CE80DB350FC192D60086DCA6 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2B0FC192D60086DCA6 /* Utils.m */; };
CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2D0FC192D60086DCA6 /* ValueTransformers.m */; }; CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB2D0FC192D60086DCA6 /* ValueTransformers.m */; };
@@ -49,11 +68,9 @@
CE80DB8A0FC1951C0086DCA6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB830FC1951C0086DCA6 /* AppDelegate.m */; }; CE80DB8A0FC1951C0086DCA6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB830FC1951C0086DCA6 /* AppDelegate.m */; };
CE80DB8B0FC1951C0086DCA6 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */; }; CE80DB8B0FC1951C0086DCA6 /* DirectoryPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */; };
CE80DB8C0FC1951C0086DCA6 /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB890FC1951C0086DCA6 /* ResultWindow.m */; }; CE80DB8C0FC1951C0086DCA6 /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE80DB890FC1951C0086DCA6 /* ResultWindow.m */; };
CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE848A1809DD85810004CB44 /* Consts.h */; };
CE95865F112C516400F95FD2 /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE95865D112C516400F95FD2 /* StatsLabel.m */; }; CE95865F112C516400F95FD2 /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE95865D112C516400F95FD2 /* StatsLabel.m */; };
CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7441122C96C008CD2BC /* HSGUIController.m */; }; CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7441122C96C008CD2BC /* HSGUIController.m */; };
CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7461122C96C008CD2BC /* HSOutline.m */; }; CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7461122C96C008CD2BC /* HSOutline.m */; };
CE9EA7581122C96C008CD2BC /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7481122C96C008CD2BC /* HSWindowController.m */; };
CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */; }; CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */; };
CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7511122C96C008CD2BC /* HSOutlineView.m */; }; CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7511122C96C008CD2BC /* HSOutlineView.m */; };
CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7531122C96C008CD2BC /* NSIndexPathAdditions.m */; }; CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9EA7531122C96C008CD2BC /* NSIndexPathAdditions.m */; };
@@ -62,10 +79,10 @@
CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEA8F335142BC9AB00A6DFAC /* Quartz.framework */; }; CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEA8F335142BC9AB00A6DFAC /* Quartz.framework */; };
CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */; }; CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */; };
CEC9DB4C12CCAA7D003102F0 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */; }; CEC9DB4C12CCAA7D003102F0 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */; };
CECA899C09DB132E00A3D774 /* DetailsPanel.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CECA899A09DB132E00A3D774 /* DetailsPanel.h */; };
CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CECA899B09DB132E00A3D774 /* DetailsPanel.m */; }; CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CECA899B09DB132E00A3D774 /* DetailsPanel.m */; };
CECB2AC513D867AD0081E295 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC113D867AD0081E295 /* about.xib */; }; CECB2AC513D867AD0081E295 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC113D867AD0081E295 /* about.xib */; };
CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC313D867AD0081E295 /* ErrorReportWindow.xib */; }; CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC313D867AD0081E295 /* ErrorReportWindow.xib */; };
CEE6D562149113570087CDFC /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE6D561149113570087CDFC /* HSColumns.m */; };
CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; };
CEF12A7E124DFD400087B51D /* HSTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF12A7D124DFD400087B51D /* HSTableView.m */; }; CEF12A7E124DFD400087B51D /* HSTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF12A7D124DFD400087B51D /* HSTableView.m */; };
CEF12A84124DFD620087B51D /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF12A83124DFD620087B51D /* ResultTable.m */; }; CEF12A84124DFD620087B51D /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF12A83124DFD620087B51D /* ResultTable.m */; };
@@ -80,8 +97,7 @@
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
CE15C8C00ADEB8D40061D4A5 /* Sparkle.framework in CopyFiles */, CE15C8C00ADEB8D40061D4A5 /* Sparkle.framework in CopyFiles */,
CECA899C09DB132E00A3D774 /* DetailsPanel.h in CopyFiles */, CE75017A14C4775B00E2A349 /* Python in CopyFiles */,
CE848A1909DD85810004CB44 /* Consts.h in CopyFiles */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -90,7 +106,6 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
@@ -111,17 +126,13 @@
CE0533AE12E5DAAD0029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/Preferences.xib; sourceTree = "<group>"; }; CE0533AE12E5DAAD0029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/Preferences.xib; sourceTree = "<group>"; };
CE0533B712E5DC040029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../../cocoalib/fr.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE0533B712E5DC040029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../../cocoalib/fr.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE073F5409CAE1A3005C1D2F /* help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = help; path = ../../build/help; sourceTree = SOURCE_ROOT; }; CE073F5409CAE1A3005C1D2F /* help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = help; path = ../../build/help; sourceTree = SOURCE_ROOT; };
CE0C2AAA117700E700BC749F /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE0C2AB41177011000BC749F /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; }; CE0C2AB41177011000BC749F /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; };
CE0C2AB51177011000BC749F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; }; CE0C2AB51177011000BC749F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; };
CE0C2ABA1177014200BC749F /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; CE0C2ABA1177014200BC749F /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE0C2ABB1177014200BC749F /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; CE0C2ABB1177014200BC749F /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; };
CE0C2ABC1177014200BC749F /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; };
CE18126F111C9D5100E49FCE /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; };
CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; };
CE1EB5FD12537F9D0034AABB /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; };
CE1EB60012537FB90034AABB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE1EB60012537FB90034AABB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE21AFB61423EA6E00DE35BF /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CE21AFB61423EA6E00DE35BF /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE21AFB71423EA6E00DE35BF /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CE21AFB71423EA6E00DE35BF /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
@@ -129,12 +140,10 @@
CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; };
CE2A29F613213BFB005899AC /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE2A29F613213BFB005899AC /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE2A29FF13213C31005899AC /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; CE381C9409914ACE003581CE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; };
CE60180612DF3EA900236FDC /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; CE60180612DF3EA900236FDC /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; };
CE60180712DF3EA900236FDC /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; CE60180712DF3EA900236FDC /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; };
CE6044EA0FE6796200B71262 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; }; CE6044EA0FE6796200B71262 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; };
@@ -155,6 +164,44 @@
CE68EE6609ABC48000971085 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; CE68EE6609ABC48000971085 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = DirectoryPanel.m; sourceTree = SOURCE_ROOT; };
CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; }; CE6E0F3C1054EC62008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; };
CE7358071406ABF700F3F6DA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; }; CE7358071406ABF700F3F6DA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = ../base/de.lproj/Localizable.strings; sourceTree = "<group>"; };
CE75017214C4770500E2A349 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; };
CE75017414C4771800E2A349 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; };
CE75017614C4772100E2A349 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; };
CE75017814C4774900E2A349 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; };
CE75017C14C477B100E2A349 /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; };
CE75017D14C477B100E2A349 /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; };
CE75017E14C477B100E2A349 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; };
CE75017F14C477B100E2A349 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; };
CE75018014C477B100E2A349 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; };
CE75018114C477B100E2A349 /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; };
CE75018214C477B100E2A349 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; };
CE75018314C477B100E2A349 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; };
CE75018414C477B100E2A349 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; };
CE75018514C477B100E2A349 /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; };
CE75018614C477B100E2A349 /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; };
CE75018714C477B100E2A349 /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; };
CE75018814C477B100E2A349 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; };
CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; };
CE75018A14C477B100E2A349 /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; };
CE75018B14C477B100E2A349 /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; };
CE75018C14C477B100E2A349 /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; };
CE75018D14C477B100E2A349 /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; };
CE75018E14C477B100E2A349 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE75018F14C477B100E2A349 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; };
CE75019014C477B100E2A349 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; };
CE75019214C477B100E2A349 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; };
CE75019314C477B100E2A349 /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; };
CE75019414C477B100E2A349 /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; };
CE75019514C477B100E2A349 /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; };
CE75019614C477B100E2A349 /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; };
CE75019714C477B100E2A349 /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; };
CE75019814C477B100E2A349 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; };
CE75019914C477B100E2A349 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; };
CE75019A14C477B100E2A349 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; };
CE75019B14C477B100E2A349 /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; };
CE75019C14C477B100E2A349 /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE75019D14C477B100E2A349 /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; };
CE78759D13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; CE78759D13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; };
CE78759E13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE78759E13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE78759F13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; CE78759F13CDFA7100F23771 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; };
@@ -175,7 +222,6 @@
CE7A69CA146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CE7A69CA146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE7A69CB146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; CE7A69CB146443CB0007D927 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../it.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE7AC9161119911200D02F6C /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; CE7AC9161119911200D02F6C /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; };
CE7D24971423B0A7002E2297 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; };
CE7D24991423B0BD002E2297 /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; CE7D24991423B0BD002E2297 /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; };
CE7D249A1423B0BD002E2297 /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; CE7D249A1423B0BD002E2297 /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; };
CE7D249B1423B0BD002E2297 /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; CE7D249B1423B0BD002E2297 /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; };
@@ -184,16 +230,11 @@
CE7D24A01423B106002E2297 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; CE7D24A01423B106002E2297 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; };
CE7D24A11423B106002E2297 /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; CE7D24A11423B106002E2297 /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; };
CE7D24A21423B106002E2297 /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; CE7D24A21423B106002E2297 /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; };
CE7D24A31423B106002E2297 /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE7D24A41423B106002E2297 /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; };
CE7D24A81423B123002E2297 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CE7D24A81423B123002E2297 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE80DB1B0FC192D60086DCA6 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; CE80DB1B0FC192D60086DCA6 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; };
CE80DB1C0FC192D60086DCA6 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; CE80DB1C0FC192D60086DCA6 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; };
CE80DB1D0FC192D60086DCA6 /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; };
CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; };
CE80DB210FC192D60086DCA6 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; CE80DB210FC192D60086DCA6 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; };
CE80DB220FC192D60086DCA6 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; CE80DB220FC192D60086DCA6 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; };
CE80DB230FC192D60086DCA6 /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; };
CE80DB2A0FC192D60086DCA6 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; CE80DB2A0FC192D60086DCA6 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; };
CE80DB2B0FC192D60086DCA6 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; CE80DB2B0FC192D60086DCA6 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; };
CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; };
@@ -207,23 +248,29 @@
CE80DB840FC1951C0086DCA6 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; CE80DB840FC1951C0086DCA6 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; };
CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; };
CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; };
CE80DB870FC1951C0086DCA6 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
CE80DB880FC1951C0086DCA6 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE80DB880FC1951C0086DCA6 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE80DB890FC1951C0086DCA6 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE80DB890FC1951C0086DCA6 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE848A1809DD85810004CB44 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Consts.h; sourceTree = "<group>"; }; CE848A1809DD85810004CB44 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Consts.h; sourceTree = "<group>"; };
CE958659112C516400F95FD2 /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; }; CE905DE114C6387B00C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/about.xib; sourceTree = "<group>"; };
CE905DE214C6387B00C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE905DE314C6387B00C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE905DE814C6388E00C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = ../base/uk.lproj/Localizable.strings; sourceTree = "<group>"; };
CE905DEA14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CE905DEB14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CE905DEC14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/MainMenu.xib; sourceTree = "<group>"; };
CE905DED14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE905DEE14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CE905DEF14C638A500C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CE905DF614C638B000C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CE905DF714C638B000C0ECEF /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/Preferences.xib; sourceTree = "<group>"; };
CE95865C112C516400F95FD2 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; CE95865C112C516400F95FD2 /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; };
CE95865D112C516400F95FD2 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; CE95865D112C516400F95FD2 /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; };
CE9EA7431122C96C008CD2BC /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; }; CE9EA7431122C96C008CD2BC /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; };
CE9EA7441122C96C008CD2BC /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; }; CE9EA7441122C96C008CD2BC /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; };
CE9EA7451122C96C008CD2BC /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; }; CE9EA7451122C96C008CD2BC /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; };
CE9EA7461122C96C008CD2BC /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; }; CE9EA7461122C96C008CD2BC /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; };
CE9EA7471122C96C008CD2BC /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; };
CE9EA7481122C96C008CD2BC /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; };
CE9EA7491122C96C008CD2BC /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; CE9EA7491122C96C008CD2BC /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; };
CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; };
CE9EA74C1122C96C008CD2BC /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; };
CE9EA74D1122C96C008CD2BC /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE9EA7501122C96C008CD2BC /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; CE9EA7501122C96C008CD2BC /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; };
CE9EA7511122C96C008CD2BC /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; CE9EA7511122C96C008CD2BC /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; };
CE9EA7521122C96C008CD2BC /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; CE9EA7521122C96C008CD2BC /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; };
@@ -232,7 +279,6 @@
CE9EA7551122C96C008CD2BC /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; CE9EA7551122C96C008CD2BC /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; };
CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; };
CE9EA7711122CA0B008CD2BC /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CEA8F335142BC9AB00A6DFAC /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; CEA8F335142BC9AB00A6DFAC /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
CEA8F338142BC9D400A6DFAC /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; }; CEA8F338142BC9D400A6DFAC /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; };
CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; }; CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; };
@@ -248,6 +294,20 @@
CECB2ACC13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CECB2ACC13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CECB2ACD13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; CECB2ACD13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CEE660B7132253910036DB04 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CEE660B7132253910036DB04 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CEE6D5461491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CEE6D5471491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CEE6D5481491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/MainMenu.xib; sourceTree = "<group>"; };
CEE6D5491491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CEE6D54A1491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CEE6D54B1491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CEE6D553149113190087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = hy.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CEE6D554149113190087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = hy.lproj/Preferences.xib; sourceTree = "<group>"; };
CEE6D557149113250087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = ../base/hy.lproj/Localizable.strings; sourceTree = "<group>"; };
CEE6D559149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/about.xib; sourceTree = "<group>"; };
CEE6D55A149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CEE6D55B149113320087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CEE6D560149113570087CDFC /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; };
CEE6D561149113570087CDFC /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; };
CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; }; CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; };
CEEE156E1460325B00783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = "<group>"; }; CEEE156E1460325B00783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = "<group>"; };
CEEE156F1460325B00783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CEEE156F1460325B00783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
@@ -263,11 +323,9 @@
CEEE15911460329000783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; }; CEEE15911460329000783E91 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/Preferences.xib; sourceTree = "<group>"; };
CEF12A7C124DFD400087B51D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; CEF12A7C124DFD400087B51D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; };
CEF12A7D124DFD400087B51D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; }; CEF12A7D124DFD400087B51D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; };
CEF12A81124DFD620087B51D /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; };
CEF12A82124DFD620087B51D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; CEF12A82124DFD620087B51D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; };
CEF12A83124DFD620087B51D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; CEF12A83124DFD620087B51D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; };
CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; }; CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; };
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -278,6 +336,7 @@
CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */, CEA8F336142BC9AB00A6DFAC /* Quartz.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
CE15C8A80ADEB8B50061D4A5 /* Sparkle.framework in Frameworks */, CE15C8A80ADEB8B50061D4A5 /* Sparkle.framework in Frameworks */,
CE75017914C4774900E2A349 /* Python in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -287,7 +346,6 @@
080E96DDFE201D6D7F000001 /* DGPE */ = { 080E96DDFE201D6D7F000001 /* DGPE */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
29B97316FDCFA39411CA2CEA /* main.m */,
CE381C9509914ACE003581CE /* AppDelegate.h */, CE381C9509914ACE003581CE /* AppDelegate.h */,
CE381C9409914ACE003581CE /* AppDelegate.m */, CE381C9409914ACE003581CE /* AppDelegate.m */,
CE848A1809DD85810004CB44 /* Consts.h */, CE848A1809DD85810004CB44 /* Consts.h */,
@@ -295,7 +353,6 @@
CECA899B09DB132E00A3D774 /* DetailsPanel.m */, CECA899B09DB132E00A3D774 /* DetailsPanel.m */,
CE68EE6509ABC48000971085 /* DirectoryPanel.h */, CE68EE6509ABC48000971085 /* DirectoryPanel.h */,
CE68EE6609ABC48000971085 /* DirectoryPanel.m */, CE68EE6609ABC48000971085 /* DirectoryPanel.m */,
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */,
CE381C9B09914ADF003581CE /* ResultWindow.h */, CE381C9B09914ADF003581CE /* ResultWindow.h */,
CE381C9A09914ADF003581CE /* ResultWindow.m */, CE381C9A09914ADF003581CE /* ResultWindow.m */,
); );
@@ -305,6 +362,7 @@
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE75017814C4774900E2A349 /* Python */,
CEA8F335142BC9AB00A6DFAC /* Quartz.framework */, CEA8F335142BC9AB00A6DFAC /* Quartz.framework */,
CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */, CE15C8A70ADEB8B50061D4A5 /* Sparkle.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
@@ -336,6 +394,7 @@
080E96DDFE201D6D7F000001 /* DGPE */, 080E96DDFE201D6D7F000001 /* DGPE */,
CE80DB1A0FC192AB0086DCA6 /* cocoalib */, CE80DB1A0FC192AB0086DCA6 /* cocoalib */,
CE80DB810FC194BD0086DCA6 /* dgbase */, CE80DB810FC194BD0086DCA6 /* dgbase */,
CE75017B14C477B100E2A349 /* autogen */,
29B97317FDCFA39411CA2CEA /* Resources */, 29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */, 29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */, 19C28FACFE9D520D11CA2CBB /* Products */,
@@ -346,9 +405,10 @@
29B97317FDCFA39411CA2CEA /* Resources */ = { 29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE75017614C4772100E2A349 /* dg_cocoa.py */,
CE75017414C4771800E2A349 /* py */,
CE63D9D21461EDC000A8CADD /* locale */, CE63D9D21461EDC000A8CADD /* locale */,
CE073F5409CAE1A3005C1D2F /* help */, CE073F5409CAE1A3005C1D2F /* help */,
CE381CF509915304003581CE /* dg_cocoa.plugin */,
CEFC294309C89E0000D9F998 /* images */, CEFC294309C89E0000D9F998 /* images */,
CE05339212E5DA1D0029EF25 /* xib */, CE05339212E5DA1D0029EF25 /* xib */,
CEEB135109C837A2004D2330 /* dupeguru.icns */, CEEB135109C837A2004D2330 /* dupeguru.icns */,
@@ -383,6 +443,48 @@
name = xib; name = xib;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
CE75017B14C477B100E2A349 /* autogen */ = {
isa = PBXGroup;
children = (
CE75017C14C477B100E2A349 /* ObjP.h */,
CE75017D14C477B100E2A349 /* ObjP.m */,
CE75017E14C477B100E2A349 /* PyColumns.h */,
CE75017F14C477B100E2A349 /* PyColumns.m */,
CE75018014C477B100E2A349 /* PyDetailsPanel.h */,
CE75018114C477B100E2A349 /* PyDetailsPanel.m */,
CE75018214C477B100E2A349 /* PyDirectoryOutline.h */,
CE75018314C477B100E2A349 /* PyDirectoryOutline.m */,
CE75018414C477B100E2A349 /* PyDupeGuru.h */,
CE75018514C477B100E2A349 /* PyDupeGuru.m */,
CE75018614C477B100E2A349 /* PyDupeGuruBase.h */,
CE75018714C477B100E2A349 /* PyDupeGuruBase.m */,
CE75018814C477B100E2A349 /* PyExtraFairwareReminder.h */,
CE75018914C477B100E2A349 /* PyExtraFairwareReminder.m */,
CE75018A14C477B100E2A349 /* PyFairware.h */,
CE75018B14C477B100E2A349 /* PyFairware.m */,
CE75018C14C477B100E2A349 /* PyGUIObject.h */,
CE75018D14C477B100E2A349 /* PyGUIObject.m */,
CE75018E14C477B100E2A349 /* PyOutline.h */,
CE75018F14C477B100E2A349 /* PyOutline.m */,
CE75019014C477B100E2A349 /* PyPrioritizeDialog.h */,
CE75019114C477B100E2A349 /* PyPrioritizeDialog.m */,
CE75019214C477B100E2A349 /* PyPrioritizeList.h */,
CE75019314C477B100E2A349 /* PyPrioritizeList.m */,
CE75019414C477B100E2A349 /* PyProblemDialog.h */,
CE75019514C477B100E2A349 /* PyProblemDialog.m */,
CE75019614C477B100E2A349 /* PyResultTable.h */,
CE75019714C477B100E2A349 /* PyResultTable.m */,
CE75019814C477B100E2A349 /* PySelectableList.h */,
CE75019914C477B100E2A349 /* PySelectableList.m */,
CE75019A14C477B100E2A349 /* PyStatsLabel.h */,
CE75019B14C477B100E2A349 /* PyStatsLabel.m */,
CE75019C14C477B100E2A349 /* PyTable.h */,
CE75019D14C477B100E2A349 /* PyTable.m */,
);
name = autogen;
path = ../autogen;
sourceTree = "<group>";
};
CE7AC9141119911200D02F6C /* xib */ = { CE7AC9141119911200D02F6C /* xib */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -399,7 +501,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE9EA7421122C96C008CD2BC /* controllers */, CE9EA7421122C96C008CD2BC /* controllers */,
CE9EA74B1122C96C008CD2BC /* proxies */,
CE9EA74F1122C96C008CD2BC /* views */, CE9EA74F1122C96C008CD2BC /* views */,
CE7AC9141119911200D02F6C /* xib */, CE7AC9141119911200D02F6C /* xib */,
CE80DB480FC193770086DCA6 /* NSImageAdditions.h */, CE80DB480FC193770086DCA6 /* NSImageAdditions.h */,
@@ -410,11 +511,8 @@
CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */, CE9EA74A1122C96C008CD2BC /* NSEventAdditions.m */,
CE80DB1B0FC192D60086DCA6 /* Dialogs.h */, CE80DB1B0FC192D60086DCA6 /* Dialogs.h */,
CE80DB1C0FC192D60086DCA6 /* Dialogs.m */, CE80DB1C0FC192D60086DCA6 /* Dialogs.m */,
CE80DB1D0FC192D60086DCA6 /* HSErrorReportWindow.h */,
CE80DB1E0FC192D60086DCA6 /* HSErrorReportWindow.m */,
CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */, CE1EB5FB12537F9D0034AABB /* HSFairwareReminder.h */,
CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */, CE1EB5FC12537F9D0034AABB /* HSFairwareReminder.m */,
CE1EB5FD12537F9D0034AABB /* PyFairware.h */,
CEC9DB4A12CCAA7D003102F0 /* HSAboutBox.h */, CEC9DB4A12CCAA7D003102F0 /* HSAboutBox.h */,
CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */, CEC9DB4B12CCAA7D003102F0 /* HSAboutBox.m */,
CE60180612DF3EA900236FDC /* HSRecentFiles.h */, CE60180612DF3EA900236FDC /* HSRecentFiles.h */,
@@ -423,7 +521,6 @@
CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */, CEA8F339142BC9D400A6DFAC /* HSQuicklook.m */,
CE80DB210FC192D60086DCA6 /* ProgressController.h */, CE80DB210FC192D60086DCA6 /* ProgressController.h */,
CE80DB220FC192D60086DCA6 /* ProgressController.m */, CE80DB220FC192D60086DCA6 /* ProgressController.m */,
CE80DB230FC192D60086DCA6 /* PyApp.h */,
CE80DB2A0FC192D60086DCA6 /* Utils.h */, CE80DB2A0FC192D60086DCA6 /* Utils.h */,
CE80DB2B0FC192D60086DCA6 /* Utils.m */, CE80DB2B0FC192D60086DCA6 /* Utils.m */,
CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */, CE80DB2C0FC192D60086DCA6 /* ValueTransformers.h */,
@@ -437,36 +534,28 @@
children = ( children = (
CEF12A82124DFD620087B51D /* ResultTable.h */, CEF12A82124DFD620087B51D /* ResultTable.h */,
CEF12A83124DFD620087B51D /* ResultTable.m */, CEF12A83124DFD620087B51D /* ResultTable.m */,
CEF12A81124DFD620087B51D /* PyResultTable.h */,
CE80DB820FC1951C0086DCA6 /* AppDelegate.h */, CE80DB820FC1951C0086DCA6 /* AppDelegate.h */,
CE80DB830FC1951C0086DCA6 /* AppDelegate.m */, CE80DB830FC1951C0086DCA6 /* AppDelegate.m */,
CE80DB870FC1951C0086DCA6 /* PyDupeGuru.h */,
CE80DB840FC1951C0086DCA6 /* Consts.h */, CE80DB840FC1951C0086DCA6 /* Consts.h */,
CE6044EA0FE6796200B71262 /* DetailsPanel.h */, CE6044EA0FE6796200B71262 /* DetailsPanel.h */,
CE6044EB0FE6796200B71262 /* DetailsPanel.m */, CE6044EB0FE6796200B71262 /* DetailsPanel.m */,
CE18126F111C9D5100E49FCE /* PyDetailsPanel.h */,
CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */, CE80DB850FC1951C0086DCA6 /* DirectoryPanel.h */,
CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */, CE80DB860FC1951C0086DCA6 /* DirectoryPanel.m */,
CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */, CE9EA76F1122CA0B008CD2BC /* DirectoryOutline.h */,
CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */, CE9EA7701122CA0B008CD2BC /* DirectoryOutline.m */,
CE9EA7711122CA0B008CD2BC /* PyDirectoryOutline.h */,
CE0C2ABA1177014200BC749F /* ProblemDialog.h */, CE0C2ABA1177014200BC749F /* ProblemDialog.h */,
CE0C2ABB1177014200BC749F /* ProblemDialog.m */, CE0C2ABB1177014200BC749F /* ProblemDialog.m */,
CE0C2ABC1177014200BC749F /* PyProblemDialog.h */,
CE80DB880FC1951C0086DCA6 /* ResultWindow.h */, CE80DB880FC1951C0086DCA6 /* ResultWindow.h */,
CE80DB890FC1951C0086DCA6 /* ResultWindow.m */, CE80DB890FC1951C0086DCA6 /* ResultWindow.m */,
CE95865C112C516400F95FD2 /* StatsLabel.h */, CE95865C112C516400F95FD2 /* StatsLabel.h */,
CE95865D112C516400F95FD2 /* StatsLabel.m */, CE95865D112C516400F95FD2 /* StatsLabel.m */,
CE958659112C516400F95FD2 /* PyStatsLabel.h */,
CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */, CE2A29F213213BE3005899AC /* ExtraFairwareReminder.h */,
CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */, CE2A29F313213BE3005899AC /* ExtraFairwareReminder.m */,
CE2A29FF13213C31005899AC /* PyExtraFairwareReminder.h */,
CE7D249F1423B106002E2297 /* PrioritizeDialog.h */, CE7D249F1423B106002E2297 /* PrioritizeDialog.h */,
CE7D24A01423B106002E2297 /* PrioritizeDialog.m */, CE7D24A01423B106002E2297 /* PrioritizeDialog.m */,
CE7D24A31423B106002E2297 /* PyPrioritizeDialog.h */,
CE7D24A11423B106002E2297 /* PrioritizeList.h */, CE7D24A11423B106002E2297 /* PrioritizeList.h */,
CE7D24A21423B106002E2297 /* PrioritizeList.m */, CE7D24A21423B106002E2297 /* PrioritizeList.m */,
CE7D24A41423B106002E2297 /* PyPrioritizeList.h */, CE75017214C4770500E2A349 /* main.m */,
); );
name = dgbase; name = dgbase;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -474,14 +563,14 @@
CE9EA7421122C96C008CD2BC /* controllers */ = { CE9EA7421122C96C008CD2BC /* controllers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CEE6D560149113570087CDFC /* HSColumns.h */,
CEE6D561149113570087CDFC /* HSColumns.m */,
CE9EA7431122C96C008CD2BC /* HSGUIController.h */, CE9EA7431122C96C008CD2BC /* HSGUIController.h */,
CE9EA7441122C96C008CD2BC /* HSGUIController.m */, CE9EA7441122C96C008CD2BC /* HSGUIController.m */,
CE9EA7451122C96C008CD2BC /* HSOutline.h */, CE9EA7451122C96C008CD2BC /* HSOutline.h */,
CE9EA7461122C96C008CD2BC /* HSOutline.m */, CE9EA7461122C96C008CD2BC /* HSOutline.m */,
CE0C2AB41177011000BC749F /* HSTable.h */, CE0C2AB41177011000BC749F /* HSTable.h */,
CE0C2AB51177011000BC749F /* HSTable.m */, CE0C2AB51177011000BC749F /* HSTable.m */,
CE9EA7471122C96C008CD2BC /* HSWindowController.h */,
CE9EA7481122C96C008CD2BC /* HSWindowController.m */,
CE7D24991423B0BD002E2297 /* HSPopUpList.h */, CE7D24991423B0BD002E2297 /* HSPopUpList.h */,
CE7D249A1423B0BD002E2297 /* HSPopUpList.m */, CE7D249A1423B0BD002E2297 /* HSPopUpList.m */,
CE7D249B1423B0BD002E2297 /* HSSelectableList.h */, CE7D249B1423B0BD002E2297 /* HSSelectableList.h */,
@@ -491,18 +580,6 @@
path = ../../cocoalib/controllers; path = ../../cocoalib/controllers;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
}; };
CE9EA74B1122C96C008CD2BC /* proxies */ = {
isa = PBXGroup;
children = (
CE9EA74C1122C96C008CD2BC /* PyGUI.h */,
CE9EA74D1122C96C008CD2BC /* PyOutline.h */,
CE0C2AAA117700E700BC749F /* PyTable.h */,
CE7D24971423B0A7002E2297 /* PySelectableList.h */,
);
name = proxies;
path = ../../cocoalib/proxies;
sourceTree = SOURCE_ROOT;
};
CE9EA74F1122C96C008CD2BC /* views */ = { CE9EA74F1122C96C008CD2BC /* views */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -572,6 +649,8 @@
zh_CN, zh_CN,
cs, cs,
it, it,
hy,
uk,
); );
mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */; mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */;
projectDirPath = ""; projectDirPath = "";
@@ -587,7 +666,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */,
CE073F6309CAE1A3005C1D2F /* help in Resources */, CE073F6309CAE1A3005C1D2F /* help in Resources */,
CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */,
CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, CEFC294609C89E3D00D9F998 /* folder32.png in Resources */,
@@ -606,6 +684,8 @@
CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */, CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */,
CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */, CE7D24A91423B123002E2297 /* PrioritizeDialog.xib in Resources */,
CE63D9D31461EDC000A8CADD /* locale in Resources */, CE63D9D31461EDC000A8CADD /* locale in Resources */,
CE75017514C4771800E2A349 /* py in Resources */,
CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -616,13 +696,11 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, CE381C9609914ACE003581CE /* AppDelegate.m in Sources */,
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */,
CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */, CE68EE6809ABC48000971085 /* DirectoryPanel.m in Sources */,
CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */, CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */,
CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */, CE80DB2E0FC192D60086DCA6 /* Dialogs.m in Sources */,
CE80DB2F0FC192D60086DCA6 /* HSErrorReportWindow.m in Sources */,
CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */, CE80DB310FC192D60086DCA6 /* ProgressController.m in Sources */,
CE80DB350FC192D60086DCA6 /* Utils.m in Sources */, CE80DB350FC192D60086DCA6 /* Utils.m in Sources */,
CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */, CE80DB360FC192D60086DCA6 /* ValueTransformers.m in Sources */,
@@ -634,7 +712,6 @@
CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */, CE6044EC0FE6796200B71262 /* DetailsPanel.m in Sources */,
CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */, CE9EA7561122C96C008CD2BC /* HSGUIController.m in Sources */,
CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */, CE9EA7571122C96C008CD2BC /* HSOutline.m in Sources */,
CE9EA7581122C96C008CD2BC /* HSWindowController.m in Sources */,
CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */, CE9EA7591122C96C008CD2BC /* NSEventAdditions.m in Sources */,
CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */, CE9EA75A1122C96C008CD2BC /* HSOutlineView.m in Sources */,
CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */, CE9EA75B1122C96C008CD2BC /* NSIndexPathAdditions.m in Sources */,
@@ -654,6 +731,25 @@
CE7D24A51423B106002E2297 /* PrioritizeDialog.m in Sources */, CE7D24A51423B106002E2297 /* PrioritizeDialog.m in Sources */,
CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */, CE7D24A61423B106002E2297 /* PrioritizeList.m in Sources */,
CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */, CEA8F33A142BC9D400A6DFAC /* HSQuicklook.m in Sources */,
CEE6D562149113570087CDFC /* HSColumns.m in Sources */,
CE75017314C4770500E2A349 /* main.m in Sources */,
CE75019E14C477B100E2A349 /* ObjP.m in Sources */,
CE75019F14C477B100E2A349 /* PyColumns.m in Sources */,
CE7501A014C477B100E2A349 /* PyDetailsPanel.m in Sources */,
CE7501A114C477B100E2A349 /* PyDirectoryOutline.m in Sources */,
CE7501A214C477B100E2A349 /* PyDupeGuru.m in Sources */,
CE7501A314C477B100E2A349 /* PyDupeGuruBase.m in Sources */,
CE7501A414C477B100E2A349 /* PyExtraFairwareReminder.m in Sources */,
CE7501A514C477B100E2A349 /* PyFairware.m in Sources */,
CE7501A614C477B100E2A349 /* PyGUIObject.m in Sources */,
CE7501A714C477B100E2A349 /* PyOutline.m in Sources */,
CE7501A814C477B100E2A349 /* PyPrioritizeDialog.m in Sources */,
CE7501A914C477B100E2A349 /* PyPrioritizeList.m in Sources */,
CE7501AA14C477B100E2A349 /* PyProblemDialog.m in Sources */,
CE7501AB14C477B100E2A349 /* PyResultTable.m in Sources */,
CE7501AC14C477B100E2A349 /* PySelectableList.m in Sources */,
CE7501AD14C477B100E2A349 /* PyStatsLabel.m in Sources */,
CE7501AE14C477B100E2A349 /* PyTable.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -669,6 +765,8 @@
CE653CFA1416A0260058A022 /* zh_CN */, CE653CFA1416A0260058A022 /* zh_CN */,
CEEE15841460328400783E91 /* cs */, CEEE15841460328400783E91 /* cs */,
CE7A69B9146443AD0007D927 /* it */, CE7A69B9146443AD0007D927 /* it */,
CEE6D5461491130D0087CDFC /* hy */,
CE905DEA14C638A500C0ECEF /* uk */,
); );
name = DirectoryPanel.xib; name = DirectoryPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -682,6 +780,8 @@
CE653CFC1416A0260058A022 /* zh_CN */, CE653CFC1416A0260058A022 /* zh_CN */,
CEEE15861460328400783E91 /* cs */, CEEE15861460328400783E91 /* cs */,
CE7A69BB146443AD0007D927 /* it */, CE7A69BB146443AD0007D927 /* it */,
CEE6D5481491130D0087CDFC /* hy */,
CE905DEC14C638A500C0ECEF /* uk */,
); );
name = MainMenu.xib; name = MainMenu.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -695,6 +795,8 @@
CE653CFD1416A0260058A022 /* zh_CN */, CE653CFD1416A0260058A022 /* zh_CN */,
CEEE15881460328400783E91 /* cs */, CEEE15881460328400783E91 /* cs */,
CE7A69BD146443AD0007D927 /* it */, CE7A69BD146443AD0007D927 /* it */,
CEE6D54A1491130D0087CDFC /* hy */,
CE905DEE14C638A500C0ECEF /* uk */,
); );
name = ProblemDialog.xib; name = ProblemDialog.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -708,6 +810,8 @@
CE653CFE1416A0260058A022 /* zh_CN */, CE653CFE1416A0260058A022 /* zh_CN */,
CEEE15891460328400783E91 /* cs */, CEEE15891460328400783E91 /* cs */,
CE7A69BE146443AD0007D927 /* it */, CE7A69BE146443AD0007D927 /* it */,
CEE6D54B1491130D0087CDFC /* hy */,
CE905DEF14C638A500C0ECEF /* uk */,
); );
name = ResultWindow.xib; name = ResultWindow.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -721,6 +825,8 @@
CE653CF61416A0140058A022 /* zh_CN */, CE653CF61416A0140058A022 /* zh_CN */,
CEEE15901460329000783E91 /* cs */, CEEE15901460329000783E91 /* cs */,
CE7A69C5146443B90007D927 /* it */, CE7A69C5146443B90007D927 /* it */,
CEE6D553149113190087CDFC /* hy */,
CE905DF614C638B000C0ECEF /* uk */,
); );
name = DetailsPanel.xib; name = DetailsPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -734,6 +840,8 @@
CE653CF71416A0140058A022 /* zh_CN */, CE653CF71416A0140058A022 /* zh_CN */,
CEEE15911460329000783E91 /* cs */, CEEE15911460329000783E91 /* cs */,
CE7A69C6146443B90007D927 /* it */, CE7A69C6146443B90007D927 /* it */,
CEE6D554149113190087CDFC /* hy */,
CE905DF714C638B000C0ECEF /* uk */,
); );
name = Preferences.xib; name = Preferences.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -747,6 +855,8 @@
CE653CF314169F2C0058A022 /* zh_CN */, CE653CF314169F2C0058A022 /* zh_CN */,
CEEE15771460327300783E91 /* cs */, CEEE15771460327300783E91 /* cs */,
CE7A69B3146443A00007D927 /* it */, CE7A69B3146443A00007D927 /* it */,
CEE6D557149113250087CDFC /* hy */,
CE905DE814C6388E00C0ECEF /* uk */,
); );
name = Localizable.strings; name = Localizable.strings;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -760,6 +870,8 @@
CE653CED14169F140058A022 /* zh_CN */, CE653CED14169F140058A022 /* zh_CN */,
CEEE15701460325B00783E91 /* cs */, CEEE15701460325B00783E91 /* cs */,
CE7A69CB146443CB0007D927 /* it */, CE7A69CB146443CB0007D927 /* it */,
CEE6D55B149113320087CDFC /* hy */,
CE905DE314C6387B00C0ECEF /* uk */,
); );
name = FairwareReminder.xib; name = FairwareReminder.xib;
path = ../../cocoalib/xib; path = ../../cocoalib/xib;
@@ -774,6 +886,8 @@
CE653CFB1416A0260058A022 /* zh_CN */, CE653CFB1416A0260058A022 /* zh_CN */,
CEEE15851460328400783E91 /* cs */, CEEE15851460328400783E91 /* cs */,
CE7A69BA146443AD0007D927 /* it */, CE7A69BA146443AD0007D927 /* it */,
CEE6D5471491130D0087CDFC /* hy */,
CE905DEB14C638A500C0ECEF /* uk */,
); );
name = ExtraFairwareReminder.xib; name = ExtraFairwareReminder.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -787,6 +901,8 @@
CE21AFB81423EA6E00DE35BF /* zh_CN */, CE21AFB81423EA6E00DE35BF /* zh_CN */,
CEEE15871460328400783E91 /* cs */, CEEE15871460328400783E91 /* cs */,
CE7A69BC146443AD0007D927 /* it */, CE7A69BC146443AD0007D927 /* it */,
CEE6D5491491130D0087CDFC /* hy */,
CE905DED14C638A500C0ECEF /* uk */,
); );
name = PrioritizeDialog.xib; name = PrioritizeDialog.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -800,6 +916,8 @@
CE653CEB14169F140058A022 /* zh_CN */, CE653CEB14169F140058A022 /* zh_CN */,
CEEE156E1460325B00783E91 /* cs */, CEEE156E1460325B00783E91 /* cs */,
CE7A69C9146443CB0007D927 /* it */, CE7A69C9146443CB0007D927 /* it */,
CEE6D559149113320087CDFC /* hy */,
CE905DE114C6387B00C0ECEF /* uk */,
); );
name = about.xib; name = about.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -813,6 +931,8 @@
CE653CEC14169F140058A022 /* zh_CN */, CE653CEC14169F140058A022 /* zh_CN */,
CEEE156F1460325B00783E91 /* cs */, CEEE156F1460325B00783E91 /* cs */,
CE7A69CA146443CB0007D927 /* it */, CE7A69CA146443CB0007D927 /* it */,
CEE6D55A149113320087CDFC /* hy */,
CE905DE214C6387B00C0ECEF /* uk */,
); );
name = ErrorReportWindow.xib; name = ErrorReportWindow.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -823,8 +943,16 @@
C01FCF4C08A954540054247B /* release */ = { C01FCF4C08A954540054247B /* release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(PROJECT_DIR)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../build\"",
);
PRODUCT_NAME = "dupeGuru PE"; PRODUCT_NAME = "dupeGuru PE";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
@@ -835,8 +963,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -847,8 +975,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(NATIVE_ARCH_ACTUAL)"; ARCHS = "$(NATIVE_ARCH_ACTUAL)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -857,7 +985,15 @@
CEE00FF1111AF37400BC1A77 /* dev */ = { CEE00FF1111AF37400BC1A77 /* dev */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(PROJECT_DIR)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../build\"",
);
PRODUCT_NAME = "dupeGuru PE"; PRODUCT_NAME = "dupeGuru PE";
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };

View File

@@ -1,23 +0,0 @@
/*
Copyright 2011 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 "Utils.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[Utils setPluginName:@"dg_cocoa"];
NSString *pluginPath = [[NSBundle mainBundle]
pathForResource:@"dg_cocoa"
ofType:@"plugin"];
NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath];
[pluginBundle load];
[pool release];
return NSApplicationMain(argc, (const char **) argv);
}

View File

@@ -11,5 +11,4 @@ http://www.hardcoded.net/licenses/bsd_license
#import "PyDupeGuru.h" #import "PyDupeGuru.h"
@interface AppDelegate : AppDelegateBase {} @interface AppDelegate : AppDelegateBase {}
- (PyDupeGuru *)py;
@end @end

View File

@@ -62,6 +62,4 @@ http://www.hardcoded.net/licenses/bsd_license
{ {
return [[ResultWindow alloc] initWithParentApp:self]; return [[ResultWindow alloc] initWithParentApp:self];
} }
- (PyDupeGuru *)py { return (PyDupeGuru *)py; }
@end @end

View File

@@ -22,6 +22,8 @@
<string>APPL</string> <string>APPL</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>hsft</string> <string>hsft</string>
<key>CFBundleShortVersionString</key>
<string>{version}</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>{version}</string> <string>{version}</string>
<key>NSMainNibFile</key> <key>NSMainNibFile</key>

View File

@@ -1,16 +0,0 @@
/*
Copyright 2011 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 "../base/PyDupeGuru.h"
@interface PyDupeGuru : PyDupeGuruBase
//Scanning options
- (void)setWordWeighting:(NSNumber *)words_are_weighted;
- (void)setMatchSimilarWords:(NSNumber *)match_similar_words;
@end

View File

@@ -39,15 +39,14 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)setScanOptions - (void)setScanOptions
{ {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
PyDupeGuru *_py = (PyDupeGuru *)py; [model setScanType:n2b([ud objectForKey:@"scanType"])];
[_py setScanType:[ud objectForKey:@"scanType"]]; [model setMinMatchPercentage:n2i([ud objectForKey:@"minMatchPercentage"])];
[_py setMinMatchPercentage:[ud objectForKey:@"minMatchPercentage"]]; [model setWordWeighting:n2b([ud objectForKey:@"wordWeighting"])];
[_py setWordWeighting:[ud objectForKey:@"wordWeighting"]]; [model setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])];
[_py setMixFileKind:n2b([ud objectForKey:@"mixFileKind"])]; [model setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])];
[_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; [model setMatchSimilarWords:n2b([ud objectForKey:@"matchSimilarWords"])];
[_py setMatchSimilarWords:[ud objectForKey:@"matchSimilarWords"]];
int smallFileThreshold = [ud integerForKey:@"smallFileThreshold"]; // In KB int smallFileThreshold = [ud integerForKey:@"smallFileThreshold"]; // In KB
int sizeThreshold = [ud boolForKey:@"ignoreSmallFiles"] ? smallFileThreshold * 1024 : 0; // The py side wants bytes int sizeThreshold = [ud boolForKey:@"ignoreSmallFiles"] ? smallFileThreshold * 1024 : 0; // The py side wants bytes
[_py setSizeThreshold:sizeThreshold]; [model setSizeThreshold:sizeThreshold];
} }
@end @end

View File

@@ -7,48 +7,14 @@
from hscommon.trans import install_gettext_trans_under_cocoa from hscommon.trans import install_gettext_trans_under_cocoa
install_gettext_trans_under_cocoa() install_gettext_trans_under_cocoa()
from hscommon.cocoa import signature from cocoa.inter import PySelectableList, PyColumns, PyTable
from core.scanner import ScanType
from inter.app import PyDupeGuruBase
from inter.details_panel import PyDetailsPanel from inter.details_panel import PyDetailsPanel
from inter.directory_outline import PyDirectoryOutline from inter.directory_outline import PyDirectoryOutline
from inter.extra_fairware_reminder import PyExtraFairwareReminder from inter.extra_fairware_reminder import PyExtraFairwareReminder
from inter.prioritize_dialog import PyPrioritizeDialog from inter.prioritize_dialog import PyPrioritizeDialog
from inter.prioritize_list import PyPrioritizeList
from inter.problem_dialog import PyProblemDialog from inter.problem_dialog import PyProblemDialog
from inter.problem_table import PyProblemTable
from inter.result_table import PyResultTable from inter.result_table import PyResultTable
from inter.stats_label import PyStatsLabel from inter.stats_label import PyStatsLabel
from inter.app_se import DupeGuru from inter.app_se import PyDupeGuru
class PyDupeGuru(PyDupeGuruBase):
def init(self):
self = super(PyDupeGuru,self).init()
self._init(DupeGuru)
return self
#---Properties
def setMinMatchPercentage_(self,percentage):
self.py.scanner.min_match_percentage = int(percentage)
def setScanType_(self,scan_type):
try:
self.py.scanner.scan_type = [
ScanType.Filename,
ScanType.Contents,
ScanType.Folders,
][scan_type]
except IndexError:
pass
def setWordWeighting_(self,words_are_weighted):
self.py.scanner.word_weighting = words_are_weighted
def setMatchSimilarWords_(self,match_similar_words):
self.py.scanner.match_similar_words = match_similar_words
@signature('v@:i')
def setSizeThreshold_(self, size_threshold):
self.py.scanner.size_threshold = size_threshold

View File

@@ -7,22 +7,31 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
CE073F6309CAE1A3005C1D2F /* help in Resources */ = {isa = PBXBuildFile; fileRef = CE073F5409CAE1A3005C1D2F /* help */; }; CE073F6309CAE1A3005C1D2F /* help in Resources */ = {isa = PBXBuildFile; fileRef = CE073F5409CAE1A3005C1D2F /* help */; };
CE18004D14BDD837001B6329 /* Python in Frameworks */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; };
CE18004F14BDD854001B6329 /* Python in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE18004C14BDD837001B6329 /* Python */; };
CE18005114BDD87B001B6329 /* py in Resources */ = {isa = PBXBuildFile; fileRef = CE18005014BDD87B001B6329 /* py */; };
CE19BC6411199231007CCEB0 /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE19BC6111199231007CCEB0 /* progress.xib */; }; CE19BC6411199231007CCEB0 /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE19BC6111199231007CCEB0 /* progress.xib */; };
CE1D091814BE0C6400CA6B8C /* ObjP.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D091514BE0C6400CA6B8C /* ObjP.m */; };
CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */; };
CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5514BF712B00265960 /* PyDirectoryOutline.m */; };
CE275C5A14BF71DF00265960 /* PyColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5914BF71DF00265960 /* PyColumns.m */; };
CE27D3C412CCA43800859E67 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE27D3C312CCA43800859E67 /* HSAboutBox.m */; }; CE27D3C412CCA43800859E67 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE27D3C312CCA43800859E67 /* HSAboutBox.m */; };
CE31819D13D85D9B00B6D649 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819913D85D9B00B6D649 /* about.xib */; }; CE31819D13D85D9B00B6D649 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819913D85D9B00B6D649 /* about.xib */; };
CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819B13D85D9B00B6D649 /* ErrorReportWindow.xib */; }; CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819B13D85D9B00B6D649 /* ErrorReportWindow.xib */; };
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; }; CE381C9609914ACE003581CE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9409914ACE003581CE /* AppDelegate.m */; };
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; }; CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CE381C9A09914ADF003581CE /* ResultWindow.m */; };
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */ = {isa = PBXBuildFile; fileRef = CE381CF509915304003581CE /* dg_cocoa.plugin */; }; CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */; };
CE41672D141FE1E5004F3F0B /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE41672B141FE1E5004F3F0B /* HSSelectableList.m */; };
CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; };
CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; }; CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE45579A0AE3BC2B005A9546 /* Sparkle.framework */; };
CE4746D314C09C12001A66DE /* PyProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4746D214C09C12001A66DE /* PyProblemDialog.m */; };
CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5335FB142BBFAF008E5374 /* HSQuicklook.m */; }; CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5335FB142BBFAF008E5374 /* HSQuicklook.m */; };
CE533603142BC034008E5374 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE533602142BC034008E5374 /* Quartz.framework */; }; CE533603142BC034008E5374 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE533602142BC034008E5374 /* Quartz.framework */; };
CE54A87E148046F9008EEA77 /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CE54A87D148046F9008EEA77 /* HSColumns.m */; }; CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */; };
CE548CC714BF903D00D180CB /* PyPrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE548CC514BF903D00D180CB /* PyPrioritizeList.m */; };
CE587E9A14C07BCF004CA031 /* PyOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9814C07BCF004CA031 /* PyOutline.m */; };
CE587E9E14C0801F004CA031 /* PySelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE587E9D14C0801F004CA031 /* PySelectableList.m */; };
CE647E571173024A006D28BA /* ProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE647E551173024A006D28BA /* ProblemDialog.m */; }; CE647E571173024A006D28BA /* ProblemDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE647E551173024A006D28BA /* ProblemDialog.m */; };
CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */; }; CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */; };
CE665B3313225AF8003F5CFB /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE665B3113225AF8003F5CFB /* ExtraFairwareReminder.xib */; }; CE665B3313225AF8003F5CFB /* ExtraFairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE665B3113225AF8003F5CFB /* ExtraFairwareReminder.xib */; };
@@ -32,9 +41,7 @@
CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDBF111EE37C006618EA /* HSOutlineView.m */; }; CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDBF111EE37C006618EA /* HSOutlineView.m */; };
CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */; }; CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */; };
CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */; }; CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */; };
CE76FDCF111EE38E006618EA /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDC9111EE38E006618EA /* HSGUIController.m */; };
CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */; }; CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */; };
CE76FDDF111EE42F006618EA /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDDE111EE42F006618EA /* HSOutline.m */; };
CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDF6111EE561006618EA /* NSEventAdditions.m */; }; CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE76FDF6111EE561006618EA /* NSEventAdditions.m */; };
CE79638612536C94008D405B /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE79638412536C94008D405B /* FairwareReminder.xib */; }; CE79638612536C94008D405B /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE79638412536C94008D405B /* FairwareReminder.xib */; };
CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE79638B12536F4E008D405B /* HSFairwareReminder.m */; }; CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE79638B12536F4E008D405B /* HSFairwareReminder.m */; };
@@ -46,19 +53,30 @@
CE81135812E5CE6D00A36C80 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81135612E5CE6D00A36C80 /* Preferences.xib */; }; CE81135812E5CE6D00A36C80 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81135612E5CE6D00A36C80 /* Preferences.xib */; };
CE8113EB12E5CE9A00A36C80 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE8113E912E5CE9A00A36C80 /* Localizable.strings */; }; CE8113EB12E5CE9A00A36C80 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE8113E912E5CE9A00A36C80 /* Localizable.strings */; };
CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE89240714239CC30024CE4E /* PrioritizeList.m */; }; CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE89240714239CC30024CE4E /* PrioritizeList.m */; };
CE8C53BC117324CE0011B41F /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE8C53BB117324CE0011B41F /* HSTable.m */; };
CE91F216113BC22D0010360B /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE91F214113BC22D0010360B /* StatsLabel.m */; }; CE91F216113BC22D0010360B /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CE91F214113BC22D0010360B /* StatsLabel.m */; };
CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */; }; CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */; };
CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */; }; CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */; };
CE9777D5141F9D7600C13FB5 /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */; }; CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */; };
CE9FC22D14C080CF005C31FD /* PyGUIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22C14C080CF005C31FD /* PyGUIObject.m */; };
CE9FC23014C08622005C31FD /* PyTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC22F14C08622005C31FD /* PyTable.m */; };
CE9FC23314C0866F005C31FD /* PyResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9FC23214C0866F005C31FD /* PyResultTable.m */; };
CEA175CA1461E8E600776591 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA175C91461E8E600776591 /* locale */; }; CEA175CA1461E8E600776591 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA175C91461E8E600776591 /* locale */; };
CEBE4D74111F0EE1009AAC6D /* HSWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */; }; CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */; };
CEB2AF5614C49AC800F907A9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB2AF5514C49AC800F907A9 /* main.m */; };
CEE7EA130FE675C80004E467 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7EA120FE675C80004E467 /* DetailsPanel.m */; }; CEE7EA130FE675C80004E467 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7EA120FE675C80004E467 /* DetailsPanel.m */; };
CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; };
CEEF2A1814C0A5A60082545A /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */; };
CEEF2A1D14C0A8480082545A /* PyDupeGuruBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */; };
CEEF2A1E14C0A8480082545A /* PyFairware.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1C14C0A8480082545A /* PyFairware.m */; };
CEEF2A3C14C0B9050082545A /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3114C0B9050082545A /* HSColumns.m */; };
CEEF2A3D14C0B9050082545A /* HSGUIController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3314C0B9050082545A /* HSGUIController.m */; };
CEEF2A3E14C0B9050082545A /* HSOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3514C0B9050082545A /* HSOutline.m */; };
CEEF2A3F14C0B9050082545A /* HSPopUpList.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3714C0B9050082545A /* HSPopUpList.m */; };
CEEF2A4014C0B9050082545A /* HSSelectableList.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3914C0B9050082545A /* HSSelectableList.m */; };
CEEF2A4114C0B9050082545A /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3B14C0B9050082545A /* HSTable.m */; };
CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */; }; CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */; };
CEFC294609C89E3D00D9F998 /* folder32.png in Resources */ = {isa = PBXBuildFile; fileRef = CEFC294509C89E3D00D9F998 /* folder32.png */; }; CEFC294609C89E3D00D9F998 /* folder32.png in Resources */ = {isa = PBXBuildFile; fileRef = CEFC294509C89E3D00D9F998 /* folder32.png */; };
CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8B0FC9517500CD5728 /* Dialogs.m */; }; CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8B0FC9517500CD5728 /* Dialogs.m */; };
CEFC7F9F0FC9517500CD5728 /* HSErrorReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */; };
CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F910FC9517500CD5728 /* ProgressController.m */; }; CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F910FC9517500CD5728 /* ProgressController.m */; };
CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9B0FC9517500CD5728 /* Utils.m */; }; CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9B0FC9517500CD5728 /* Utils.m */; };
CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9D0FC9517500CD5728 /* ValueTransformers.m */; }; CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9D0FC9517500CD5728 /* ValueTransformers.m */; };
@@ -75,6 +93,7 @@
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */, CE4557B40AE3BC50005A9546 /* Sparkle.framework in CopyFiles */,
CE18004F14BDD854001B6329 /* Python in CopyFiles */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -83,11 +102,22 @@
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
8D1107320486CEB800E47090 /* dupeGuru.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dupeGuru.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8D1107320486CEB800E47090 /* dupeGuru.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dupeGuru.app; sourceTree = BUILT_PRODUCTS_DIR; };
CE00BBBD14910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CE00BBBE14910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CE00BBBF14910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CE00BBC014910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/MainMenu.xib; sourceTree = "<group>"; };
CE00BBC114910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE00BBC214910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CE00BBC314910C5E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CE00BBCC14910C72006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = hy.lproj/Preferences.xib; sourceTree = "<group>"; };
CE00BBCE14910C8E006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hy; path = ../base/hy.lproj/Localizable.strings; sourceTree = "<group>"; };
CE00BBD014910CA3006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/about.xib; sourceTree = "<group>"; };
CE00BBD114910CA3006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE00BBD214910CA3006A717C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../hy.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE05341312E5DC260029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../../cocoalib/fr.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE05341312E5DC260029EF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../../cocoalib/fr.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE0564A814169D6C00D3D907 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/about.xib; sourceTree = "<group>"; }; CE0564A814169D6C00D3D907 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/about.xib; sourceTree = "<group>"; };
CE0564A914169D6C00D3D907 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CE0564A914169D6C00D3D907 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../zh_CN.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
@@ -104,7 +134,17 @@
CE112F5F145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = "<group>"; }; CE112F5F145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/about.xib; sourceTree = "<group>"; };
CE112F60145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; }; CE112F60145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CE112F61145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/FairwareReminder.xib; sourceTree = "<group>"; }; CE112F61145EF28D009C9E3E /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../cs.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CE18004C14BDD837001B6329 /* Python */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = Python; path = ../../build/Python; sourceTree = "<group>"; };
CE18005014BDD87B001B6329 /* py */ = {isa = PBXFileReference; lastKnownFileType = folder; name = py; path = ../../build/py; sourceTree = "<group>"; };
CE19BC6111199231007CCEB0 /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; }; CE19BC6111199231007CCEB0 /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; };
CE1D091414BE0C6400CA6B8C /* ObjP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjP.h; sourceTree = "<group>"; };
CE1D091514BE0C6400CA6B8C /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = "<group>"; };
CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = "<group>"; };
CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = "<group>"; };
CE275C5414BF712B00265960 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = "<group>"; };
CE275C5514BF712B00265960 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = "<group>"; };
CE275C5814BF71DF00265960 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; };
CE275C5914BF71DF00265960 /* PyColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns.m; sourceTree = "<group>"; };
CE27D3C212CCA43800859E67 /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; }; CE27D3C212CCA43800859E67 /* HSAboutBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSAboutBox.h; path = ../../cocoalib/HSAboutBox.h; sourceTree = SOURCE_ROOT; };
CE27D3C312CCA43800859E67 /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; }; CE27D3C312CCA43800859E67 /* HSAboutBox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSAboutBox.m; path = ../../cocoalib/HSAboutBox.m; sourceTree = SOURCE_ROOT; };
CE31819A13D85D9B00B6D649 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../en.lproj/about.xib; sourceTree = "<group>"; }; CE31819A13D85D9B00B6D649 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../en.lproj/about.xib; sourceTree = "<group>"; };
@@ -118,50 +158,43 @@
CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; CE381C9509914ACE003581CE /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; }; CE381C9A09914ADF003581CE /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = ResultWindow.m; sourceTree = SOURCE_ROOT; };
CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; }; CE381C9B09914ADF003581CE /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ResultWindow.h; sourceTree = SOURCE_ROOT; };
CE381CF509915304003581CE /* dg_cocoa.plugin */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dg_cocoa.plugin; sourceTree = SOURCE_ROOT; }; CE3A3B4714BF19B8007898AB /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDetailsPanel.h; sourceTree = "<group>"; };
CE41672A141FE1E5004F3F0B /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; }; CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDetailsPanel.m; sourceTree = "<group>"; };
CE41672B141FE1E5004F3F0B /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; };
CE41672C141FE1E5004F3F0B /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; };
CE45579A0AE3BC2B005A9546 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; }; CE45579A0AE3BC2B005A9546 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = /Library/Frameworks/Sparkle.framework; sourceTree = "<absolute>"; };
CE4746D114C09C12001A66DE /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyProblemDialog.h; sourceTree = "<group>"; };
CE4746D214C09C12001A66DE /* PyProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyProblemDialog.m; sourceTree = "<group>"; };
CE5335FA142BBFAF008E5374 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; }; CE5335FA142BBFAF008E5374 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = "<group>"; };
CE5335FB142BBFAF008E5374 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; }; CE5335FB142BBFAF008E5374 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = "<group>"; };
CE533602142BC034008E5374 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; CE533602142BC034008E5374 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
CE54A87A14804687008EEA77 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = "<group>"; }; CE548CC214BF903D00D180CB /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE54A87C148046F9008EEA77 /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; }; CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeDialog.m; sourceTree = "<group>"; };
CE54A87D148046F9008EEA77 /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; }; CE548CC414BF903D00D180CB /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyPrioritizeList.h; sourceTree = "<group>"; };
CE548CC514BF903D00D180CB /* PyPrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyPrioritizeList.m; sourceTree = "<group>"; };
CE587E9714C07BCF004CA031 /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE587E9814C07BCF004CA031 /* PyOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyOutline.m; sourceTree = "<group>"; };
CE587E9C14C0801F004CA031 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; };
CE587E9D14C0801F004CA031 /* PySelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PySelectableList.m; sourceTree = "<group>"; };
CE647E541173024A006D28BA /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; CE647E541173024A006D28BA /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE647E551173024A006D28BA /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; }; CE647E551173024A006D28BA /* ProblemDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProblemDialog.m; path = ../base/ProblemDialog.m; sourceTree = SOURCE_ROOT; };
CE647E561173024A006D28BA /* PyProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyProblemDialog.h; path = ../base/PyProblemDialog.h; sourceTree = SOURCE_ROOT; };
CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraFairwareReminder.h; path = ../base/ExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraFairwareReminder.m; path = ../base/ExtraFairwareReminder.m; sourceTree = SOURCE_ROOT; };
CE665B2F13225ADD003F5CFB /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyExtraFairwareReminder.h; path = ../base/PyExtraFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE665B3213225AF8003F5CFB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE665B3213225AF8003F5CFB /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE665B3413225B07003F5CFB /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE665B3413225B07003F5CFB /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE6DD4E4124CA3070089A48D /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyResultTable.h; path = ../base/PyResultTable.h; sourceTree = SOURCE_ROOT; };
CE6DD4E5124CA3070089A48D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; CE6DD4E5124CA3070089A48D /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; };
CE6DD4E6124CA3070089A48D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; CE6DD4E6124CA3070089A48D /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; };
CE6DD545124CAF1F0089A48D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; }; CE6DD545124CAF1F0089A48D /* HSTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSTableView.h; path = ../../cocoalib/views/HSTableView.h; sourceTree = SOURCE_ROOT; };
CE6DD546124CAF1F0089A48D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; }; CE6DD546124CAF1F0089A48D /* HSTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSTableView.m; path = ../../cocoalib/views/HSTableView.m; sourceTree = SOURCE_ROOT; };
CE6E0DFD1054E9EF008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; }; CE6E0DFD1054E9EF008D9390 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = ../base/dsa_pub.pem; sourceTree = "<group>"; };
CE6E7407111C997500C350E3 /* PyDetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDetailsPanel.h; path = ../base/PyDetailsPanel.h; sourceTree = SOURCE_ROOT; };
CE76FDBE111EE37C006618EA /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; }; CE76FDBE111EE37C006618EA /* HSOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutlineView.h; sourceTree = "<group>"; };
CE76FDBF111EE37C006618EA /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; }; CE76FDBF111EE37C006618EA /* HSOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutlineView.m; sourceTree = "<group>"; };
CE76FDC0111EE37C006618EA /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; }; CE76FDC0111EE37C006618EA /* NSIndexPathAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSIndexPathAdditions.h; sourceTree = "<group>"; };
CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexPathAdditions.m; sourceTree = "<group>"; }; CE76FDC1111EE37C006618EA /* NSIndexPathAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexPathAdditions.m; sourceTree = "<group>"; };
CE76FDC2111EE37C006618EA /* NSTableViewAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSTableViewAdditions.h; sourceTree = "<group>"; }; CE76FDC2111EE37C006618EA /* NSTableViewAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSTableViewAdditions.h; sourceTree = "<group>"; };
CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; }; CE76FDC3111EE37C006618EA /* NSTableViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTableViewAdditions.m; sourceTree = "<group>"; };
CE76FDC8111EE38E006618EA /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; };
CE76FDC9111EE38E006618EA /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; };
CE76FDCD111EE38E006618EA /* PyGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUI.h; sourceTree = "<group>"; };
CE76FDCE111EE38E006618EA /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = "<group>"; };
CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; }; CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryOutline.h; path = ../base/DirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; }; CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryOutline.m; path = ../base/DirectoryOutline.m; sourceTree = SOURCE_ROOT; };
CE76FDD3111EE3A7006618EA /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDirectoryOutline.h; path = ../base/PyDirectoryOutline.h; sourceTree = SOURCE_ROOT; };
CE76FDDD111EE42F006618EA /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; };
CE76FDDE111EE42F006618EA /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; };
CE76FDF5111EE561006618EA /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; CE76FDF5111EE561006618EA /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; };
CE76FDF6111EE561006618EA /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; }; CE76FDF6111EE561006618EA /* NSEventAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSEventAdditions.m; path = ../../cocoalib/NSEventAdditions.m; sourceTree = SOURCE_ROOT; };
CE79638212536C6E008D405B /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; };
CE79638512536C94008D405B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CE79638512536C94008D405B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
CE79638A12536F4E008D405B /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; }; CE79638A12536F4E008D405B /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; };
CE79638B12536F4E008D405B /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; }; CE79638B12536F4E008D405B /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; };
@@ -193,23 +226,23 @@
CE8113EC12E5CEA800A36C80 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = ../base/fr.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; }; CE8113EC12E5CEA800A36C80 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = ../base/fr.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; };
CE89240614239CC30024CE4E /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; }; CE89240614239CC30024CE4E /* PrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeList.h; path = ../base/PrioritizeList.h; sourceTree = "<group>"; };
CE89240714239CC30024CE4E /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; }; CE89240714239CC30024CE4E /* PrioritizeList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeList.m; path = ../base/PrioritizeList.m; sourceTree = "<group>"; };
CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeDialog.h; path = ../base/PyPrioritizeDialog.h; sourceTree = "<group>"; };
CE89240914239CC30024CE4E /* PyPrioritizeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyPrioritizeList.h; path = ../base/PyPrioritizeList.h; sourceTree = "<group>"; };
CE8C53B61173248F0011B41F /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE8C53BB117324CE0011B41F /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; };
CE91F210113BC22D0010360B /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyStatsLabel.h; path = ../base/PyStatsLabel.h; sourceTree = SOURCE_ROOT; };
CE91F213113BC22D0010360B /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; }; CE91F213113BC22D0010360B /* StatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatsLabel.h; path = ../base/StatsLabel.h; sourceTree = SOURCE_ROOT; };
CE91F214113BC22D0010360B /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; }; CE91F214113BC22D0010360B /* StatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StatsLabel.m; path = ../base/StatsLabel.m; sourceTree = SOURCE_ROOT; };
CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeDialog.h; path = ../base/PrioritizeDialog.h; sourceTree = "<group>"; }; CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrioritizeDialog.h; path = ../base/PrioritizeDialog.h; sourceTree = "<group>"; };
CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; }; CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PrioritizeDialog.m; path = ../base/PrioritizeDialog.m; sourceTree = "<group>"; };
CE9777D0141F8CB400C13FB5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CE9777D0141F8CB400C13FB5 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CE9777D2141F9D6500C13FB5 /* PySelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PySelectableList.h; sourceTree = "<group>"; }; CE9D842814BE2AE900184165 /* PyExtraFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyExtraFairwareReminder.h; sourceTree = "<group>"; };
CE9777D3141F9D7600C13FB5 /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; }; CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyExtraFairwareReminder.m; sourceTree = "<group>"; };
CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; }; CE9FC22B14C080CF005C31FD /* PyGUIObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyGUIObject.h; sourceTree = "<group>"; };
CE9FC22C14C080CF005C31FD /* PyGUIObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyGUIObject.m; sourceTree = "<group>"; };
CE9FC22E14C08622005C31FD /* PyTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyTable.h; sourceTree = "<group>"; };
CE9FC22F14C08622005C31FD /* PyTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyTable.m; sourceTree = "<group>"; };
CE9FC23114C0866F005C31FD /* PyResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyResultTable.h; sourceTree = "<group>"; };
CE9FC23214C0866F005C31FD /* PyResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyResultTable.m; sourceTree = "<group>"; };
CEA175C91461E8E600776591 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; }; CEA175C91461E8E600776591 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = "<group>"; };
CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = "<group>"; };
CEB2AF5514C49AC800F907A9 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = "<group>"; };
CEB57990146ADC5100EDF7D7 /* HSConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSConsts.h; path = ../../cocoalib/HSConsts.h; sourceTree = "<group>"; }; CEB57990146ADC5100EDF7D7 /* HSConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSConsts.h; path = ../../cocoalib/HSConsts.h; sourceTree = "<group>"; };
CEBE4D72111F0EE1009AAC6D /* HSWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSWindowController.h; sourceTree = "<group>"; };
CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSWindowController.m; sourceTree = "<group>"; };
CECFFF1C13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; }; CECFFF1C13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; };
CECFFF1D13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; CECFFF1D13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; };
CECFFF1E13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; }; CECFFF1E13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ExtraFairwareReminder.xib; sourceTree = SOURCE_ROOT; };
@@ -217,6 +250,18 @@
CECFFF2013CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ProblemDialog.xib; sourceTree = SOURCE_ROOT; }; CECFFF2013CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ProblemDialog.xib; sourceTree = SOURCE_ROOT; };
CECFFF2113CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ResultWindow.xib; sourceTree = SOURCE_ROOT; }; CECFFF2113CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/ResultWindow.xib; sourceTree = SOURCE_ROOT; };
CECFFF2413CDF8E5003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Preferences.xib; sourceTree = "<group>"; }; CECFFF2413CDF8E5003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/Preferences.xib; sourceTree = "<group>"; };
CED638D514B38CC800B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/about.xib; sourceTree = "<group>"; };
CED638D614B38CC800B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CED638D714B38CC800B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../ru.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CED638DC14B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CED638DD14B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CED638DE14B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CED638DF14B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/MainMenu.xib; sourceTree = "<group>"; };
CED638E014B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CED638E114B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CED638E214B38CEC00B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CED638EA14B38CF800B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/Preferences.xib; sourceTree = "<group>"; };
CED638EC14B38D0900B88D00 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ../base/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
CED64CEB145EF06000572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = ../base/cs.lproj/Localizable.strings; sourceTree = "<group>"; }; CED64CEB145EF06000572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = ../base/cs.lproj/Localizable.strings; sourceTree = "<group>"; };
CED64CF8145EF07700572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DetailsPanel.xib; sourceTree = "<group>"; }; CED64CF8145EF07700572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CED64CF9145EF07700572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DirectoryPanel.xib; sourceTree = "<group>"; }; CED64CF9145EF07700572B00 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
@@ -230,6 +275,37 @@
CEE7EA110FE675C80004E467 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; }; CEE7EA110FE675C80004E467 /* DetailsPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailsPanel.h; path = ../base/DetailsPanel.h; sourceTree = SOURCE_ROOT; };
CEE7EA120FE675C80004E467 /* DetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DetailsPanel.m; path = ../base/DetailsPanel.m; sourceTree = SOURCE_ROOT; }; CEE7EA120FE675C80004E467 /* DetailsPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DetailsPanel.m; path = ../base/DetailsPanel.m; sourceTree = SOURCE_ROOT; };
CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; }; CEEB135109C837A2004D2330 /* dupeguru.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = dupeguru.icns; sourceTree = "<group>"; };
CEECCD0614C636C900A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/about.xib; sourceTree = "<group>"; };
CEECCD0714C636C900A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/ErrorReportWindow.xib; sourceTree = "<group>"; };
CEECCD0814C636C900A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../uk.lproj/FairwareReminder.xib; sourceTree = "<group>"; };
CEECCD0D14C636F100A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = ../base/uk.lproj/Localizable.strings; sourceTree = "<group>"; };
CEECCD0F14C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DetailsPanel.xib; sourceTree = "<group>"; };
CEECCD1014C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DirectoryPanel.xib; sourceTree = "<group>"; };
CEECCD1114C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ExtraFairwareReminder.xib; sourceTree = "<group>"; };
CEECCD1214C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/MainMenu.xib; sourceTree = "<group>"; };
CEECCD1314C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
CEECCD1414C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ProblemDialog.xib; sourceTree = "<group>"; };
CEECCD1514C6370000A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/ResultWindow.xib; sourceTree = "<group>"; };
CEECCD1D14C6370C00A2F3A0 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = uk.lproj/Preferences.xib; sourceTree = "<group>"; };
CEEF2A1614C0A5A60082545A /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = "<group>"; };
CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuru.m; sourceTree = "<group>"; };
CEEF2A1914C0A8480082545A /* PyDupeGuruBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDupeGuruBase.h; sourceTree = "<group>"; };
CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDupeGuruBase.m; sourceTree = "<group>"; };
CEEF2A1B14C0A8480082545A /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyFairware.h; sourceTree = "<group>"; };
CEEF2A1C14C0A8480082545A /* PyFairware.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyFairware.m; sourceTree = "<group>"; };
CEEF2A3014C0B9050082545A /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = "<group>"; };
CEEF2A3114C0B9050082545A /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = "<group>"; };
CEEF2A3214C0B9050082545A /* HSGUIController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSGUIController.h; sourceTree = "<group>"; };
CEEF2A3314C0B9050082545A /* HSGUIController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSGUIController.m; sourceTree = "<group>"; };
CEEF2A3414C0B9050082545A /* HSOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline.h; sourceTree = "<group>"; };
CEEF2A3514C0B9050082545A /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = "<group>"; };
CEEF2A3614C0B9050082545A /* HSPopUpList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSPopUpList.h; sourceTree = "<group>"; };
CEEF2A3714C0B9050082545A /* HSPopUpList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSPopUpList.m; sourceTree = "<group>"; };
CEEF2A3814C0B9050082545A /* HSSelectableList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSSelectableList.h; sourceTree = "<group>"; };
CEEF2A3914C0B9050082545A /* HSSelectableList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSSelectableList.m; sourceTree = "<group>"; };
CEEF2A3A14C0B9050082545A /* HSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSTable.h; sourceTree = "<group>"; };
CEEF2A3B14C0B9050082545A /* HSTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSTable.m; sourceTree = "<group>"; };
CEEF2A4214C0BB430082545A /* Worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Worker.h; path = ../../cocoalib/Worker.h; sourceTree = "<group>"; };
CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; }; CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSRecentFiles.h; path = ../../cocoalib/HSRecentFiles.h; sourceTree = SOURCE_ROOT; };
CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; }; CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSRecentFiles.m; path = ../../cocoalib/HSRecentFiles.m; sourceTree = SOURCE_ROOT; };
CEF27A9C1423EAD90048ADFA /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; }; CEF27A9C1423EAD90048ADFA /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/PrioritizeDialog.xib; sourceTree = "<group>"; };
@@ -238,11 +314,8 @@
CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; }; CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; };
CEFC7F8A0FC9517500CD5728 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; CEFC7F8A0FC9517500CD5728 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; };
CEFC7F8B0FC9517500CD5728 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; CEFC7F8B0FC9517500CD5728 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; };
CEFC7F8C0FC9517500CD5728 /* HSErrorReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSErrorReportWindow.h; path = ../../cocoalib/HSErrorReportWindow.h; sourceTree = SOURCE_ROOT; };
CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSErrorReportWindow.m; path = ../../cocoalib/HSErrorReportWindow.m; sourceTree = SOURCE_ROOT; };
CEFC7F900FC9517500CD5728 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; CEFC7F900FC9517500CD5728 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; };
CEFC7F910FC9517500CD5728 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; }; CEFC7F910FC9517500CD5728 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; };
CEFC7F920FC9517500CD5728 /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; };
CEFC7F9A0FC9517500CD5728 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; }; CEFC7F9A0FC9517500CD5728 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; };
CEFC7F9B0FC9517500CD5728 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; }; CEFC7F9B0FC9517500CD5728 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; };
CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; }; CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValueTransformers.h; path = ../../cocoalib/ValueTransformers.h; sourceTree = SOURCE_ROOT; };
@@ -252,10 +325,8 @@
CEFC7FB30FC951A700CD5728 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; }; CEFC7FB30FC951A700CD5728 /* Consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Consts.h; path = ../base/Consts.h; sourceTree = SOURCE_ROOT; };
CEFC7FB40FC951A700CD5728 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; }; CEFC7FB40FC951A700CD5728 /* DirectoryPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryPanel.h; path = ../base/DirectoryPanel.h; sourceTree = SOURCE_ROOT; };
CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; }; CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryPanel.m; path = ../base/DirectoryPanel.m; sourceTree = SOURCE_ROOT; };
CEFC7FB60FC951A700CD5728 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyDupeGuru.h; path = ../base/PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
CEFC7FB70FC951A700CD5728 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; }; CEFC7FB70FC951A700CD5728 /* ResultWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultWindow.h; path = ../base/ResultWindow.h; sourceTree = SOURCE_ROOT; };
CEFC7FB80FC951A700CD5728 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; }; CEFC7FB80FC951A700CD5728 /* ResultWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultWindow.m; path = ../base/ResultWindow.m; sourceTree = SOURCE_ROOT; };
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = PyDupeGuru.h; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -263,6 +334,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
CE18004D14BDD837001B6329 /* Python in Frameworks */,
CE533603142BC034008E5374 /* Quartz.framework in Frameworks */, CE533603142BC034008E5374 /* Quartz.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */, CE45579B0AE3BC2B005A9546 /* Sparkle.framework in Frameworks */,
@@ -277,10 +349,8 @@
children = ( children = (
CE381C9509914ACE003581CE /* AppDelegate.h */, CE381C9509914ACE003581CE /* AppDelegate.h */,
CE381C9409914ACE003581CE /* AppDelegate.m */, CE381C9409914ACE003581CE /* AppDelegate.m */,
CEFF18A009A4D387005E6321 /* PyDupeGuru.h */,
CE381C9B09914ADF003581CE /* ResultWindow.h */, CE381C9B09914ADF003581CE /* ResultWindow.h */,
CE381C9A09914ADF003581CE /* ResultWindow.m */, CE381C9A09914ADF003581CE /* ResultWindow.m */,
29B97316FDCFA39411CA2CEA /* main.m */,
); );
name = DGSE; name = DGSE;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -288,6 +358,7 @@
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE18004C14BDD837001B6329 /* Python */,
CE45579A0AE3BC2B005A9546 /* Sparkle.framework */, CE45579A0AE3BC2B005A9546 /* Sparkle.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
CE533602142BC034008E5374 /* Quartz.framework */, CE533602142BC034008E5374 /* Quartz.framework */,
@@ -318,6 +389,7 @@
children = ( children = (
080E96DDFE201D6D7F000001 /* DGSE */, 080E96DDFE201D6D7F000001 /* DGSE */,
CEFC7FB00FC9518F00CD5728 /* dgbase */, CEFC7FB00FC9518F00CD5728 /* dgbase */,
CE1D091314BE0C6400CA6B8C /* autogen */,
CEFC7F890FC9513600CD5728 /* cocoalib */, CEFC7F890FC9513600CD5728 /* cocoalib */,
29B97317FDCFA39411CA2CEA /* Resources */, 29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */, 29B97323FDCFA39411CA2CEA /* Frameworks */,
@@ -329,9 +401,10 @@
29B97317FDCFA39411CA2CEA /* Resources */ = { 29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */,
CE18005014BDD87B001B6329 /* py */,
CEA175C91461E8E600776591 /* locale */, CEA175C91461E8E600776591 /* locale */,
CE073F5409CAE1A3005C1D2F /* help */, CE073F5409CAE1A3005C1D2F /* help */,
CE381CF509915304003581CE /* dg_cocoa.plugin */,
CEFC294309C89E0000D9F998 /* images */, CEFC294309C89E0000D9F998 /* images */,
CEEFC0CA10943849001F3A39 /* xib */, CEEFC0CA10943849001F3A39 /* xib */,
CEEB135109C837A2004D2330 /* dupeguru.icns */, CEEB135109C837A2004D2330 /* dupeguru.icns */,
@@ -363,6 +436,48 @@
path = ../../cocoalib/xib; path = ../../cocoalib/xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
}; };
CE1D091314BE0C6400CA6B8C /* autogen */ = {
isa = PBXGroup;
children = (
CE9FC22B14C080CF005C31FD /* PyGUIObject.h */,
CE9FC22C14C080CF005C31FD /* PyGUIObject.m */,
CE275C5814BF71DF00265960 /* PyColumns.h */,
CE275C5914BF71DF00265960 /* PyColumns.m */,
CE587E9714C07BCF004CA031 /* PyOutline.h */,
CE587E9814C07BCF004CA031 /* PyOutline.m */,
CE587E9C14C0801F004CA031 /* PySelectableList.h */,
CE587E9D14C0801F004CA031 /* PySelectableList.m */,
CE9FC22E14C08622005C31FD /* PyTable.h */,
CE9FC22F14C08622005C31FD /* PyTable.m */,
CE3A3B4714BF19B8007898AB /* PyDetailsPanel.h */,
CE3A3B4814BF19B8007898AB /* PyDetailsPanel.m */,
CE9D842814BE2AE900184165 /* PyExtraFairwareReminder.h */,
CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */,
CE275C5414BF712B00265960 /* PyDirectoryOutline.h */,
CE275C5514BF712B00265960 /* PyDirectoryOutline.m */,
CE548CC214BF903D00D180CB /* PyPrioritizeDialog.h */,
CE548CC314BF903D00D180CB /* PyPrioritizeDialog.m */,
CE548CC414BF903D00D180CB /* PyPrioritizeList.h */,
CE548CC514BF903D00D180CB /* PyPrioritizeList.m */,
CE4746D114C09C12001A66DE /* PyProblemDialog.h */,
CE4746D214C09C12001A66DE /* PyProblemDialog.m */,
CE9FC23114C0866F005C31FD /* PyResultTable.h */,
CE9FC23214C0866F005C31FD /* PyResultTable.m */,
CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */,
CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */,
CE1D091414BE0C6400CA6B8C /* ObjP.h */,
CE1D091514BE0C6400CA6B8C /* ObjP.m */,
CEEF2A1614C0A5A60082545A /* PyDupeGuru.h */,
CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */,
CEEF2A1914C0A8480082545A /* PyDupeGuruBase.h */,
CEEF2A1A14C0A8480082545A /* PyDupeGuruBase.m */,
CEEF2A1B14C0A8480082545A /* PyFairware.h */,
CEEF2A1C14C0A8480082545A /* PyFairware.m */,
);
name = autogen;
path = ../autogen;
sourceTree = "<group>";
};
CE76FDBD111EE37C006618EA /* views */ = { CE76FDBD111EE37C006618EA /* views */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -382,38 +497,23 @@
CE76FDC7111EE38E006618EA /* controllers */ = { CE76FDC7111EE38E006618EA /* controllers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE54A87C148046F9008EEA77 /* HSColumns.h */, CEEF2A3014C0B9050082545A /* HSColumns.h */,
CE54A87D148046F9008EEA77 /* HSColumns.m */, CEEF2A3114C0B9050082545A /* HSColumns.m */,
CEBE4D72111F0EE1009AAC6D /* HSWindowController.h */, CEEF2A3214C0B9050082545A /* HSGUIController.h */,
CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */, CEEF2A3314C0B9050082545A /* HSGUIController.m */,
CE76FDDD111EE42F006618EA /* HSOutline.h */, CEEF2A3414C0B9050082545A /* HSOutline.h */,
CE76FDDE111EE42F006618EA /* HSOutline.m */, CEEF2A3514C0B9050082545A /* HSOutline.m */,
CE76FDC8111EE38E006618EA /* HSGUIController.h */, CEEF2A3614C0B9050082545A /* HSPopUpList.h */,
CE76FDC9111EE38E006618EA /* HSGUIController.m */, CEEF2A3714C0B9050082545A /* HSPopUpList.m */,
CE41672C141FE1E5004F3F0B /* HSTable.h */, CEEF2A3814C0B9050082545A /* HSSelectableList.h */,
CE8C53BB117324CE0011B41F /* HSTable.m */, CEEF2A3914C0B9050082545A /* HSSelectableList.m */,
CE9777D3141F9D7600C13FB5 /* HSPopUpList.h */, CEEF2A3A14C0B9050082545A /* HSTable.h */,
CE9777D4141F9D7600C13FB5 /* HSPopUpList.m */, CEEF2A3B14C0B9050082545A /* HSTable.m */,
CE41672A141FE1E5004F3F0B /* HSSelectableList.h */,
CE41672B141FE1E5004F3F0B /* HSSelectableList.m */,
); );
name = controllers; name = controllers;
path = ../../cocoalib/controllers; path = ../../cocoalib/controllers;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
}; };
CE76FDCC111EE38E006618EA /* proxies */ = {
isa = PBXGroup;
children = (
CE54A87A14804687008EEA77 /* PyColumns.h */,
CE76FDCD111EE38E006618EA /* PyGUI.h */,
CE76FDCE111EE38E006618EA /* PyOutline.h */,
CE8C53B61173248F0011B41F /* PyTable.h */,
CE9777D2141F9D6500C13FB5 /* PySelectableList.h */,
);
name = proxies;
path = ../../cocoalib/proxies;
sourceTree = SOURCE_ROOT;
};
CEEFC0CA10943849001F3A39 /* xib */ = { CEEFC0CA10943849001F3A39 /* xib */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -443,26 +543,22 @@
CE76FDF5111EE561006618EA /* NSEventAdditions.h */, CE76FDF5111EE561006618EA /* NSEventAdditions.h */,
CE76FDF6111EE561006618EA /* NSEventAdditions.m */, CE76FDF6111EE561006618EA /* NSEventAdditions.m */,
CE76FDC7111EE38E006618EA /* controllers */, CE76FDC7111EE38E006618EA /* controllers */,
CE76FDCC111EE38E006618EA /* proxies */,
CE76FDBD111EE37C006618EA /* views */, CE76FDBD111EE37C006618EA /* views */,
CE19BC5F11199231007CCEB0 /* xib */, CE19BC5F11199231007CCEB0 /* xib */,
CEB57990146ADC5100EDF7D7 /* HSConsts.h */, CEB57990146ADC5100EDF7D7 /* HSConsts.h */,
CEFC7F8A0FC9517500CD5728 /* Dialogs.h */, CEFC7F8A0FC9517500CD5728 /* Dialogs.h */,
CEFC7F8B0FC9517500CD5728 /* Dialogs.m */, CEFC7F8B0FC9517500CD5728 /* Dialogs.m */,
CEFC7F8C0FC9517500CD5728 /* HSErrorReportWindow.h */,
CEFC7F8D0FC9517500CD5728 /* HSErrorReportWindow.m */,
CE79638A12536F4E008D405B /* HSFairwareReminder.h */, CE79638A12536F4E008D405B /* HSFairwareReminder.h */,
CE79638B12536F4E008D405B /* HSFairwareReminder.m */, CE79638B12536F4E008D405B /* HSFairwareReminder.m */,
CE79638212536C6E008D405B /* PyFairware.h */,
CE27D3C212CCA43800859E67 /* HSAboutBox.h */, CE27D3C212CCA43800859E67 /* HSAboutBox.h */,
CE27D3C312CCA43800859E67 /* HSAboutBox.m */, CE27D3C312CCA43800859E67 /* HSAboutBox.m */,
CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */, CEF0ACCC12DF3C2000B32F7E /* HSRecentFiles.h */,
CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */, CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */,
CE5335FA142BBFAF008E5374 /* HSQuicklook.h */, CE5335FA142BBFAF008E5374 /* HSQuicklook.h */,
CE5335FB142BBFAF008E5374 /* HSQuicklook.m */, CE5335FB142BBFAF008E5374 /* HSQuicklook.m */,
CEEF2A4214C0BB430082545A /* Worker.h */,
CEFC7F900FC9517500CD5728 /* ProgressController.h */, CEFC7F900FC9517500CD5728 /* ProgressController.h */,
CEFC7F910FC9517500CD5728 /* ProgressController.m */, CEFC7F910FC9517500CD5728 /* ProgressController.m */,
CEFC7F920FC9517500CD5728 /* PyApp.h */,
CEFC7F9A0FC9517500CD5728 /* Utils.h */, CEFC7F9A0FC9517500CD5728 /* Utils.h */,
CEFC7F9B0FC9517500CD5728 /* Utils.m */, CEFC7F9B0FC9517500CD5728 /* Utils.m */,
CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */, CEFC7F9C0FC9517500CD5728 /* ValueTransformers.h */,
@@ -474,15 +570,12 @@
CEFC7FB00FC9518F00CD5728 /* dgbase */ = { CEFC7FB00FC9518F00CD5728 /* dgbase */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
CE6DD4E4124CA3070089A48D /* PyResultTable.h */,
CE6DD4E5124CA3070089A48D /* ResultTable.h */, CE6DD4E5124CA3070089A48D /* ResultTable.h */,
CE6DD4E6124CA3070089A48D /* ResultTable.m */, CE6DD4E6124CA3070089A48D /* ResultTable.m */,
CE91F210113BC22D0010360B /* PyStatsLabel.h */,
CE91F213113BC22D0010360B /* StatsLabel.h */, CE91F213113BC22D0010360B /* StatsLabel.h */,
CE91F214113BC22D0010360B /* StatsLabel.m */, CE91F214113BC22D0010360B /* StatsLabel.m */,
CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */, CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */,
CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */, CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */,
CE76FDD3111EE3A7006618EA /* PyDirectoryOutline.h */,
CEFC7FB10FC951A700CD5728 /* AppDelegate.h */, CEFC7FB10FC951A700CD5728 /* AppDelegate.h */,
CEFC7FB20FC951A700CD5728 /* AppDelegate.m */, CEFC7FB20FC951A700CD5728 /* AppDelegate.m */,
CEFC7FB30FC951A700CD5728 /* Consts.h */, CEFC7FB30FC951A700CD5728 /* Consts.h */,
@@ -492,20 +585,15 @@
CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */, CEFC7FB50FC951A700CD5728 /* DirectoryPanel.m */,
CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */, CE665B2D13225ADD003F5CFB /* ExtraFairwareReminder.h */,
CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */, CE665B2E13225ADD003F5CFB /* ExtraFairwareReminder.m */,
CEFC7FB60FC951A700CD5728 /* PyDupeGuru.h */,
CE6E7407111C997500C350E3 /* PyDetailsPanel.h */,
CEFC7FB70FC951A700CD5728 /* ResultWindow.h */, CEFC7FB70FC951A700CD5728 /* ResultWindow.h */,
CEFC7FB80FC951A700CD5728 /* ResultWindow.m */, CEFC7FB80FC951A700CD5728 /* ResultWindow.m */,
CE647E541173024A006D28BA /* ProblemDialog.h */, CE647E541173024A006D28BA /* ProblemDialog.h */,
CE647E551173024A006D28BA /* ProblemDialog.m */, CE647E551173024A006D28BA /* ProblemDialog.m */,
CE647E561173024A006D28BA /* PyProblemDialog.h */,
CE665B2F13225ADD003F5CFB /* PyExtraFairwareReminder.h */,
CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */, CE9777CB141F8C2500C13FB5 /* PrioritizeDialog.h */,
CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */, CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */,
CE89240814239CC30024CE4E /* PyPrioritizeDialog.h */,
CE89240614239CC30024CE4E /* PrioritizeList.h */, CE89240614239CC30024CE4E /* PrioritizeList.h */,
CE89240714239CC30024CE4E /* PrioritizeList.m */, CE89240714239CC30024CE4E /* PrioritizeList.m */,
CE89240914239CC30024CE4E /* PyPrioritizeList.h */, CEB2AF5514C49AC800F907A9 /* main.m */,
); );
name = dgbase; name = dgbase;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -556,6 +644,9 @@
zh_CN, zh_CN,
cs, cs,
it, it,
hy,
ru,
uk,
); );
mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */; mainGroup = 29B97314FDCFA39411CA2CEA /* dupeguru */;
projectDirPath = ""; projectDirPath = "";
@@ -571,7 +662,6 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
CE381D0509915304003581CE /* dg_cocoa.plugin in Resources */,
CE073F6309CAE1A3005C1D2F /* help in Resources */, CE073F6309CAE1A3005C1D2F /* help in Resources */,
CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */, CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */,
CEFC294609C89E3D00D9F998 /* folder32.png in Resources */, CEFC294609C89E3D00D9F998 /* folder32.png in Resources */,
@@ -590,6 +680,8 @@
CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */, CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */,
CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */, CE9777D1141F8CB400C13FB5 /* PrioritizeDialog.xib in Resources */,
CEA175CA1461E8E600776591 /* locale in Resources */, CEA175CA1461E8E600776591 /* locale in Resources */,
CE18005114BDD87B001B6329 /* py in Resources */,
CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -600,11 +692,9 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
CE381C9609914ACE003581CE /* AppDelegate.m in Sources */, CE381C9609914ACE003581CE /* AppDelegate.m in Sources */,
CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */, CE381C9C09914ADF003581CE /* ResultWindow.m in Sources */,
CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */, CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */,
CEFC7F9F0FC9517500CD5728 /* HSErrorReportWindow.m in Sources */,
CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */, CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */,
CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */, CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */,
CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */, CEFC7FA60FC9517500CD5728 /* ValueTransformers.m in Sources */,
@@ -615,14 +705,10 @@
CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */, CE76FDC4111EE37C006618EA /* HSOutlineView.m in Sources */,
CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */, CE76FDC5111EE37C006618EA /* NSIndexPathAdditions.m in Sources */,
CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */, CE76FDC6111EE37C006618EA /* NSTableViewAdditions.m in Sources */,
CE76FDCF111EE38E006618EA /* HSGUIController.m in Sources */,
CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */, CE76FDD4111EE3A7006618EA /* DirectoryOutline.m in Sources */,
CE76FDDF111EE42F006618EA /* HSOutline.m in Sources */,
CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */, CE76FDF7111EE561006618EA /* NSEventAdditions.m in Sources */,
CEBE4D74111F0EE1009AAC6D /* HSWindowController.m in Sources */,
CE91F216113BC22D0010360B /* StatsLabel.m in Sources */, CE91F216113BC22D0010360B /* StatsLabel.m in Sources */,
CE647E571173024A006D28BA /* ProblemDialog.m in Sources */, CE647E571173024A006D28BA /* ProblemDialog.m in Sources */,
CE8C53BC117324CE0011B41F /* HSTable.m in Sources */,
CE6DD4E7124CA3070089A48D /* ResultTable.m in Sources */, CE6DD4E7124CA3070089A48D /* ResultTable.m in Sources */,
CE6DD547124CAF1F0089A48D /* HSTableView.m in Sources */, CE6DD547124CAF1F0089A48D /* HSTableView.m in Sources */,
CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */, CE79638C12536F4E008D405B /* HSFairwareReminder.m in Sources */,
@@ -630,11 +716,32 @@
CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */, CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */,
CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */, CE665B3013225ADD003F5CFB /* ExtraFairwareReminder.m in Sources */,
CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */, CE9777CD141F8C2500C13FB5 /* PrioritizeDialog.m in Sources */,
CE9777D5141F9D7600C13FB5 /* HSPopUpList.m in Sources */,
CE41672D141FE1E5004F3F0B /* HSSelectableList.m in Sources */,
CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */, CE89240A14239CC30024CE4E /* PrioritizeList.m in Sources */,
CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */, CE5335FC142BBFAF008E5374 /* HSQuicklook.m in Sources */,
CE54A87E148046F9008EEA77 /* HSColumns.m in Sources */, CE1D091814BE0C6400CA6B8C /* ObjP.m in Sources */,
CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */,
CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */,
CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */,
CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */,
CE275C5A14BF71DF00265960 /* PyColumns.m in Sources */,
CE548CC614BF903D00D180CB /* PyPrioritizeDialog.m in Sources */,
CE548CC714BF903D00D180CB /* PyPrioritizeList.m in Sources */,
CE587E9A14C07BCF004CA031 /* PyOutline.m in Sources */,
CE587E9E14C0801F004CA031 /* PySelectableList.m in Sources */,
CE9FC22D14C080CF005C31FD /* PyGUIObject.m in Sources */,
CE9FC23014C08622005C31FD /* PyTable.m in Sources */,
CE9FC23314C0866F005C31FD /* PyResultTable.m in Sources */,
CE4746D314C09C12001A66DE /* PyProblemDialog.m in Sources */,
CEEF2A1814C0A5A60082545A /* PyDupeGuru.m in Sources */,
CEEF2A1D14C0A8480082545A /* PyDupeGuruBase.m in Sources */,
CEEF2A1E14C0A8480082545A /* PyFairware.m in Sources */,
CEEF2A3C14C0B9050082545A /* HSColumns.m in Sources */,
CEEF2A3D14C0B9050082545A /* HSGUIController.m in Sources */,
CEEF2A3E14C0B9050082545A /* HSOutline.m in Sources */,
CEEF2A3F14C0B9050082545A /* HSPopUpList.m in Sources */,
CEEF2A4014C0B9050082545A /* HSSelectableList.m in Sources */,
CEEF2A4114C0B9050082545A /* HSTable.m in Sources */,
CEB2AF5614C49AC800F907A9 /* main.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -650,6 +757,9 @@
CE0564A814169D6C00D3D907 /* zh_CN */, CE0564A814169D6C00D3D907 /* zh_CN */,
CE112F5F145EF28D009C9E3E /* cs */, CE112F5F145EF28D009C9E3E /* cs */,
CE7A6985146442340007D927 /* it */, CE7A6985146442340007D927 /* it */,
CE00BBD014910CA3006A717C /* hy */,
CED638D514B38CC800B88D00 /* ru */,
CEECCD0614C636C900A2F3A0 /* uk */,
); );
name = about.xib; name = about.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -663,6 +773,9 @@
CE0564A914169D6C00D3D907 /* zh_CN */, CE0564A914169D6C00D3D907 /* zh_CN */,
CE112F60145EF28D009C9E3E /* cs */, CE112F60145EF28D009C9E3E /* cs */,
CE7A6986146442340007D927 /* it */, CE7A6986146442340007D927 /* it */,
CE00BBD114910CA3006A717C /* hy */,
CED638D614B38CC800B88D00 /* ru */,
CEECCD0714C636C900A2F3A0 /* uk */,
); );
name = ErrorReportWindow.xib; name = ErrorReportWindow.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -676,6 +789,9 @@
CE0564B514169DB100D3D907 /* zh_CN */, CE0564B514169DB100D3D907 /* zh_CN */,
CED64CFA145EF07700572B00 /* cs */, CED64CFA145EF07700572B00 /* cs */,
CE7A6979146442160007D927 /* it */, CE7A6979146442160007D927 /* it */,
CE00BBBF14910C5E006A717C /* hy */,
CED638DE14B38CEC00B88D00 /* ru */,
CEECCD1114C6370000A2F3A0 /* uk */,
); );
name = ExtraFairwareReminder.xib; name = ExtraFairwareReminder.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -689,6 +805,9 @@
CE0564AA14169D6C00D3D907 /* zh_CN */, CE0564AA14169D6C00D3D907 /* zh_CN */,
CE112F61145EF28D009C9E3E /* cs */, CE112F61145EF28D009C9E3E /* cs */,
CE7A6987146442340007D927 /* it */, CE7A6987146442340007D927 /* it */,
CE00BBD214910CA3006A717C /* hy */,
CED638D714B38CC800B88D00 /* ru */,
CEECCD0814C636C900A2F3A0 /* uk */,
); );
name = FairwareReminder.xib; name = FairwareReminder.xib;
path = ../../cocoalib/xib; path = ../../cocoalib/xib;
@@ -703,6 +822,9 @@
CE0564B314169DB100D3D907 /* zh_CN */, CE0564B314169DB100D3D907 /* zh_CN */,
CED64CF8145EF07700572B00 /* cs */, CED64CF8145EF07700572B00 /* cs */,
CE7A6977146442160007D927 /* it */, CE7A6977146442160007D927 /* it */,
CE00BBBD14910C5E006A717C /* hy */,
CED638DC14B38CEC00B88D00 /* ru */,
CEECCD0F14C6370000A2F3A0 /* uk */,
); );
name = DetailsPanel.xib; name = DetailsPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -716,6 +838,9 @@
CE0564B414169DB100D3D907 /* zh_CN */, CE0564B414169DB100D3D907 /* zh_CN */,
CED64CF9145EF07700572B00 /* cs */, CED64CF9145EF07700572B00 /* cs */,
CE7A6978146442160007D927 /* it */, CE7A6978146442160007D927 /* it */,
CE00BBBE14910C5E006A717C /* hy */,
CED638DD14B38CEC00B88D00 /* ru */,
CEECCD1014C6370000A2F3A0 /* uk */,
); );
name = DirectoryPanel.xib; name = DirectoryPanel.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -729,6 +854,9 @@
CE0564B614169DB100D3D907 /* zh_CN */, CE0564B614169DB100D3D907 /* zh_CN */,
CED64CFB145EF07700572B00 /* cs */, CED64CFB145EF07700572B00 /* cs */,
CE7A697A146442160007D927 /* it */, CE7A697A146442160007D927 /* it */,
CE00BBC014910C5E006A717C /* hy */,
CED638DF14B38CEC00B88D00 /* ru */,
CEECCD1214C6370000A2F3A0 /* uk */,
); );
name = MainMenu.xib; name = MainMenu.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -742,6 +870,9 @@
CE0564B714169DB100D3D907 /* zh_CN */, CE0564B714169DB100D3D907 /* zh_CN */,
CED64CFD145EF07700572B00 /* cs */, CED64CFD145EF07700572B00 /* cs */,
CE7A697C146442160007D927 /* it */, CE7A697C146442160007D927 /* it */,
CE00BBC214910C5E006A717C /* hy */,
CED638E114B38CEC00B88D00 /* ru */,
CEECCD1414C6370000A2F3A0 /* uk */,
); );
name = ProblemDialog.xib; name = ProblemDialog.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -755,6 +886,9 @@
CE0564B814169DB100D3D907 /* zh_CN */, CE0564B814169DB100D3D907 /* zh_CN */,
CED64CFE145EF07700572B00 /* cs */, CED64CFE145EF07700572B00 /* cs */,
CE7A697D146442160007D927 /* it */, CE7A697D146442160007D927 /* it */,
CE00BBC314910C5E006A717C /* hy */,
CED638E214B38CEC00B88D00 /* ru */,
CEECCD1514C6370000A2F3A0 /* uk */,
); );
name = ResultWindow.xib; name = ResultWindow.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -768,6 +902,9 @@
CE0564BF14169DDC00D3D907 /* zh_CN */, CE0564BF14169DDC00D3D907 /* zh_CN */,
CED64D06145EF16300572B00 /* cs */, CED64D06145EF16300572B00 /* cs */,
CE7A698B1464425A0007D927 /* it */, CE7A698B1464425A0007D927 /* it */,
CE00BBCC14910C72006A717C /* hy */,
CED638EA14B38CF800B88D00 /* ru */,
CEECCD1D14C6370C00A2F3A0 /* uk */,
); );
name = Preferences.xib; name = Preferences.xib;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -781,6 +918,9 @@
CE0564B014169D9E00D3D907 /* zh_CN */, CE0564B014169D9E00D3D907 /* zh_CN */,
CED64CEB145EF06000572B00 /* cs */, CED64CEB145EF06000572B00 /* cs */,
CE7A6971146442010007D927 /* it */, CE7A6971146442010007D927 /* it */,
CE00BBCE14910C8E006A717C /* hy */,
CED638EC14B38D0900B88D00 /* ru */,
CEECCD0D14C636F100A2F3A0 /* uk */,
); );
name = Localizable.strings; name = Localizable.strings;
sourceTree = SOURCE_ROOT; sourceTree = SOURCE_ROOT;
@@ -794,6 +934,9 @@
CEF27A9E1423EAD90048ADFA /* zh_CN */, CEF27A9E1423EAD90048ADFA /* zh_CN */,
CED64CFC145EF07700572B00 /* cs */, CED64CFC145EF07700572B00 /* cs */,
CE7A697B146442160007D927 /* it */, CE7A697B146442160007D927 /* it */,
CE00BBC114910C5E006A717C /* hy */,
CED638E014B38CEC00B88D00 /* ru */,
CEECCD1314C6370000A2F3A0 /* uk */,
); );
name = PrioritizeDialog.xib; name = PrioritizeDialog.xib;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -804,8 +947,12 @@
C01FCF4C08A954540054247B /* release */ = { C01FCF4C08A954540054247B /* release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(PROJECT_DIR)";
PRODUCT_NAME = dupeGuru; PRODUCT_NAME = dupeGuru;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
@@ -816,8 +963,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -828,8 +975,8 @@
buildSettings = { buildSettings = {
ARCHS = "$(NATIVE_ARCH_ACTUAL)"; ARCHS = "$(NATIVE_ARCH_ACTUAL)";
GCC_C_LANGUAGE_STANDARD = c99; GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../build/PythonHeaders\"";
GCC_WARN_UNUSED_VARIABLE = YES; LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6; MACOSX_DEPLOYMENT_TARGET = 10.6;
SDKROOT = macosx10.6; SDKROOT = macosx10.6;
}; };
@@ -838,7 +985,11 @@
CE85E850111AF63D00187B0D /* dev */ = { CE85E850111AF63D00187B0D /* dev */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
DEPLOYMENT_LOCATION = YES;
DEPLOYMENT_POSTPROCESSING = YES;
DSTROOT = /;
INFOPLIST_FILE = Info.plist; INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(PROJECT_DIR)";
PRODUCT_NAME = dupeGuru; PRODUCT_NAME = dupeGuru;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };

View File

@@ -1,23 +0,0 @@
/*
Copyright 2011 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 "Utils.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[Utils setPluginName:@"dg_cocoa"];
NSString *pluginPath = [[NSBundle mainBundle]
pathForResource:@"dg_cocoa"
ofType:@"plugin"];
NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath];
[pluginBundle load];
[pool release];
return NSApplicationMain(argc, (const char **) argv);
}

View File

@@ -24,6 +24,10 @@ 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.details_panel import DetailsPanel
from .gui.directory_tree import DirectoryTree
from .gui.problem_dialog import ProblemDialog
from .gui.stats_label import StatsLabel
HAD_FIRST_LAUNCH_PREFERENCE = 'HadFirstLaunch' HAD_FIRST_LAUNCH_PREFERENCE = 'HadFirstLaunch'
DEBUG_MODE_PREFERENCE = 'DebugMode' DEBUG_MODE_PREFERENCE = 'DebugMode'
@@ -100,7 +104,16 @@ class DupeGuru(RegistrableApplication, Broadcaster):
'ignore_hardlink_matches': False, 'ignore_hardlink_matches': False,
} }
self.selected_dupes = [] self.selected_dupes = []
# subclasses must create self.result_table self.details_panel = DetailsPanel(self)
self.directory_tree = DirectoryTree(self)
self.problem_dialog = ProblemDialog(self)
self.stats_label = StatsLabel(self)
self.result_table = self._create_result_table()
children = [self.result_table, self.directory_tree, self.problem_dialog, self.stats_label,
self.details_panel]
for child in children:
child.connect()
# subclasses must create and connect self.result_table
#--- Virtual #--- Virtual
def _get_display_info(self, dupe, group, delta): def _get_display_info(self, dupe, group, delta):
@@ -115,6 +128,9 @@ class DupeGuru(RegistrableApplication, Broadcaster):
def _prioritization_categories(self): def _prioritization_categories(self):
raise NotImplementedError() raise NotImplementedError()
def _create_result_table(self):
raise NotImplementedError()
#--- Private #--- Private
def _do_delete(self, j, replace_with_hardlinks): def _do_delete(self, j, replace_with_hardlinks):
def op(dupe): def op(dupe):

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Created By: Virgil Dupras # Created By: Virgil Dupras
# Created On: 2010-02-06 # Created On: 2010-02-06
# Copyright 2011 Hardcoded Software (http://www.hardcoded.net) # Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
@@ -8,12 +7,12 @@
# http://www.hardcoded.net/licenses/bsd_license # http://www.hardcoded.net/licenses/bsd_license
from hscommon.notify import Listener from hscommon.notify import Listener
from hscommon.gui.base import NoopGUI
class GUIObject(Listener): class GUIObject(Listener):
def __init__(self, view, app): def __init__(self, app):
Listener.__init__(self, app) Listener.__init__(self, app)
if view is not None: self.view = NoopGUI()
self.view = view
self.app = app self.app = app
def directories_changed(self): def directories_changed(self):

View File

@@ -9,8 +9,8 @@
from .base import GUIObject from .base import GUIObject
class DetailsPanel(GUIObject): class DetailsPanel(GUIObject):
def __init__(self, view, app): def __init__(self, app):
GUIObject.__init__(self, view, app) GUIObject.__init__(self, app)
self._table = [] self._table = []
def connect(self): def connect(self):

View File

@@ -59,8 +59,8 @@ class DirectoryTree(GUIObject, Tree):
# refresh() # refresh()
# refresh_states() # when only states label need to be refreshed # refresh_states() # when only states label need to be refreshed
# #
def __init__(self, view, app): def __init__(self, app):
GUIObject.__init__(self, view, app) GUIObject.__init__(self, app)
Tree.__init__(self) Tree.__init__(self)
def connect(self): def connect(self):

View File

@@ -40,7 +40,7 @@ class PrioritizationList(GUISelectableList):
self._refresh_contents() self._refresh_contents()
class PrioritizeDialog: class PrioritizeDialog:
def __init__(self, view, app): def __init__(self, app):
self.app = app self.app = app
self.categories = [cat(app.results) for cat in app._prioritization_categories()] self.categories = [cat(app.results) for cat in app._prioritization_categories()]
self.category_list = CriterionCategoryList(self) self.category_list = CriterionCategoryList(self)

View File

@@ -9,12 +9,15 @@
from hscommon.notify import Broadcaster from hscommon.notify import Broadcaster
from .base import GUIObject from .base import GUIObject
from .problem_table import ProblemTable
class ProblemDialog(GUIObject, Broadcaster): class ProblemDialog(GUIObject, Broadcaster):
def __init__(self, view, app): def __init__(self, app):
GUIObject.__init__(self, view, app) GUIObject.__init__(self, app)
Broadcaster.__init__(self) Broadcaster.__init__(self)
self._selected_dupe = None self._selected_dupe = None
self.problem_table = ProblemTable(self)
self.problem_table.connect()
def reveal_selected_dupe(self): def reveal_selected_dupe(self):
if self._selected_dupe is not None: if self._selected_dupe is not None:

View File

@@ -19,11 +19,11 @@ class ProblemTable(GUITable, Listener):
Column('msg', coltr("Error Message")), Column('msg', coltr("Error Message")),
] ]
def __init__(self, view, problem_dialog): def __init__(self, problem_dialog):
GUITable.__init__(self) GUITable.__init__(self)
Listener.__init__(self, problem_dialog) Listener.__init__(self, problem_dialog)
self.columns = Columns(self) self.columns = Columns(self)
self.view = view self.view = None
self.dialog = problem_dialog self.dialog = problem_dialog
#--- Override #--- Override

View File

@@ -53,7 +53,7 @@ class DupeRow(Row):
class ResultTable(GUIObject, GUITable): class ResultTable(GUIObject, GUITable):
def __init__(self, app): def __init__(self, app):
GUIObject.__init__(self, None, app) GUIObject.__init__(self, app)
GUITable.__init__(self) GUITable.__init__(self)
self.columns = Columns(self, prefaccess=app, savename='ResultTable') self.columns = Columns(self, prefaccess=app, savename='ResultTable')
self._power_marker = False self._power_marker = False

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Created By: Virgil Dupras # Created By: Virgil Dupras
# Created On: 2010-02-11 # Created On: 2010-02-11
# Copyright 2011 Hardcoded Software (http://www.hardcoded.net) # Copyright 2011 Hardcoded Software (http://www.hardcoded.net)

View File

@@ -168,10 +168,10 @@ class TestCaseDupeGuruWithResults:
self.app = DupeGuru() self.app = DupeGuru()
self.objects,self.matches,self.groups = GetTestGroups() self.objects,self.matches,self.groups = GetTestGroups()
self.app.results.groups = self.groups self.app.results.groups = self.groups
self.dpanel_gui = CallLogger() self.dpanel = self.app.details_panel
self.dpanel = DetailsPanel(self.dpanel_gui, self.app) self.dpanel.view = CallLogger()
self.dtree_gui = CallLogger() self.dtree = self.app.directory_tree
self.dtree = DirectoryTree(self.dtree_gui, self.app) self.dtree.view = CallLogger()
self.rtable_gui = CallLogger() self.rtable_gui = CallLogger()
self.rtable = self.app.result_table self.rtable = self.app.result_table
self.rtable.view = self.rtable_gui self.rtable.view = self.rtable_gui
@@ -299,10 +299,10 @@ class TestCaseDupeGuruWithResults:
def test_refreshDetailsWithSelected(self, do_setup): def test_refreshDetailsWithSelected(self, do_setup):
self.rtable.select([1, 4]) self.rtable.select([1, 4])
eq_(self.dpanel.row(0), ('Filename', 'bar bleh', 'foo bar')) eq_(self.dpanel.row(0), ('Filename', 'bar bleh', 'foo bar'))
self.dpanel_gui.check_gui_calls(['refresh']) self.dpanel.view.check_gui_calls(['refresh'])
self.rtable.select([]) self.rtable.select([])
eq_(self.dpanel.row(0), ('Filename', '---', '---')) eq_(self.dpanel.row(0), ('Filename', '---', '---'))
self.dpanel_gui.check_gui_calls(['refresh']) self.dpanel.view.check_gui_calls(['refresh'])
def test_makeSelectedReference(self, do_setup): def test_makeSelectedReference(self, do_setup):
app = self.app app = self.app
@@ -478,11 +478,11 @@ class TestAppWithDirectoriesInTree:
io.mkdir(p + 'sub2') io.mkdir(p + 'sub2')
io.mkdir(p + 'sub3') io.mkdir(p + 'sub3')
self.app = DupeGuru() self.app = DupeGuru()
self.dtree_gui = CallLogger() self.dtree = self.app.directory_tree
self.dtree = DirectoryTree(self.dtree_gui, self.app) self.dtree.view = CallLogger()
self.dtree.connect() self.dtree.connect()
self.dtree.add_directory(p) self.dtree.add_directory(p)
self.dtree_gui.clear_calls() self.dtree.view.clear_calls()
def test_set_root_as_ref_makes_subfolders_ref_as_well(self, do_setup): def test_set_root_as_ref_makes_subfolders_ref_as_well(self, do_setup):
# Setting a node state to something also affect subnodes. These subnodes must be correctly # Setting a node state to something also affect subnodes. These subnodes must be correctly
@@ -495,5 +495,5 @@ class TestAppWithDirectoriesInTree:
eq_(len(node), 3) eq_(len(node), 3)
subnode = node[0] subnode = node[0]
eq_(subnode.state, 1) eq_(subnode.state, 1)
self.dtree_gui.check_gui_calls(['refresh_states']) self.dtree.view.check_gui_calls(['refresh_states'])

View File

@@ -52,7 +52,6 @@ class DupeGuru(DupeGuruBase):
def __init__(self): def __init__(self):
DupeGuruBase.__init__(self, DupeGuruView(), '/tmp') DupeGuruBase.__init__(self, DupeGuruView(), '/tmp')
self.result_table = ResultTable(self)
def _get_display_info(self, dupe, group, delta): def _get_display_info(self, dupe, group, delta):
size = dupe.size size = dupe.size
@@ -78,6 +77,10 @@ class DupeGuru(DupeGuruBase):
def _prioritization_categories(self): def _prioritization_categories(self):
return prioritize.all_categories() return prioritize.all_categories()
def _create_result_table(self):
return ResultTable(self)
class NamedObject: class NamedObject:
def __init__(self, name="foobar", with_words=False, size=1, folder=None): def __init__(self, name="foobar", with_words=False, size=1, folder=None):
@@ -136,11 +139,9 @@ class TestApp(TestAppBase):
self.app = DupeGuru() self.app = DupeGuru()
self.default_parent = self.app self.default_parent = self.app
self.rtable = link_gui(self.app.result_table) self.rtable = link_gui(self.app.result_table)
make_gui('dtree', DirectoryTree) self.dtree = link_gui(self.app.directory_tree)
make_gui('dpanel', DetailsPanel) self.dpanel = link_gui(self.app.details_panel)
make_gui('pdialog', PrioritizeDialog) self.pdialog = PrioritizeDialog(self.app)
for elem in [self.rtable, self.dtree, self.dpanel]:
elem.connect()
#--- Helpers #--- Helpers
def select_pri_criterion(self, name): def select_pri_criterion(self, name):

View File

@@ -1,2 +1,2 @@
__version__ = '6.1.1' __version__ = '6.2.1'
__appname__ = 'dupeGuru Music Edition' __appname__ = 'dupeGuru Music Edition'

View File

@@ -23,7 +23,6 @@ class DupeGuru(DupeGuruBase):
DupeGuruBase.__init__(self, view, appdata) DupeGuruBase.__init__(self, view, appdata)
self.scanner = scanner.ScannerME() self.scanner = scanner.ScannerME()
self.directories.fileclasses = [fs.MusicFile] self.directories.fileclasses = [fs.MusicFile]
self.result_table = ResultTable(self)
def _get_display_info(self, dupe, group, delta): def _get_display_info(self, dupe, group, delta):
size = dupe.size size = dupe.size
@@ -87,3 +86,5 @@ class DupeGuru(DupeGuruBase):
def _prioritization_categories(self): def _prioritization_categories(self):
return prioritize.all_categories() return prioritize.all_categories()
def _create_result_table(self):
return ResultTable(self)

View File

@@ -1,2 +1,2 @@
__version__ = '2.3.0' __version__ = '2.4.1'
__appname__ = 'dupeGuru Picture Edition' __appname__ = 'dupeGuru Picture Edition'

View File

@@ -30,7 +30,6 @@ class DupeGuru(DupeGuruBase):
DupeGuruBase.__init__(self, view, appdata) DupeGuruBase.__init__(self, view, appdata)
self.scanner = ScannerPE() self.scanner = ScannerPE()
self.scanner.cache_path = op.join(self.appdata, 'cached_pictures.db') self.scanner.cache_path = op.join(self.appdata, 'cached_pictures.db')
self.result_table = ResultTable(self)
def _get_display_info(self, dupe, group, delta): def _get_display_info(self, dupe, group, delta):
size = dupe.size size = dupe.size
@@ -72,7 +71,7 @@ class DupeGuru(DupeGuruBase):
r = cmp_value(dupe, key) r = cmp_value(dupe, key)
if delta and (key in self.result_table.DELTA_COLUMNS): if delta and (key in self.result_table.DELTA_COLUMNS):
ref_value = cmp_value(get_group().ref, key) ref_value = cmp_value(get_group().ref, key)
if key == 4: # dimensions if key == 'dimensions':
r = get_delta_dimensions(r, ref_value) r = get_delta_dimensions(r, ref_value)
else: else:
r -= ref_value r -= ref_value
@@ -91,3 +90,5 @@ class DupeGuru(DupeGuruBase):
def _prioritization_categories(self): def _prioritization_categories(self):
return prioritize.all_categories() return prioritize.all_categories()
def _create_result_table(self):
return ResultTable(self)

View File

@@ -1,2 +1,2 @@
__version__ = '3.3.0' __version__ = '3.3.2'
__appname__ = 'dupeGuru' __appname__ = 'dupeGuru'

View File

@@ -17,10 +17,6 @@ class DupeGuru(DupeGuruBase):
NAME = __appname__ NAME = __appname__
METADATA_TO_READ = ['size', 'mtime'] METADATA_TO_READ = ['size', 'mtime']
def __init__(self, view, appdata):
DupeGuruBase.__init__(self, view, appdata)
self.result_table = ResultTable(self)
def _get_display_info(self, dupe, group, delta): def _get_display_info(self, dupe, group, delta):
size = dupe.size size = dupe.size
mtime = dupe.mtime mtime = dupe.mtime
@@ -67,3 +63,6 @@ class DupeGuru(DupeGuruBase):
def _prioritization_categories(self): def _prioritization_categories(self):
return prioritize.all_categories() return prioritize.all_categories()
def _create_result_table(self):
return ResultTable(self)

View File

@@ -1,3 +1,20 @@
=== 6.2.1 (2012-01-20)
* Fixed random hard crashes (yeah, again). [Mac OS X]
* Fixed crash on Export to HTML. [Windows, Linux]
* Added Armenian localization by Hrant Ohanyan.
* Added Russian localization by Igor Pavlov.
* Added Ukrainian localization by Yuri Petrashko.
=== 6.2.0 (2011-12-07)
* Added multiple-selection in folder selection dialog for a more efficient folder removal. (#179)
* Fixed a crash in the prioritize dialog. (#178)
* Fixed a bug where mass marking with a filter would mark more than filtered duplicates. (#181)
* Fixed random hard crashes. [Mac OS X] (#183 #184)
* Added Czech localization by Aleš Nehyba.
* Added Italian localization by Paolo Rossi.
=== 6.1.1 (2011-10-03) === 6.1.1 (2011-10-03)
* Fixed a couple of broken action bindings from v6.1.0. * Fixed a couple of broken action bindings from v6.1.0.

View File

@@ -1,3 +1,21 @@
=== 2.4.1 (2012-01-23)
* Fixed a crash on sorting by dimensions.
* Improved communications with iPhoto. [Cocoa] (#185)
* Fixed crash on Export to HTML. [Windows, Linux]
* Added Ukrainian localization by Yuri Petrashko.
=== 2.4.0 (2012-01-06)
* Added multiple-selection in folder selection dialog for a more efficient folder removal. (#179)
* Fixed a crash in the prioritize dialog. (#178)
* Fixed a bug where mass marking with a filter would mark more than filtered duplicates. (#181)
* Fixed random hard crashes. [Mac OS X] (#183 #184)
* Added Czech localization by Aleš Nehyba.
* Added Italian localization by Paolo Rossi.
* Added Armenian localization by Hrant Ohanyan.
* Added Russian localization by Igor Pavlov.
=== 2.3.0 (2011-10-04) === 2.3.0 (2011-10-04)
* Added duplicate re-prioritization dialog. (#138) * Added duplicate re-prioritization dialog. (#138)

View File

@@ -1,3 +1,14 @@
=== 3.3.2 (2012-01-16)
* Fixed random hard crashes (yeah, again). [Mac OS X]
* Fixed crash on Export to HTML. [Windows, Linux]
* Added Armenian localization by Hrant Ohanyan.
* Added Russian localization by Igor Pavlov.
=== 3.3.1 (2011-12-02)
* Fixed a couple of nasty crashes.
=== 3.3.0 (2011-11-30) === 3.3.0 (2011-11-30)
* Added multiple-selection in folder selection dialog for a more efficient folder removal. (#179) * Added multiple-selection in folder selection dialog for a more efficient folder removal. (#179)

View File

@@ -61,7 +61,7 @@ rst_epilog = u"""
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
#language = None language = 'de'
# There are two options for replacing |today|: either, you set today to some # There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used: # non-false value, then it is used:

View File

@@ -16,12 +16,13 @@ Unten befindet sich die Liste aller Menschen, die direkt oder indirekt zu dupeGu
| **Paolo Rossi, Italian localization** | **Paolo Rossi, Italian localization**
| **Igor Pavlov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Python, Programming language** (`Website <http://www.python.org>`__) | **Python, Programming language** (`Website <http://www.python.org>`__)
| The bestest of the bests | The bestest of the bests
| **PyObjC, Python-to-Cocoa bridge** (`Website <http://pyobjc.sourceforge.net>`__)
| Used for the Mac OS X version
| **PyQt, Python-to-Qt bridge** (`Website <http://www.riverbankcomputing.co.uk>`__) | **PyQt, Python-to-Qt bridge** (`Website <http://www.riverbankcomputing.co.uk>`__)
| Used for the Windows version | Used for the Windows version

View File

@@ -3,4 +3,10 @@
Changelog Changelog
========= =========
**About the word "crash":** When reading this changelog, you might be alarmed at the number of fixes
for "crashes". Be aware that when the word "crash" is used here, it refers to "soft crashes" which
don't cause the application to quit. You simply get an error window that asks you if you want to
send the crash report to Hardcoded Software. Crashes that cause the application to quit are called
"hard crashes" in this changelog.
{changelog} {changelog}

View File

@@ -16,6 +16,12 @@ Below is the list of people who contributed, directly or indirectly to dupeGuru.
| **Paolo Rossi, Italian localization** | **Paolo Rossi, Italian localization**
| **Hrant Ohanyan, Armenian localization**
| **Igor Pavlov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Python, Programming language** (`Website <http://www.python.org>`__) | **Python, Programming language** (`Website <http://www.python.org>`__)
| The bestest of the bests | The bestest of the bests

Some files were not shown because too many files have changed in this diff Show More