From 4fb252151b99ae9571a2c7a799cea0eae2841db1 Mon Sep 17 00:00:00 2001 From: Ryan Petrich Date: Fri, 10 May 2013 18:02:29 -0600 Subject: [PATCH] Add -[PSListController controllerForSpecifier:] support --- prefs.xm | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/prefs.xm b/prefs.xm index 8b1f660..d632cd5 100644 --- a/prefs.xm +++ b/prefs.xm @@ -32,6 +32,18 @@ static NSString **pPSFooterTextGroupKey = NULL; static NSString **pPSStaticTextGroupKey = NULL; /* }}} */ +/* {{{ PSSpecifier 3.2 Additions */ +@interface PSSpecifier (OS32) +- (Class)detailControllerClass; +@end +/* }}} */ + +/* {{{ PSViewController 3.2 Additions */ +@interface PSViewController (OS32) +- (void)setSpecifier:(PSSpecifier *)specifier; +@end +/* }}} */ + /* {{{ Prototypes */ static NSArray *generateErrorSpecifiersWithText(NSString *errorText); /* }}} */ @@ -250,6 +262,32 @@ static void pl_lazyLoadBundleCore(id self, SEL _cmd, PSSpecifier *specifier, voi } %end +%new +- (PSViewController *)controllerForSpecifier:(PSSpecifier *)specifier +{ + %log(); + Class detailClass = [specifier respondsToSelector:@selector(detailControllerClass)] ? [specifier detailControllerClass] : MSHookIvar(specifier, "detailControllerClass"); + if (!detailClass) + detailClass = [PLCustomListController class]; + if (![detailClass isSubclassOfClass:[PSViewController class]]) + return nil; + id result = [detailClass alloc]; + if ([result respondsToSelector:@selector(initForContentSize:)]) + result = [result initForContentSize:[[self view] bounds].size]; + else + result = [result init]; + [result setRootController:self.rootController]; + [result setParentController:self]; + if ([result respondsToSelector:@selector(setSpecifier:)]) + [result setSpecifier:specifier]; + else if ([result isKindOfClass:[PSListController class]]) { + NSArray *&_specifierIvar = MSHookIvar(result, "_specifier"); + [_specifierIvar release]; + _specifierIvar = [specifier retain]; + } + return [result autorelease]; +} + - (NSArray *)loadSpecifiersFromPlistName:(NSString *)plistName target:(id)target { NSArray *result = %orig(); if([result count] > 0)