From b4f9864122b98d0152d2d8bd96d853791a0b635e Mon Sep 17 00:00:00 2001 From: King Chung Huang Date: Wed, 23 Apr 2014 19:28:00 -0600 Subject: [PATCH] Add files for LinkBackSupport for Keynote 3 Final code for Keynote LinkBack plugin for Keynote 3. Originally developed February 2007. --- APE Lite/APELite.h | 41 + APE Lite/APELite.o | Bin 0 -> 39576 bytes "APE Lite/Icon\r" | 0 APE Lite/What is APE Lite?.rtfd/128logo.png | Bin 0 -> 23121 bytes APE Lite/What is APE Lite?.rtfd/TXT.rtf | 66 ++ .../unsanity_logo_small.png | Bin 0 -> 892 bytes English.lproj/InfoPlist.strings | Bin 274 -> 274 bytes Frameworks | 1 + Info.plist | 4 +- K2LinkBackSupport.h | 2 +- K2LinkBackSupport.m | 361 +++----- K2LinkBackSupport.xcodeproj/king.mode1 | 237 ++++-- K2LinkBackSupport.xcodeproj/king.pbxuser | 803 +++++++++++++++--- K2LinkBackSupport.xcodeproj/project.pbxproj | 258 ++++-- Keynote 3 Headers/KeynoteHeadersReadme.txt | 13 + Keynote 3 Headers/SFDAffineGeometry.h | 74 ++ Keynote 3 Headers/SFDCanvas.h | 128 +++ Keynote 3 Headers/SFDDrawableInfo.h | 171 ++++ Keynote 3 Headers/SFDSelectionController.h | 62 ++ Keynote 3 Headers/SFRCanvas.h | 106 +++ Keynote 3 Headers/SFRSubviewAbsolverView.h | 27 + LinkBack.framework/Headers | 1 + LinkBack.framework/LinkBack | 1 + LinkBack.framework/Resources | 1 + .../Versions/A/Headers/LinkBack.h | 165 ++++ LinkBack.framework/Versions/A/LinkBack | Bin 0 -> 73708 bytes .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 258 bytes .../Resources/English.lproj/Localized.strings | 16 + .../Versions/A/Resources/Info.plist | 20 + LinkBack.framework/Versions/Current | 1 + SFDCanvas_LinkBack.h | 18 +- SFDCanvas_LinkBack.m | 71 +- SFDDrawableInfo_LinkBack.h | 16 +- SFDDrawableInfo_LinkBack.m | 77 +- SFDSelectionController_LinkBack.h | 5 +- SFDSelectionController_LinkBack.m | 4 +- 36 files changed, 2172 insertions(+), 578 deletions(-) create mode 100644 APE Lite/APELite.h create mode 100755 APE Lite/APELite.o create mode 100644 "APE Lite/Icon\r" create mode 100644 APE Lite/What is APE Lite?.rtfd/128logo.png create mode 100644 APE Lite/What is APE Lite?.rtfd/TXT.rtf create mode 100644 APE Lite/What is APE Lite?.rtfd/unsanity_logo_small.png create mode 120000 Frameworks create mode 100644 Keynote 3 Headers/KeynoteHeadersReadme.txt create mode 100644 Keynote 3 Headers/SFDAffineGeometry.h create mode 100644 Keynote 3 Headers/SFDCanvas.h create mode 100644 Keynote 3 Headers/SFDDrawableInfo.h create mode 100644 Keynote 3 Headers/SFDSelectionController.h create mode 100644 Keynote 3 Headers/SFRCanvas.h create mode 100644 Keynote 3 Headers/SFRSubviewAbsolverView.h create mode 120000 LinkBack.framework/Headers create mode 120000 LinkBack.framework/LinkBack create mode 120000 LinkBack.framework/Resources create mode 100644 LinkBack.framework/Versions/A/Headers/LinkBack.h create mode 100755 LinkBack.framework/Versions/A/LinkBack create mode 100644 LinkBack.framework/Versions/A/Resources/English.lproj/InfoPlist.strings create mode 100644 LinkBack.framework/Versions/A/Resources/English.lproj/Localized.strings create mode 100644 LinkBack.framework/Versions/A/Resources/Info.plist create mode 120000 LinkBack.framework/Versions/Current diff --git a/APE Lite/APELite.h b/APE Lite/APELite.h new file mode 100644 index 0000000..f7b5a15 --- /dev/null +++ b/APE Lite/APELite.h @@ -0,0 +1,41 @@ +/* + File: APELite.h + + Contains: Application Enhancer Lite interfaces + + Copyright: Copyright 2002-2006 Unsanity, LLC. + All Rights Reserved. + +*/ +#ifndef _H_APELite +#define _H_APELite + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Error checking function. object can be NULL in which case false is returned. +// This determines if the object (CFTypeRef) is an instance of the class named in type. The type is usually the var type minus "Ref". +// For instance to determine if an NSString* is really an NSString*, APEObjectIsType(string, CFString). +// This works for all toll-free bridged types such as using APEObjectIsType(timer, CFRunLoopTimer) where timer is an NSTimer* instance. +// Special notes: NSBundle and CFBundleRef are not toll-free bridged. And as of 10.4, there is no HIObjectGetTypeID() yet so you cannot +// check to see if a specific object is an HIObjectRef until 10.5. If object is a Cocoa object, it must be toll-free bridged with a CF version. +#define APEObjectIsType(object, type) ((NULL!=object) && type ## GetTypeID()==CFGetTypeID(object)) + +// Public and private mach-o symbol lookup. +extern void *APEFindSymbol(struct mach_header *image,const char *symbol); + +// Mach-o function patching. +extern void *APEPatchCreate(const void *patchee,const void *address); +extern void *APEPatchGetAddress(void *patch); +extern void APEPatchSetAddress(void *patch,const void *address); + +void apeprintf(const char *format,...); + +#ifdef __cplusplus +} +#endif + +#endif /* _H_APELite */ diff --git a/APE Lite/APELite.o b/APE Lite/APELite.o new file mode 100755 index 0000000000000000000000000000000000000000..c6894533feff96c1bcfd647bc002a03646ed2e3d GIT binary patch literal 39576 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 JHyC3g{}*GL3j_cF literal 0 HcmV?d00001 diff --git "a/APE Lite/Icon\r" "b/APE Lite/Icon\r" new file mode 100644 index 0000000..e69de29 diff --git a/APE Lite/What is APE Lite?.rtfd/128logo.png b/APE Lite/What is APE Lite?.rtfd/128logo.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6d7d843d31ad7c10ed914f8612f989c1c90f7d GIT binary patch literal 23121 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

^-0Epes!Q-JL2VaQ%?g*S0a1 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 dH{k66{}u2KLgQUdVgnElV<^`E+H z#I+=J&*#K|p7j>Yy8<;E058UUCa&{b8MsC+SSZs6Q0#J5Hnv!c_kX6&z>w-31c-IY z0Nxxvb5KkrCZk>X9Ew(6zY2M6QewboXi0fZtb|@XzpqIRfUj*hr32u;eD(z!8^B_~ zy!k{e8o1UHkg17{iDt-iEs*l52Q}`0T?QRCirq$lIQo^4luusp=gkb@vMq>YpL)2MhTBr2=XI2$RnflEKjR zZByrfmQOu{Vg195>FwG-ZL&*1)8F;~z6sz)|M;%YAhP>>8=?L?>j7!LSY-R*y&jPA z$0xQQ6cF`Kk^O_UAD8)qVF2qsvG#+0%z>~IXNv3}to^9;LFP+8H{>&je$?JU^$$dn z&&m1+(DYB-KY*6cu>N6K`P2bm-Q(Eyqtic-fcr#kU%|5fe3W~9i2Y~*Y>4}rCe}UH zX!~K5FsLtFjpZKE>y6`kP(y(!CQ{vf^{v;ol=ArQ7;*Fc*xj3TQ&0CB%aDpiKaU`v zHwV48gRPCqOn!5)RP4^iLDQJ_gW3KF7L(MdrZ$x+Q(3!S!P7I6|LQ##B1$TkBwoa| zAAK^gHzT__gA#)^0~Y`rU;>H& delta 15 WcmbQlG>K^gHzT_#gA#)^0~Y`rQUZto diff --git a/Frameworks b/Frameworks new file mode 120000 index 0000000..4b68587 --- /dev/null +++ b/Frameworks @@ -0,0 +1 @@ +/Applications/iWork '06/Keynote.app/Contents/Frameworks \ No newline at end of file diff --git a/Info.plist b/Info.plist index ea73ffc..8f8a905 100644 --- a/Info.plist +++ b/Info.plist @@ -17,9 +17,7 @@ CFBundleSignature K2lb CFBundleVersion - 1.0 - K2HumanReadableName - LinkBack Plugin + 3.0 NSPrincipalClass K2LinkBackSupport diff --git a/K2LinkBackSupport.h b/K2LinkBackSupport.h index 7f951b4..edec1e9 100644 --- a/K2LinkBackSupport.h +++ b/K2LinkBackSupport.h @@ -3,7 +3,7 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import diff --git a/K2LinkBackSupport.m b/K2LinkBackSupport.m index 1cc51a2..b534d65 100644 --- a/K2LinkBackSupport.m +++ b/K2LinkBackSupport.m @@ -3,121 +3,118 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import "K2LinkBackSupport.h" -#import "SFDDrawableInfo_LinkBack.h" -#import "SFDCanvas_LinkBack.h" -#import "APELite.h" -#include -#include #import +#import +#import +#import "APELite.h" + +#import + +#import "SFDDrawableInfo_LinkBack.h" +#import "SFDCanvas_LinkBack.h" + struct objc_method { char *method_name; char *method_types; void *method_imp; }; +#pragma mark Swizzled methods typedefs + extern struct objc_method *class_getInstanceMethod(void *inClass, void *selector); -typedef void *(*BGC_makeInfoFromPasteboardProcPtr)(void *inObj, char *inSel, NSPasteboard *pasteboard, BOOL style); -typedef void (*NSO_deallocProcPtr)(void *inObj, char *inSel); -typedef void (*BGC_beginEditingRepWithEventProcPtr)(void *inObj, char *inSel, id rep, NSEvent *event); -typedef BOOL (*SFDRep_isEditableProcPtr)(void *inObj, char *inSel); -typedef void *(*SLPC_drawablesFromPasteboard1ProcPtr)(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, BOOL unformatted, BOOL stylesOnly, id drawablesController, char *returningWasNative, id *errors); -typedef void *(*SLPC_drawablesFromPasteboard2ProcPtr)(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, id targetController, char *returningWasNative, id *errors); -typedef void *(*SLDC_importDrawablesFromPasteboard1ProcPtr)(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, BOOL includeFormatting, id *errors); -typedef void *(*SLDC_importDrawablesFromPasteboard2ProcPtr)(void *inObj, char *inSel, NSPasteboard *pasteboard, id importableTypes, BOOL includeFormatting, id *errors); -typedef void (*SLDAPC_beginEditingRepWithEventProcPtr)(void *inObj, char *inSel, id rep, NSEvent *event); -typedef void (*SLC_beginEditingDrawableProcPtr)(void *inObj, char *inSel, id drawable); -typedef void (*SLPC_beginEditingDrawableProcPtr)(void *inObj, char *inSel, id drawable); -typedef void (*SLDA_initiateEditingAtStoragePositionProcPtr)(void *inObj, char *inSel, id fp8); -typedef BOOL (*BGC_validateMenuItemProcPtr)(void *inObj, char *inSel, NSMenuItem *cell); +typedef void *(*BGC_makeInfoFromPasteboardProcPtr)(id inObj, SEL inSel, NSPasteboard *pasteboard, BOOL style); +typedef void (*NSO_deallocProcPtr)(id inObj, SEL inSel); +typedef void (*BGC_beginEditingRepWithEventProcPtr)(id inObj, SEL inSel, id rep, NSEvent *event); +typedef BOOL (*SFDRep_isEditableProcPtr)(id inObj, SEL inSel); +typedef void *(*SLDC_importDrawablesFromPasteboard1ProcPtr)(id inObj, SEL inSel, NSPasteboard *pasteboard, id type, BOOL includeFormatting, id *errors); +typedef BOOL (*BGC_validateMenuItemProcPtr)(id inObj, SEL inSel, NSMenuItem *cell); +typedef void *(*SFDDI_initWithXMLUnarchiverProcPtr)(id inObj, SEL inSel, SFAXMLUnarchiver *unarchiver, xmlNodePtr node, unsigned long version); +typedef void (*SFDDI_encodeWithXMLArchievrProcPtr)(id inObj, SEL inSel, SFAXMLArchiver *archiver, xmlNodePtr node, unsigned long version); +typedef void (*SFDDI_deallocProcPtr)(id inObj, SEL inSel); BGC_makeInfoFromPasteboardProcPtr gBGC_makeInfoFromPasteboard = NULL; NSO_deallocProcPtr gBGC_dealloc = NULL; BGC_beginEditingRepWithEventProcPtr gBGC_beginEditingRepWithEvent = NULL; SFDRep_isEditableProcPtr gSFDImageRep_editable = NULL; -SLPC_drawablesFromPasteboard1ProcPtr gSLPC_drawablesFromPasteboard1 = NULL; -SLPC_drawablesFromPasteboard2ProcPtr gSLPC_drawablesFromPasteboard2 = NULL; SLDC_importDrawablesFromPasteboard1ProcPtr gSLDC_importDrawablesFromPasteboard1 = NULL; -SLDC_importDrawablesFromPasteboard2ProcPtr gSLDC_importDrawablesFromPasteboard2 = NULL; -SLDAPC_beginEditingRepWithEventProcPtr gSLDAPC_beginEditingRepWithEvent = NULL; -SLC_beginEditingDrawableProcPtr gSLC_beginEditingDrawable = NULL; -SLPC_beginEditingDrawableProcPtr gSLPC_beginEditingDrawable = NULL; -SLDA_initiateEditingAtStoragePositionProcPtr gSLDA_initiateEditingAtStoragePosition = NULL; BGC_validateMenuItemProcPtr gBGC_validateMenuItem = NULL; +SFDDI_initWithXMLUnarchiverProcPtr gSFDDI_initWithXMLUnarchiver = NULL; +SFDDI_encodeWithXMLArchievrProcPtr gSFDDI_encodeWithXMLArchiver = NULL; +SFDDI_deallocProcPtr gSFDDI_dealloc = NULL; -NSArray *retainer = NULL; +#pragma mark Swizzled methods implementation -void *LB_BGC_makeInfoFromPasteboard(void *inObj, char *inSel, NSPasteboard *pasteboard, BOOL style) { +void *LB_BGC_makeInfoFromPasteboard(id inObj, SEL inSel, NSPasteboard *pasteboard, BOOL style) { id info = gBGC_makeInfoFromPasteboard(inObj, inSel, pasteboard, style); if ([info respondsToSelector:@selector(setLinkBackData:)] && [[pasteboard types] containsObject:LinkBackPboardType]) { id lbd = [pasteboard propertyListForType:LinkBackPboardType]; - [info takeValue:lbd forKey:@"linkBackData"]; + [info performSelector:@selector(setLinkBackData:) withObject:lbd]; } return info; } -void *LB_BGC_dealloc(void *inObj, char *inSel) { - id canvas = inObj; - - [canvas deallocLinks]; - - gBGC_dealloc(inObj, inSel); -} - -void *LB_BGC_beginEditingRepWithEvent(void *canvas, char *inSel, id rep, NSEvent *event) { - id info = [rep info]; - - if ([info respondsToSelector:@selector(hasLinkBackData)] && [info hasLinkBackData]) { - [canvas beginLinkBackForInfo:info canvas:[rep canvas]]; - } else { - gBGC_beginEditingRepWithEvent(canvas, inSel, rep, event); +void *LB_BGC_dealloc(id canvas, SEL inSel) { + if ([canvas respondsToSelector:@selector(deallocLinks)]) { + [canvas performSelector:@selector(deallocLinks)]; } + + gBGC_dealloc(canvas, inSel); } -BOOL LB_SFDImageRep_editable(void *inObj, char *inSel) { - id info = [inObj info]; +void *LB_BGC_beginEditingRepWithEvent(id inObj, SEL inSel, id rep, NSEvent *event) { + NSLog(@"LB_BGC_beginEditingRepWithEvent"); - if ([info respondsToSelector:@selector(hasLinkBackData)] && [info hasLinkBackData]) { - //NSLog(@"SFDImageRep isEditable = YES"); - return YES; - } else { - //NSLog(@"SFDImageRep isEditable = OTHER"); - return gSFDImageRep_editable(inObj, inSel); + if ([rep respondsToSelector:@selector(info)]) { + id info = [rep performSelector:@selector(info)]; + + if ([info respondsToSelector:@selector(hasLinkBackData)] && [info performSelector:@selector(hasLinkBackData)]) { + id canvas = inObj; + + NSLog(@"YES"); + + [canvas beginLinkBackForInfo:info canvas:[rep performSelector:@selector(canvas)]]; + } else { + NSLog(@"NO"); + + gBGC_beginEditingRepWithEvent(inObj, inSel, rep, event); + } } -} -void *LB_SLPC_drawablesFromPasteboard1(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, BOOL unformatted, BOOL stylesOnly, id drawablesController, char *returningWasNative, id *errors) { - NSLog(@"drawablesFromPasteboard1:%@ type:%@", pasteboard, type); - - return gSLPC_drawablesFromPasteboard1(inObj, inSel, pasteboard, type, unformatted, stylesOnly, drawablesController, returningWasNative, errors); } -void *LB_SLPC_drawablesFromPasteboard2(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, id targetController, char *returningWasNative, id *errors) { - NSLog(@"drawablesFromPasteboard2:%@ type:%@", pasteboard, type); +BOOL LB_SFDImageRep_editable(id rep, SEL inSel) { + NSLog(@"LB_SFDImageRep_editable"); - return gSLPC_drawablesFromPasteboard2(inObj, inSel, pasteboard, type, targetController, returningWasNative, errors); + if ([rep respondsToSelector:@selector(info)]) { + id info = [rep performSelector:@selector(info)]; + + if ([info respondsToSelector:@selector(hasLinkBackData)] && [info performSelector:@selector(hasLinkBackData)]) { + NSLog(@"\tYES"); + return YES; + } else { + NSLog(@"\tNO"); + return gSFDImageRep_editable(rep, inSel); + } + } } -void *LB_SLDC_importDrawablesFromPasteboard1(void *inObj, char *inSel, NSPasteboard *pasteboard, id type, BOOL includeFormatting, id *errors) { - NSLog(@"importDrawablesFromPasteboard1:"); - +void *LB_SLDC_importDrawablesFromPasteboard1(id inObj, SEL inSel, NSPasteboard *pasteboard, id type, BOOL includeFormatting, id *errors) { id drawables = gSLDC_importDrawablesFromPasteboard1(inObj, inSel, pasteboard, type, includeFormatting, errors); NSEnumerator *infos = [drawables objectEnumerator]; id info; while (info = [infos nextObject]) { if ([info respondsToSelector:@selector(setLinkBackData:)] && [[pasteboard types] containsObject:LinkBackPboardType]) { - NSLog(@"setting LinkBack data"); - id lbd = [pasteboard propertyListForType:LinkBackPboardType]; [info takeValue:lbd forKey:@"linkBackData"]; @@ -127,43 +124,13 @@ BOOL LB_SFDImageRep_editable(void *inObj, char *inSel) { return drawables; } -void *LB_SLDC_importDrawablesFromPasteboard2(void *inObj, char *inSel, NSPasteboard *pasteboard, id importableTypes, BOOL includeFormatting, id *errors) { - NSLog(@"importDrawablesFromPasteboard2:%@ importableTypes:%@", pasteboard, importableTypes); - - return gSLDC_importDrawablesFromPasteboard2(inObj, inSel, pasteboard, importableTypes, includeFormatting, errors); -} - -void *LB_LSDAPC_beginEditingRepWithEvent(void *inObj, char *inSel, id rep, NSEvent *event) { - NSLog(@"beginEditingRep:%@ withEvent:%@", rep, event); - - gSLDAPC_beginEditingRepWithEvent(inObj, inSel, rep, event); -} - -void *LB_SLC_beginEditingDrawable(void *inObj, char *inSel, id drawable) { - NSLog(@"beginEditingDrawable:%@", drawable); - - gSLC_beginEditingDrawable(inObj, inSel, drawable); -} - -void *LB_SLPC_beginEditingDrawable(void *inObj, char *inSel, id drawable) { - NSLog(@"beginEditingDrawable:%@", drawable); - - gSLPC_beginEditingDrawable(inObj, inSel, drawable); -} - -void *LB_SLDA_initiateEditingAtStoragePosition(void *inObj, char *inSel, id fp8) { - NSLog(@"initiateEditingAtStoragePosition:%@", fp8); - - gSLDA_initiateEditingAtStoragePosition(inObj, inSel, fp8); -} - -BOOL LB_BGC_validateMenuItem(void *inObj, char *inSel, NSMenuItem *cell) { - SEL action = [cell action]; - - if (action == @selector(beginLinkBackForSelection:)) { +BOOL LB_BGC_validateMenuItem(id inObj, SEL inSel, NSMenuItem *cell) { + if ([cell action] == @selector(beginLinkBackForSelection:)) { BOOL ret; NSString *title; - NSArray *infos = [[inObj selectionController] selectedLinkBackInfos]; + id canvas = inObj; + + NSArray *infos = [[canvas selectionController] performSelector:@selector(selectedLinkBackInfos)]; if ([infos count] == 1) { title = [[[infos objectAtIndex:0] linkBackData] linkBackEditMenuTitle]; @@ -184,135 +151,101 @@ BOOL LB_BGC_validateMenuItem(void *inObj, char *inSel, NSMenuItem *cell) { return gBGC_validateMenuItem(inObj, inSel, cell); } -@implementation K2LinkBackSupport +void *LB_SFDDI_initWithXMLUnarchiver(id inObj, SEL inSel, SFAXMLUnarchiver *unarchiver, xmlNodePtr node, unsigned long version) { + id obj = nil; + + if (obj = gSFDDI_initWithXMLUnarchiver(inObj, inSel, unarchiver, node, version)) { + xmlNode *cur_node = node->children; + NSData *lbd = nil; + + for (cur_node = node->children; cur_node && (lbd == nil); cur_node = cur_node->next) { + if (cur_node->type == XML_ELEMENT_NODE && strcmp(cur_node->name, "LinkBackData") == 0) { + lbd = [unarchiver createObjectOfClass:[NSData class] fromNode:cur_node]; + } + } + + if (lbd != nil) { + [obj setLinkBackData:[NSPropertyListSerialization propertyListFromData:lbd mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil]]; + } + } + + return obj; +} -+ (void)initialize { - id observer = [[K2LinkBackSupport alloc] init]; +void LB_SFDDI_encodeWithXMLArchiver(id inObj, SEL inSel, SFAXMLArchiver *archiver, xmlNodePtr node, unsigned long version) { + gSFDDI_encodeWithXMLArchiver(inObj, inSel, archiver, node, version); + + id obj = inObj; + id lbd = [obj linkBackData]; - [[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(appDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil]; + if (lbd != nil) { + NSData *data = [NSPropertyListSerialization dataFromPropertyList:lbd format:NSPropertyListBinaryFormat_v1_0 errorDescription:nil]; + + if (data != nil) { + [archiver encodeObject:data asChildOf:node withName:"LinkBackData" xmlNamespace:nil]; + } + } +} + +void LB_SFDDI_dealloc(id inObj, SEL inSel) { + id info = inObj; - [SFDDrawableInfo_LinkBack poseAsClass:[SFDDrawableInfo class]]; + if ([info respondsToSelector:@selector(deallocLinkBack)]) { + [info performSelector:@selector(deallocLinkBack)]; + } + gSFDDI_dealloc(inObj, inSel); +} + +#pragma mark Plugin initialization + +@implementation K2LinkBackSupport + ++ (void)initialize { NSString *identifier = [[NSBundle mainBundle] bundleIdentifier]; + // Note: Leopard has its own functions. Check compatibility. + if ([identifier isEqualToString:@"com.apple.iWork.Keynote"]) { - Class bgcClass = objc_getClass("BGCanvas"); + Class bgclass; struct objc_method *method; - if (bgcClass) { - [bgcClass initialize]; + if (bgclass = objc_getClass("BGCanvas")) { + [bgclass initialize]; - /* - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"makeInfoFromPasteboard:withStyle:"))) + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"makeInfoFromPasteboard:withStyle:"))) gBGC_makeInfoFromPasteboard = APEPatchCreate(method->method_imp, &LB_BGC_makeInfoFromPasteboard); - */ - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"dealloc"))) + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"dealloc"))) gBGC_dealloc = APEPatchCreate(method->method_imp, &LB_BGC_dealloc); - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"beginEditingRep:withEvent:"))) + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"beginEditingRep:withEvent:"))) gBGC_beginEditingRepWithEvent = APEPatchCreate(method->method_imp, &LB_BGC_beginEditingRepWithEvent); - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"validateMenuItem:"))) + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"validateMenuItem:"))) gBGC_validateMenuItem = APEPatchCreate(method->method_imp, &LB_BGC_validateMenuItem); } - if (bgcClass = objc_getClass("SFDImageRep")) { - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"isEditable"))) + if (bgclass = objc_getClass("SFDImageRep")) { + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"isEditable"))) gSFDImageRep_editable = APEPatchCreate(method->method_imp, &LB_SFDImageRep_editable); } - } else if ([identifier isEqualToString:@"com.apple.iWork.Pages"]) { - Class slcClass = objc_getClass("SLPasteboardController"); - struct objc_method *method; - - if (slcClass) { - [slcClass initialize]; - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"drawablesFromPasteboard:type:unformatted:stylesOnly:toDrawablesController:returningWasNative:errors:"))) - gSLPC_drawablesFromPasteboard1 = APEPatchCreate(method->method_imp, &LB_SLPC_drawablesFromPasteboard1); - else - NSLog(@"failed to patch drawablesFromPasteboard1"); - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"drawablesFromPasteboard:type:targetController:returningWasNative:errors:"))) - gSLPC_drawablesFromPasteboard2 = APEPatchCreate(method->method_imp, &LB_SLPC_drawablesFromPasteboard2); - else - NSLog(@"failed to patch drawablesFromPasteboard2"); - } else { - NSLog(@"failed to find SLPasteboardController"); - } - - slcClass = objc_getClass("SLDrawablesController"); - - if (slcClass) { - [slcClass initialize]; - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"importDrawablesFromPasteboard:type:includingFormatting:errors:"))) - gSLDC_importDrawablesFromPasteboard1 = APEPatchCreate(method->method_imp, &LB_SLDC_importDrawablesFromPasteboard1); - else - NSLog(@"failed to patch importDrawablesFromPasteboard1"); - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"importDrawablesFromPasteboard:importableTypes:includingFormatting:errors:"))) - gSLDC_importDrawablesFromPasteboard2 = APEPatchCreate(method->method_imp, &LB_SLDC_importDrawablesFromPasteboard2); - else - NSLog(@"failed to patch importDrawablesFromPasteboard2"); - } else { - NSLog(@"failed to find SLDrawablesController"); - } - - slcClass = objc_getClass("SLDrawableAttachmentProxyCanvas"); - - if (slcClass) { - [slcClass initialize]; - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"beginEditingRep:withEvent:"))) - gSLDAPC_beginEditingRepWithEvent = APEPatchCreate(method->method_imp, &LB_LSDAPC_beginEditingRepWithEvent); - else - NSLog(@"failed to patch beginEditingRep:withEvent:"); - } else { - NSLog(@"failed to find SLDrawableAttachmentProxyCanvas"); - } - - slcClass = objc_getClass("SLCanvas"); - if (slcClass) { - [slcClass initialize]; + if (bgclass = objc_getClass("SFDDrawableInfo")) { + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"initWithXMLUnarchiver:node:version:"))) + gSFDDI_initWithXMLUnarchiver = APEPatchCreate(method->method_imp, &LB_SFDDI_initWithXMLUnarchiver); - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"beginEditingDrawable:"))) - gSLC_beginEditingDrawable = APEPatchCreate(method->method_imp, &LB_SLC_beginEditingDrawable); - else - NSLog(@"failed to patch beginEditingDrawable"); - } else { - NSLog(@"failed to find SLCanvas"); - } - - slcClass = objc_getClass("SLPaginatedCanvas"); - - if (slcClass) { - [slcClass initialize]; + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"encodeWithXMLArchiver:node:version:"))) + gSFDDI_encodeWithXMLArchiver = APEPatchCreate(method->method_imp, &LB_SFDDI_encodeWithXMLArchiver); - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"beginEditingDrawable:"))) - gSLPC_beginEditingDrawable = APEPatchCreate(method->method_imp, &LB_SLPC_beginEditingDrawable); - else - NSLog(@"failed to patch beginEditingDrawable"); - } else { - NSLog(@"failed to find SLPaginatedCanvas"); - } - - slcClass = objc_getClass("SLDrawableAttachment"); - - if (slcClass) { - [slcClass initialize]; - - if (method = class_getInstanceMethod(slcClass, NSSelectorFromString(@"initiateEditingAtStoragePosition:"))) - gSLDA_initiateEditingAtStoragePosition = APEPatchCreate(method->method_imp, &LB_SLDA_initiateEditingAtStoragePosition); - else - NSLog(@"failed to patch initiateEditingAtStoragePosition"); - } else { - NSLog(@"failed to find SLDrawablesAttachment"); + if (method = class_getInstanceMethod(bgclass, NSSelectorFromString(@"dealloc"))) + gSFDDI_dealloc = APEPatchCreate(method->method_imp, &LB_SFDDI_dealloc); } + } else if ([identifier isEqualToString:@"com.apple.iWork.Pages"]) { + // Removed for public code release } - // Prep the LinkBack edit menu item + // Add the LinkBack menu item NSMenu *mainMenu = [NSApp mainMenu]; NSMenu *editMenu = [[mainMenu itemAtIndex:2] submenu]; @@ -323,28 +256,4 @@ + (void)initialize { [linkBackEdit setEnabled:NO]; } -- (id)init { - if (self = [super init]) { - - } - - return self; -} - -- (void)appDidFinishLaunching:(NSNotification *)notification { - NSString *identifier = [[NSBundle mainBundle] bundleIdentifier]; - - if ([identifier isEqualToString:@"com.apple.iWork.Keynote"]) { - Class bgcClass = objc_getClass("BGCanvas"); - struct objc_method *method; - - if (bgcClass) { - [bgcClass initialize]; - - if (method = class_getInstanceMethod(bgcClass, NSSelectorFromString(@"makeInfoFromPasteboard:withStyle:"))) - gBGC_makeInfoFromPasteboard = APEPatchCreate(method->method_imp, &LB_BGC_makeInfoFromPasteboard); - } - } -} - @end diff --git a/K2LinkBackSupport.xcodeproj/king.mode1 b/K2LinkBackSupport.xcodeproj/king.mode1 index 9b76f8e..e4c39a1 100644 --- a/K2LinkBackSupport.xcodeproj/king.mode1 +++ b/K2LinkBackSupport.xcodeproj/king.mode1 @@ -166,7 +166,7 @@ FavBarConfig PBXProjectModuleGUID - 3C2D49790867BDC800DE8693 + 3C1978D60B73D5460049975B XCBarModuleItemNames XCBarModuleItems @@ -268,7 +268,7 @@ PBXSmartGroupTreeModuleColumnWidthsKey - 273 + 272 PBXSmartGroupTreeModuleColumnsKey_v4 @@ -281,22 +281,29 @@ 089C166AFE841209C02AAC07 08FB77AFFE84173DC02AAC07 + 3C19798A0B73DF760049975B + 3C1979A00B73DFA60049975B + 3C1979A30B73DFA90049975B 32C88E010371C26100C91783 + 3CFB268C0B750C950052DCBD 089C167CFE841241C02AAC07 089C1671FE841209C02AAC07 + 1058C7ACFEA557BF11CA2CBB + 3C197A380B73E2920049975B 1C37FBAC04509CD000000102 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey - 3 - 1 + 34 + 33 + 29 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {273, 697}} + {{0, 0}, {272, 798}} PBXTopSmartGroupGIDs @@ -308,26 +315,24 @@ GeometryConfiguration Frame - {{0, 0}, {290, 715}} + {{0, 0}, {289, 816}} GroupTreeTableConfiguration MainColumn - 273 + 272 RubberWindowFrame - 635 229 1001 756 0 0 1680 1028 + 225 150 1231 857 0 0 1680 1028 Module PBXSmartGroupTreeModule Proportion - 290pt + 289pt Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -345,20 +350,131 @@ _historyCapacity 0 bookmark - 3C6862180B755D09008571B0 + 3C1341E80C8C80A6008679E6 + history + + 3C1979000B73D9580049975B + 3C1979030B73D9580049975B + 3C1979050B73D9580049975B + 3CFB27160B7512470052DCBD + 3CFB284E0B7534400052DCBD + 3CFB284F0B7534400052DCBD + 3C6861950B7551E4008571B0 + 3C68621D0B755DF5008571B0 + 3C543AF80B764F82004B6DB6 + 3C543AF90B764F82004B6DB6 + 3C543AFA0B764F82004B6DB6 + 3C543AFB0B764F82004B6DB6 + 3C543AFC0B764F82004B6DB6 + 3C543AFD0B764F82004B6DB6 + 3C543AFE0B764F82004B6DB6 + 3C1341870C8C7DE8008679E6 + + prevStack + + 3C19790A0B73D9580049975B + 3C19790F0B73D9580049975B + 3C1979120B73D9580049975B + 3C1979130B73D9580049975B + 3C1979140B73D9580049975B + 3C1979150B73D9580049975B + 3C19791A0B73D9580049975B + 3C19791B0B73D9580049975B + 3C19791F0B73D9580049975B + 3C1979210B73D9580049975B + 3C197E2A0B740C5C0049975B + 3CFB283D0B7533CB0052DCBD + 3CFB28520B7534400052DCBD + 3C6861390B754641008571B0 + 3C6862330B755DF5008571B0 + 3C543B010B764F82004B6DB6 + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {937, 0}} + RubberWindowFrame + 225 150 1231 857 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + SFDCanvas_LinkBack.m + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + SFDCanvas_LinkBack.m + _historyCapacity + 0 + bookmark + 3C1341EC0C8C80A6008679E6 history - 3CFB28710B7536C60052DCBD - 3C6861C20B755A05008571B0 - 3C6861C30B755A05008571B0 - 3C6861E60B755CEA008571B0 + 3C000EFB0B868822001DD8FC + 3C000EFC0B868822001DD8FC + 3C000EFD0B868822001DD8FC + 3C000EFE0B868822001DD8FC + 3C000EFF0B868822001DD8FC + 3C000F010B868822001DD8FC + 3C000F040B868822001DD8FC + 3C000F050B868822001DD8FC + 3C000F060B868822001DD8FC + 3C000F080B868822001DD8FC + 3C000F090B868822001DD8FC + 3C000F0B0B868822001DD8FC + 3C1341880C8C7DE8008679E6 + 3C1341890C8C7DE8008679E6 + 3C13418A0C8C7DE8008679E6 + 3C13418B0C8C7DE8008679E6 + 3C13418C0C8C7DE8008679E6 + 3C13418D0C8C7DE8008679E6 + 3C1341E90C8C80A6008679E6 + 3C1341EA0C8C80A6008679E6 prevStack - 3CE83B6F0868F1A4007DEDF0 - 3CEF5321087261E4000AABD9 - 3CEF5322087261E4000AABD9 - 3CFB23E5096B9531008ADECD + 3C19790A0B73D9580049975B + 3C19790F0B73D9580049975B + 3C1979120B73D9580049975B + 3C1979130B73D9580049975B + 3C1979140B73D9580049975B + 3C1979150B73D9580049975B + 3C19791A0B73D9580049975B + 3C19791B0B73D9580049975B + 3C19791F0B73D9580049975B + 3C1979210B73D9580049975B + 3C197E2A0B740C5C0049975B + 3CFB283D0B7533CB0052DCBD + 3CFB28520B7534400052DCBD + 3C6861390B754641008571B0 + 3C6862330B755DF5008571B0 + 3C543B010B764F82004B6DB6 + 3C000F120B868822001DD8FC + 3C000F130B868822001DD8FC + 3C000F150B868822001DD8FC + 3C000F160B868822001DD8FC + 3C1341EB0C8C80A6008679E6 SplitCount @@ -370,14 +486,14 @@ GeometryConfiguration Frame - {{0, 0}, {706, 710}} + {{0, 5}, {937, 806}} RubberWindowFrame - 635 229 1001 756 0 0 1680 1028 + 225 150 1231 857 0 0 1680 1028 Module PBXNavigatorGroup Proportion - 710pt + 806pt ContentConfiguration @@ -390,9 +506,9 @@ GeometryConfiguration Frame - {{0, 715}, {706, 0}} + {{0, 816}, {937, 0}} RubberWindowFrame - 635 229 1001 756 0 0 1680 1028 + 225 150 1231 857 0 0 1680 1028 Module XCDetailModule @@ -401,7 +517,7 @@ Proportion - 706pt + 937pt Name @@ -412,13 +528,15 @@ PBXSmartGroupTreeModule XCModuleDock PBXNavigatorGroup + PBXNavigatorGroup XCDetailModule TableOfContents - 3C6862190B755D09008571B0 + 3C1341ED0C8C80A6008679E6 1CE0B1FE06471DED0097A5F4 - 3C68621A0B755D09008571B0 + 3C1341EE0C8C80A6008679E6 + 1CE0B20306471E060097A5F4 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -537,7 +655,7 @@ StatusbarIsVisible TimeStamp - 192240898.635786 + 210534566.94514701 ToolbarDisplayMode 1 ToolbarIsVisible @@ -552,10 +670,11 @@ 5 WindowOrderList - /Users/king/Projects/KeynotePlugins/Keynote2_Plugins/K2LinkBackSupport/K2LinkBackSupport.xcodeproj + 3C1978F40B73D73B0049975B + /Users/king/Projects/KeynotePlugins/Keynote3_Plugins/K2LinkBackSupport/K2LinkBackSupport.xcodeproj WindowString - 635 229 1001 756 0 0 1680 1028 + 225 150 1231 857 0 0 1680 1028 WindowTools @@ -571,58 +690,58 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel - SFDDrawableInfo_LinkBack.h + SFDCanvas_LinkBack.m StatusBarVisibility GeometryConfiguration Frame - {{0, 0}, {500, 218}} + {{0, 0}, {1141, 489}} RubberWindowFrame - 414 195 500 500 0 0 1680 1028 + 531 184 1141 844 0 0 1680 1028 Module PBXNavigatorGroup Proportion - 218pt + 489pt - BecomeActive - ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey - {{0, 134}, {500, 102}} + {{0, 253}, {1141, 74}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel Build XCBuildResultsTrigger_Collapse - 1022 + 1021 XCBuildResultsTrigger_Open 1012 GeometryConfiguration Frame - {{0, 223}, {500, 236}} + {{0, 494}, {1141, 327}} RubberWindowFrame - 414 195 500 500 0 0 1680 1028 + 531 184 1141 844 0 0 1680 1028 Module PBXBuildResultsModule Proportion - 236pt + 327pt Proportion - 459pt + 803pt Name @@ -635,17 +754,17 @@ TableOfContents - 3CE83AF50868ED7E007DEDF0 - 3CE83AF60868ED7E007DEDF0 + 3C1978F40B73D73B0049975B + 3C1341E50C8C80A2008679E6 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID ToolbarConfiguration xcode.toolbar.config.build WindowString - 414 195 500 500 0 0 1680 1028 + 531 184 1141 844 0 0 1680 1028 WindowToolGUID - 3CE83AF50868ED7E007DEDF0 + 3C1978F40B73D73B0049975B WindowToolIsVisible @@ -767,32 +886,30 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - SFDCanvas_LinkBack.m + StatusBarVisibility GeometryConfiguration Frame - {{0, 0}, {781, 212}} + {{0, 0}, {996, 448}} RubberWindowFrame - 322 513 781 470 0 0 1680 1028 + 30 136 996 706 0 0 1680 1028 Module PBXNavigatorGroup Proportion - 781pt + 996pt Proportion - 212pt + 448pt ContentConfiguration @@ -805,9 +922,9 @@ GeometryConfiguration Frame - {{0, 217}, {781, 212}} + {{0, 453}, {996, 212}} RubberWindowFrame - 322 513 781 470 0 0 1680 1028 + 30 136 996 706 0 0 1680 1028 Module PBXProjectFindModule @@ -816,7 +933,7 @@ Proportion - 429pt + 665pt Name @@ -830,13 +947,13 @@ TableOfContents 1C530D57069F1CE1000CFCEE - 3CE83B6C0868F18E007DEDF0 - 3CE83B6D0868F18E007DEDF0 + 3C68614A0B754647008571B0 + 3C68614B0B754647008571B0 1CDD528C0622207200134675 1CD0528E0623707200166675 WindowString - 322 513 781 470 0 0 1680 1028 + 30 136 996 706 0 0 1680 1028 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible diff --git a/K2LinkBackSupport.xcodeproj/king.pbxuser b/K2LinkBackSupport.xcodeproj/king.pbxuser index 25d4bf5..9a8aa9e 100644 --- a/K2LinkBackSupport.xcodeproj/king.pbxuser +++ b/K2LinkBackSupport.xcodeproj/king.pbxuser @@ -29,7 +29,7 @@ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 460, + 691, 20, 55, 43, @@ -52,7 +52,7 @@ PBXFileTableDataSourceColumnWidthsKey = ( 20, 241, - 222, + 424, 20, 48, 43, @@ -70,7 +70,7 @@ PBXFileDataSource_Target_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 192240898; + PBXPerProjectTemplateStateSaveDate = 210534522; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; @@ -247,18 +247,68 @@ }; }, ); - PBXWorkspaceStateSaveDate = 192240898; + PBXWorkspaceStateSaveDate = 210534522; }; perUserProjectItems = { - 3C6861C20B755A05008571B0 /* PBXTextBookmark */ = 3C6861C20B755A05008571B0 /* PBXTextBookmark */; - 3C6861C30B755A05008571B0 /* PBXTextBookmark */ = 3C6861C30B755A05008571B0 /* PBXTextBookmark */; - 3C6861E60B755CEA008571B0 /* PBXTextBookmark */ = 3C6861E60B755CEA008571B0 /* PBXTextBookmark */; - 3C6862180B755D09008571B0 /* PBXTextBookmark */ = 3C6862180B755D09008571B0 /* PBXTextBookmark */; - 3CE83B6F0868F1A4007DEDF0 /* PBXTextBookmark */ = 3CE83B6F0868F1A4007DEDF0 /* PBXTextBookmark */; - 3CEF5321087261E4000AABD9 /* PBXTextBookmark */ = 3CEF5321087261E4000AABD9 /* PBXTextBookmark */; - 3CEF5322087261E4000AABD9 /* PBXTextBookmark */ = 3CEF5322087261E4000AABD9 /* PBXTextBookmark */; - 3CFB23E5096B9531008ADECD /* PBXTextBookmark */ = 3CFB23E5096B9531008ADECD /* PBXTextBookmark */; - 3CFB28710B7536C60052DCBD /* PBXTextBookmark */ = 3CFB28710B7536C60052DCBD /* PBXTextBookmark */; + 3C000EFB0B868822001DD8FC /* PBXTextBookmark */ = 3C000EFB0B868822001DD8FC /* PBXTextBookmark */; + 3C000EFC0B868822001DD8FC /* PBXTextBookmark */ = 3C000EFC0B868822001DD8FC /* PBXTextBookmark */; + 3C000EFD0B868822001DD8FC /* PBXTextBookmark */ = 3C000EFD0B868822001DD8FC /* PBXTextBookmark */; + 3C000EFE0B868822001DD8FC /* PBXTextBookmark */ = 3C000EFE0B868822001DD8FC /* PBXTextBookmark */; + 3C000EFF0B868822001DD8FC /* PBXTextBookmark */ = 3C000EFF0B868822001DD8FC /* PBXTextBookmark */; + 3C000F010B868822001DD8FC /* PBXTextBookmark */ = 3C000F010B868822001DD8FC /* PBXTextBookmark */; + 3C000F040B868822001DD8FC /* PBXTextBookmark */ = 3C000F040B868822001DD8FC /* PBXTextBookmark */; + 3C000F050B868822001DD8FC /* PBXTextBookmark */ = 3C000F050B868822001DD8FC /* PBXTextBookmark */; + 3C000F060B868822001DD8FC /* PBXTextBookmark */ = 3C000F060B868822001DD8FC /* PBXTextBookmark */; + 3C000F080B868822001DD8FC /* PBXTextBookmark */ = 3C000F080B868822001DD8FC /* PBXTextBookmark */; + 3C000F090B868822001DD8FC /* PBXTextBookmark */ = 3C000F090B868822001DD8FC /* PBXTextBookmark */; + 3C000F0B0B868822001DD8FC /* PBXTextBookmark */ = 3C000F0B0B868822001DD8FC /* PBXTextBookmark */; + 3C000F120B868822001DD8FC /* PBXTextBookmark */ = 3C000F120B868822001DD8FC /* PBXTextBookmark */; + 3C000F130B868822001DD8FC /* PBXTextBookmark */ = 3C000F130B868822001DD8FC /* PBXTextBookmark */; + 3C000F150B868822001DD8FC /* PBXTextBookmark */ = 3C000F150B868822001DD8FC /* PBXTextBookmark */; + 3C000F160B868822001DD8FC /* PBXTextBookmark */ = 3C000F160B868822001DD8FC /* PBXTextBookmark */; + 3C1341870C8C7DE8008679E6 /* PBXTextBookmark */ = 3C1341870C8C7DE8008679E6 /* PBXTextBookmark */; + 3C1341880C8C7DE8008679E6 /* PBXTextBookmark */ = 3C1341880C8C7DE8008679E6 /* PBXTextBookmark */; + 3C1341890C8C7DE8008679E6 /* PBXTextBookmark */ = 3C1341890C8C7DE8008679E6 /* PBXTextBookmark */; + 3C13418A0C8C7DE8008679E6 /* PBXTextBookmark */ = 3C13418A0C8C7DE8008679E6 /* PBXTextBookmark */; + 3C13418B0C8C7DE8008679E6 /* PBXTextBookmark */ = 3C13418B0C8C7DE8008679E6 /* PBXTextBookmark */; + 3C13418C0C8C7DE8008679E6 /* PBXTextBookmark */ = 3C13418C0C8C7DE8008679E6 /* PBXTextBookmark */; + 3C13418D0C8C7DE8008679E6 /* PBXTextBookmark */ = 3C13418D0C8C7DE8008679E6 /* PBXTextBookmark */; + 3C1341E80C8C80A6008679E6 /* PBXTextBookmark */ = 3C1341E80C8C80A6008679E6 /* PBXTextBookmark */; + 3C1341E90C8C80A6008679E6 /* PBXTextBookmark */ = 3C1341E90C8C80A6008679E6 /* PBXTextBookmark */; + 3C1341EA0C8C80A6008679E6 /* PBXTextBookmark */ = 3C1341EA0C8C80A6008679E6 /* PBXTextBookmark */; + 3C1341EB0C8C80A6008679E6 /* PBXTextBookmark */ = 3C1341EB0C8C80A6008679E6 /* PBXTextBookmark */; + 3C1341EC0C8C80A6008679E6 /* PBXTextBookmark */ = 3C1341EC0C8C80A6008679E6 /* PBXTextBookmark */; + 3C1979000B73D9580049975B /* PBXTextBookmark */ = 3C1979000B73D9580049975B /* PBXTextBookmark */; + 3C1979030B73D9580049975B /* PBXTextBookmark */ = 3C1979030B73D9580049975B /* PBXTextBookmark */; + 3C1979050B73D9580049975B /* PBXTextBookmark */ = 3C1979050B73D9580049975B /* PBXTextBookmark */; + 3C19790A0B73D9580049975B /* PBXTextBookmark */ = 3C19790A0B73D9580049975B /* PBXTextBookmark */; + 3C19790F0B73D9580049975B /* PBXTextBookmark */ = 3C19790F0B73D9580049975B /* PBXTextBookmark */; + 3C1979120B73D9580049975B /* PBXTextBookmark */ = 3C1979120B73D9580049975B /* PBXTextBookmark */; + 3C1979130B73D9580049975B /* PBXTextBookmark */ = 3C1979130B73D9580049975B /* PBXTextBookmark */; + 3C1979140B73D9580049975B /* PBXTextBookmark */ = 3C1979140B73D9580049975B /* PBXTextBookmark */; + 3C1979150B73D9580049975B /* PBXTextBookmark */ = 3C1979150B73D9580049975B /* PBXTextBookmark */; + 3C19791A0B73D9580049975B /* PBXTextBookmark */ = 3C19791A0B73D9580049975B /* PBXTextBookmark */; + 3C19791B0B73D9580049975B /* PBXTextBookmark */ = 3C19791B0B73D9580049975B /* PBXTextBookmark */; + 3C19791F0B73D9580049975B /* PBXTextBookmark */ = 3C19791F0B73D9580049975B /* PBXTextBookmark */; + 3C1979210B73D9580049975B /* PBXTextBookmark */ = 3C1979210B73D9580049975B /* PBXTextBookmark */; + 3C197E2A0B740C5C0049975B /* PBXTextBookmark */ = 3C197E2A0B740C5C0049975B /* PBXTextBookmark */; + 3C543AF80B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AF80B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AF90B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AF90B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AFA0B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AFA0B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AFB0B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AFB0B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AFC0B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AFC0B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AFD0B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AFD0B764F82004B6DB6 /* PBXTextBookmark */; + 3C543AFE0B764F82004B6DB6 /* PBXTextBookmark */ = 3C543AFE0B764F82004B6DB6 /* PBXTextBookmark */; + 3C543B010B764F82004B6DB6 /* PBXTextBookmark */ = 3C543B010B764F82004B6DB6 /* PBXTextBookmark */; + 3C6861390B754641008571B0 /* PBXTextBookmark */ = 3C6861390B754641008571B0 /* PBXTextBookmark */; + 3C6861950B7551E4008571B0 /* PBXTextBookmark */ = 3C6861950B7551E4008571B0 /* PBXTextBookmark */; + 3C68621D0B755DF5008571B0 /* PBXTextBookmark */ = 3C68621D0B755DF5008571B0 /* PBXTextBookmark */; + 3C6862330B755DF5008571B0 /* PBXTextBookmark */ = 3C6862330B755DF5008571B0 /* PBXTextBookmark */; + 3CFB27160B7512470052DCBD /* PBXTextBookmark */ = 3CFB27160B7512470052DCBD /* PBXTextBookmark */; + 3CFB283D0B7533CB0052DCBD /* PBXTextBookmark */ = 3CFB283D0B7533CB0052DCBD /* PBXTextBookmark */; + 3CFB284E0B7534400052DCBD /* PBXTextBookmark */ = 3CFB284E0B7534400052DCBD /* PBXTextBookmark */; + 3CFB284F0B7534400052DCBD /* PBXTextBookmark */ = 3CFB284F0B7534400052DCBD /* PBXTextBookmark */; + 3CFB28520B7534400052DCBD /* PBXTextBookmark */ = 3CFB28520B7534400052DCBD /* PBXTextBookmark */; }; sourceControlManager = 3C021C0307E36641003D0BD0 /* Source Control */; userBuildSettings = { @@ -273,18 +323,178 @@ }; 08FB77B6FE84183AC02AAC07 /* main.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {634, 607}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {634, 607}}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; }; }; 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {634, 607}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {634, 607}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{166, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; }; }; + 3C000EFB0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979C20B73E0C10049975B /* SFDCanvas.h */; + name = "SFDCanvas.h: mDynamicGuides"; + rLen = 0; + rLoc = 658; + rType = 0; + vrLen = 1763; + vrLoc = 0; + }; + 3C000EFC0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979E70B73E1160049975B /* SFDSelectionController.h */; + name = "SFDSelectionController.h: 7"; + rLen = 0; + rLoc = 156; + rType = 0; + vrLen = 1524; + vrLoc = 0; + }; + 3C000EFD0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979D60B73E0EB0049975B /* SFDDrawableInfo.h */; + name = "SFDDrawableInfo.h: bounds"; + rLen = 0; + rLoc = 2768; + rType = 0; + vrLen = 1438; + vrLoc = 474; + }; + 3C000EFE0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979BE0B73E0BE0049975B /* SFRSubviewAbsolverView.h */; + name = "SFRSubviewAbsolverView.h: 28"; + rLen = 0; + rLoc = 747; + rType = 0; + vrLen = 747; + vrLoc = 0; + }; + 3C000EFF0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979BF0B73E0BE0049975B /* SFRCanvas.h */; + name = "SFRCanvas.h: _CGLayerInfo"; + rLen = 0; + rLoc = 1163; + rType = 0; + vrLen = 1124; + vrLoc = 41; + }; + 3C000F010B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "English: 4"; + rLen = 0; + rLoc = 133; + rType = 0; + vrLen = 136; + vrLoc = 0; + }; + 3C000F040B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0007E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.h */; + name = "SFDDrawableInfo_LinkBack.h: 8"; + rLen = 0; + rLoc = 170; + rType = 0; + vrLen = 457; + vrLoc = 0; + }; + 3C000F050B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */; + name = "SFDDrawableInfo_LinkBack.m: 44"; + rLen = 0; + rLoc = 1037; + rType = 0; + vrLen = 1153; + vrLoc = 671; + }; + 3C000F060B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CA2940307E3C0A90041BA0F /* SFDCanvas_LinkBack.h */; + name = "SFDCanvas_LinkBack.h: 10"; + rLen = 0; + rLoc = 200; + rType = 0; + vrLen = 831; + vrLoc = 0; + }; + 3C000F080B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */; + name = "SFDSelectionController_LinkBack.h: 19"; + rLen = 0; + rLoc = 357; + rType = 0; + vrLen = 357; + vrLoc = 0; + }; + 3C000F090B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */; + name = "SFDSelectionController_LinkBack.m: 31"; + rLen = 0; + rLoc = 716; + rType = 0; + vrLen = 716; + vrLoc = 0; + }; + 3C000F0B0B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB77B6FE84183AC02AAC07 /* main.m */; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 3C000F120B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979D60B73E0EB0049975B /* SFDDrawableInfo.h */; + name = "SFDDrawableInfo.h: bounds"; + rLen = 0; + rLoc = 2768; + rType = 0; + vrLen = 1487; + vrLoc = 425; + }; + 3C000F130B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979E70B73E1160049975B /* SFDSelectionController.h */; + name = "SFDSelectionController.h: 7"; + rLen = 0; + rLoc = 156; + rType = 0; + vrLen = 1524; + vrLoc = 0; + }; + 3C000F150B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979BF0B73E0BE0049975B /* SFRCanvas.h */; + name = "SFRCanvas.h: _CGLayerInfo"; + rLen = 0; + rLoc = 1163; + rType = 0; + vrLen = 1121; + vrLoc = 44; + }; + 3C000F160B868822001DD8FC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C1979BE0B73E0BE0049975B /* SFRSubviewAbsolverView.h */; + name = "SFRSubviewAbsolverView.h: 28"; + rLen = 0; + rLoc = 747; + rType = 0; + vrLen = 747; + vrLoc = 0; + }; 3C021C0307E36641003D0BD0 /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; @@ -299,161 +509,546 @@ }; 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {659, 693}}"; - sepNavSelRange = "{157, 0}"; - sepNavVisRect = "{{0, 0}, {659, 693}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{182, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; sepNavWindowFrame = "{{38, 304}, {750, 502}}"; }; }; 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {659, 6528}}"; - sepNavSelRange = "{3416, 0}"; - sepNavVisRect = "{{0, 601}, {659, 693}}"; - sepNavWindowFrame = "{{176, 178}, {750, 502}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 4304}}"; + sepNavSelRange = "{7993, 0}"; + sepNavVisRect = "{{0, 0}, {0, 0}}"; + sepNavWindowFrame = "{{616, 71}, {909, 957}}"; }; }; 3C021E0007E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {453, 420}}"; - sepNavSelRange = "{189, 36}"; - sepNavVisRect = "{{0, 0}, {453, 201}}"; - sepNavWindowFrame = "{{176, 178}, {750, 502}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{170, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + sepNavWindowFrame = "{{1727, 216}, {750, 502}}"; }; }; 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {485, 1525}}"; - sepNavSelRange = "{526, 16}"; - sepNavVisRect = "{{0, 170}, {485, 616}}"; - sepNavWindowFrame = "{{56, 129}, {750, 502}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 1216}}"; + sepNavSelRange = "{1037, 0}"; + sepNavVisRect = "{{0, 427}, {890, 789}}"; + sepNavWindowFrame = "{{1800, 114}, {782, 810}}"; }; }; - 3C021E3F07E38D71003D0BD0 /* APELite.h */ = { + 3C1341870C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; + name = "K2LinkBackSupport.m: 231"; + rLen = 0; + rLoc = 7993; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 3C1341880C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D5B49B7048680CD000E48DA /* Info.plist */; + name = "Info.plist: 12"; + rLen = 0; + rLoc = 399; + rType = 0; + vrLen = 743; + vrLoc = 0; + }; + 3C1341890C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; + name = "K2LinkBackSupport.m: 248"; + rLen = 0; + rLoc = 8798; + rType = 0; + vrLen = 2288; + vrLoc = 6882; + }; + 3C13418A0C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */; + name = "KeynoteHeadersReadme.txt: 13"; + rLen = 0; + rLoc = 295; + rType = 0; + vrLen = 295; + vrLoc = 0; + }; + 3C13418B0C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */; + name = "K2LinkBackSupport_Prefix.pch: 8"; + rLen = 0; + rLoc = 166; + rType = 0; + vrLen = 166; + vrLoc = 0; + }; + 3C13418C0C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CFB26940B750CA50052DCBD /* APELite.h */; + name = "APELite.h: 22"; + rLen = 0; + rLoc = 708; + rType = 0; + vrLen = 1513; + vrLoc = 0; + }; + 3C13418D0C8C7DE8008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */; + name = "K2LinkBackSupport.h: 9"; + rLen = 0; + rLoc = 182; + rType = 0; + vrLen = 235; + vrLoc = 0; + }; + 3C1341E80C8C80A6008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; + name = "K2LinkBackSupport.m: 231"; + rLen = 0; + rLoc = 7993; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 3C1341E90C8C80A6008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */; + name = "SFDAffineGeometry.h: mSizesLocked"; + rLen = 0; + rLoc = 282; + rType = 0; + vrLen = 1485; + vrLoc = 0; + }; + 3C1341EA0C8C80A6008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: 'SFDCanvas' may not respond to '-makeInfoFromPasteboard:withStyle:'"; + fRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; + rLen = 1; + rLoc = 36; + rType = 1; + }; + 3C1341EB0C8C80A6008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */; + name = "SFDAffineGeometry.h: mSizesLocked"; + rLen = 0; + rLoc = 282; + rType = 0; + vrLen = 1485; + vrLoc = 0; + }; + 3C1341EC0C8C80A6008679E6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; + name = "newInfo = [self makeInfoFromPasteboard:pasteboard withStyle:[oldInfo style]];"; + rLen = 79; + rLoc = 886; + rType = 0; + vrLen = 1398; + vrLoc = 276; + }; + 3C1979000B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "English: 4"; + rLen = 0; + rLoc = 133; + rType = 0; + vrLen = 136; + vrLoc = 0; + }; + 3C1979030B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */; + name = "K2LinkBackSupport_Prefix.pch: 8"; + rLen = 0; + rLoc = 166; + rType = 0; + vrLen = 166; + vrLoc = 0; + }; + 3C1979050B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB77B6FE84183AC02AAC07 /* main.m */; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 3C19790A0B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; + name = style; + rLen = 5; + rLoc = 2210; + rType = 0; + vrLen = 2193; + vrLoc = 1586; + }; + 3C19790F0B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */; + name = "- (void)dealloc"; + rLen = 24; + rLoc = 784; + rType = 0; + vrLen = 1331; + vrLoc = 0; + }; + 3C1979120B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; + name = "SFDCanvas_LinkBack.m: 36"; + rLen = 0; + rLoc = 2305; + rType = 0; + vrLen = 1369; + vrLoc = 0; + }; + 3C1979130B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CA2940307E3C0A90041BA0F /* SFDCanvas_LinkBack.h */; + name = "SFDCanvas_LinkBack.h: 31"; + rLen = 0; + rLoc = 831; + rType = 0; + vrLen = 764; + vrLoc = 0; + }; + 3C1979140B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D5B49B7048680CD000E48DA /* Info.plist */; + name = "Info.plist: 16"; + rLen = 0; + rLoc = 557; + rType = 0; + vrLen = 743; + vrLoc = 0; + }; + 3C1979150B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C167EFE841241C02AAC07 /* English */; + name = "English: 4"; + rLen = 0; + rLoc = 133; + rType = 0; + vrLen = 136; + vrLoc = 0; + }; + 3C19791A0B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */; + name = "SFDSelectionController_LinkBack.h: 18"; + rLen = 0; + rLoc = 357; + rType = 0; + vrLen = 351; + vrLoc = 0; + }; + 3C19791B0B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */; + name = "SFDSelectionController_LinkBack.m: 31"; + rLen = 0; + rLoc = 716; + rType = 0; + vrLen = 674; + vrLoc = 0; + }; + 3C19791F0B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */; + name = "K2LinkBackSupport_Prefix.pch: 8"; + rLen = 0; + rLoc = 166; + rType = 0; + vrLen = 166; + vrLoc = 0; + }; + 3C1979210B73D9580049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 08FB77B6FE84183AC02AAC07 /* main.m */; + name = "main.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 3C1979BE0B73E0BE0049975B /* SFRSubviewAbsolverView.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {634, 607}}"; - sepNavSelRange = "{253, 0}"; - sepNavVisRect = "{{0, 0}, {634, 607}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{747, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + sepNavWindowFrame = "{{15, 175}, {929, 848}}"; }; }; - 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */ = { + 3C1979BF0B73E0BE0049975B /* SFRCanvas.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {485, 616}}"; - sepNavSelRange = "{309, 35}"; - sepNavVisRect = "{{0, 0}, {485, 616}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 1712}}"; + sepNavSelRange = "{1163, 0}"; + sepNavVisRect = "{{0, 46}, {890, 789}}"; + sepNavWindowFrame = "{{107, 91}, {929, 848}}"; }; }; - 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */ = { + 3C1979C20B73E0C10049975B /* SFDCanvas.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {485, 447}}"; - sepNavSelRange = "{674, 0}"; - sepNavVisRect = "{{0, 0}, {0, 0}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 2080}}"; + sepNavSelRange = "{658, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + sepNavWindowFrame = "{{84, 112}, {929, 848}}"; + }; + }; + 3C1979D60B73E0EB0049975B /* SFDDrawableInfo.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {890, 2752}}"; + sepNavSelRange = "{2768, 0}"; + sepNavVisRect = "{{0, 315}, {890, 789}}"; + sepNavWindowFrame = "{{97, 115}, {929, 900}}"; }; }; - 3C6861C20B755A05008571B0 /* PBXTextBookmark */ = { + 3C1979E70B73E1160049975B /* SFDSelectionController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {890, 1008}}"; + sepNavSelRange = "{156, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + }; + }; + 3C197E2A0B740C5C0049975B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0007E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.h */; + name = "SFDDrawableInfo_LinkBack.h: 8"; + rLen = 0; + rLoc = 170; + rType = 0; + vrLen = 451; + vrLoc = 0; + }; + 3C543AF80B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */; + name = "K2LinkBackSupport.h: 9"; + rLen = 0; + rLoc = 182; + rType = 0; + vrLen = 235; + vrLoc = 0; + }; + 3C543AF90B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0007E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.h */; + name = "SFDDrawableInfo_LinkBack.h: 8"; + rLen = 0; + rLoc = 170; + rType = 0; + vrLen = 457; + vrLoc = 0; + }; + 3C543AFA0B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */; + name = "SFDDrawableInfo_LinkBack.m: 44"; + rLen = 0; + rLoc = 1037; + rType = 0; + vrLen = 1263; + vrLoc = 0; + }; + 3C543AFB0B764F82004B6DB6 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; - name = "SFDCanvas_LinkBack.m: 46"; - rLen = 323; - rLoc = 1273; + name = "SFDCanvas_LinkBack.m: removeActiveLink:"; + rLen = 0; + rLoc = 2793; + rType = 0; + vrLen = 1358; + vrLoc = 0; + }; + 3C543AFC0B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */; + name = "SFDSelectionController_LinkBack.m: 31"; + rLen = 0; + rLoc = 716; + rType = 0; + vrLen = 716; + vrLoc = 0; + }; + 3C543AFD0B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */; + name = "SFDSelectionController_LinkBack.h: 19"; + rLen = 0; + rLoc = 357; + rType = 0; + vrLen = 357; + vrLoc = 0; + }; + 3C543AFE0B764F82004B6DB6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CA2940307E3C0A90041BA0F /* SFDCanvas_LinkBack.h */; + name = "SFDCanvas_LinkBack.h: 10"; + rLen = 0; + rLoc = 200; rType = 0; - vrLen = 1270; - vrLoc = 3; + vrLen = 831; + vrLoc = 0; }; - 3C6861C30B755A05008571B0 /* PBXTextBookmark */ = { + 3C543B010B764F82004B6DB6 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */; - name = "K2LinkBackSupport.h: 8"; + name = "K2LinkBackSupport.h: 9"; + rLen = 0; + rLoc = 182; + rType = 0; + vrLen = 235; + vrLoc = 0; + }; + 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{357, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + }; + }; + 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1009, 788}}"; + sepNavSelRange = "{716, 0}"; + sepNavVisRect = "{{0, 0}, {1009, 788}}"; + }; + }; + 3C6861390B754641008571B0 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */; + name = "KeynoteHeadersReadme.txt: 1"; rLen = 0; - rLoc = 157; + rLoc = 0; rType = 0; - vrLen = 229; + vrLen = 295; vrLoc = 0; }; - 3C6861E60B755CEA008571B0 /* PBXTextBookmark */ = { + 3C6861950B7551E4008571B0 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; - name = "K2LinkBackSupport.m: 62"; + fRef = 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */; + name = "KeynoteHeadersReadme.txt: 1"; rLen = 0; - rLoc = 3416; + rLoc = 0; rType = 0; - vrLen = 1236; - vrLoc = 3105; + vrLen = 295; + vrLoc = 0; }; - 3C6862180B755D09008571B0 /* PBXTextBookmark */ = { + 3C68621D0B755DF5008571B0 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; - name = "K2LinkBackSupport.m: 62"; + fRef = 3CFB26940B750CA50052DCBD /* APELite.h */; + name = "APELite.h: 22"; + rLen = 0; + rLoc = 708; + rType = 0; + vrLen = 1513; + vrLoc = 0; + }; + 3C6862330B755DF5008571B0 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3CFB26940B750CA50052DCBD /* APELite.h */; + name = "APELite.h: 22"; rLen = 0; - rLoc = 3416; + rLoc = 708; rType = 0; - vrLen = 2173; - vrLoc = 1345; + vrLen = 1513; + vrLoc = 0; }; 3CA2940307E3C0A90041BA0F /* SFDCanvas_LinkBack.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {705, 443}}"; - sepNavSelRange = "{630, 0}"; - sepNavVisRect = "{{0, 0}, {705, 443}}"; - sepNavWindowFrame = "{{-3, 280}, {750, 502}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{200, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + sepNavWindowFrame = "{{1865, 313}, {750, 502}}"; }; }; 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {659, 2048}}"; - sepNavSelRange = "{1273, 323}"; - sepNavVisRect = "{{0, 29}, {659, 693}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 2368}}"; + sepNavSelRange = "{886, 79}"; + sepNavVisRect = "{{0, 190}, {890, 789}}"; sepNavWindowFrame = "{{278, 202}, {750, 502}}"; }; }; - 3CE83B6F0868F1A4007DEDF0 /* PBXTextBookmark */ = { + 3CFB26940B750CA50052DCBD /* APELite.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{708, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + }; + }; + 3CFB27160B7512470052DCBD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 8D5B49B7048680CD000E48DA /* Info.plist */; - name = "Info.plist: 22"; + name = "Info.plist: 12"; rLen = 0; - rLoc = 705; + rLoc = 399; rType = 0; - vrLen = 809; + vrLen = 743; vrLoc = 0; }; - 3CEF5321087261E4000AABD9 /* PBXTextBookmark */ = { + 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {890, 1248}}"; + sepNavSelRange = "{282, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; + sepNavWindowFrame = "{{-4, 195}, {934, 833}}"; + }; + }; + 3CFB283D0B7533CB0052DCBD /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; - name = "SFDCanvas_LinkBack.m: 29"; + fRef = 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */; + name = "SFDAffineGeometry.h: 30"; rLen = 0; - rLoc = 696; + rLoc = 1032; rType = 0; - vrLen = 1216; - vrLoc = 383; + vrLen = 1597; + vrLoc = 0; }; - 3CEF5322087261E4000AABD9 /* PBXTextBookmark */ = { + 3CFB284E0B7534400052DCBD /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */; - name = "K2LinkBackSupport.h: 8"; + fRef = 3C1979C20B73E0C10049975B /* SFDCanvas.h */; + name = "SFDCanvas.h: mDynamicGuides"; rLen = 0; - rLoc = 157; + rLoc = 658; rType = 0; - vrLen = 229; + vrLen = 1817; vrLoc = 0; }; - 3CFB23E5096B9531008ADECD /* PBXTextBookmark */ = { + 3CFB284F0B7534400052DCBD /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; - name = "extern struct objc_method *class_getInstanceMethod(void *inClass, void *selector);"; - rLen = 82; - rLoc = 438; + fRef = 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */; + name = "SFDAffineGeometry.h: mSize"; + rLen = 0; + rLoc = 281; rType = 0; - vrLen = 825; - vrLoc = 7864; + vrLen = 1597; + vrLoc = 0; }; - 3CFB28710B7536C60052DCBD /* PBXTextBookmark */ = { + 3CFB28520B7534400052DCBD /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 8D5B49B7048680CD000E48DA /* Info.plist */; - name = "Info.plist: 27"; + fRef = 3C1979C20B73E0C10049975B /* SFDCanvas.h */; + name = "SFDCanvas.h: mDynamicGuides"; rLen = 0; - rLoc = 809; + rLoc = 658; rType = 0; - vrLen = 809; + vrLen = 1817; vrLoc = 0; }; 8D5B49AC048680CD000E48DA /* K2LinkBackSupport */ = { @@ -461,9 +1056,9 @@ }; 8D5B49B7048680CD000E48DA /* Info.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {659, 693}}"; - sepNavSelRange = "{809, 0}"; - sepNavVisRect = "{{0, 0}, {659, 693}}"; + sepNavIntBoundsRect = "{{0, 0}, {890, 789}}"; + sepNavSelRange = "{399, 0}"; + sepNavVisRect = "{{0, 0}, {890, 789}}"; }; }; } diff --git a/K2LinkBackSupport.xcodeproj/project.pbxproj b/K2LinkBackSupport.xcodeproj/project.pbxproj index e0a1224..3c2dd54 100644 --- a/K2LinkBackSupport.xcodeproj/project.pbxproj +++ b/K2LinkBackSupport.xcodeproj/project.pbxproj @@ -7,25 +7,22 @@ objects = { /* Begin PBXBuildFile section */ - 3C021C0607E3665B003D0BD0 /* SFRendering.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C0507E3665B003D0BD0 /* SFRendering.framework */; }; 3C021C1107E3666A003D0BD0 /* K2LinkBackSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */; }; - 3C021C7407E368CA003D0BD0 /* SFDrawables.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C6E07E368CA003D0BD0 /* SFDrawables.framework */; }; - 3C021C7507E368CA003D0BD0 /* SFStyles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C6F07E368CA003D0BD0 /* SFStyles.framework */; }; - 3C021C7607E368CA003D0BD0 /* SFWordProcessing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C7007E368CA003D0BD0 /* SFWordProcessing.framework */; }; - 3C021C7707E368CA003D0BD0 /* SFUtility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C7107E368CA003D0BD0 /* SFUtility.framework */; }; - 3C021C7807E368CA003D0BD0 /* SFArchiving.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C7207E368CA003D0BD0 /* SFArchiving.framework */; }; - 3C021C7907E368CA003D0BD0 /* SFAnimation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C7307E368CA003D0BD0 /* SFAnimation.framework */; }; - 3C021C9007E36916003D0BD0 /* SFControls.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C8E07E36916003D0BD0 /* SFControls.framework */; }; - 3C021C9107E36916003D0BD0 /* SFProofReader.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C8F07E36916003D0BD0 /* SFProofReader.framework */; }; - 3C021C9707E36920003D0BD0 /* libiconv.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021C9607E36920003D0BD0 /* libiconv.framework */; }; - 3C021E0307E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */; }; - 3C021E4707E38D78003D0BD0 /* APELite.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C021E4607E38D78003D0BD0 /* APELite.o */; }; - 3C5BEC3007FB99A1002AEC43 /* SFDSelectionController_LinkBack.h in Resources */ = {isa = PBXBuildFile; fileRef = 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */; }; - 3C5BEC3107FB99A1002AEC43 /* SFDSelectionController_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */; }; - 3C9C9EC107E39870004BC381 /* libxml.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C9C9EC007E39870004BC381 /* libxml.framework */; }; - 3C9C9FA507E39FD2004BC381 /* LinkBack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C9C9FA407E39FD2004BC381 /* LinkBack.framework */; }; - 3C9C9FA807E39FD8004BC381 /* LinkBack.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3C9C9FA407E39FD2004BC381 /* LinkBack.framework */; }; - 3CA2940607E3C0A90041BA0F /* SFDCanvas_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; }; + 3C19797B0B73DF5D0049975B /* SFDCanvas_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */; }; + 3C1979F80B73E1BC0049975B /* SFDSelectionController_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */; }; + 3C197A590B73E2D50049975B /* SFDrawables.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197A480B73E2D50049975B /* SFDrawables.framework */; }; + 3C197A600B73E2D50049975B /* SFRendering.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197A4F0B73E2D50049975B /* SFRendering.framework */; }; + 3C197B1F0B73E5410049975B /* SFArchiving.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B1C0B73E5410049975B /* SFArchiving.framework */; }; + 3C197B200B73E5410049975B /* SFUtility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B1D0B73E5410049975B /* SFUtility.framework */; }; + 3C197B210B73E5410049975B /* SFWordProcessing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B1E0B73E5410049975B /* SFWordProcessing.framework */; }; + 3C197B280B73E54C0049975B /* SFAnimation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B260B73E54C0049975B /* SFAnimation.framework */; }; + 3C197B290B73E54C0049975B /* SFControls.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B270B73E54C0049975B /* SFControls.framework */; }; + 3C197B2F0B73E5570049975B /* SFProofReader.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B2D0B73E5570049975B /* SFProofReader.framework */; }; + 3C197B300B73E5570049975B /* SFStyles.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C197B2E0B73E5570049975B /* SFStyles.framework */; }; + 3C197B470B73E5AE0049975B /* SFDDrawableInfo_LinkBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */; }; + 3C6861240B754509008571B0 /* KeynoteHeadersReadme.txt in Resources */ = {isa = PBXBuildFile; fileRef = 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */; }; + 3CFB267B0B750BED0052DCBD /* LinkBack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CFB267A0B750BED0052DCBD /* LinkBack.framework */; }; + 3CFB26970B750CA50052DCBD /* APELite.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CFB26950B750CA50052DCBD /* APELite.o */; }; 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; 8D5B49B2048680CD000E48DA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB77B6FE84183AC02AAC07 /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; @@ -38,7 +35,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3C9C9FA807E39FD8004BC381 /* LinkBack.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -51,29 +47,34 @@ 08FB77B6FE84183AC02AAC07 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = K2LinkBackSupport_Prefix.pch; sourceTree = ""; }; - 3C021C0507E3665B003D0BD0 /* SFRendering.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFRendering.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFRendering.framework; sourceTree = ""; }; 3C021C0E07E3666A003D0BD0 /* K2LinkBackSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = K2LinkBackSupport.h; sourceTree = ""; }; 3C021C0F07E3666A003D0BD0 /* K2LinkBackSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = K2LinkBackSupport.m; sourceTree = ""; }; - 3C021C6E07E368CA003D0BD0 /* SFDrawables.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFDrawables.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFDrawables.framework; sourceTree = ""; }; - 3C021C6F07E368CA003D0BD0 /* SFStyles.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFStyles.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFStyles.framework; sourceTree = ""; }; - 3C021C7007E368CA003D0BD0 /* SFWordProcessing.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFWordProcessing.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFWordProcessing.framework; sourceTree = ""; }; - 3C021C7107E368CA003D0BD0 /* SFUtility.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFUtility.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFUtility.framework; sourceTree = ""; }; - 3C021C7207E368CA003D0BD0 /* SFArchiving.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFArchiving.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFArchiving.framework; sourceTree = ""; }; - 3C021C7307E368CA003D0BD0 /* SFAnimation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFAnimation.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFAnimation.framework; sourceTree = ""; }; - 3C021C8E07E36916003D0BD0 /* SFControls.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFControls.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFControls.framework; sourceTree = ""; }; - 3C021C8F07E36916003D0BD0 /* SFProofReader.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFProofReader.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/SFProofReader.framework; sourceTree = ""; }; - 3C021C9607E36920003D0BD0 /* libiconv.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libiconv.framework; path = /Applications/iWork/Keynote.app/Contents/Frameworks/libiconv.framework; sourceTree = ""; }; 3C021E0007E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SFDDrawableInfo_LinkBack.h; sourceTree = ""; }; 3C021E0107E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SFDDrawableInfo_LinkBack.m; sourceTree = ""; }; - 3C021E3F07E38D71003D0BD0 /* APELite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = APELite.h; sourceTree = ""; }; - 3C021E4607E38D78003D0BD0 /* APELite.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = APELite.o; sourceTree = ""; }; + 3C1979BE0B73E0BE0049975B /* SFRSubviewAbsolverView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SFRSubviewAbsolverView.h; path = "Keynote 3 Headers/SFRSubviewAbsolverView.h"; sourceTree = ""; }; + 3C1979BF0B73E0BE0049975B /* SFRCanvas.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SFRCanvas.h; path = "Keynote 3 Headers/SFRCanvas.h"; sourceTree = ""; }; + 3C1979C20B73E0C10049975B /* SFDCanvas.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SFDCanvas.h; path = "Keynote 3 Headers/SFDCanvas.h"; sourceTree = ""; }; + 3C1979D60B73E0EB0049975B /* SFDDrawableInfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SFDDrawableInfo.h; path = "Keynote 3 Headers/SFDDrawableInfo.h"; sourceTree = ""; }; + 3C1979E70B73E1160049975B /* SFDSelectionController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SFDSelectionController.h; path = "Keynote 3 Headers/SFDSelectionController.h"; sourceTree = ""; }; + 3C197A480B73E2D50049975B /* SFDrawables.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFDrawables.framework; path = Frameworks/SFDrawables.framework; sourceTree = ""; }; + 3C197A4F0B73E2D50049975B /* SFRendering.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFRendering.framework; path = Frameworks/SFRendering.framework; sourceTree = ""; }; + 3C197B1C0B73E5410049975B /* SFArchiving.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFArchiving.framework; path = Frameworks/SFArchiving.framework; sourceTree = ""; }; + 3C197B1D0B73E5410049975B /* SFUtility.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFUtility.framework; path = Frameworks/SFUtility.framework; sourceTree = ""; }; + 3C197B1E0B73E5410049975B /* SFWordProcessing.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFWordProcessing.framework; path = Frameworks/SFWordProcessing.framework; sourceTree = ""; }; + 3C197B260B73E54C0049975B /* SFAnimation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFAnimation.framework; path = Frameworks/SFAnimation.framework; sourceTree = ""; }; + 3C197B270B73E54C0049975B /* SFControls.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFControls.framework; path = Frameworks/SFControls.framework; sourceTree = ""; }; + 3C197B2D0B73E5570049975B /* SFProofReader.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFProofReader.framework; path = Frameworks/SFProofReader.framework; sourceTree = ""; }; + 3C197B2E0B73E5570049975B /* SFStyles.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SFStyles.framework; path = Frameworks/SFStyles.framework; sourceTree = ""; }; 3C5BEC2E07FB99A1002AEC43 /* SFDSelectionController_LinkBack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SFDSelectionController_LinkBack.h; sourceTree = ""; }; 3C5BEC2F07FB99A1002AEC43 /* SFDSelectionController_LinkBack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SFDSelectionController_LinkBack.m; sourceTree = ""; }; - 3C9C9EC007E39870004BC381 /* libxml.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libxml.framework; path = /Library/Frameworks/libxml.framework; sourceTree = ""; }; - 3C9C9FA407E39FD2004BC381 /* LinkBack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LinkBack.framework; path = /Library/Frameworks/LinkBack.framework; sourceTree = ""; }; + 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = KeynoteHeadersReadme.txt; path = "Keynote 3 Headers/KeynoteHeadersReadme.txt"; sourceTree = ""; }; 3CA2940307E3C0A90041BA0F /* SFDCanvas_LinkBack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SFDCanvas_LinkBack.h; sourceTree = ""; }; 3CA2940407E3C0A90041BA0F /* SFDCanvas_LinkBack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SFDCanvas_LinkBack.m; sourceTree = ""; }; - 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.k2plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = K2LinkBackSupport.k2plugin; sourceTree = BUILT_PRODUCTS_DIR; }; + 3CFB267A0B750BED0052DCBD /* LinkBack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = LinkBack.framework; sourceTree = ""; }; + 3CFB26940B750CA50052DCBD /* APELite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = APELite.h; path = "APE Lite/APELite.h"; sourceTree = ""; }; + 3CFB26950B750CA50052DCBD /* APELite.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; name = APELite.o; path = "APE Lite/APELite.o"; sourceTree = ""; }; + 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SFDAffineGeometry.h; path = "Keynote 3 Headers/SFDAffineGeometry.h"; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.sfxplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = K2LinkBackSupport.sfxplugin; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ @@ -83,19 +84,17 @@ buildActionMask = 2147483647; files = ( 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, - 3C021C0607E3665B003D0BD0 /* SFRendering.framework in Frameworks */, - 3C021C7407E368CA003D0BD0 /* SFDrawables.framework in Frameworks */, - 3C021C7507E368CA003D0BD0 /* SFStyles.framework in Frameworks */, - 3C021C7607E368CA003D0BD0 /* SFWordProcessing.framework in Frameworks */, - 3C021C7707E368CA003D0BD0 /* SFUtility.framework in Frameworks */, - 3C021C7807E368CA003D0BD0 /* SFArchiving.framework in Frameworks */, - 3C021C7907E368CA003D0BD0 /* SFAnimation.framework in Frameworks */, - 3C021C9007E36916003D0BD0 /* SFControls.framework in Frameworks */, - 3C021C9107E36916003D0BD0 /* SFProofReader.framework in Frameworks */, - 3C021C9707E36920003D0BD0 /* libiconv.framework in Frameworks */, - 3C021E4707E38D78003D0BD0 /* APELite.o in Frameworks */, - 3C9C9EC107E39870004BC381 /* libxml.framework in Frameworks */, - 3C9C9FA507E39FD2004BC381 /* LinkBack.framework in Frameworks */, + 3C197A590B73E2D50049975B /* SFDrawables.framework in Frameworks */, + 3C197A600B73E2D50049975B /* SFRendering.framework in Frameworks */, + 3C197B1F0B73E5410049975B /* SFArchiving.framework in Frameworks */, + 3C197B200B73E5410049975B /* SFUtility.framework in Frameworks */, + 3C197B210B73E5410049975B /* SFWordProcessing.framework in Frameworks */, + 3C197B280B73E54C0049975B /* SFAnimation.framework in Frameworks */, + 3C197B290B73E54C0049975B /* SFControls.framework in Frameworks */, + 3C197B2F0B73E5570049975B /* SFProofReader.framework in Frameworks */, + 3C197B300B73E5570049975B /* SFStyles.framework in Frameworks */, + 3CFB267B0B750BED0052DCBD /* LinkBack.framework in Frameworks */, + 3CFB26970B750CA50052DCBD /* APELite.o in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -106,6 +105,7 @@ isa = PBXGroup; children = ( 08FB77AFFE84173DC02AAC07 /* Classes */, + 3C19798A0B73DF760049975B /* Keynote 3 Headers */, 32C88E010371C26100C91783 /* Other Sources */, 089C167CFE841241C02AAC07 /* Resources */, 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, @@ -117,8 +117,8 @@ 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { isa = PBXGroup; children = ( - 3C021E4607E38D78003D0BD0 /* APELite.o */, 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 3C197A380B73E2920049975B /* Keynote 3 */, 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, ); name = "Frameworks and Libraries"; @@ -151,19 +151,8 @@ 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( - 3C9C9FA407E39FD2004BC381 /* LinkBack.framework */, + 3CFB267A0B750BED0052DCBD /* LinkBack.framework */, 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, - 3C021C7307E368CA003D0BD0 /* SFAnimation.framework */, - 3C021C8E07E36916003D0BD0 /* SFControls.framework */, - 3C021C7207E368CA003D0BD0 /* SFArchiving.framework */, - 3C021C6E07E368CA003D0BD0 /* SFDrawables.framework */, - 3C021C8F07E36916003D0BD0 /* SFProofReader.framework */, - 3C021C0507E3665B003D0BD0 /* SFRendering.framework */, - 3C021C6F07E368CA003D0BD0 /* SFStyles.framework */, - 3C021C7107E368CA003D0BD0 /* SFUtility.framework */, - 3C021C7007E368CA003D0BD0 /* SFWordProcessing.framework */, - 3C9C9EC007E39870004BC381 /* libxml.framework */, - 3C021C9607E36920003D0BD0 /* libiconv.framework */, ); name = "Linked Frameworks"; sourceTree = ""; @@ -180,7 +169,7 @@ 19C28FB8FE9D52D311CA2CBB /* Products */ = { isa = PBXGroup; children = ( - 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.k2plugin */, + 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.sfxplugin */, ); name = Products; sourceTree = ""; @@ -188,19 +177,74 @@ 32C88E010371C26100C91783 /* Other Sources */ = { isa = PBXGroup; children = ( + 3CFB268C0B750C950052DCBD /* APE Lite */, 32DBCF630370AF2F00C91783 /* K2LinkBackSupport_Prefix.pch */, - 3C021E3F07E38D71003D0BD0 /* APELite.h */, 08FB77B6FE84183AC02AAC07 /* main.m */, ); name = "Other Sources"; sourceTree = ""; }; + 3C19798A0B73DF760049975B /* Keynote 3 Headers */ = { + isa = PBXGroup; + children = ( + 3C6861230B754509008571B0 /* KeynoteHeadersReadme.txt */, + 3C1979A00B73DFA60049975B /* SFDrawables */, + 3C1979A30B73DFA90049975B /* SFRendering */, + ); + name = "Keynote 3 Headers"; + sourceTree = ""; + }; + 3C1979A00B73DFA60049975B /* SFDrawables */ = { + isa = PBXGroup; + children = ( + 3CFB28250B75329F0052DCBD /* SFDAffineGeometry.h */, + 3C1979C20B73E0C10049975B /* SFDCanvas.h */, + 3C1979D60B73E0EB0049975B /* SFDDrawableInfo.h */, + 3C1979E70B73E1160049975B /* SFDSelectionController.h */, + ); + name = SFDrawables; + sourceTree = ""; + }; + 3C1979A30B73DFA90049975B /* SFRendering */ = { + isa = PBXGroup; + children = ( + 3C1979BF0B73E0BE0049975B /* SFRCanvas.h */, + 3C1979BE0B73E0BE0049975B /* SFRSubviewAbsolverView.h */, + ); + name = SFRendering; + sourceTree = ""; + }; + 3C197A380B73E2920049975B /* Keynote 3 */ = { + isa = PBXGroup; + children = ( + 3C197B2D0B73E5570049975B /* SFProofReader.framework */, + 3C197B2E0B73E5570049975B /* SFStyles.framework */, + 3C197B260B73E54C0049975B /* SFAnimation.framework */, + 3C197B270B73E54C0049975B /* SFControls.framework */, + 3C197B1C0B73E5410049975B /* SFArchiving.framework */, + 3C197B1D0B73E5410049975B /* SFUtility.framework */, + 3C197B1E0B73E5410049975B /* SFWordProcessing.framework */, + 3C197A480B73E2D50049975B /* SFDrawables.framework */, + 3C197A4F0B73E2D50049975B /* SFRendering.framework */, + ); + name = "Keynote 3"; + sourceTree = ""; + }; + 3CFB268C0B750C950052DCBD /* APE Lite */ = { + isa = PBXGroup; + children = ( + 3CFB26940B750CA50052DCBD /* APELite.h */, + 3CFB26950B750CA50052DCBD /* APELite.o */, + ); + name = "APE Lite"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8D5B49AC048680CD000E48DA /* K2LinkBackSupport */ = { isa = PBXNativeTarget; - buildConfigurationList = 3C2D497A0867BDC800DE8693 /* Build configuration list for PBXNativeTarget "K2LinkBackSupport" */; + buildConfigurationList = 3C1978D70B73D5460049975B /* Build configuration list for PBXNativeTarget "K2LinkBackSupport" */; buildPhases = ( 8D5B49AF048680CD000E48DA /* Resources */, 8D5B49B1048680CD000E48DA /* Sources */, @@ -214,7 +258,7 @@ name = K2LinkBackSupport; productInstallPath = "$(HOME)/Library/Bundles"; productName = K2LinkBackSupport; - productReference = 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.k2plugin */; + productReference = 8D5B49B6048680CD000E48DA /* K2LinkBackSupport.sfxplugin */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ @@ -222,7 +266,7 @@ /* Begin PBXProject section */ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; - buildConfigurationList = 3C2D497E0867BDC800DE8693 /* Build configuration list for PBXProject "K2LinkBackSupport" */; + buildConfigurationList = 3C1978DB0B73D5460049975B /* Build configuration list for PBXProject "K2LinkBackSupport" */; hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* K2LinkBackSupport */; projectDirPath = ""; @@ -238,7 +282,7 @@ buildActionMask = 2147483647; files = ( 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */, - 3C5BEC3007FB99A1002AEC43 /* SFDSelectionController_LinkBack.h in Resources */, + 3C6861240B754509008571B0 /* KeynoteHeadersReadme.txt in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -251,9 +295,9 @@ files = ( 8D5B49B2048680CD000E48DA /* main.m in Sources */, 3C021C1107E3666A003D0BD0 /* K2LinkBackSupport.m in Sources */, - 3C021E0307E38B2C003D0BD0 /* SFDDrawableInfo_LinkBack.m in Sources */, - 3CA2940607E3C0A90041BA0F /* SFDCanvas_LinkBack.m in Sources */, - 3C5BEC3107FB99A1002AEC43 /* SFDSelectionController_LinkBack.m in Sources */, + 3C19797B0B73DF5D0049975B /* SFDCanvas_LinkBack.m in Sources */, + 3C1979F80B73E1BC0049975B /* SFDSelectionController_LinkBack.m in Sources */, + 3C197B470B73E5AE0049975B /* SFDDrawableInfo_LinkBack.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -271,11 +315,17 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 3C2D497B0867BDC800DE8693 /* Development */ = { + 3C1978D80B73D5460049975B /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = /Users/king/build; + FRAMEWORK_SEARCH_PATHS = ( + /Users/king/build, + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -285,16 +335,22 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Library/Bundles"; PRODUCT_NAME = K2LinkBackSupport; - WRAPPER_EXTENSION = k2plugin; + WRAPPER_EXTENSION = sfxplugin; ZERO_LINK = YES; }; name = Development; }; - 3C2D497C0867BDC800DE8693 /* Deployment */ = { + 3C1978D90B73D5460049975B /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = /Users/king/build; + FRAMEWORK_SEARCH_PATHS = ( + /Users/king/build, + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -302,62 +358,86 @@ INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Library/Bundles"; PRODUCT_NAME = K2LinkBackSupport; - WRAPPER_EXTENSION = k2plugin; + WRAPPER_EXTENSION = sfxplugin; ZERO_LINK = NO; }; name = Deployment; }; - 3C2D497D0867BDC800DE8693 /* Default */ = { + 3C1978DA0B73D5460049975B /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/king/build; + FRAMEWORK_SEARCH_PATHS = ( + /Users/king/build, + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/Frameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)\""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = K2LinkBackSupport_Prefix.pch; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Library/Bundles"; PRODUCT_NAME = K2LinkBackSupport; - WRAPPER_EXTENSION = k2plugin; + WRAPPER_EXTENSION = sfxplugin; }; name = Default; }; - 3C2D497F0867BDC800DE8693 /* Development */ = { + 3C1978DC0B73D5460049975B /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = ( + ppc, + i386, + ); + HEADER_SEARCH_PATHS = /usr/include/libxml2/; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Development; }; - 3C2D49800867BDC800DE8693 /* Deployment */ = { + 3C1978DD0B73D5460049975B /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = ( + ppc, + i386, + ); + HEADER_SEARCH_PATHS = /usr/include/libxml2/; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Deployment; }; - 3C2D49810867BDC800DE8693 /* Default */ = { + 3C1978DE0B73D5460049975B /* Default */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = ( + ppc, + i386, + ); + HEADER_SEARCH_PATHS = /usr/include/libxml2/; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Default; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 3C2D497A0867BDC800DE8693 /* Build configuration list for PBXNativeTarget "K2LinkBackSupport" */ = { + 3C1978D70B73D5460049975B /* Build configuration list for PBXNativeTarget "K2LinkBackSupport" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3C2D497B0867BDC800DE8693 /* Development */, - 3C2D497C0867BDC800DE8693 /* Deployment */, - 3C2D497D0867BDC800DE8693 /* Default */, + 3C1978D80B73D5460049975B /* Development */, + 3C1978D90B73D5460049975B /* Deployment */, + 3C1978DA0B73D5460049975B /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; - 3C2D497E0867BDC800DE8693 /* Build configuration list for PBXProject "K2LinkBackSupport" */ = { + 3C1978DB0B73D5460049975B /* Build configuration list for PBXProject "K2LinkBackSupport" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3C2D497F0867BDC800DE8693 /* Development */, - 3C2D49800867BDC800DE8693 /* Deployment */, - 3C2D49810867BDC800DE8693 /* Default */, + 3C1978DC0B73D5460049975B /* Development */, + 3C1978DD0B73D5460049975B /* Deployment */, + 3C1978DE0B73D5460049975B /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; diff --git a/Keynote 3 Headers/KeynoteHeadersReadme.txt b/Keynote 3 Headers/KeynoteHeadersReadme.txt new file mode 100644 index 0000000..76290d9 --- /dev/null +++ b/Keynote 3 Headers/KeynoteHeadersReadme.txt @@ -0,0 +1,13 @@ +Header files for the following classes are required to compile this project. + +SFDrawables.framework +- SFDAffineGeometry.h +- SFDCanvas.h +- SFDDrawableInfo.h +- SFDSelectionController.h + +SFRendering.framework +- SFRCanvas.h +- SFRSubviewAbsolverView.h + +Use class-dump to get the headers from Keynote. \ No newline at end of file diff --git a/Keynote 3 Headers/SFDAffineGeometry.h b/Keynote 3 Headers/SFDAffineGeometry.h new file mode 100644 index 0000000..6c32d45 --- /dev/null +++ b/Keynote 3 Headers/SFDAffineGeometry.h @@ -0,0 +1,74 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import + +@class NSAffineTransform; + +@interface SFDAffineGeometry : NSObject +{ + NSSize mNaturalSize; + NSSize mSize; + BOOL mSizesLocked; + BOOL mAspectRatioLocked; + NSPoint mPosition; + float mAngle; + BOOL mHorizontalFlip; + BOOL mVerticalFlip; + float mShearXAngle; + float mShearYAngle; + NSAffineTransform *mCachedTransform; +} + ++ (void)initialize; ++ (id)properties; +- (id)initWithNaturalSize:(NSSize)fp8 size:(NSSize)fp16 sizesLocked:(BOOL)fp24 aspectRatioLocked:(BOOL)fp28 position:(NSPoint)fp32 angleInDegrees:(float)fp40 horizontalFlip:(BOOL)fp44 verticalFlip:(BOOL)fp48 shearXAngle:(float)fp52 shearYAngle:(float)fp56; +- (id)initWithNaturalSize:(NSSize)fp8 size:(NSSize)fp16 sizesLocked:(BOOL)fp24 aspectRatioLocked:(BOOL)fp28 position:(NSPoint)fp32 angleInDegrees:(float)fp40 horizontalFlip:(BOOL)fp44 verticalFlip:(BOOL)fp48; +- (id)init; +- (id)copyWithZone:(NSZone *)fp8; +- (void)dealloc; +- (BOOL)isEqual:(id)fp8; +- (unsigned int)hash; +- (id)description; +- (void)setGeometry:(id)fp8; +- (NSSize)naturalSize; +- (void)setNaturalSize:(NSSize)fp8; +- (NSSize)size; +- (void)setSize:(NSSize)fp8; +- (BOOL)sizesLocked; +- (void)setSizesLocked:(BOOL)fp8; +- (BOOL)aspectRatioLocked; +- (void)setAspectRatioLocked:(BOOL)fp8; +- (NSPoint)position; +- (void)setPosition:(NSPoint)fp8; +- (float)angleInDegrees; +- (void)setAngleInDegrees:(float)fp8; +- (void)setAngleAboutCenterInDegrees:(float)fp8; +- (float)angleInRadians; +- (void)setAngleInRadians:(float)fp8; +- (BOOL)horizontalFlip; +- (void)setHorizontalFlip:(BOOL)fp8; +- (BOOL)verticalFlip; +- (void)setVerticalFlip:(BOOL)fp8; +- (float)shearXAngle; +- (void)setShearXAngle:(float)fp8; +- (float)shearYAngle; +- (void)setShearYAngle:(float)fp8; +- (NSRect)naturalBounds; +- (NSRect)bounds; +- (id)transform; +- (id)compareProperties:(id)fp8; +- (BOOL)differOnlyByTranslation:(id)fp8; +- (BOOL)intersectsGeometry:(id)fp8; +- (void)translateNaturalPoint:(NSPoint)fp8 toPoint:(NSPoint)fp16; +- (void)transformBy:(id)fp8 rotateBy:(float)fp12 horizontalFlip:(BOOL)fp16 verticalFlip:(BOOL)fp20; +- (void)transformByWithAngleAndFlipFixed:(id)fp8; +- (id)geometryRelativeToGeometry:(id)fp8; +- (void)appendGeometry:(id)fp8; +- (void)scaleBy:(double)fp8 withOffset:(NSPoint)fp16; + +@end + diff --git a/Keynote 3 Headers/SFDCanvas.h b/Keynote 3 Headers/SFDCanvas.h new file mode 100644 index 0000000..18adf2d --- /dev/null +++ b/Keynote 3 Headers/SFDCanvas.h @@ -0,0 +1,128 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import +#import "SFRCanvas.h" + +@class NSArray, NSValue, SFDDrawableRep, SFDEditablePathController, SFDGuideController, SFDPDFHyperlinkController, SFDRulerLineRep, SFDSelectionController, SFDToolController, SFWPHyperlinkField; + +@interface SFDCanvas : SFRCanvas { + SFDSelectionController *mSelectionController; + SFDToolController *mToolController; + SFDGuideController *mGuideController; + BOOL mMouseIsDown; + BOOL mMouseIsDragging; + NSValue *mMarquee; + NSArray *mDynamicGuides; + BOOL mIsInteractive; + SFDDrawableRep *mEditingRep; + SFDDrawableRep *mRepToHighlight; + struct _NSPoint mRepHighlightLocation; + BOOL mClipContentsToPage; + BOOL mShowsLayoutMarks; + BOOL mShowsHyperlinkBadges; + BOOL mShowsGuides; + int mBorderDrawingMethod; + SFDRulerLineRep *mRulerLine; + BOOL mSupportsMotionPaths; + SFDEditablePathController *mActivePathController; + SFWPHyperlinkField *mRolloverHyperlinkField; + SFDPDFHyperlinkController *mHyperlinkController; +} + ++ (id)imageDataOfType:(id)fp8 forDrawable:(id)fp12 returnSize:(struct _NSSize *)fp16 returnLocation:(struct _NSPoint *)fp20; ++ (id)imageDataOfType:(id)fp8 forDrawables:(id)fp12; ++ (id)imageDataOfType:(id)fp8 forDrawables:(id)fp12 onCanvas:(id)fp16; ++ (id)imageDataOfType:(id)fp8 forReps:(id)fp12 onCanvas:(id)fp16; +- (id)initWithFrame:(struct _NSRect)fp8; +- (void)dealloc; +- (void)awakeFromNib; +- (void)invalidateCursorRect; +- (id)toolController; +- (id)selectionController; +- (id)guideController; +- (id)contents; +- (id)pageContainingPoint:(struct _NSPoint)fp8; +- (id)pagesInRect:(struct _NSRect)fp8; +- (id)visiblePages; +- (BOOL)shouldClipContentsToPage; +- (void)setShouldClipContentsToPage:(BOOL)fp8; +- (void)setRepToHighlight:(id)fp8 atLocation:(struct _NSPoint)fp12; +- (id)repToHighlight; +- (id)dataManager; +- (void)beginEditingRep:(id)fp8 withEvent:(id)fp12; +- (void)setActivePathController:(id)fp8; +- (id)activePathController; +- (void)setEditingRep:(id)fp8; +- (id)editingRep; +- (void)endEditing; +- (void)endEditingWithoutChangingFirstResponder; +- (id)associatedRepsForRep:(id)fp8; +- (void)mouseMoved:(id)fp8; +- (BOOL)mouseIsDown; +- (BOOL)resignFirstResponder; +- (struct _NSPoint)boundaryConstrainedOffsetForMovingObjects:(id)fp8 byOffset:(struct _NSPoint)fp12; +- (void)didConstrainMovementOfMovingObjects:(id)fp8; +- (void)willBeginMovementOfObjects:(id)fp8; +- (void)didEndMovementOfObjects:(id)fp8; +- (void)mouseDown:(id)fp8; +- (void)keyDown:(id)fp8; +- (void)flagsChanged:(id)fp8; +- (void)resetCursorRects; +- (BOOL)supportsMotionPaths; +- (void)setSupportsMotionPaths:(BOOL)fp8; +- (id)objectsToRender; +- (id)repForInfo:(id)fp8; +- (BOOL)subclassWillFlush; +- (void)addHyperlinkForRect:(struct _NSRect)fp8 withUrl:(id)fp24; +- (void)drawRect:(struct _NSRect)fp8; +- (BOOL)willDrawHandles; +- (void)drawBorders; +- (void)drawSelectedRepHandles; +- (void)drawSelectedRepBezierHandles; +- (void)setMarquee:(id)fp8; +- (id)marquee; +- (id)dynamicGuidesForNonSelectedDrawables; +- (id)dynamicGuidesForActivePage; +- (id)provideGuides; +- (id)provideStaticGuides; +- (id)provideNewGuide; +- (id)staticGuidesForPage:(id)fp8; +- (void)setDynamicGuides:(id)fp8; +- (BOOL)showsLayoutMarks; +- (void)setShowsLayoutMarks:(BOOL)fp8; +- (void)setShowsHyperlinkBadges:(BOOL)fp8; +- (BOOL)showsHyperlinkBadges; +- (BOOL)isValidHyperlink:(id)fp8 forDrawable:(id)fp12; +- (void)setRolloverHyperlinkField:(id)fp8; +- (void)drawHyperlinkBadges; +- (int)borderDrawingMethod; +- (void)setBorderDrawingMethod:(int)fp8; +- (BOOL)showsGuides; +- (void)setShowsGuides:(BOOL)fp8; +- (void)selectionChanged; +- (void)didDeselectAll; +- (void)updateRulerlinesWithOldRect:(struct _NSRect)fp8 newRect:(struct _NSRect)fp24; +- (void)eraseRulerlines; +- (BOOL)isInteractive; +- (void)setIsInteractive:(BOOL)fp8; +- (id)menuForEvent:(id)fp8; +- (void)updateRulerLineForRuler:(id)fp8 to:(float)fp12; +- (void)insertText:(id)fp8; +- (id)attributedSubstringFromRange:(struct _NSRange)fp8; +- (unsigned int)characterIndexForPoint:(struct _NSPoint)fp8; +- (long)conversationIdentifier; +- (void)doCommandBySelector:(SEL)fp8; +- (struct _NSRect)firstRectForCharacterRange:(struct _NSRange)fp8; +- (BOOL)hasMarkedText; +- (struct _NSRange)markedRange; +- (struct _NSRange)selectedRange; +- (void)setMarkedText:(id)fp8 selectedRange:(struct _NSRange)fp12; +- (void)unmarkText; +- (id)validAttributesForMarkedText; + +@end + diff --git a/Keynote 3 Headers/SFDDrawableInfo.h b/Keynote 3 Headers/SFDDrawableInfo.h new file mode 100644 index 0000000..51f9c7b --- /dev/null +++ b/Keynote 3 Headers/SFDDrawableInfo.h @@ -0,0 +1,171 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import + +@class NSBezierPath, NSString, NSURL, SFDAffineGeometry, SFSStyle; + +@interface SFDDrawableInfo : NSObject +{ + SFDAffineGeometry *mRelativeGeometry; + SFSStyle *mStyle; + BOOL mIsLocked; + NSURL *mURL; + NSString *mName; + NSBezierPath *mExteriorWrapPath; + SFDAffineGeometry *mLastGeometryUsedForWrap; + id mStorage; + id mLayer; + id mDrawableContainer; + SFDAffineGeometry *mGeometry; + unsigned int mUsageCount; + BOOL mIsManaging; + unsigned int mIsEditing; + BOOL mExteriorWrapInvalid; + BOOL mExteriorWrapPathFromArchive; + SFDAffineGeometry *mArchivedContainerGeometry; +} + ++ (Class)preferredStyleClass; ++ (BOOL)acceptsNilStyles; ++ (id)createAnonymousStyleWithParentIdentifier:(id)fp8 stylesheet:(id)fp12; +- (id)initWithGeometry:(id)fp8 style:(id)fp12; +- (id)init; +- (void)dealloc; +- (BOOL)isEqual:(id)fp8; +- (unsigned int)hash; +- (id)description; +- (id)style; +- (void)setStyle:(id)fp8; +- (BOOL)isLocked; +- (void)setIsLocked:(BOOL)fp8; +- (void)setIsLocked:(BOOL)fp8 applyToStyle:(BOOL)fp12; +- (id)URL; +- (void)setURL:(id)fp8; +- (id)name; +- (void)setName:(id)fp8; +- (id)storage; +- (void)setStorage:(id)fp8; +- (id)layer; +- (void)setLayer:(id)fp8; +- (BOOL)isAttached; +- (id)owningAttachment; +- (void)setOwningAttachment:(id)fp8; +- (id)containingInfo; +- (void)setContainingInfo:(id)fp8; +- (void)setContainingInfoAndRegisterForUndo:(id)fp8; +- (id)topmostContainingInfo; +- (id)drawableContainer; +- (void)setDrawableContainer:(id)fp8; +- (void)setDrawableContainer:(id)fp8 postingNotification:(BOOL)fp12; +- (id)geometricContainer; +- (id)relativeGeometry; +- (void)setRelativeGeometry:(id)fp8 registerUndo:(BOOL)fp12; +- (void)setRelativeGeometry:(id)fp8; +- (id)geometry; +- (void)setGeometry:(id)fp8 registerUndo:(BOOL)fp12; +- (void)setGeometry:(id)fp8; +- (id)geometryRelativeToObject:(id)fp8; +- (void)geometricContainerPropertiesChanged:(id)fp8; +- (struct _NSSize)naturalSize; +- (BOOL)sizesLocked; +- (struct _NSSize)size; +- (void)setSize:(struct _NSSize)fp8; +- (BOOL)aspectRatioLocked; +- (void)setAspectRatioLocked:(BOOL)fp8; +- (struct _NSPoint)position; +- (void)setPosition:(struct _NSPoint)fp8; +- (BOOL)horizontalFlip; +- (void)setHorizontalFlip:(BOOL)fp8; +- (BOOL)verticalFlip; +- (void)setVerticalFlip:(BOOL)fp8; +- (float)angleInDegrees; +- (void)setAngleInDegrees:(float)fp8; +- (float)angleInRadians; +- (void)setAngleInRadians:(float)fp8; +- (void)setAngleAboutFixedPointInDegrees:(float)fp8; +- (BOOL)canAutoSize; +- (void)setCanAutoSize:(BOOL)fp8; +- (struct _NSSize)minimumSize; +- (BOOL)validateSize:(struct _NSSize)fp8; +- (struct _NSRect)naturalBounds; +- (struct _NSRect)bounds; +- (id)transform; +- (id)geometryProperties; +- (id)geometryPropertiesAffectingTransform; +- (id)styleProperties; +- (id)propertiesAffectingExteriorWrap; +- (unsigned int)usageCount; +- (void)incrementUsageCount; +- (void)decrementUsageCount; +- (void)beginEditing; +- (void)undoableBeginEditing; +- (void)endEditing; +- (void)undoableEndEditing; +- (BOOL)isEditing; +- (void)processEditing; +- (void)adoptStylesheet:(id)fp8 styleMap:(id)fp12; +- (BOOL)canClearStyleOverrides; +- (void)clearStyleOverrides; +- (id)undoManager; +- (void)sendChangeNotificationForProperty:(id)fp8; +- (void)sendChangeNotificationForProperties:(id)fp8; +- (Class)preferredRepClass; +- (struct _NSRect)wrapBounds; +- (id)interiorWrapPath; +- (id)exteriorWrapPath; +- (id)buildExteriorWrapPath; +- (id)buildExteriorWrapPathWithParameters:(id)fp8; +- (void)invalidateExteriorWrapPath; +- (id)document; +- (id)inspectableProperties; +- (id)mutableProperties; +- (BOOL)canInspectProperty:(id)fp8; +- (BOOL)canMutateProperty:(id)fp8; +- (BOOL)isStateMixedForProperty:(id)fp8; +- (id)valueForProperty:(id)fp8 withScope:(id)fp12; +- (id)valueForProperty:(id)fp8; +- (id)valuesForProperty:(id)fp8 withScope:(id)fp12; +- (id)valuesForProperty:(id)fp8; +- (void)setValue:(id)fp8 forProperty:(id)fp12 withScope:(id)fp16; +- (void)setValue:(id)fp8 forProperty:(id)fp12; +- (void)setValuesForProperties:(id)fp8 withScope:(id)fp12; +- (void)setValuesForProperties:(id)fp8; +- (BOOL)validateValue:(id)fp8 forProperty:(id)fp12; +- (BOOL)canMutateViaAction:(id)fp8; +- (void)mutateViaAction:(id)fp8 arguments:(id)fp12; +- (void)stylePropertiesChanged:(id)fp8; +- (BOOL)supportsDashedLineStyle; +- (id)sfxFilters; +- (id)sfxLocalizedDeliveryOptionsForFilter:(id)fp8; +- (int)numberOfAnimationChunksWithChunkingStyle:(int)fp8; +- (BOOL)reverseChunkingIsSupported; +- (void)scaleBy:(double)fp8 withOffset:(struct _NSPoint)fp16 alreadyScaledObjects:(id)fp24; +- (id)topLevelGroup; +- (struct _NSPoint)inlineRelativeGeometryPosition; +- (id)managedDrawables; +- (id)managingDrawable; +- (BOOL)isManaged; +- (BOOL)containsManaged; +- (BOOL)canManage; +- (BOOL)isManaging; +- (void)setIsManaging:(BOOL)fp8; +- (BOOL)isBeingManaged; +- (void)setIsBeingManaged:(BOOL)fp8; +- (void)disableIsManaging; +- (void)disableIsBeingManaged; +- (void)enableIsManaging; +- (void)enableIsBeingManaged; +- (void)willBeRemovedFromDocument; +- (void)wasAddedToDocument; +- (id)associatedDrawables; +- (id)placeholderGeometry; +- (void)setPlaceholderGeometry:(id)fp8; +- (void)updateMotionPaths; +- (BOOL)canApplyImageFilters; + +@end + diff --git a/Keynote 3 Headers/SFDSelectionController.h b/Keynote 3 Headers/SFDSelectionController.h new file mode 100644 index 0000000..85588ae --- /dev/null +++ b/Keynote 3 Headers/SFDSelectionController.h @@ -0,0 +1,62 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import + +@class NSArray, NSMutableSet, SFDCanvas, SFDPageRep; + +@interface SFDSelectionController : NSObject +{ + SFDCanvas *mCanvas; + NSMutableSet *mSelectedObjects; + struct _NSRect mGeometricBounds; + struct _NSRect mAlignmentBounds; + SFDPageRep *mActivePage; + NSArray *mDraggableObjects; + BOOL mMultipleSelectionChangesMayBeHappening; + BOOL mMultipleSelectionChangesHappened; +} + ++ (BOOL)deletionIsPermittedWithManagedDrawableRelationshipsInArray:(id)fp8; ++ (BOOL)copyingIsPermittedWithManagedDrawableRelationshipsInArray:(id)fp8; +- (id)init; +- (void)dealloc; +- (void)selectionChanged; +- (void)beginMultipleSelectionChanges; +- (void)endMultipleSelectionChanges; +- (void)beginMarqueeUpdate; +- (void)endMarqueeUpdate; +- (void)setCanvas:(id)fp8; +- (id)canvas; +- (void)addToSelection:(id)fp8; +- (void)removeFromSelection:(id)fp8; +- (void)deselectAll; +- (void)deselectAllNotifyingCanvas:(BOOL)fp8; +- (void)setActivePage:(id)fp8; +- (id)activePage; +- (id)draggableObjects; +- (void)releaseDraggableObjects; +- (void)createDraggableObjectsFromPage:(id)fp8; +- (void)updateDraggableObjectsWithNewActivePage:(id)fp8; +- (id)selectedInfos; +- (id)unlockedSelectedInfos; +- (id)unlockedSelectedObjects; +- (id)selectedObjects; +- (struct _NSRect)geometricBoundsOfSelection; +- (struct _NSRect)alignmentBoundsOfSelection; +- (struct _NSRect)geometricBoundsOfDraggableObjects; +- (struct _NSRect)alignmentBoundsOfDraggableObjects; +- (struct _NSRect)alignmentBoundsOfUnlockedSelection; +- (BOOL)selectionContainsObjectOfClass:(Class)fp8; +- (id)selectedObjectsOfClass:(Class)fp8; +- (BOOL)selectionContainsUnlockedObject; +- (BOOL)selectionContainsLockedObject; +- (BOOL)selectionContainsObjectReplying:(BOOL)fp8 toSelector:(SEL)fp12; +- (id)selectedObjectsReplying:(BOOL)fp8 toSelector:(SEL)fp12; +- (void)dirtySelection; + +@end + diff --git a/Keynote 3 Headers/SFRCanvas.h b/Keynote 3 Headers/SFRCanvas.h new file mode 100644 index 0000000..124d5bf --- /dev/null +++ b/Keynote 3 Headers/SFRCanvas.h @@ -0,0 +1,106 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import + +#import "SFRSubviewAbsolverView.h" + +@class NSColor, NSImage, NSOpenGLContext, SFRBitmapRenderingQualityInfo, SFUMutablePointerSet, SFXSessionContext; + +struct _CGLayerInfo { + unsigned int layerInfoVersion; + struct _CGLayerInfo *next; + void *fetchTile; + unsigned int layerInfo; + void *colorData; + void *alphaData; + void *customData; + int colorBytesPerRow; + int alphaBytesPerRow; + int clipMinX; + int clipMaxX; + int clipMinY; + int clipMaxY; + int frameMinX; + int frameMaxX; + int frameMinY; + int frameMaxY; + int opaqueMinX; + int opaqueMaxX; + int opaqueMinY; + int opaqueMaxY; + int bitmapType; + unsigned int constantColor; + unsigned int layerData; + float fade; + void *texture; + unsigned int *stamp; + void *clipShape; + void *opaqueShape; + float texMinX; + float texMaxX; + float texMinY; + float texMaxY; + unsigned int flags; + void *link; + float brightness; + void *filters; + unsigned int reserved[4]; +}; + +@interface SFRCanvas : SFRSubviewAbsolverView +{ + SFXSessionContext *mSession; + float _scale; + int _destination; + BOOL _usesCompositor; + struct _CGLayerInfo _backgroundLayer; + NSColor *_backgroundColor; + BOOL mRenderBlackAndWhite; + BOOL mIsStatic; + int mBitmapImageQuality; + int mChartQuality; + SFRBitmapRenderingQualityInfo *mBitmapRenderingQualityInfo; + BOOL mAccelerated; + NSOpenGLContext *mOpenGLContext; + NSImage *mMinimizedImage; + SFUMutablePointerSet *mRegisteredRenderables; + id mCIContext; +} + +- (BOOL)isFlipped; +- (BOOL)scaleShadowsWhenZooming; +- (void)setBackgroundColor:(id)fp8; +- (id)backgroundColor; +- (id)initWithFrame:(struct _NSRect)fp8; +- (void)registerRenderable:(id)fp8; +- (void)unregisterRenderable:(id)fp8; +- (void)dealloc; +- (void)setScale:(float)fp8; +- (void)setScale:(float)fp8 scrollingToMaintainCenter:(BOOL)fp12; +- (float)viewScale; +- (BOOL)isOpaque; +- (BOOL)isStatic; +- (void)setIsStatic:(BOOL)fp8; +- (int)bitmapImageQuality; +- (void)setBitmapImageQuality:(int)fp8; +- (int)chartQuality; +- (void)setChartQuality:(int)fp8; +- (id)bitmapRenderingQualityInfo; +- (void)setUsesCompositor:(BOOL)fp8; +- (BOOL)usesCompositor; +- (void)setRenderingDestination:(int)fp8; +- (int)renderingDestination; +- (void)setRendersBlackAndWhite:(BOOL)fp8; +- (BOOL)rendersBlackAndWhite; +- (id)additionalShadowTransform; +- (id)objectsToRender; +- (void)_propagateDirtyRectsToOpaqueAncestors; +- (void)drawRect:(struct _NSRect)fp8; +- (void)compositeRect:(struct _NSRect)fp8; + +@end + diff --git a/Keynote 3 Headers/SFRSubviewAbsolverView.h b/Keynote 3 Headers/SFRSubviewAbsolverView.h new file mode 100644 index 0000000..c356afb --- /dev/null +++ b/Keynote 3 Headers/SFRSubviewAbsolverView.h @@ -0,0 +1,27 @@ +/* + * Generated by class-dump 3.1.1. + * + * class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2006 by Steve Nygard. + */ + +#import + +@interface SFRSubviewAbsolverView : NSView +{ + struct _NSRect mDisplayRect; + NSView *mVisibleView; + BOOL mIsVisibleRect; + BOOL mDrawsOwnSubviews; + SEL mEntryPoint; +} + +- (id)initWithFrame:(struct _NSRect)fp8; +- (BOOL)drawsOwnSubviews; +- (void)setDrawsOwnSubviews:(BOOL)fp8; +- (void)clearSubviewCache; +- (void)_recursiveDisplayAllDirtyWithLockFocus:(BOOL)fp8 visRect:(struct _NSRect)fp12; +- (void)_recursiveDisplayRectIfNeededIgnoringOpacity:(struct _NSRect)fp8 isVisibleRect:(BOOL)fp24 rectIsVisibleRectForView:(id)fp28 topView:(BOOL)fp32; +- (BOOL)drawSubview:(id)fp8; + +@end + diff --git a/LinkBack.framework/Headers b/LinkBack.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/LinkBack.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/LinkBack.framework/LinkBack b/LinkBack.framework/LinkBack new file mode 120000 index 0000000..4460e15 --- /dev/null +++ b/LinkBack.framework/LinkBack @@ -0,0 +1 @@ +Versions/Current/LinkBack \ No newline at end of file diff --git a/LinkBack.framework/Resources b/LinkBack.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/LinkBack.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/LinkBack.framework/Versions/A/Headers/LinkBack.h b/LinkBack.framework/Versions/A/Headers/LinkBack.h new file mode 100644 index 0000000..ccf3274 --- /dev/null +++ b/LinkBack.framework/Versions/A/Headers/LinkBack.h @@ -0,0 +1,165 @@ +// +// LinkBack.h +// LinkBack Project +// +// Created by Charles Jolley on Tue Jun 15 2004. +// Copyright (c) 2004, Nisus Software, Inc. +// All rights reserved. + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// Neither the name of the Nisus Software, Inc. nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + + +#import + +// Use this pasteboard type to put LinkBack data to the pasteboard. Use MakeLinkBackData() to create the data. +extern NSString* LinkBackPboardType ; + +// Default Action Names. These will be localized for you automatically. +extern NSString* LinkBackEditActionName ; +extern NSString* LinkBackRefreshActionName ; + +// +// Support Functions +// +NSString* LinkBackUniqueItemKey() ; +NSString* LinkBackEditMultipleMenuTitle() ; +NSString* LinkBackEditNoneMenuTitle() ; + +// +// Deprecated Support Functions -- use LinkBack Data Category instead +// +id MakeLinkBackData(NSString* serverName, id appData) ; +id LinkBackGetAppData(id linkBackData) ; +BOOL LinkBackDataBelongsToActiveApplication(id data) ; + +// +// LinkBack Data Category +// + +// Use these methods to create and access linkback data objects. You can also use the helper functions above. + +@interface NSDictionary (LinkBackData) + ++ (NSDictionary*)linkBackDataWithServerName:(NSString*)serverName appData:(id)appData ; + ++ (NSDictionary*)linkBackDataWithServerName:(NSString*)serverName appData:(id)appData suggestedRefreshRate:(NSTimeInterval)rate ; + ++ (NSDictionary*)linkBackDataWithServerName:(NSString*)serverName appData:(id)appData actionName:(NSString*)action suggestedRefreshRate:(NSTimeInterval)rate ; + +- (BOOL)linkBackDataBelongsToActiveApplication ; + +- (id)linkBackAppData ; +- (NSString*)linkBackSourceApplicationName ; +- (NSString*)linkBackActionName ; +- (NSString*)linkBackVersion ; +- (NSURL*)linkBackApplicationURL ; + +- (NSTimeInterval)linkBackSuggestedRefreshRate ; + +- (NSString*)linkBackEditMenuTitle ; + +@end + +// +// Delegate Protocols +// + +@class LinkBack ; + +@protocol LinkBackServerDelegate +- (void)linkBackDidClose:(LinkBack*)link ; +- (void)linkBackClientDidRequestEdit:(LinkBack*)link ; +@end + +@protocol LinkBackClientDelegate +- (void)linkBackDidClose:(LinkBack*)link ; +- (void)linkBackServerDidSendEdit:(LinkBack*)link ; +@end + +// used for cross app communications +@protocol LinkBack +- (oneway void)remoteCloseLink ; +- (void)requestEditWithPasteboardName:(bycopy NSString*)pboardName ; // from client +- (void)refreshEditWithPasteboardName:(bycopy NSString*)pboardName ; // from server +@end + +@interface LinkBack : NSObject { + LinkBack* peer ; // the client or server on the other side. + BOOL isServer ; + id delegate ; + NSPasteboard* pboard ; + id repobj ; + NSString* sourceName ; + NSString* sourceApplicationName ; + NSString* key ; +} + ++ (LinkBack*)activeLinkBackForItemKey:(id)key ; +// works for both the client and server side. Valid only while a link is connected. + +// ........................................................................... +// General Use methods +// +- (NSPasteboard*)pasteboard ; +- (void)closeLink ; + +- (id)representedObject ; +- (void)setRepresentedObject:(id)obj ; +// Applications can use this represented object to attach some meaning to the live link. For example, a client application may set this to the object to be modified when the edit is refreshed. This retains its value. + +- (NSString*)sourceName ; +- (NSString*)sourceApplicationName ; +- (NSString*)itemKey ; // maybe this matters only on the client side. + +// ........................................................................... +// Server-side methods +// ++ (BOOL)publishServerWithName:(NSString*)name delegate:(id)del ; + ++ (void)retractServerWithName:(NSString*)name ; + +- (void)sendEdit ; + +// ........................................................................... +// Client-Side Methods +// ++ (LinkBack*)editLinkBackData:(id)data sourceName:(NSString*)aName delegate:(id)del itemKey:(NSString*)aKey ; + +@end + +@interface LinkBack (InternalUseOnly) + +- (id)initServerWithClient: (LinkBack*)aLinkBack delegate: (id)aDel ; + +- (id)initClientWithSourceName:(NSString*)aName delegate:(id)aDel itemKey:(NSString*)aKey ; + +- (BOOL)connectToServerWithName:(NSString*)aName inApplication:(NSString*)bundleIdentifier fallbackURL:(NSURL*)url appName:(NSString*)appName ; + +- (void)requestEdit ; + +@end diff --git a/LinkBack.framework/Versions/A/LinkBack b/LinkBack.framework/Versions/A/LinkBack new file mode 100755 index 0000000000000000000000000000000000000000..f3c8f0acdacb371241aa77366ab39aa0eb012977 GIT binary patch literal 73708 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 literal 0 HcmV?d00001 diff --git a/LinkBack.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/LinkBack.framework/Versions/A/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..e30bbfd9de9996ca0c220a15713717e75f6463c3 GIT binary patch literal 258 zcmX|)OA5k35JYS3DT2!&D&kJu7!U=`LJuILNlX~?AyFaT$V;j(6Od-6XR2RUeZHE= zm#3XdU1W4qrk7$xXis{r2BlO%_vi`tmS4hqtjh6??x+^Jb(D|ifC{wMN)PA=E>?(t zPWQCr49U!xSr|jMMOm;F>ZlD{IclK;ykXzy>^uT;D{^XfuS#8V@Ak&?MD3Y&R1ViU QwEx_0I)a*MO3nMcADPlDQUCw| literal 0 HcmV?d00001 diff --git a/LinkBack.framework/Versions/A/Resources/English.lproj/Localized.strings b/LinkBack.framework/Versions/A/Resources/English.lproj/Localized.strings new file mode 100644 index 0000000..b50426d --- /dev/null +++ b/LinkBack.framework/Versions/A/Resources/English.lproj/Localized.strings @@ -0,0 +1,16 @@ +"_EditPattern" = "%@ in %@" ; +"_EditMultiple" = "Edit LinkBack Items" ; +"_EditNone" = "Edit LinkBack Item" ; +"_Edit" = "Edit" ; +"_Refresh" = "Refresh" ; + +/* Strings used for the LinkBack App Not Found panel */ +"_AppNotFoundTitle" = "The creator application \"%@\" could not be found." ; + +"_AppNotFoundMessageWithURL" = "Make sure this application is installed in your Applications folder to use it. If you do not have this software, you can choose \"Get Application\" to download it." ; + +"_AppNotFoundMessageNoURL" = "Make sure this application is installed in your Applications folder to use it." ; + +"_OK" = "OK" ; + +"_GetApplication" = "Get Application" ; diff --git a/LinkBack.framework/Versions/A/Resources/Info.plist b/LinkBack.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..1f11964 --- /dev/null +++ b/LinkBack.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + LinkBack + CFBundleIdentifier + org.linkbackproject.LinkBack + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 102 + + diff --git a/LinkBack.framework/Versions/Current b/LinkBack.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/LinkBack.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/SFDCanvas_LinkBack.h b/SFDCanvas_LinkBack.h index e3ee8e9..4ccd99d 100644 --- a/SFDCanvas_LinkBack.h +++ b/SFDCanvas_LinkBack.h @@ -3,27 +3,33 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import -#import #import +#import "SFDCanvas.h" + +@class SFDDrawableInfo; + @interface SFDCanvas (LinkBack) -// LinkBackClientDelegate +#pragma mark LinkBackClientDelegate protocol + - (void)linkBackDidClose:(LinkBack *)link; - (void)linkBackServerDidSendEdit:(LinkBack *)link; -// Managing LinkBacks +#pragma mark Managing LinkBacks + - (void)addActiveLink:(LinkBack *)link; - (void)removeActiveLink:(LinkBack *)link; -- (NSArray *)activeLinks; +- (NSMutableArray *)activeLinks; - (void)deallocLinks; - (NSNumber *)canvasKey; -// Starting a LinkBack +#pragma mark Starting a LinkBack + - (void)beginLinkBackForSelection:(id)sender; - (void)beginLinkBackForInfo:(SFDDrawableInfo *)info canvas:(SFDCanvas *)canvas; diff --git a/SFDCanvas_LinkBack.m b/SFDCanvas_LinkBack.m index 800aacd..f8a7281 100644 --- a/SFDCanvas_LinkBack.m +++ b/SFDCanvas_LinkBack.m @@ -3,61 +3,79 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import "SFDCanvas_LinkBack.h" +#import "SFDDrawableInfo_Linkback.h" +#import "SFDSelectionController_LinkBack.h" +#import "SFDAffineGeometry.h" -static NSMutableDictionary *activeLinksByCanvas = nil; +static NSMutableDictionary *_activeLinksByCanvas = nil; @implementation SFDCanvas (LinkBack) -+ (void)initialize { - activeLinksByCanvas = [[NSMutableDictionary alloc] initWithCapacity:128]; ++ (NSMutableDictionary *)_activeLinksByCanvas { + if (_activeLinksByCanvas == nil) { + _activeLinksByCanvas = [[NSMutableDictionary alloc] initWithCapacity:128]; + } + + return _activeLinksByCanvas; } +#pragma mark LinkBackClientDelegate protocol + - (void)linkBackDidClose:(LinkBack *)link { [self removeActiveLink:link]; } - (void)linkBackServerDidSendEdit:(LinkBack *)link { NSPasteboard *pasteboard = [link pasteboard]; - id newInfo, oldInfo = [link representedObject]; + id newInfo, oldInfo; + oldInfo = [link representedObject]; newInfo = [self makeInfoFromPasteboard:pasteboard withStyle:[oldInfo style]]; - //NSLog(@"[oldInfo style] = %@", [oldInfo style]); - id lbd = [newInfo linkBackData]; [newInfo setLinkBackData:nil]; [newInfo setLinkBackKey:[oldInfo linkBackKey]]; [newInfo setLinkBackData:lbd]; - - NSEnumerator *mutableProperties = [[newInfo mutableProperties] objectEnumerator]; - id property; - while (property = [mutableProperties nextObject]) { + NSEnumerator *properties = [[oldInfo styleProperties] objectEnumerator]; + id property, value; + + while (property = [properties nextObject]) { if ([oldInfo canInspectProperty:property]) { - [newInfo setValue:[oldInfo valueForProperty:property] forProperty:property]; - //NSLog(@"setValue:%@ forProperty:%@", [oldInfo valueForProperty:property], property); + value = [oldInfo valueForProperty:property]; + + if (value != nil && [newInfo canMutateProperty:property]) { + [newInfo setValue:value forProperty:property]; + } } } - id transform = [[oldInfo geometry] transform]; - NSSize natural = [[newInfo geometry] naturalSize]; + SFDAffineGeometry *oldGeometry = [oldInfo geometry]; + + NSSize oldNaturalSize = [oldInfo naturalSize]; + NSSize oldSize = [oldInfo size]; + + NSSize newNaturalSize = [newInfo naturalSize]; + NSSize newSize = NSMakeSize(newNaturalSize.width * oldSize.width / oldNaturalSize.width, newNaturalSize.height * oldSize.height / oldNaturalSize.height); - SFDAffineGeometry *geometry = [[SFDAffineGeometry alloc] initWithNaturalBounds:NSMakeRect(0, 0, natural.width, natural.height) transform:transform sizesLocked:NO aspectRatioLocked:YES]; + SFDAffineGeometry *newGeometry = [[SFDAffineGeometry alloc] initWithNaturalSize:newNaturalSize size:newSize sizesLocked:[oldGeometry sizesLocked] aspectRatioLocked:[oldGeometry aspectRatioLocked] position:[oldGeometry position] angleInDegrees:[oldGeometry angleInDegrees] horizontalFlip:[oldGeometry horizontalFlip] verticalFlip:[oldGeometry verticalFlip] shearXAngle:[oldGeometry shearXAngle] shearYAngle:[oldGeometry shearYAngle]]; - [newInfo setGeometry:geometry]; + [newInfo setGeometry:newGeometry]; + + id slide = [self performSelector:@selector(activeSlide)]; - id slide = [self activeSlide]; - [slide removeDrawable:oldInfo]; - [slide addDrawable:newInfo]; + [slide performSelector:@selector(removeDrawable:) withObject:oldInfo]; + [slide performSelector:@selector(addDrawable:) withObject:newInfo]; [link setRepresentedObject:newInfo]; } -// Managing LinkBacks +#pragma mark Managing LinkBacks + - (void)addActiveLink:(LinkBack *)link { if (link != nil) [[self activeLinks] addObject:link]; @@ -68,12 +86,12 @@ - (void)removeActiveLink:(LinkBack *)link { } - (NSMutableArray *)activeLinks { - NSMutableArray *links = [activeLinksByCanvas objectForKey:[self canvasKey]]; + NSMutableArray *links = [[[self class] _activeLinksByCanvas] objectForKey:[self canvasKey]]; if (links == nil) { links = [NSMutableArray arrayWithCapacity:8]; - [activeLinksByCanvas setObject:links forKey:[self canvasKey]]; + [[[self class] _activeLinksByCanvas] setObject:links forKey:[self canvasKey]]; } return links; @@ -86,14 +104,15 @@ - (void)deallocLinks { [links makeObjectsPerformSelector:@selector(closeLink)]; } - [activeLinksByCanvas removeObjectForKey:[self canvasKey]]; + [[[self class] _activeLinksByCanvas] removeObjectForKey:[self canvasKey]]; } - (NSNumber *)canvasKey { return [NSNumber numberWithUnsignedInt:(unsigned)self]; } -// Starting a LinkBack +#pragma mark Starting a LinkBack + - (void)beginLinkBackForSelection:(id)sender { NSArray *infos = [[self selectionController] selectedLinkBackInfos]; int idx = [infos count]; @@ -104,7 +123,7 @@ - (void)beginLinkBackForSelection:(id)sender { } - (void)beginLinkBackForInfo:(SFDDrawableInfo *)info canvas:(SFDCanvas *)canvas { - if ([info respondsToSelector:@selector(hasLinkBackData)] && [info hasLinkBackData]) { + if ([info respondsToSelector:@selector(hasLinkBackData)] && [info performSelector:@selector(hasLinkBackData)]) { id data = [info linkBackData]; NSString *sourceName = [[[info storage] document] displayName]; diff --git a/SFDDrawableInfo_LinkBack.h b/SFDDrawableInfo_LinkBack.h index 1c2c80b..7467cbe 100644 --- a/SFDDrawableInfo_LinkBack.h +++ b/SFDDrawableInfo_LinkBack.h @@ -3,25 +3,21 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import -#import -#import -#import -@interface SFDDrawableInfo_LinkBack : SFDDrawableInfo +#import "SFDDrawableInfo.h" -// SFArchiving -- (id)initWithXMLUnarchiver:(SFAXMLUnarchiver *)unarchiver node:(struct _xmlNode *)node; -- (void)encodeWithXMLArchiver:(SFAXMLArchiver *)archiver node:(struct _xmlNode *)node; +@class SFAXMLUnarchiver, SFAXMLArchiver; + +@interface SFDDrawableInfo (LinkBack) -// Link Back - (BOOL)hasLinkBackData; - (id)linkBackData; - (void)setLinkBackData:(id)data; - (NSString *)linkBackKey; - (void)setLinkBackKey:(NSString *)key; -@end +@end \ No newline at end of file diff --git a/SFDDrawableInfo_LinkBack.m b/SFDDrawableInfo_LinkBack.m index e115df8..06edcb2 100644 --- a/SFDDrawableInfo_LinkBack.m +++ b/SFDDrawableInfo_LinkBack.m @@ -3,80 +3,56 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/12/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import "SFDDrawableInfo_LinkBack.h" +#import -static NSMutableDictionary *linkBackDataByInfo = nil; -static NSMutableDictionary *linkBackKeysByInfo = nil; +@implementation SFDDrawableInfo (LinkBack) -@implementation SFDDrawableInfo_LinkBack +static NSMutableDictionary *_linkBackDataByInfo = nil; +static NSMutableDictionary *_linkBackKeysByInfo = nil; -+ (void)initialize { - linkBackDataByInfo = [[NSMutableDictionary alloc] initWithCapacity:256]; - linkBackKeysByInfo = [[NSMutableDictionary alloc] initWithCapacity:256]; -} - -- (void)dealloc { - [linkBackDataByInfo removeObjectForKey:[self linkBackKey]]; ++ (NSMutableDictionary *)_linkBackDataByInfo { + if (_linkBackDataByInfo == nil) { + _linkBackDataByInfo = [[NSMutableDictionary alloc] initWithCapacity:128]; + } - [super dealloc]; + return _linkBackDataByInfo; } -// SFArchiving -- (id)initWithXMLUnarchiver:(SFAXMLUnarchiver *)unarchiver node:(struct _xmlNode *)node { - if (self = [super initWithXMLUnarchiver:unarchiver node:node]) { - xmlNode *cur_node = node->children; - NSData *lbd = nil; - - for (cur_node = node->children; cur_node && (lbd == nil); cur_node = cur_node->next) { - if (cur_node->type == XML_ELEMENT_NODE && strcmp(cur_node->name, "LinkBackData") == 0) { - lbd = [unarchiver createObjectOfClass:[NSData class] fromNode:cur_node]; - } - } - - if (lbd != nil) { - [self setLinkBackData:[NSPropertyListSerialization propertyListFromData:lbd mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil]]; - } ++ (NSMutableDictionary *)_linkBackKeysByInfo { + if (_linkBackKeysByInfo == nil) { + _linkBackKeysByInfo = [[NSMutableDictionary alloc] initWithCapacity:128]; } - - return self; + + return _linkBackKeysByInfo; } -- (void)encodeWithXMLArchiver:(SFAXMLArchiver *)archiver node:(struct _xmlNode *)node { - [super encodeWithXMLArchiver:archiver node:node]; - - id lbd = [self linkBackData]; - - if (lbd != nil) { - NSData *data = [NSPropertyListSerialization dataFromPropertyList:lbd format:NSPropertyListBinaryFormat_v1_0 errorDescription:nil]; - - if (data != nil) { - [archiver encodeObject:data asChildOf:node withName:"LinkBackData" xmlNamespace:nil]; - } - } +- (void)deallocLinkBack { + [self setLinkBackData:nil]; + [self setLinkBackKey:nil]; } -// Link Back - (BOOL)hasLinkBackData { return ([self linkBackData] != nil); } - (id)linkBackData { - return [linkBackDataByInfo objectForKey:[self linkBackKey]]; + return [[[self class] _linkBackDataByInfo] objectForKey:[self linkBackKey]]; } - (void)setLinkBackData:(id)data { if (data != nil) { - [linkBackDataByInfo setObject:data forKey:[self linkBackKey]]; + [[[self class] _linkBackDataByInfo] setObject:data forKey:[self linkBackKey]]; } else { - [linkBackDataByInfo removeObjectForKey:[self linkBackKey]]; + [[[self class] _linkBackDataByInfo] removeObjectForKey:[self linkBackKey]]; } } - (NSString *)linkBackKey { - NSString *key = [linkBackKeysByInfo objectForKey:[NSString stringWithFormat:@"%u", (unsigned)self]]; + NSString *key = [[[self class] _linkBackKeysByInfo] objectForKey:[NSString stringWithFormat:@"%u", (unsigned)self]]; if (key == nil) { key = LinkBackUniqueItemKey(); @@ -88,9 +64,12 @@ - (NSString *)linkBackKey { } - (void)setLinkBackKey:(NSString *)key { - [linkBackKeysByInfo setObject:key forKey:[NSString stringWithFormat:@"%u", (unsigned)self]]; + if (key != nil) { + [[[self class] _linkBackKeysByInfo] setObject:key forKey:[NSString stringWithFormat:@"%u", (unsigned)self]]; + } else { + [[[self class] _linkBackKeysByInfo] removeObjectForKey:[NSString stringWithFormat:@"%u", (unsigned)self]]; + } + } - - @end diff --git a/SFDSelectionController_LinkBack.h b/SFDSelectionController_LinkBack.h index c513b33..47ab9b4 100644 --- a/SFDSelectionController_LinkBack.h +++ b/SFDSelectionController_LinkBack.h @@ -3,13 +3,14 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/30/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import -#import #import +#import "SFDSelectionController.h" + @interface SFDSelectionController (LinkBack) - (NSArray *)selectedLinkBackInfos; diff --git a/SFDSelectionController_LinkBack.m b/SFDSelectionController_LinkBack.m index 09a0d9b..41bc8aa 100644 --- a/SFDSelectionController_LinkBack.m +++ b/SFDSelectionController_LinkBack.m @@ -3,11 +3,11 @@ // K2LinkBackSupport // // Created by King Chung Huang on 3/30/05. -// Copyright 2005 King Chung Huang. All rights reserved. +// Copyright 2005, 2007 King Chung Huang. All rights reserved. // #import "SFDSelectionController_LinkBack.h" - +#import "SFDDrawableInfo_LinkBack.h" @implementation SFDSelectionController (LinkBack)