From: glenlow Date: Mon, 4 Feb 2008 13:30:08 +0000 (+0000) Subject: basic viewer app for Mac OS X X-Git-Tag: LAST_LIBGRAPH~32^2~4776 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7130562effcb5c5ffdac1f3cc6270fb509499623;p=graphviz basic viewer app for Mac OS X --- diff --git a/macosx/English.lproj/MainMenu.xib b/macosx/English.lproj/MainMenu.xib new file mode 100644 index 000000000..09d23dd0b --- /dev/null +++ b/macosx/English.lproj/MainMenu.xib @@ -0,0 +1,2345 @@ + + + + 1050 + 9B18 + 629 + 949 + 343.00 + + YES + + + + YES + com.apple.InterfaceBuilderKit + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + NSApplication + + + FirstResponder + + + + + + AMainMenu + + YES + + + Graphviz + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + + NSMenuMixedState + + submenuAction: + + + + YES + + + About Graphviz + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + UHJlZmVyZW5jZXPigKY + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide Graphviz + h + 1048576 + 2147483647 + + + + + + Hide Others + + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit Graphviz + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + New + n + 1048576 + 2147483647 + + + + + + T3BlbuKApg + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + U2F2ZSBBc+KApg + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + UHJpbnTigKY + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + RmluZOKApg + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + U2hvdyBTcGVsbGluZ+KApg + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Smart Copy/Paste + + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + + 1048576 + 2147483647 + + + 2 + + + + Smart Links + + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Show Colors + C + 1179648 + 2147483647 + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Show Toolbar + + 1572864 + 2147483647 + + + + + + Q3VzdG9taXplIFRvb2xiYXLigKY + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + + + YES + + + Graphviz Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + orderFrontColorPanel: + + + + 361 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + terminate: + + + + 369 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 371 + + + + openDocument: + + + + 372 + + + + printDocument: + + + + 373 + + + + + YES + + 0 + + YES + + + + + + -2 + + + RmlsZSdzIE93bmVyA + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 299 + + + YES + + + + + + 300 + + + YES + + + + + + + 344 + + + + + 345 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 103.ImportedFromIB2 + 106.IBPluginDependency + 106.ImportedFromIB2 + 106.editorWindowContentRectSynchronizationRect + 111.IBPluginDependency + 111.ImportedFromIB2 + 112.IBPluginDependency + 112.ImportedFromIB2 + 124.IBPluginDependency + 124.ImportedFromIB2 + 125.IBPluginDependency + 125.ImportedFromIB2 + 125.editorWindowContentRectSynchronizationRect + 126.IBPluginDependency + 126.ImportedFromIB2 + 129.IBPluginDependency + 129.ImportedFromIB2 + 130.IBPluginDependency + 130.ImportedFromIB2 + 130.editorWindowContentRectSynchronizationRect + 131.IBPluginDependency + 131.ImportedFromIB2 + 134.IBPluginDependency + 134.ImportedFromIB2 + 136.IBPluginDependency + 136.ImportedFromIB2 + 143.IBPluginDependency + 143.ImportedFromIB2 + 144.IBPluginDependency + 144.ImportedFromIB2 + 145.IBPluginDependency + 145.ImportedFromIB2 + 149.IBPluginDependency + 149.ImportedFromIB2 + 150.IBPluginDependency + 150.ImportedFromIB2 + 19.IBPluginDependency + 19.ImportedFromIB2 + 195.IBPluginDependency + 195.ImportedFromIB2 + 196.IBPluginDependency + 196.ImportedFromIB2 + 197.IBPluginDependency + 197.ImportedFromIB2 + 198.IBPluginDependency + 198.ImportedFromIB2 + 199.IBPluginDependency + 199.ImportedFromIB2 + 200.IBPluginDependency + 200.ImportedFromIB2 + 200.editorWindowContentRectSynchronizationRect + 201.IBPluginDependency + 201.ImportedFromIB2 + 202.IBPluginDependency + 202.ImportedFromIB2 + 203.IBPluginDependency + 203.ImportedFromIB2 + 204.IBPluginDependency + 204.ImportedFromIB2 + 205.IBPluginDependency + 205.ImportedFromIB2 + 205.editorWindowContentRectSynchronizationRect + 206.IBPluginDependency + 206.ImportedFromIB2 + 207.IBPluginDependency + 207.ImportedFromIB2 + 208.IBPluginDependency + 208.ImportedFromIB2 + 209.IBPluginDependency + 209.ImportedFromIB2 + 210.IBPluginDependency + 210.ImportedFromIB2 + 211.IBPluginDependency + 211.ImportedFromIB2 + 212.IBPluginDependency + 212.ImportedFromIB2 + 212.editorWindowContentRectSynchronizationRect + 213.IBPluginDependency + 213.ImportedFromIB2 + 214.IBPluginDependency + 214.ImportedFromIB2 + 215.IBPluginDependency + 215.ImportedFromIB2 + 216.IBPluginDependency + 216.ImportedFromIB2 + 217.IBPluginDependency + 217.ImportedFromIB2 + 218.IBPluginDependency + 218.ImportedFromIB2 + 219.IBPluginDependency + 219.ImportedFromIB2 + 220.IBPluginDependency + 220.ImportedFromIB2 + 220.editorWindowContentRectSynchronizationRect + 221.IBPluginDependency + 221.ImportedFromIB2 + 23.IBPluginDependency + 23.ImportedFromIB2 + 236.IBPluginDependency + 236.ImportedFromIB2 + 239.IBPluginDependency + 239.ImportedFromIB2 + 24.IBPluginDependency + 24.ImportedFromIB2 + 24.editorWindowContentRectSynchronizationRect + 29.IBPluginDependency + 29.ImportedFromIB2 + 29.WindowOrigin + 29.editorWindowContentRectSynchronizationRect + 295.IBPluginDependency + 296.IBPluginDependency + 296.editorWindowContentRectSynchronizationRect + 297.IBPluginDependency + 298.IBPluginDependency + 299.IBPluginDependency + 300.IBPluginDependency + 300.editorWindowContentRectSynchronizationRect + 344.IBPluginDependency + 345.IBPluginDependency + 346.IBPluginDependency + 346.ImportedFromIB2 + 348.IBPluginDependency + 348.ImportedFromIB2 + 349.IBPluginDependency + 349.ImportedFromIB2 + 349.editorWindowContentRectSynchronizationRect + 350.IBPluginDependency + 350.ImportedFromIB2 + 351.IBPluginDependency + 351.ImportedFromIB2 + 354.IBPluginDependency + 354.ImportedFromIB2 + 5.IBPluginDependency + 5.ImportedFromIB2 + 56.IBPluginDependency + 56.ImportedFromIB2 + 57.IBPluginDependency + 57.ImportedFromIB2 + 57.editorWindowContentRectSynchronizationRect + 58.IBPluginDependency + 58.ImportedFromIB2 + 72.IBPluginDependency + 72.ImportedFromIB2 + 73.IBPluginDependency + 73.ImportedFromIB2 + 74.IBPluginDependency + 74.ImportedFromIB2 + 75.IBPluginDependency + 75.ImportedFromIB2 + 77.IBPluginDependency + 77.ImportedFromIB2 + 78.IBPluginDependency + 78.ImportedFromIB2 + 79.IBPluginDependency + 79.ImportedFromIB2 + 80.IBPluginDependency + 80.ImportedFromIB2 + 81.IBPluginDependency + 81.ImportedFromIB2 + 81.editorWindowContentRectSynchronizationRect + 82.IBPluginDependency + 82.ImportedFromIB2 + 83.IBPluginDependency + 83.ImportedFromIB2 + 92.IBPluginDependency + 92.ImportedFromIB2 + + + YES + + + + + + + + {{379, 954}, {170, 23}} + + + + + + + + + {{522, 812}, {146, 23}} + + + + + + + {{436, 809}, {64, 6}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{608, 612}, {275, 83}} + + + + + + + + + + + {{148, 734}, {243, 243}} + + + + + + + + + + + + + + + {{608, 612}, {167, 43}} + + + + + + + + + + + + + + + + + {{608, 612}, {241, 103}} + + + + + + + + + + + {{308, 904}, {197, 73}} + + + {74, 862} + {{11, 977}, {429, 20}} + + + {{258, 934}, {234, 43}} + + + + + {{192, 934}, {176, 43}} + + + + + + + + + {{608, 612}, {215, 63}} + + + + + + + + + + + + + {{23, 794}, {199, 183}} + + + + + + + + + + + + + + + + + + + + + {{106, 774}, {199, 203}} + + + + + + + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 373 + + + + YES + + + 0 + ../../graphviz.xcodeproj + 3 + + YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA +AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxECAAALAAwAMQA1ADYAPAA9 +AEEARQBvAHUAhQCKAIsAjACRAJIAkwCWAJoAmwCeAJ8AowCnAK4AsgCzALQAtQC5AMMAxwDIAMkAygDO +ANUA2wDcAN0A4QDoAOkA6gDrAO8A9gD6APsA/AEAAQcBCwEMAQ0BDgESARkBGgEbARwBIAEoAS0BLgEv +ATABNAE7AT8BQAFBAUUBTAFNAU4BTwFTAVoBWwFcAV0BYQFoAWkBagFrAW8BdgF3AXgBfAGDAYcBiAGJ +AYoBjgGVAZYBlwGYAZwBowGkAaUBpgGqAbEBsgGzAbQBuAG/AcABwQHHAc4BzwHQAdQB2wHcAd0B3gHi +AekB6gHrAewB8AH3AfsB/AH9AgECCAIJAgoCDgIVAhYCFwIbAiICIwIkAiUCKQIwAjECMgI2Aj0CPgI/ +AkMCSwJMAk0CTgJSAlkCWgJbAlwCYAJnAmgCaQJtAnQCdQJ2AncCewKCAoMChAKFAokCkAKUApUClgKX +ApsCogKjAqQCpQKpArECsgKzArQCuALBAsICwwLEAsgCzwLUAtUC1gLaAuEC4gLjAuQC6AM8A0cDTANN +A04DUgNUA1UDXwNoA00DaQN3A4IDiQOKA4sDlAOdA00DngOjA6YDpwOwA7kDugPDA00DxAPSA9sDTQPc +A+AD4QPqA/MD/ANNA/0EDQQWBB8EKANNBCkEMQQ4BDkEQARBBEkESgRLBFQDTQRVBFwEZQNNBGYEbAR1 +A00EdgR7BIQDTQSFBIoEkQSSBJsDTQScBKEEqgNNBKsEsgS7BLwEvQTABMIFFgVrBcAFwQXCBcMFxAXF +BcYFxwXIBckFygXLBcwFzQXOBc8F0AXRBdIF0wXUBdUF1gXXBdgF2QXaBdsF3AXdBd4F3wXgBeEF4gXj +BeQF5QXmBecF6AXpBeoF6wXsBe0F7gXvBfAF8QXyBfMF9AX1BfYF9wX4BfkF+gX7BfwF/QX+Bf8GAAYB +BgIGAwYEBgUGBgYHBggGCQYKBgsGDAYNBg4GDwYQBhEGEgYVBhgGlAcQBxEHEgcTBxQHFQcWBxcHGAcZ +BxoHGwccBx0HHgcfByAHIQciByMHJAclByYHJwcoBykHKgcrBywHLQcuBy8HMAcxBzIHMwc0BzUHNgc3 +BzgHOQc6BzsHPAc9Bz4HPwdAB0EHQgdDB0QHRQdGB0cHSAdJB0oHSwdMB00HTgdPB1AHUQdSB1MHVAdV +B1YHVwdYB1kHWgdbB1wHXQdeB18HYAdhB2IHYwdkB2UHZgdnB2gHaQdqB2sHbAdtB24HbwdwB3EHcgdz +B3QHdQd2B3cHeAd5B3oHewd8B30Hfgd/B4AHgQeCB4MHhAeFB4YHhweIB4kHjAePB5JVJG51bGzfEBIA +DQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoA +KwAsAC0ALgAvADBWTlNSb290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZ +TlNBY2Nlc3NpYmlsaXR5T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3 +b3JrXU5TQ2xhc3Nlc0tleXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5 +Q29ubmVjdG9yc11OU0ZvbnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVl +c18QF05TQWNjZXNzaWJpbGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEB/4DUgQGA +gQH+gAiBASuABYEBf4EBgYEBLIEB/IAAgAaBASqBAf0RAXeBAYLSAA4AMgAzADRbTlNDbGFzc05hbWWA +BIADXU5TQXBwbGljYXRpb27SADcAOAA5ADpYJGNsYXNzZXNaJGNsYXNzbmFtZaIAOgA7Xk5TQ3VzdG9t +T2JqZWN0WE5TT2JqZWN0XxAQSUJDb2NvYUZyYW1ld29ya9IADgA+AD8AQFpOUy5vYmplY3RzgAeg0gA3 +ADgAQgBDowBDAEQAO1xOU011dGFibGVTZXRVTlNTZXTSAA4APgBGAEeA068QJwBIAEkASgBLAEwATQBO +AE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBs +AG0AboAJgBeAHYAjgCiALYAygDiAPYBDgEiATYBSgFeAW4BhgGaAa4BwgHSAeIB9gIKAh4CLgI+AlICY +gJyAoYCmgKqAr4C0gLqAv4DEgMmAztMADgBwAHEAcgBzAHRYTlNTb3VyY2VXTlNMYWJlbIAWgAqAFdgA +DgB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMAhFdOU1RpdGxlXxARTlNLZXlFcXVpdk1vZE1hc2ta +TlNLZXlFcXVpdl1OU01uZW1vbmljTG9jWU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51gBSADBIA +EAAAgA0Sf////4AOgBKAC9MADgB2AIYAhwCIAIlbTlNNZW51SXRlbXOA2oEBDIEBDl8QG0NoZWNrIEdy +YW1tYXIgV2l0aCBTcGVsbGluZ1DTAA4AMgCNAI4AjwCQXk5TUmVzb3VyY2VOYW1lgBGAD4AQV05TSW1h +Z2VfEA9OU01lbnVDaGVja21hcmvSADcAOACUAJWiAJUAO18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgCN +AI4AjwCZgBGAD4ATXxAQTlNNZW51TWl4ZWRTdGF0ZdIANwA4AJwAnaIAnQA7Wk5TTWVudUl0ZW1fEBZ0 +b2dnbGVHcmFtbWFyQ2hlY2tpbmc60gA3ADgAoAChowChAKIAO18QFU5TTmliQ29udHJvbENvbm5lY3Rv +cl5OU05pYkNvbm5lY3RvctMADgBwAHEAcgClAKaAFoAYgBzYAA4AdgB3AHgAeQB6AHsAfAB9AKkAfwCq +AIEAggCDAK2AFIAagBuADoASgBnTAA4AdgCGAIcAsACxgNqA+4D9VFVuZG9RelV1bmRvOtMADgBwAHEA +cgC3ALiAFoAegCLZAA4AdgB3AHgAeQB6AHsAfAC6AH0AvAC9AL4AgQCCAIMAwQDCVU5TVGFngBSAIBIA +EgAAgCGADoASgB8QA9MADgB2AIYAhwDFAMaA2oEBEIEBEltTbWFydCBMaW5rc1FHXxAddG9nZ2xlQXV0 +b21hdGljTGlua0RldGVjdGlvbjrTAA4AcABxAHIAzADNgBaAJIAn2AAOAHYAdwB4AHkAegB7AHwAfQDQ +AH8AgACBAIIAgwDUgBSAJoANgA6AEoAl1AAOAHYA1gCGAIcA2ADZANpWTlNOYW1lgNqBASKBASaBASRf +EBJCcmluZyBBbGwgdG8gRnJvbnRfEA9hcnJhbmdlSW5Gcm9udDrTAA4AcABxAHIA3wDggBaAKYAs2AAO +AHYAdwB4AHkAegB7AHwAfQDjAH8A5ACBAIIAgwCtgBSAKoArgA6AEoAZWlNlbGVjdCBBbGxRYVpzZWxl +Y3RBbGw60wAOAHAAcQByAO0A7oAWgC6AMdgADgB2AHcAeAB5AHoAewB8AH0A8QB/AIAAgQCCAIMA9YAU +gDCADYAOgBKAL9MADgB2AIYAhwD4APmA2oEBHoEBIG8QEgBDAHUAcwB0AG8AbQBpAHoAZQAgAFQAbwBv +AGwAYgBhAHIgJl8QH3J1blRvb2xiYXJDdXN0b21pemF0aW9uUGFsZXR0ZTrTAA4AcABxAHIA/gD/gBaA +M4A32AAOAHYAdwB4AHkAegB7AHwAfQECAL0BAwCBAIIAgwEGgBSANYA2gA6AEoA00wAOAHYAhgCHAQkB +CoDagQEYgQEaW1Nob3cgQ29sb3JzUUNfEBVvcmRlckZyb250Q29sb3JQYW5lbDrTAA4AcABxAHIBEAER +gBaAOYA82AAOAHYAdwB4AHkAegB7AHwAfQEUAL0BFQCBAIIAgwCtgBSAOoA7gA6AEoAZVFJlZG9RWlVy +ZWRvOtMADgBwAHEAcgEeAR+AFoA+gELYAA4AdgB3AHgAeQB6AHsAfAB9ASIBIwEkAIEAggCDASeAFIBA +EgAYAACAQYAOgBKAP9QADgB2ANYAhgCHASoBKwEsgNqA3oDugOBbSGlkZSBPdGhlcnNRaF8QFmhpZGVP +dGhlckFwcGxpY2F0aW9uczrTAA4AcABxAHIBMgEzgBaARIBH1wAOAHYAeAB5AHoAewB8AH0BNgCAAIEA +ggCDATqAFIBGgA2ADoASgEXTAA4AdgCGAIcBPQE+gNqA8IDyXxAPUmV2ZXJ0IHRvIFNhdmVkXxAWcmV2 +ZXJ0RG9jdW1lbnRUb1NhdmVkOtMADgBwAHEAcgFDAUSAFoBJgEzYAA4AdgB3AHgAeQB6AHsAfAB9AUcB +IwFIAIEAggCDAPWAFIBKgEuADoASgC9cU2hvdyBUb29sYmFyUXRfEBN0b2dnbGVUb29sYmFyU2hvd246 +0wAOAHAAcQByAVEBUoAWgE6AUdgADgB2AHcAeAB5AHoAewB8AH0BVQB/AVYAgQCCAIMAhIAUgE+AUIAO +gBKAC24AUwBoAG8AdwAgAFMAcABlAGwAbABpAG4AZyAmUTpfEA9zaG93R3Vlc3NQYW5lbDrTAA4AcABx +AHIBXwFggBaAU4BW2AAOAHYAdwB4AHkAegB7AHwAfQFjAH8BZACBAIIAgwE6gBSAVIBVgA6AEoBFVUNs +b3NlUXddcGVyZm9ybUNsb3NlOtMADgBwAHEAcgFtAW6AFoBYgFrYAA4AdgB3AHgAeQB6AHsAfAB9AXEA +fwCAAIEAggCDAK2AFIBZgA2ADoASgBlWRGVsZXRlV2RlbGV0ZTrTAA4AcABxAHIBegF7gBaAXIBg2AAO +AHYAdwB4AHkAegB7AHwAfQF+AH8BfwCBAIIAgwGCgBSAXoBfgA6AEoBd0wAOAHYAhgCHAYUBhoDagQEB +gQEDXxARSnVtcCB0byBTZWxlY3Rpb25Ral8QHWNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE60wAO +AHAAcQByAYwBjYAWgGKAZdgADgB2AHcAeAB5AHoAewB8AH0BkAB/AZEAgQCCAIMAhIAUgGOAZIAOgBKA +C15DaGVjayBTcGVsbGluZ1E7XmNoZWNrU3BlbGxpbmc60wAOAHAAcQByAZoBm4AWgGeAatgADgB2AHcA +eAB5AHoAewB8AH0BngB/AZ8AgQCCAIMBJ4AUgGiAaYAOgBKAP11RdWl0IEdyYXBodml6UXFadGVybWlu +YXRlOtMADgBwAHEAcgGoAamAFoBsgG/YAA4AdgB3AHgAeQB6AHsAfAB9AawAfwGtAIEAggCDATqAFIBt +gG6ADoASgEVTTmV3UW5cbmV3RG9jdW1lbnQ60wAOAHAAcQByAbYBt4AWgHGAc9gADgB2AHcAeAB5AHoA +ewB8AH0BugB/ASQAgQCCAIMBJ4AUgHKAQYAOgBKAP11IaWRlIEdyYXBodml6VWhpZGU61AAOAcIAcABx +AHIAHwHFAcZdTlNEZXN0aW5hdGlvboAWgAKAdYB31wAOAHYAeAB5AHoAewB8AH0ByQCAAIEAggCDASeA +FIB2gA2ADoASgD9eQWJvdXQgR3JhcGh2aXpfEB1vcmRlckZyb250U3RhbmRhcmRBYm91dFBhbmVsOtMA +DgBwAHEAcgHSAdOAFoB5gHzYAA4AdgB3AHgAeQB6AHsAfAB9AdYAfwHXAIEAggCDATqAFIB6gHuADoAS +gEVmAFAAcgBpAG4AdCAmUXBecHJpbnREb2N1bWVudDrTAA4AcABxAHIB4AHhgBaAfoCB2AAOAHYAdwB4 +AHkAegB7AHwAfQHkAH8B5QCBAIIAgwCtgBSAf4CAgA6AEoAZU0N1dFF4VGN1dDrTAA4AcABxAHIB7gHv +gBaAg4CG2AAOAHYAdwB4AHkAegB7AHwAfQHyAH8AgACBAIIAgwH2gBSAhYANgA6AEoCE0wAOAHYAhgCH +AfkB+oDagQEUgQEWXlN0YXJ0IFNwZWFraW5nXnN0YXJ0U3BlYWtpbmc60wAOAHAAcQByAf8CAIAWgIiA +itgADgB2AHcAeAB5AHoAewB8AH0CAwB/AIAAgQCCAIMBJ4AUgImADYAOgBKAP1hTaG93IEFsbF8QFnVu +aGlkZUFsbEFwcGxpY2F0aW9uczrTAA4AcABxAHICDAINgBaAjICO2AAOAHYAdwB4AHkAegB7AHwAfQIQ +AH8AgACBAIIAgwCEgBSAjYANgA6AEoALXxAbQ2hlY2sgU3BlbGxpbmcgV2hpbGUgVHlwaW5nXxAedG9n +Z2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmc60wAOAHAAcQByAhkCGoAWgJCAk9gADgB2AHcAeAB5AHoA +ewB8AH0CHQB/Ah4AgQCCAIMA1IAUgJGAkoAOgBKAJVhNaW5pbWl6ZVFtXxATcGVyZm9ybU1pbmlhdHVy +aXplOtMADgBwAHEAcgInAiiAFoCVgJfYAA4AdgB3AHgAeQB6AHsAfAB9AisAfwCAAIEAggCDAfaAFICW +gA2ADoASgIRdU3RvcCBTcGVha2luZ11zdG9wU3BlYWtpbmc60wAOAHAAcQByAjQCNYAWgJmAm9gADgB2 +AHcAeAB5AHoAewB8AH0COAB/AIAAgQCCAIMA1IAUgJqADYAOgBKAJVRab29tXHBlcmZvcm1ab29tOtMA +DgBwAHEAcgJBAkKAFoCdgKDZAA4AdgB3AHgAeQB6AHsAfAC6AH0CRQB/AkYAgQCCAIMBggJKgBSAnoCf +gA6AEoBdEAFlAEYAaQBuAGQgJlFmXxAXcGVyZm9ybUZpbmRQYW5lbEFjdGlvbjrTAA4AcABxAHICUAJR +gBaAooCl2AAOAHYAdwB4AHkAegB7AHwAfQJUAH8CVQCBAIIAgwE6gBSAo4CkgA6AEoBFVFNhdmVRc11z +YXZlRG9jdW1lbnQ60wAOAHAAcQByAl4CX4AWgKeAqdkADgB2AHcAeAB5AHoAewB8ALoAfQJiAH8CRgCB +AIIAgwDBAkqAFICogJ+ADoASgB9fEBBTbWFydCBDb3B5L1Bhc3RlXxAYdG9nZ2xlU21hcnRJbnNlcnRE +ZWxldGU60wAOAHAAcQByAmsCbIAWgKuArtgADgB2AHcAeAB5AHoAewB8AH0CbwC9AnAAgQCCAIMBOoAU +gKyArYAOgBKARWgAUwBhAHYAZQAgAEEAcyAmUVNfEA9zYXZlRG9jdW1lbnRBczrTAA4AcABxAHICeQJ6 +gBaAsICz2AAOAHYAdwB4AHkAegB7AHwAfQJ9AH8CfgCBAIIAgwCtgBSAsYCygA6AEoAZVENvcHlRY1Vj +b3B5OtMADgBwAHEAcgKHAoiAFoC1gLnYAA4AdgB3AHgAeQB6AHsAfAB9AosAfwKMAIEAggCDAo+AFIC3 +gLiADoASgLbTAA4AdgCGAIcCkgKTgNqA14DZXUdyYXBodml6IEhlbHBRP1lzaG93SGVscDrTAA4AcABx +AHICmQKagBaAu4C+2AAOAHYAdwB4AHkAegB7AHwAfQKdAH8CngCBAIIAgwE6gBSAvIC9gA6AEoBFZQBP +AHAAZQBuICZRb11vcGVuRG9jdW1lbnQ60wAOAHAAcQByAqcCqIAWgMCAw9kADgB2AHcAeAB5AHoAewB8 +ALoAfQKrAH8CrACBAIIAgwDBArCAFIDBgMKADoASgB8QAlxTbWFydCBRdW90ZXNRZ18QIXRvZ2dsZUF1 +dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOtMADgBwAHEAcgK2AreAFoDFgMjZAA4CuQB2AHcAeAB5AHoA +ewB8AH0AgAK8AL0CvQCBAIIAgwE6WU5TVG9vbFRpcIAUgA2AxoDHgA6AEoBFXVBhZ2UgU2V0dXAuLi5R +UF5ydW5QYWdlTGF5b3V0OtMADgBwAHEAcgLGAseAFoDKgM3YAA4AdgB3AHgAeQB6AHsAfAB9AsoAfwCA +AIEAggCDAs6AFIDMgA2ADoASgMvUAA4AdgDWAIYAhwLRAtIC04DagPSA94D2WkNsZWFyIE1lbnVfEBVj +bGVhclJlY2VudERvY3VtZW50czrTAA4AcABxAHIC2ALZgBaAz4DS2AAOAHYAdwB4AHkAegB7AHwAfQLc +AH8C3QCBAIIAgwCtgBSA0IDRgA6AEoAZVVBhc3RlUXZWcGFzdGU60gA3ADgC5QLmowLmAucAO15OU011 +dGFibGVBcnJheVdOU0FycmF50gAOAD4C6QLqgQEprxBRAusB/wKZAbYBmgD+AvEC8gJ5AgwC9QL2AqcC ++AHFAsYC+wHgAScC/gL/AW0A3wMCAV8BegDMAwYDBwMIAs4BjAMLAHMBqAEeAw8BggD1AfYDEwMUARAD +FgEGAToBMgMaAicCtgKHAx4DHwC3AKUB7gJrAdIC2AFRAycCQQMpAIQCUAFDANQDLgCtAjQDMQIZAzMA +wQM1Ao8DNwM4AzkCXgDtgNWAiIC7gHGAZ4AzgNaA5YCwgIyA+YEBKIDAgQEhgHWAyoEBE4B+gD+A4oEB +JYBYgCmBAQ+AU4BcgCSA7YD/gQEIgMuAYoEBF4AKgGyAPoEBHYBdgC+AhIDzgOGAOYD4gDSARYBEgP6A +lYDFgLWA7IEBBoAegBiAg4CrgHmAz4BOgPqAnYDpgAuAooBJgCWA3YAZgJmA74CQgQEEgB+BARuAtoDm +gQEAgQELgKeALtoADgM9AHYAdwB4AHkAegB7AHwDPgB9Ao8CkgB/AIAAgQCCAIMC8QNGWU5TU3VibWVu +dVhOU0FjdGlvboAUgLaA14ANgA6AEoDWgNjUAA4AdgDWAIYAhwNJA0oDS4DagNuBASeA3FRIZWxwXnN1 +Ym1lbnVBY3Rpb2460gAOAD4ARgNQgNOhAoeAtdIANwA4A1MAfKIAfAA7WUFNYWluTWVuddIADgA+AEYD +V4DTpwMuAzEDJwMLAw8C+ALrgN2A74D6gQEXgQEdgQEhgNXaAA4DPQB2AHcAeAB5AHoAewB8Az4AfQEn +ASoAfwCAAIEAggCDAvEDZ4AUgD+A3oANgA6AEoDWgN9YR3JhcGh2aXrSAA4APgBGA2uA06sBxQMUAv4C +8gM3Ax4BtgEeAf8DBgGagHWA4YDigOWA5oDsgHGAPoCIgO2AZ9oADgB2AHcDeAB4A3kAeQB6AHsAfAB9 +AIAAfwN8AIADfACBAIIAgwEnXU5TSXNTZXBhcmF0b3JcTlNJc0Rpc2FibGVkgBSADQmADQmADoASgD/Y +AA4AdgB3AHgAeQB6AHsAfAB9A4QAfwOFAIEAggCDASeAFIDjgOSADoASgD9sAFAAcgBlAGYAZQByAGUA +bgBjAGUAcyAmUSzaAA4AdgB3A3gAeAN5AHkAegB7AHwAfQCAAH8DfACAA3wAgQCCAIMBJ4AUgA0JgA0J +gA6AEoA/2gAOAz0AdgB3AHgAeQB6AHsAfAM+AH0DKQOXAH8AgACBAIIAgwEnA5yAFIDpgOeADYAOgBKA +P4DoWFNlcnZpY2Vz1AAOAHYA1gCGAIcDlwOhA6KA2oDngOuA6tIADgA+AEYDpYDToF8QD19OU1NlcnZp +Y2VzTWVuddoADgB2AHcDeAB4A3kAeQB6AHsAfAB9AIAAfwN8AIADfACBAIIAgwEngBSADQmADQmADoAS +gD/aAA4AdgB3A3gAeAN5AHkAegB7AHwAfQCAAH8DfACAA3wAgQCCAIMBJ4AUgA0JgA0JgA6AEoA/XF9O +U0FwcGxlTWVuddoADgM9AHYAdwB4AHkAegB7AHwDPgB9AToBPQB/AIAAgQCCAIMC8QPCgBSARYDwgA2A +DoASgNaA8VRGaWxl0gAOAD4ARgPGgNOrAagCmQMTAxYBXwJQAmsBMgL1ArYB0oBsgLuA84D4gFOAooCr +gESA+YDFgHnaAA4DPQB2AHcAeAB5AHoAewB8Az4AfQLOAtEAfwCAAIEAggCDAToD2oAUgMuA9IANgA6A +EoBFgPVbT3BlbiBSZWNlbnTSAA4APgBGA96A06ECxoDKXxAWX05TUmVjZW50RG9jdW1lbnRzTWVuddoA +DgB2AHcDeAB4A3kAeQB6AHsAfAB9AIAAfwN8AIADfACBAIIAgwE6gBSADQmADQmADoASgEXaAA4AdgB3 +A3gAeAN5AHkAegB7AHwAfQCAAH8DfACAA3wAgQCCAIMBOoAUgA0JgA0JgA6AEoBF2gAOAz0AdgB3AHgA +eQB6AHsAfAM+AH0ArQCwAH8AgACBAIIAgwLxA/uAFIAZgPuADYAOgBKA1oD8VEVkaXTSAA4APgBGA/+A +060ApQEQAxoB4AJ5AtgBbQDfAwcDOAM5AwIC+4AYgDmA/oB+gLCAz4BYgCmA/4EBAIEBC4EBD4EBE9oA +DgB2AHcDeAB4A3kAeQB6AHsAfAB9AIAAfwN8AIADfACBAIIAgwCtgBSADQmADQmADoASgBnaAA4AdgB3 +A3gAeAN5AHkAegB7AHwAfQCAAH8DfACAA3wAgQCCAIMArYAUgA0JgA0JgA6AEoAZ2gAOAz0AdgB3AHgA +eQB6AHsAfAM+AH0BggGFAH8AgACBAIIAgwCtBCeAFIBdgQEBgA2ADoASgBmBAQJURmluZNIADgA+AEYE +K4DTpQJBAzMDHwMIAXqAnYEBBIEBBoEBCIBc2QAOAHYAdwB4AHkAegB7AHwAugB9BDMAfwKsAIEAggCD +AYICsIAUgQEFgMKADoASgF1ZRmluZCBOZXh02QAOAHYAdwB4AHkAegB7AHwAugB9BDsAvQC+AIEAggCD +AYIAwoAUgQEHgCGADoASgF1dRmluZCBQcmV2aW91c9kADgB2AHcAeAB5AHoAewB8ALoAfQRDAH8ERACB +AIIAgwGCBEiAFIEBCYEBCoAOgBKAXRAHXxAWVXNlIFNlbGVjdGlvbiBmb3IgRmluZFFl2gAOAz0AdgB3 +AHgAeQB6AHsAfAM+AH0AhACIAH8AgACBAIIAgwCtBFOAFIALgQEMgA2ADoASgBmBAQ1fEBRTcGVsbGlu +ZyBhbmQgR3JhbW1hctIADgA+AEYEV4DTpAFRAYwCDABzgE6AYoCMgAraAA4DPQB2AHcAeAB5AHoAewB8 +Az4AfQDBAMUAfwCAAIEAggCDAK0EZIAUgB+BARCADYAOgBKAGYEBEV1TdWJzdGl0dXRpb25z0gAOAD4A +RgRogNOjAl4CpwC3gKeAwIAe2gAOAz0AdgB3AHgAeQB6AHsAfAM+AH0B9gH5AH8AgACBAIIAgwCtBHSA +FICEgQEUgA2ADoASgBmBARVWU3BlZWNo0gAOAD4ARgR4gNOiAe4CJ4CDgJXaAA4DPQB2AHcAeAB5AHoA +ewB8Az4AfQEGAQkAfwCAAIEAggCDAvEEg4AUgDSBARiADYAOgBKA1oEBGVZGb3JtYXTSAA4APgBGBIeA +06IDNQD+gQEbgDPYAA4AdgB3AHgAeQB6AHsAfAB9BIwAfwFIAIEAggCDAQaAFIEBHIBLgA6AEoA0WlNo +b3cgRm9udHPaAA4DPQB2AHcAeAB5AHoAewB8Az4AfQD1APgAfwCAAIEAggCDAvEEmoAUgC+BAR6ADYAO +gBKA1oEBH1RWaWV30gAOAD4ARgSegNOiAUMA7YBJgC7aAA4DPQB2AHcAeAB5AHoAewB8Az4AfQDUANgA +fwCAAIEAggCDAvEEqYAUgCWBASKADYAOgBKA1oEBI1ZXaW5kb3fSAA4APgBGBK2A06QCGQI0Av8AzICQ +gJmBASWAJNoADgB2AHcDeAB4A3kAeQB6AHsAfAB9AIAAfwN8AIADfACBAIIAgwDUgBSADQmADQmADoAS +gCVeX05TV2luZG93c01lbnVbX05TTWFpbk1lbnXSAA4AMgAzADSABIAD0gA3ADgEwQLnogLnADvSAA4A +PgLpBMSBASmvEFEC8QEnAToBJwEnAQYAHwEnAK0AhAE6AB8AwQLxAScCzgCtAK0DLgEnANQArQCtAK0B +OgGCANQBJwCtAYIDEwCEAvEAhAE6AScC8QM4Aw8C+wE6AScArQE6AwsDMQE6AK0B9gE6Ao8BJwGCAMEA +rQH2AToBOgCtAIQC8QGCAzcDOQE6APUC+ALxAycA1ALxANQBggMCAQYC6wEnAK0ArQDBAPWA1oA/gEWA +P4A/gDSAAoA/gBmAC4BFgAKAH4DWgD+Ay4AZgBmA3YA/gCWAGYAZgBmARYBdgCWAP4AZgF2A84ALgNaA +C4BFgD+A1oEBAIEBHYEBE4BFgD+AGYBFgQEXgO+ARYAZgISARYC2gD+AXYAfgBmAhIBFgEWAGYALgNaA +XYDmgQELgEWAL4EBIYDWgPqAJYDWgCWAXYEBD4A0gNWAP4AZgBmAH4Av0gAOAD4C6QUYgQEprxBSAusB +/wKZAbYBmgD+AvEC8gJ5AgwC9QL2AqcC+AHFAsYC+wHgAScBbQL/AN8DAgL+AV8BegDMAwcDBgMIAs4B +jAMLAHMBqAEeAw8A9QGCAxMDFgMUARAB9gEGAToBMgMaArYCJwKHAx4CawC3AKUB7gMfAdIC2AFRAB8D +JwCEAykCQQJQAUMDLgDUAK0DMQI0AhkDMwDBAzUCjwM4AO0DOQM3Al6A1YCIgLuAcYBngDOA1oDlgLCA +jID5gQEogMCBASGAdYDKgQETgH6AP4BYgQElgCmBAQ+A4oBTgFyAJID/gO2BAQiAy4BigQEXgAqAbIA+ +gQEdgC+AXYDzgPiA4YA5gISANIBFgESA/oDFgJWAtYDsgKuAHoAYgIOBAQaAeYDPgE6AAoD6gAuA6YCd +gKKASYDdgCWAGYDvgJmAkIEBBIAfgQEbgLaBAQCALoEBC4DmgKfSAA4APgLpBW2BASmvEFIFbgVvBXAF +cQVyBXMFdAV1BXYFdwV4BXkFegV7BXwFfQV+BX8FgAWBBYIFgwWEBYUFhgWHBYgFiQWKBYsFjAWNBY4F +jwWQBZEFkgWTBZQFlQWWBZcFmAWZBZoFmwWcBZ0FngWfBaAFoQWiBaMFpAWlBaYFpwWoBakFqgWrBawF +rQWuBa8FsAWxBbIFswW0BbUFtgW3BbgFuQW6BbsFvAW9Bb4Fv4EBLYEBLoEBL4EBMIEBMYEBMoEBM4EB +NIEBNYEBNoEBN4EBOIEBOYEBOoEBO4EBPIEBPYEBPoEBP4EBQIEBQYEBQoEBQ4EBRIEBRYEBRoEBR4EB +SIEBSYEBSoEBS4EBTIEBTYEBToEBT4EBUIEBUYEBUoEBU4EBVIEBVYEBVoEBV4EBWIEBWYEBWoEBW4EB +XIEBXYEBXoEBX4EBYIEBYYEBYoEBY4EBZIEBZYEBZoEBZ4EBaIEBaYEBaoEBa4EBbIEBbYEBboEBb4EB +cIEBcYEBcoEBc4EBdIEBdYEBdoEBd4EBeIEBeYEBeoEBe4EBfIEBfYEBflExXxAUTWVudSBJdGVtIChT +aG93IEFsbClvEBEATQBlAG4AdQAgAEkAdABlAG0AIAAoAE8AcABlAG4gJgApXxAZTWVudSBJdGVtIChI +aWRlIEdyYXBodml6KVQxMTExXxAXTWVudSBJdGVtIChTaG93IENvbG9ycylYTWFpbk1lbnVbU2VwYXJh +dG9yLTNfEBBNZW51IEl0ZW0gKENvcHkpXxAnTWVudSBJdGVtIChDaGVjayBTcGVsbGluZyBXaGlsZSBU +eXBpbmcpUzItMVtBcHBsaWNhdGlvbl8QGE1lbnUgSXRlbSAoU21hcnQgUXVvdGVzKV8QEk1lbnUgSXRl +bSAoV2luZG93KV8QGk1lbnUgSXRlbSAoQWJvdXQgR3JhcGh2aXopXxAWTWVudSBJdGVtIChDbGVhciBN +ZW51KV8QEk1lbnUgSXRlbSAoU3BlZWNoKV8QD01lbnUgSXRlbSAoQ3V0KV8QD01lbnUgKEdyYXBodml6 +KV8QEk1lbnUgSXRlbSAoRGVsZXRlKVlTZXBhcmF0b3JfEBZNZW51IEl0ZW0gKFNlbGVjdCBBbGwpXxAZ +TWVudSBJdGVtIChTdWJzdGl0dXRpb25zKVMxMjFTMS0xXxAdTWVudSBJdGVtIChKdW1wIHRvIFNlbGVj +dGlvbilfEB5NZW51IEl0ZW0gKEJyaW5nIEFsbCB0byBGcm9udClbU2VwYXJhdG9yLTFbU2VwYXJhdG9y +LTRfECJNZW51IEl0ZW0gKFVzZSBTZWxlY3Rpb24gZm9yIEZpbmQpXxASTWVudSAoT3BlbiBSZWNlbnQp +XxAaTWVudSBJdGVtIChDaGVjayBTcGVsbGluZylfEBJNZW51IEl0ZW0gKEZvcm1hdClfECdNZW51IEl0 +ZW0gKENoZWNrIEdyYW1tYXIgV2l0aCBTcGVsbGluZylROV8QF01lbnUgSXRlbSAoSGlkZSBPdGhlcnMp +XxAQTWVudSBJdGVtIChWaWV3KVtNZW51IChWaWV3KVtNZW51IChGaW5kKV8QF01lbnUgSXRlbSAoT3Bl +biBSZWNlbnQpUTdbU2VwYXJhdG9yLTVfEBBNZW51IEl0ZW0gKFJlZG8pXU1lbnUgKFNwZWVjaCldTWVu +dSAoRm9ybWF0KVtNZW51IChGaWxlKVIxMFtTZXBhcmF0b3ItMlE1XxAZTWVudSBJdGVtIChTdG9wIFNw +ZWFraW5nKV8QGU1lbnUgSXRlbSAoR3JhcGh2aXogSGVscClbU2VwYXJhdG9yLTZROF8QF01lbnUgSXRl +bSAoU21hcnQgTGlua3MpXxAQTWVudSBJdGVtIChVbmRvKV8QGk1lbnUgSXRlbSAoU3RhcnQgU3BlYWtp +bmcpXxAZTWVudSBJdGVtIChGaW5kIFByZXZpb3VzKVE2XxARTWVudSBJdGVtIChQYXN0ZSlvEBoATQBl +AG4AdQAgAEkAdABlAG0AIAAoAFMAaABvAHcAIABTAHAAZQBsAGwAaQBuAGcgJgApXEZpbGUncyBPd25l +cl8QEE1lbnUgSXRlbSAoRWRpdClfEBtNZW51IChTcGVsbGluZyBhbmQgR3JhbW1hcilfEA9NZW51IChT +ZXJ2aWNlcylvEBEATQBlAG4AdQAgAEkAdABlAG0AIAAoAEYAaQBuAGQgJgApUTNfEBhNZW51IEl0ZW0g +KFNob3cgVG9vbGJhcilfEBRNZW51IEl0ZW0gKEdyYXBodml6KV1NZW51IChXaW5kb3cpW01lbnUgKEVk +aXQpXxAQTWVudSBJdGVtIChGaWxlKV8QEE1lbnUgSXRlbSAoWm9vbSlfEBRNZW51IEl0ZW0gKE1pbmlt +aXplKV8QFU1lbnUgSXRlbSAoRmluZCBOZXh0KV8QFE1lbnUgKFN1YnN0aXR1dGlvbnMpXxAWTWVudSBJ +dGVtIChTaG93IEZvbnRzKVEyXxAQTWVudSBJdGVtIChGaW5kKW8QHgBNAGUAbgB1ACAASQB0AGUAbQAg +ACgAQwB1AHMAdABvAG0AaQB6AGUAIABUAG8AbwBsAGIAYQByICYAKV8QIE1lbnUgSXRlbSAoU3BlbGxp +bmcgYW5kIEdyYW1tYXIpXxAUTWVudSBJdGVtIChTZXJ2aWNlcylfEBxNZW51IEl0ZW0gKFNtYXJ0IENv +cHkvUGFzdGUp0gAOAD4C6QYUgQEpoNIADgA+AukGF4EBKaDSAA4APgLpBhqBASmvEHkC6wH/ApkBmgD+ +AGUAWwLyAqcC+ALGAE0B4AEnAW0BXwBXAGAASQF6AMwDCALOAwsATwGoAGgDFABtAToBMgBsAF8DGgK2 +AEgDHgMfAKUB7gBiAdIAUQAfAFMDKQDUAK0AbgI0AGYAaQMzAzUCjwM4AzkCXgDtAF4AYQG2AFoC8QIM +AnkC9QL2AcUC+wBkAwIC/gL/AN8ATABLAGoDBgMHAGMBjABcAHMBHgMPAYIA9QBZAfYDEwMWARABBgBS +AFAAVgInAFgChwJrALcAawBOAtgBUQMnAkEAhAJQAFUBQwMuAzECGQDBAEoAVAM3AGcAXYDVgIiAu4Bn +gDOAoYB0gOWAwIEBIYDKgC2AfoA/gFiAU4BhgIuAF4BcgCSBAQiAy4EBF4A4gGyAr4DhgMmARYBEgMSA +h4D+gMWACYDsgQEGgBiAg4CUgHmAQ4ACgE2A6YAlgBmAzoCZgKaAtIEBBIEBG4C2gQEAgQELgKeALoCC +gI+AcYBwgNaAjICwgPmBASiAdYEBE4CcgQEPgOKBASWAKYAogCOAuoDtgP+AmIBigHiACoA+gQEdgF2A +L4BrgISA84D4gDmANIBIgD2AW4CVgGaAtYCrgB6Av4AygM+AToD6gJ2AC4CigFeASYDdgO+AkIAfgB2A +UoDmgKqAfdIADgA+AukGloEBKa8QeQaXBpgGmQaaBpsGnAadBp4GnwagBqEGogajBqQGpQamBqcGqAap +BqoGqwasBq0GrgavBrAGsQayBrMGtAa1BrYGtwa4BrkGuga7BrwGvQa+Br8GwAbBBsIGwwbEBsUGxgbH +BsgGyQbKBssGzAbNBs4GzwbQBtEG0gbTBtQG1QbWBtcG2AbZBtoG2wbcBt0G3gbfBuAG4QbiBuMG5Abl +BuYG5wboBukG6gbrBuwG7QbuBu8G8AbxBvIG8wb0BvUG9gb3BvgG+Qb6BvsG/Ab9Bv4G/wcABwEHAgcD +BwQHBQcGBwcHCAcJBwoHCwcMBw0HDgcPgQGDgQGEgQGFgQGGgQGHgQGIgQGJgQGKgQGLgQGMgQGNgQGO +gQGPgQGQgQGRgQGSgQGTgQGUgQGVgQGWgQGXgQGYgQGZgQGagQGbgQGcgQGdgQGegQGfgQGggQGhgQGi +gQGjgQGkgQGlgQGmgQGngQGogQGpgQGqgQGrgQGsgQGtgQGugQGvgQGwgQGxgQGygQGzgQG0gQG1gQG2 +gQG3gQG4gQG5gQG6gQG7gQG8gQG9gQG+gQG/gQHAgQHBgQHCgQHDgQHEgQHFgQHGgQHHgQHIgQHJgQHK +gQHLgQHMgQHNgQHOgQHPgQHQgQHRgQHSgQHTgQHUgQHVgQHWgQHXgQHYgQHZgQHagQHbgQHcgQHdgQHe +gQHfgQHggQHhgQHigQHjgQHkgQHlgQHmgQHngQHogQHpgQHqgQHrgQHsgQHtgQHugQHvgQHwgQHxgQHy +gQHzgQH0gQH1gQH2gQH3gQH4gQH5gQH6gQH7EGcQlhBIEIgRAVkRAWoQjhCPEQFfEBMQfhEBbRDHEDkQ +yhBJEOEQ3hDfENIQBRDdEH0RASsQ5xBSEOAQ7BB/EFEQcBBXEQFyEM4QTREBWxCQENUQzxDEEOMQThEB +bBEBdhDmEIIQGBDNEOIQ7xEBYxEBaBDQEQFYEGoQ2hDYEQFeEQEqEOkQJRCGEQFvEB0Q2xDFEEoT//// +//////0QOhDTEPERAVwQgRBcEMYQ6BAnEQF0EJUQ1hDwEMkRAXURAVoQkREBJxDcEQEoEQFzENQQfBBP +ENcRASwRAW4RAXAQ9RDDEQFxEG8QUBEBYhEBZBEBaRDLEMwQ2RDREMgQSxDrEQEpEDgQUxAXEQFdEQFl +EMEQgxEBaxDk0gAOAD4ARgeLgNOg0gAOAD4C6QeOgQEpoNIADgA+AukHkYEBKaDSADcAOAeTB5SiB5QA +O15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYEagRwBLsEwgTJBNcE6QUFBRMFHwUr +BTkFRAVSBW4FfAWPBaEFuwXFBdIF1AXXBdkF3AXfBeEF5AXmBekF7AXvBfIF9AX2BfkF/AX/BgIGCwYX +BhkGGwYpBjIGOwZGBksGWgZjBnYGfwaKBowGjQaWBp0GqgawBrkGuwcMBw4HEAcSBxQHFgcYBxoHHAce +ByAHIgckByYHKAcqBywHLgcwBzIHNAc2BzgHOgc8Bz4HQAdCB0QHRgdIB0oHTAdOB1AHUgdUB1YHWAda +B2cHcAd4B3oHfAd+B58Hpwe7B8YH1AfeB+sH8gf0B/YH+wf9CAIIBAgGCAgIFQghCCMIJggpCEcISAhV +CGQIZghoCGoIcgiECI0IkgilCLIItAi2CLgIywjUCNkI5Aj9CQYJDQklCTQJQQlDCUUJRwloCWoJbAlu +CXAJcgl0CYEJgwmFCYcJjAmOCZQJoQmjCaUJpwnMCdIJ1AnWCdsJ3QnfCeEJ4wnlCfIJ9An3CfoKBgoI +CigKNQo3CjkKOwpcCl4KYApiCmQKZgpoCnkKgAqCCoUKiAqLCqAKsgq/CsEKwwrFCuYK6ArqCuwK7grw +CvIK/Qr/CwoLFwsZCxsLHQs+C0ALQgtEC0YLSAtKC1cLWQtcC18LhguoC7ULtwu5C7sL3AveC+AL4gvk +C+YL6Av1C/cL+gv9DAkMCwwjDDAMMgw0DDYMVwxZDFsMXQxfDGEMYwxoDGoMcAx9DH8MgQyDDKQMpgyo +DK0MrwyxDLMMtQzGDMgMygzMDM4M2gzcDPUNAg0EDQYNCA0lDScNKQ0rDS0NLw0xDT4NQA1CDUQNVg1v +DXwNfg2ADYINow2lDacNqQ2rDa0Nrw28Db4N1A3hDeMN5Q3nDggOCg4MDg4OEA4SDhQOMQ4zDkUOUg5U +DlYOWA55DnsOfQ5/DoEOgw6FDosOjQ6bDqgOqg6sDq4Ozw7RDtMO1Q7XDtkO2w7iDuoO9w75DvsO/Q8e +DyAPIg8kDyYPKA8qDzcPOQ88Dz8PUw9VD3UPgg+ED4YPiA+pD6sPrQ+vD7EPsw+1D8QPxg/VD+IP5A/m +D+gQCRALEA0QDxAREBMQFRAjECUQMBA9ED8QQRBDEGQQZhBoEGoQbBBuEHAQdBB2EIMQkBCSEJQQlhC3 +ELkQuxC9EL8QwRDDENEQ1xDoEPYQ+BD6EPwQ/hEbER0RHxEhESMRJREnETYRVhFjEWURZxFpEYoRjBGO +EZARkhGUEZYRoxGlEbQRwRHDEcURxxHoEeoR7BHuEfAR8hH0EfgR+hH/EgwSDhIQEhISMxI1EjcSORI7 +Ej0SPxJMEk4SURJUEmMSchJ/EoESgxKFEqYSqBKqEqwSrhKwErISuxLUEuES4xLlEucTCBMKEwwTDhMQ +ExITFBMyE1MTYBNiE2QTZhOHE4kTixONE48TkROTE5wTnhO0E8ETwxPFE8cT6BPqE+wT7hPwE/IT9BQC +FBAUHRQfFCEUIxREFEYUSBRKFEwUThRQFFUUYhRvFHEUcxR1FJoUnBSeFKAUohSkFKYUqBSzFLUUzxTc +FN4U4BTiFQMVBRUHFQkVCxUNFQ8VFBUWFSQVMRUzFTUVNxVcFV4VYBViFWQVZhVoFXsVlhWjFaUVpxWp +FcoVzBXOFdAV0hXUFdYV5xXpFfsWCBYKFgwWDhYvFjEWMxY1FjcWORY7FkAWQhZIFlUWVxZZFlsWfBZ+ +FoAWghaEFoYWiBaVFpcWmRabFqkWqxa1FsIWxBbGFsgW6RbrFu0W7xbxFvMW9RcAFwIXEBcdFx8XIRcj +F0gXShdMF04XUBdSF1QXVhdjF2UXiReWF5gXmhecF8EXyxfNF88X0RfTF9UX1xfZF+cX6Rf4GAUYBxgJ +GAsYLBguGDAYMhg0GDYYOBhJGEsYTRhPGFEYXBh0GIEYgxiFGIcYqBiqGKwYrhiwGLIYtBi6GLwYwxjM +GNMY4hjqGPMY9hmbGZ0ZnxmhGaMZpRmnGakZqxmtGa8ZsRm0GbYZuRm7Gb0ZwBnCGcQZxhnJGcsZzRnQ +GdIZ1BnWGdgZ2hndGd8Z4RnkGeYZ6BnqGe0Z7xnxGfMZ9Rn3GfkZ+xn9Gf8aARoDGgUaBxoJGgsaDhoQ +GhIaFBoWGhgaGhocGh4aIBoiGiQaJhooGioaLBouGjAaMho0GjcaORo8Gj4aQBpDGkYaSBpKGnMafRqG +GogaihqMGo4akBqSGpQalhqnGqkaqxquGrAatRrEGs0azxrSGtQa3RriGuwa9Rr3GwYbCBsKGwwbDxsS +GxUbFxtAG0IbRBtGG0gbShtMG04bUBtZG2IbZBt7G30bfxuBG4MbhRuHG4kbixuNG48bkRu6G8gb1RvX +G9kb2hvcG90b3xvhG+McBBwGHAgcChwMHA4cEBwpHCscVBxWHFgcWRxbHFwcXhxgHGIcixyNHI8ckRyT +HJUclxyZHJscpBy1HLccuRy7HL0cxhzIHMkc2x0EHQYdCB0JHQsdDB0OHRAdEh07HT0dPx1AHUIdQx1F +HUcdSR1WHX8dgR2DHYUdhx2JHYsdjR2PHZQdnR2fHbYduB26Hbwdvh3AHcIdxB3GHcgdyh3MHfUd9x35 +Hfsd/R3/HgEeAx4FHhEeGh4cHh8eIR46HmMeZR5nHmgeah5rHm0ebx5xHpoenB6eHp8eoR6iHqQeph6o +HtEe0x7VHtce2R7bHt0e3x7hHuYe7x7xHwwfDh8QHxIfFB8WHxgfGh8cHx4fIR8kHycfKh9TH1UfVx9Y +H1ofWx9dH18fYR+KH4wfjh+PH5Efkh+UH5YfmB/BH8MfxR/IH8ofzB/OH9Af0x/YH+Ef4x/uH/Af8x/2 +H/kf+yAgICIgJSAnICkgKyAtIDcgXCBeIGEgYyBlIGcgaSB3IJwgniChIKQgpiCoIKogrCDFIMcg8CDy +IPQg9yD5IPsg/SD/IQIhGSEiISQhLSEvITEhMyE1IV4hYCFiIWUhZyFpIWshbSFwIX4hhyGJIZAhkiGU +IZYhvyHBIcMhxiHIIcohzCHOIdEh2CHhIeMh6CHqIewiFSIXIhkiHCIeIiAiIiIkIiciLiI3IjkiPiJB +IkMiZCJmImkiayJtIm8icSJ8IqUipyKpIqwiriKwIrIitCK3IrwixSLHIswiziLQIvki+yL9IwAjAiME +IwYjCCMLIxIjGyMdIyYjKCMqIy0jLyNYI1ojXCNdI18jYCNiI2QjZiN1I4EjiiOMI44jlyOcI6UjqCRN +JE8kUSRTJFUkVyRZJFskXSRfJGEkYyRlJGckaSRrJG0kbyRxJHMkdSR3JHkkeyR9JH8kgSSDJIUkhySJ +JIskjSSPJJEkkySVJJckmiSdJKAkoiSkJKYkqCSrJK0krySxJLMktSS3JLkkuyS9JL8kwSTDJMUkxyTJ +JMskzSTPJNIk1CTWJNkk2yTdJN8k4STjJOUk6CTqJOwk7iTwJPIk9CT2JP8lAiWpJaslrSWvJbElsyW1 +JbcluSW7Jb0lvyXCJcQlxyXJJcslziXQJdIl1CXXJdkl3CXeJeAl4iXkJeYl6CXrJe0l7yXyJfQl9iX4 +Jfsl/SX/JgEmAyYFJgcmCSYLJg0mDyYRJhMmFSYXJhkmGyYdJh8mISYkJiYmKCYqJiwmLiYwJjImNCY2 +JjgmOiY8Jj4mQCZCJkQmRyZJJkwmTiZRJlMmViZYJlomYyZmJw0nECcTJxYnGSccJx8nIiclJygnKycu +JzEnNCc3JzonPSdAJ0MnRidJJ0wnTydSJ1UnWCdbJ14nYSdkJ2cnaidtJ3Ancyd2J3knfCd/J4InhSeI +J4snjieRJ5QnlyeaJ50noCejJ6YnqSesJ68nsie1J7gnuye+J8EnxCfHJ8onzSfQJ9Mn1ifZJ9wn3yfi +J+Un6CfrJ+4n8Sf0J/cn+if9KAAoAygFKBwoQShdKGIofCiFKJEopCjOKNIo3ij5KQ4pKylEKVkpayl9 +KZIpnCm1KdEp1SnZKfkqGiomKjIqVypsKokqnirIKsoq5Cr3KwMrDyspKysrNytKK1grZityK3UrgSuD +K58ruyvHK8kr4yv2LBMsLywxLEUsfCyJLJwsuizMLPEs8y0OLSUtMy0/LVItZS18LZQtqy3ELcYt2S4Y +LjsuUi5xLnoufS5+Locuii6LLpQuly+ML44vkC+SL5Qvli+YL5ovnC+eL6Evoy+lL6cvqS+rL60vry+x +L7MvtS+3L7ovvC+/L8Evwy/FL8cvyS/LL80vzy/RL9Mv1S/XL9kv3C/eL+Av4i/kL+Yv6C/qL+wv7i/w +L/Iv9C/2L/gv+y/+MAAwAzAGMAgwCjAMMA4wEDASMBQwFjAYMBowHTAfMCIwJDAnMCkwLDAuMDAwMjA0 +MDYwODA6MDwwPjBAMEIwRTBHMEkwSzBNME8wUTBTMFUwVzBZMFswXTBfMGEwYzBlMGcwaTBrMG0wbzBx +MHMwdTB3MHkwezB9MH8wgTCDMIUwhzCJMIswlDCXMYwxjzGSMZUxmDGbMZ4xoTGkMacxqjGtMbAxszG2 +MbkxvDG/McIxxTHIMcsxzjHRMdQx1zHaMd0x4DHjMeYx6THsMe8x8jH1Mfgx+zH+MgEyBDIHMgoyDTIQ +MhMyFjIZMhwyHzIiMiUyKDIrMi4yMTI0MjcyOjI9MkAyQzJGMkkyTDJPMlIyVTJYMlsyXjJhMmQyZzJq +Mm0ycDJzMnYyeTJ8Mn8ygjKFMogyizKOMpEylDKXMpoynTKgMqMypjKpMqwyrzKyMrUyuDK7Mr4ywTLE +MscyyjLNMtAy0zLWMtky3DLfMuIy5TLoMusy7jLxMvQy9zL5Mvsy/TL/MwIzBTMHMwkzDDMOMxAzEzMV +MxczGTMbMx0zHzMhMyMzJTMnMykzLDMuMzAzMjM0MzYzODM6MzwzPzNBM0MzRjNIM0ozTDNOM1AzUjNV +M1gzWjNcM14zYDNiM2QzZzNqM2wzbzNxM3MzdTN4M3szfTN/M4EzhDOGM4gzijOMM5UzlzOZM5sznjOg +M6IzpDOmM6gzqzOtM68zsTOzM7YzuTO7M74zwDPDM8YzyDPKM8wzzjPRM9Qz1zPZM9sz3jPgM+Iz5TPo +M+sz7TPvM/Ez8zP1M/cz+TP8M/40ADQCNAU0CDQKNAw0DzQRNBo0HDQdNCY0KTQqNDM0NjQ3NEA0RQAA +AAAAAAICAAAAAAAAB5UAAAAAAAAAAAAAAAAAADRUA + + + diff --git a/macosx/GVDocument.h b/macosx/GVDocument.h new file mode 100644 index 000000000..f4503c64d --- /dev/null +++ b/macosx/GVDocument.h @@ -0,0 +1,41 @@ +/* $Id$ $Revision$ */ +/* vim:set shiftwidth=4 ts=8: */ + +/********************************************************** +* This software is part of the graphviz package * +* http://www.graphviz.org/ * +* * +* Copyright (c) 1994-2008 AT&T Corp. * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Corp. * +* * +* Information and Software Systems Research * +* AT&T Research, Florham Park NJ * +**********************************************************/ + +#import +#import + +#include +#include + +@interface GVDocument : NSDocument +{ + graph_t *_graph; +} + +@property(readonly) graph_t *graph; + ++ (void)initialize; + +- (id)init; + +- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError; +- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError; + +- (void)makeWindowControllers; + +- (void)dealloc; + +@end diff --git a/macosx/GVDocument.m b/macosx/GVDocument.m new file mode 100644 index 000000000..d0470e7eb --- /dev/null +++ b/macosx/GVDocument.m @@ -0,0 +1,111 @@ +/* $Id$ $Revision$ */ +/* vim:set shiftwidth=4 ts=8: */ + +/********************************************************** +* This software is part of the graphviz package * +* http://www.graphviz.org/ * +* * +* Copyright (c) 1994-2008 AT&T Corp. * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Corp. * +* * +* Information and Software Systems Research * +* AT&T Research, Florham Park NJ * +**********************************************************/ + +#import "GVDocument.h" +#import "GVWindowController.h" + +@implementation GVDocument + +@synthesize graph = _graph; + ++ (void)initialize +{ + aginit(); +} + +- (id)init +{ + if (self = [super init]) { + _graph = NULL; + } + return self; +} + +- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError +{ + if ([absoluteURL isFileURL]) { + /* open a FILE* on the file URL */ + FILE *file = fopen([[absoluteURL path] fileSystemRepresentation], "r"); + if (!file) { + if (outError) + *outError = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil]; + return NO; + } + + if (_graph) + agclose(_graph); + _graph = agread(file); + fclose(file); + + return YES; + } + else { + /* read the URL into memory */ + NSMutableData *memory = [NSMutableData dataWithContentsOfURL:absoluteURL options:0 error:outError]; + if (!memory) + return NO; + + /* null terminate the data */ + char nullByte = '\0'; + [memory appendBytes:&nullByte length:1]; + + if (_graph) + agclose(_graph); + _graph = agmemread((char*)[memory bytes]); + + return YES; + } +} + +- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError +{ + if ([absoluteURL isFileURL]) { + /* open a FILE* on the file URL */ + FILE *file = fopen([[absoluteURL path] fileSystemRepresentation], "w"); + if (!file) { + if (outError) + *outError = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil]; + return NO; + } + + /* write it out */ + if (agwrite(_graph, file) != 0) { + if (outError) + *outError = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil]; + return NO; + } + + fclose(file); + return YES; + } + else + /* can't write out to non-file URL */ + return NO; +} + +- (void)makeWindowControllers +{ + [self addWindowController: [[[GVWindowController alloc] initWithWindowNibName: @"Document"] autorelease]]; +} + +- (void)dealloc +{ + if (_graph) + agclose(_graph); + [super dealloc]; +} + +@end diff --git a/macosx/GVWindowController.h b/macosx/GVWindowController.h new file mode 100644 index 000000000..480b9316c --- /dev/null +++ b/macosx/GVWindowController.h @@ -0,0 +1,28 @@ +/* $Id$ $Revision$ */ +/* vim:set shiftwidth=4 ts=8: */ + +/********************************************************** +* This software is part of the graphviz package * +* http://www.graphviz.org/ * +* * +* Copyright (c) 1994-2008 AT&T Corp. * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Corp. * +* * +* Information and Software Systems Research * +* AT&T Research, Florham Park NJ * +**********************************************************/ + +#import +#import +#import + +@interface GVWindowController : NSWindowController +{ + IBOutlet PDFView *documentView; +} + +- (void)windowDidLoad; + +@end diff --git a/macosx/GVWindowController.m b/macosx/GVWindowController.m new file mode 100644 index 000000000..04905f8a2 --- /dev/null +++ b/macosx/GVWindowController.m @@ -0,0 +1,34 @@ +/* $Id$ $Revision$ */ +/* vim:set shiftwidth=4 ts=8: */ + +/********************************************************** +* This software is part of the graphviz package * +* http://www.graphviz.org/ * +* * +* Copyright (c) 1994-2008 AT&T Corp. * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Corp. * +* * +* Information and Software Systems Research * +* AT&T Research, Florham Park NJ * +**********************************************************/ + +#import "GVWindowController.h" +#import "GVContext.h" +#import "GVDocument.h" + +@implementation GVWindowController + +- (void)windowDidLoad +{ + GVDocument *graphDocument = [self document]; + if ([graphDocument respondsToSelector:@selector(graph)]) { + graph_t *graph = [graphDocument graph]; + GVContext* context = [GVContext sharedContext]; + [context layoutGraph:graph withEngine:@"dot"]; + [documentView setDocument:[[[PDFDocument alloc] initWithData:[context renderGraph:graph withFormat:@"pdf:quartz"]] autorelease]]; + } +} + +@end