From 0d782015487982395f361643d24d180867e40bd5 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Thu, 12 Jan 2012 15:19:40 -0500 Subject: [PATCH] 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 --- build.py | 6 ++-- cocoa/base/DirectoryOutline.h | 6 ++-- cocoa/base/DirectoryOutline.m | 12 +++++--- cocoa/base/DirectoryPanel.m | 2 +- cocoa/base/PyDirectoryOutline.h | 15 ---------- cocoa/inter/directory_outline.py | 17 ++++++----- cocoa/se/dupeguru.xcodeproj/project.pbxproj | 32 ++++++++++++++++++--- core/app.py | 2 ++ 8 files changed, 56 insertions(+), 36 deletions(-) delete mode 100644 cocoa/base/PyDirectoryOutline.h diff --git a/build.py b/build.py index f8ffbbaf..3cc606f2 100644 --- a/build.py +++ b/build.py @@ -179,12 +179,14 @@ def build_cocoa_bridging_interfaces(): import objp.p2o add_to_pythonpath('cocoa') add_to_pythonpath('cocoalib') + from cocoa.inter2 import PyColumns2, ColumnsView from inter.details_panel import PyDetailsPanel, DetailsPanelView + from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView from inter.extra_fairware_reminder import PyExtraFairwareReminder, ExtraFairwareReminderView from inter.stats_label import PyStatsLabel, StatsLabelView - for class_ in [PyDetailsPanel, PyExtraFairwareReminder, PyStatsLabel]: + for class_ in [PyColumns2, PyDetailsPanel, PyDirectoryOutline, PyExtraFairwareReminder, PyStatsLabel]: objp.o2p.generate_objc_code(class_, 'cocoa/autogen') - for class_ in [DetailsPanelView, ExtraFairwareReminderView, StatsLabelView]: + for class_ in [ColumnsView, DetailsPanelView, DirectoryOutlineView, ExtraFairwareReminderView, StatsLabelView]: clsspec = objp.o2p.spec_from_python_class(class_) clsname = class_.__name__ extmodule_path = op.join('build', clsname + '.m') diff --git a/cocoa/base/DirectoryOutline.h b/cocoa/base/DirectoryOutline.h index df855069..d50f1d3a 100644 --- a/cocoa/base/DirectoryOutline.h +++ b/cocoa/base/DirectoryOutline.h @@ -7,12 +7,12 @@ http://www.hardcoded.net/licenses/bsd_license */ #import -#import "HSOutline.h" +#import "HSOutline2.h" #import "PyDirectoryOutline.h" #define DGAddedFoldersNotification @"DGAddedFoldersNotification" -@interface DirectoryOutline : HSOutline {} -- (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView; +@interface DirectoryOutline : HSOutline2 {} +- (id)initWithOutlineView:(HSOutlineView *)aOutlineView; - (PyDirectoryOutline *)py; @end; \ No newline at end of file diff --git a/cocoa/base/DirectoryOutline.m b/cocoa/base/DirectoryOutline.m index 89d2142c..086fe5d6 100644 --- a/cocoa/base/DirectoryOutline.m +++ b/cocoa/base/DirectoryOutline.m @@ -7,19 +7,23 @@ http://www.hardcoded.net/licenses/bsd_license */ #import "DirectoryOutline.h" +#import "Utils.h" @implementation DirectoryOutline -- (id)initWithPyParent:(id)aPyParent view:(HSOutlineView *)aOutlineView +- (id)initWithOutlineView:(HSOutlineView *)aOutlineView { - self = [super initWithPyClassName:@"PyDirectoryOutline" pyParent:aPyParent view:aOutlineView]; + PyDirectoryOutline *model = [[PyDirectoryOutline alloc] initWithModel:findHackishModel(@"directory_tree")]; + self = [super initWithPy:model view:aOutlineView]; + [model bindCallback:createCallback(@"DirectoryOutlineView", self)]; + [model release]; [outlineView registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; - [self connect]; + [[self py] connect]; return self; } - (void)dealloc { - [self disconnect]; + [[self py] disconnect]; [super dealloc]; } diff --git a/cocoa/base/DirectoryPanel.m b/cocoa/base/DirectoryPanel.m index f2f3aeaf..18334bb7 100644 --- a/cocoa/base/DirectoryPanel.m +++ b/cocoa/base/DirectoryPanel.m @@ -24,7 +24,7 @@ http://www.hardcoded.net/licenses/bsd_license [self fillPopUpMenu]; _recentDirectories = [[HSRecentFiles alloc] initWithName:@"recentDirectories" menu:[addButtonPopUp menu]]; [_recentDirectories setDelegate:self]; - outline = [[DirectoryOutline alloc] initWithPyParent:_py view:outlineView]; + outline = [[DirectoryOutline alloc] initWithOutlineView:outlineView]; [self refreshRemoveButtonText]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(directorySelectionChanged:) name:NSOutlineViewSelectionDidChangeNotification object:outlineView]; diff --git a/cocoa/base/PyDirectoryOutline.h b/cocoa/base/PyDirectoryOutline.h deleted file mode 100644 index 6c1f27fa..00000000 --- a/cocoa/base/PyDirectoryOutline.h +++ /dev/null @@ -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 -#import "PyOutline.h" - -@interface PyDirectoryOutline : PyOutline -- (void)addDirectory:(NSString *)directoryPath; -- (void)removeSelectedDirectory; -@end \ No newline at end of file diff --git a/cocoa/inter/directory_outline.py b/cocoa/inter/directory_outline.py index bdac6a5a..d88f98ac 100644 --- a/cocoa/inter/directory_outline.py +++ b/cocoa/inter/directory_outline.py @@ -1,17 +1,20 @@ -from cocoa.inter import PyOutline +from objp.util import dontwrap +from cocoa.inter2 import PyOutline, GUIObjectView -from core.gui.directory_tree import DirectoryTree +class DirectoryOutlineView(GUIObjectView): + pass class PyDirectoryOutline(PyOutline): - py_class = DirectoryTree + FOLLOW_PROTOCOLS = ['PyOutline2'] - def addDirectory_(self, path): - self.py.add_directory(path) + def addDirectory_(self, path: str): + self.model.add_directory(path) def removeSelectedDirectory(self): - self.py.remove_selected() + self.model.remove_selected() # python --> cocoa + @dontwrap def refresh_states(self): # Under cocoa, both refresh() and refresh_states() do the same thing. - self.cocoa.refresh() \ No newline at end of file + self.callback.refresh() \ No newline at end of file diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 66dc9416..a2cbaea0 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -16,6 +16,10 @@ 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 */; }; + CE275C5014BF6C5600265960 /* HSColumns2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C4D14BF6C5600265960 /* HSColumns2.m */; }; + CE275C5114BF6C5600265960 /* HSOutline2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C4F14BF6C5600265960 /* HSOutline2.m */; }; + CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5514BF712B00265960 /* PyDirectoryOutline.m */; }; + CE275C5A14BF71DF00265960 /* PyColumns2.m in Sources */ = {isa = PBXBuildFile; fileRef = CE275C5914BF71DF00265960 /* PyColumns2.m */; }; CE27D3C412CCA43800859E67 /* HSAboutBox.m in Sources */ = {isa = PBXBuildFile; fileRef = CE27D3C312CCA43800859E67 /* HSAboutBox.m */; }; CE31819D13D85D9B00B6D649 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819913D85D9B00B6D649 /* about.xib */; }; CE31819E13D85D9B00B6D649 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE31819B13D85D9B00B6D649 /* ErrorReportWindow.xib */; }; @@ -131,6 +135,16 @@ CE1D091514BE0C6400CA6B8C /* ObjP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjP.m; sourceTree = ""; }; CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyStatsLabel.h; sourceTree = ""; }; CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyStatsLabel.m; sourceTree = ""; }; + CE275C4A14BF6C3700265960 /* PyOutline2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline2.h; sourceTree = ""; }; + CE275C4C14BF6C5600265960 /* HSColumns2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns2.h; sourceTree = ""; }; + CE275C4D14BF6C5600265960 /* HSColumns2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns2.m; sourceTree = ""; }; + CE275C4E14BF6C5600265960 /* HSOutline2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSOutline2.h; sourceTree = ""; }; + CE275C4F14BF6C5600265960 /* HSOutline2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline2.m; sourceTree = ""; }; + CE275C5414BF712B00265960 /* PyDirectoryOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDirectoryOutline.h; sourceTree = ""; }; + CE275C5514BF712B00265960 /* PyDirectoryOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDirectoryOutline.m; sourceTree = ""; }; + CE275C5814BF71DF00265960 /* PyColumns2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns2.h; sourceTree = ""; }; + CE275C5914BF71DF00265960 /* PyColumns2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyColumns2.m; sourceTree = ""; }; + CE275C5B14BF71FE00265960 /* PyColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyColumns.h; sourceTree = ""; }; 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; }; CE31819A13D85D9B00B6D649 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../en.lproj/about.xib; sourceTree = ""; }; @@ -153,7 +167,6 @@ CE5335FA142BBFAF008E5374 /* HSQuicklook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSQuicklook.h; path = ../../cocoalib/HSQuicklook.h; sourceTree = ""; }; CE5335FB142BBFAF008E5374 /* HSQuicklook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSQuicklook.m; path = ../../cocoalib/HSQuicklook.m; sourceTree = ""; }; 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 = ""; }; CE54A87C148046F9008EEA77 /* HSColumns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HSColumns.h; sourceTree = ""; }; CE54A87D148046F9008EEA77 /* HSColumns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSColumns.m; sourceTree = ""; }; CE647E541173024A006D28BA /* ProblemDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProblemDialog.h; path = ../base/ProblemDialog.h; sourceTree = SOURCE_ROOT; }; @@ -181,7 +194,6 @@ CE76FDCE111EE38E006618EA /* PyOutline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyOutline.h; sourceTree = ""; }; 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; }; - 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 = ""; }; CE76FDDE111EE42F006618EA /* HSOutline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HSOutline.m; sourceTree = ""; }; CE76FDF5111EE561006618EA /* NSEventAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSEventAdditions.h; path = ../../cocoalib/NSEventAdditions.h; sourceTree = SOURCE_ROOT; }; @@ -405,6 +417,10 @@ CE9D842914BE2AE900184165 /* PyExtraFairwareReminder.m */, CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */, CE1D091714BE0C6400CA6B8C /* PyStatsLabel.m */, + CE275C5814BF71DF00265960 /* PyColumns2.h */, + CE275C5914BF71DF00265960 /* PyColumns2.m */, + CE275C5414BF712B00265960 /* PyDirectoryOutline.h */, + CE275C5514BF712B00265960 /* PyDirectoryOutline.m */, ); name = autogen; path = ../autogen; @@ -431,10 +447,14 @@ children = ( CE54A87C148046F9008EEA77 /* HSColumns.h */, CE54A87D148046F9008EEA77 /* HSColumns.m */, + CE275C4C14BF6C5600265960 /* HSColumns2.h */, + CE275C4D14BF6C5600265960 /* HSColumns2.m */, CEBE4D72111F0EE1009AAC6D /* HSWindowController.h */, CEBE4D73111F0EE1009AAC6D /* HSWindowController.m */, CE76FDDD111EE42F006618EA /* HSOutline.h */, CE76FDDE111EE42F006618EA /* HSOutline.m */, + CE275C4E14BF6C5600265960 /* HSOutline2.h */, + CE275C4F14BF6C5600265960 /* HSOutline2.m */, CE76FDC8111EE38E006618EA /* HSGUIController.h */, CE76FDC9111EE38E006618EA /* HSGUIController.m */, CE41672C141FE1E5004F3F0B /* HSTable.h */, @@ -451,10 +471,11 @@ CE76FDCC111EE38E006618EA /* proxies */ = { isa = PBXGroup; children = ( - CE54A87A14804687008EEA77 /* PyColumns.h */, + CE275C5B14BF71FE00265960 /* PyColumns.h */, CE76FDCD111EE38E006618EA /* PyGUI.h */, CED569C614BF312900C6AC25 /* PyGUI2.h */, CE76FDCE111EE38E006618EA /* PyOutline.h */, + CE275C4A14BF6C3700265960 /* PyOutline2.h */, CE8C53B61173248F0011B41F /* PyTable.h */, CE9777D2141F9D6500C13FB5 /* PySelectableList.h */, ); @@ -530,7 +551,6 @@ CE91F214113BC22D0010360B /* StatsLabel.m */, CE76FDD1111EE3A7006618EA /* DirectoryOutline.h */, CE76FDD2111EE3A7006618EA /* DirectoryOutline.m */, - CE76FDD3111EE3A7006618EA /* PyDirectoryOutline.h */, CEFC7FB10FC951A700CD5728 /* AppDelegate.h */, CEFC7FB20FC951A700CD5728 /* AppDelegate.m */, CEFC7FB30FC951A700CD5728 /* Consts.h */, @@ -687,6 +707,10 @@ CE1D091914BE0C6400CA6B8C /* PyStatsLabel.m in Sources */, CE9D842A14BE2AE900184165 /* PyExtraFairwareReminder.m in Sources */, CE3A3B4914BF19B8007898AB /* PyDetailsPanel.m in Sources */, + CE275C5014BF6C5600265960 /* HSColumns2.m in Sources */, + CE275C5114BF6C5600265960 /* HSOutline2.m in Sources */, + CE275C5714BF712B00265960 /* PyDirectoryOutline.m in Sources */, + CE275C5A14BF71DF00265960 /* PyColumns2.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/core/app.py b/core/app.py index 2e10d08e..f8560c1f 100644 --- a/core/app.py +++ b/core/app.py @@ -25,6 +25,7 @@ from hscommon.trans import tr from . import directories, results, scanner, export, fs from .gui.details_panel import DetailsPanel +from .gui.directory_tree import DirectoryTree from .gui.extra_fairware_reminder import ExtraFairwareReminder from .gui.stats_label import StatsLabel @@ -104,6 +105,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): } self.selected_dupes = [] self.details_panel = DetailsPanel(None, self) + self.directory_tree = DirectoryTree(None, self) self.extra_fairware_reminder = ExtraFairwareReminder(None, self) self.stats_label = StatsLabel(None, self) # subclasses must create self.result_table