You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
(23) |
Apr
(254) |
May
(252) |
Jun
(209) |
Jul
(198) |
Aug
(192) |
Sep
(207) |
Oct
(120) |
Nov
(179) |
Dec
(52) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(48) |
Feb
(69) |
Mar
(129) |
Apr
(250) |
May
(113) |
Jun
(177) |
Jul
(228) |
Aug
(155) |
Sep
(218) |
Oct
(185) |
Nov
(109) |
Dec
(88) |
2009 |
Jan
(83) |
Feb
(39) |
Mar
(70) |
Apr
(47) |
May
(48) |
Jun
(67) |
Jul
(61) |
Aug
(97) |
Sep
(221) |
Oct
(141) |
Nov
(70) |
Dec
(61) |
2010 |
Jan
(45) |
Feb
(76) |
Mar
(178) |
Apr
(106) |
May
(57) |
Jun
(32) |
Jul
(64) |
Aug
(98) |
Sep
(96) |
Oct
(19) |
Nov
(34) |
Dec
(117) |
2011 |
Jan
(55) |
Feb
(48) |
Mar
(64) |
Apr
(21) |
May
(39) |
Jun
(53) |
Jul
(99) |
Aug
(56) |
Sep
(39) |
Oct
(26) |
Nov
(19) |
Dec
(69) |
2012 |
Jan
(17) |
Feb
(40) |
Mar
(17) |
Apr
|
May
(2) |
Jun
(8) |
Jul
(2) |
Aug
(10) |
Sep
(10) |
Oct
(38) |
Nov
(48) |
Dec
(70) |
2013 |
Jan
(43) |
Feb
(47) |
Mar
(39) |
Apr
(37) |
May
(25) |
Jun
(6) |
Jul
(20) |
Aug
(49) |
Sep
(33) |
Oct
(34) |
Nov
(75) |
Dec
(6) |
2014 |
Jan
(32) |
Feb
(10) |
Mar
(17) |
Apr
|
May
|
Jun
(26) |
Jul
(5) |
Aug
|
Sep
(4) |
Oct
(23) |
Nov
(80) |
Dec
(48) |
2015 |
Jan
(80) |
Feb
(50) |
Mar
(58) |
Apr
(20) |
May
(11) |
Jun
(16) |
Jul
(24) |
Aug
(27) |
Sep
(56) |
Oct
(30) |
Nov
(16) |
Dec
(6) |
2016 |
Jan
(31) |
Feb
(14) |
Mar
(23) |
Apr
(17) |
May
(40) |
Jun
(12) |
Jul
(17) |
Aug
(9) |
Sep
(32) |
Oct
(36) |
Nov
(23) |
Dec
(9) |
2017 |
Jan
(37) |
Feb
(23) |
Mar
(65) |
Apr
(22) |
May
(6) |
Jun
(3) |
Jul
|
Aug
|
Sep
(3) |
Oct
(22) |
Nov
(63) |
Dec
(71) |
2018 |
Jan
(83) |
Feb
(21) |
Mar
(35) |
Apr
(44) |
May
(14) |
Jun
(12) |
Jul
(8) |
Aug
(18) |
Sep
(10) |
Oct
(145) |
Nov
(144) |
Dec
(76) |
2019 |
Jan
(18) |
Feb
(28) |
Mar
(5) |
Apr
(208) |
May
(291) |
Jun
(158) |
Jul
(27) |
Aug
(8) |
Sep
(10) |
Oct
(83) |
Nov
(41) |
Dec
(31) |
2020 |
Jan
(16) |
Feb
(46) |
Mar
(100) |
Apr
(78) |
May
(69) |
Jun
(71) |
Jul
(28) |
Aug
(131) |
Sep
(176) |
Oct
(89) |
Nov
(147) |
Dec
(19) |
2021 |
Jan
(19) |
Feb
(25) |
Mar
(91) |
Apr
(98) |
May
(14) |
Jun
(44) |
Jul
(8) |
Aug
(3) |
Sep
(38) |
Oct
(57) |
Nov
(97) |
Dec
(74) |
2022 |
Jan
(89) |
Feb
(47) |
Mar
(15) |
Apr
(50) |
May
(54) |
Jun
(56) |
Jul
(80) |
Aug
(12) |
Sep
(11) |
Oct
(60) |
Nov
(48) |
Dec
(4) |
2023 |
Jan
(75) |
Feb
(49) |
Mar
(84) |
Apr
(24) |
May
(13) |
Jun
(74) |
Jul
(32) |
Aug
(66) |
Sep
(50) |
Oct
(38) |
Nov
(105) |
Dec
(181) |
2024 |
Jan
(21) |
Feb
(49) |
Mar
(77) |
Apr
(84) |
May
(20) |
Jun
(71) |
Jul
(53) |
Aug
(33) |
Sep
(54) |
Oct
(124) |
Nov
(151) |
Dec
(73) |
2025 |
Jan
(61) |
Feb
(17) |
Mar
(136) |
Apr
(72) |
May
(200) |
Jun
(238) |
Jul
(91) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ho...@us...> - 2007-04-12 09:04:43
|
Revision: 1800 http://skim-app.svn.sourceforge.net/skim-app/?rev=1800&view=rev Author: hofman Date: 2007-04-12 02:04:42 -0700 (Thu, 12 Apr 2007) Log Message: ----------- Update localizable strings Modified Paths: -------------- trunk/Dutch.lproj/Localizable.strings trunk/English.lproj/Localizable.strings trunk/Italian.lproj/Localizable.strings Modified: trunk/Dutch.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/English.lproj/Localizable.strings =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/Localizable.strings =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-12 08:38:35
|
Revision: 1799 http://skim-app.svn.sourceforge.net/skim-app/?rev=1799&view=rev Author: hofman Date: 2007-04-12 01:38:32 -0700 (Thu, 12 Apr 2007) Log Message: ----------- Show number of pages in window title. Request from users list. Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-04-10 20:33:19 UTC (rev 1798) +++ trunk/SKMainWindowController.m 2007-04-12 08:38:32 UTC (rev 1799) @@ -425,6 +425,13 @@ return setup; } +- (NSString *)windowTitleForDocumentDisplayName:(NSString *)displayName { + if ([pdfView document]) + return [NSString stringWithFormat:NSLocalizedString(@"%@ (%i pages)", @"Window title format"), displayName, [[pdfView document] pageCount]]; + else + return displayName; +} + - (void)windowDidBecomeKey:(NSNotification *)notification { PDFAnnotation *annotation = [pdfView activeAnnotation]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 20:33:35
|
Revision: 1798 http://skim-app.svn.sourceforge.net/skim-app/?rev=1798&view=rev Author: hofman Date: 2007-04-10 13:33:19 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Make sure we show the left side pane when setting an (initial) search result (from spotlight or bibdesk). Modified Paths: -------------- trunk/SKMainWindowController.m Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2007-04-10 20:10:27 UTC (rev 1797) +++ trunk/SKMainWindowController.m 2007-04-10 20:33:19 UTC (rev 1798) @@ -1573,6 +1573,8 @@ } - (void)displaySearchResultsForString:(NSString *)string { + if (NSWidth([leftSideContentBox frame]) <= 0.0) + [self toggleLeftSidePane:self]; [searchField setStringValue:string]; [self search:searchField]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 20:10:28
|
Revision: 1797 http://skim-app.svn.sourceforge.net/skim-app/?rev=1797&view=rev Author: hofman Date: 2007-04-10 13:10:27 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Add Italian localization of notes document nib Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/Italian.lproj/NotesDocument.nib/ trunk/Italian.lproj/NotesDocument.nib/classes.nib trunk/Italian.lproj/NotesDocument.nib/info.nib trunk/Italian.lproj/NotesDocument.nib/keyedobjects.nib Added: trunk/Italian.lproj/NotesDocument.nib/classes.nib =================================================================== --- trunk/Italian.lproj/NotesDocument.nib/classes.nib (rev 0) +++ trunk/Italian.lproj/NotesDocument.nib/classes.nib 2007-04-10 20:10:27 UTC (rev 1797) @@ -0,0 +1,25 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {myAction = id; }; + CLASS = NSPersistentDocument; + LANGUAGE = ObjC; + SUPERCLASS = NSDocument; + }, + { + CLASS = SKAnnotationTypeImageCell; + LANGUAGE = ObjC; + SUPERCLASS = NSImageCell; + }, + {CLASS = SKNoteOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }, + { + CLASS = SKNotesDocument; + LANGUAGE = ObjC; + OUTLETS = {arrayController = NSArrayController; outlineView = NSOutlineView; }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file Added: trunk/Italian.lproj/NotesDocument.nib/info.nib =================================================================== --- trunk/Italian.lproj/NotesDocument.nib/info.nib (rev 0) +++ trunk/Italian.lproj/NotesDocument.nib/info.nib 2007-04-10 20:10:27 UTC (rev 1797) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IBDocumentLocation</key> + <string>69 58 356 240 0 0 1440 938 </string> + <key>IBFramework Version</key> + <string>446.1</string> + <key>IBOpenObjects</key> + <array> + <integer>5</integer> + </array> + <key>IBSystem Version</key> + <string>8P135</string> +</dict> +</plist> Added: trunk/Italian.lproj/NotesDocument.nib/keyedobjects.nib =================================================================== (Binary files differ) Property changes on: trunk/Italian.lproj/NotesDocument.nib/keyedobjects.nib ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2007-04-10 20:06:56 UTC (rev 1796) +++ trunk/Skim.xcodeproj/project.pbxproj 2007-04-10 20:10:27 UTC (rev 1797) @@ -384,6 +384,7 @@ CEE106590BCBBE1200BF2D3E /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/NotesDocument.nib; sourceTree = "<group>"; }; CEE107380BCBCA3200BF2D3E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Dutch; path = Dutch.lproj/NotesDocument.nib; sourceTree = "<group>"; }; CEE112610BCBF51900BF2D3E /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = vendorsrc/Sparkle.framework; sourceTree = "<group>"; }; + CEE11EF50BCC262800BF2D3E /* Italian */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Italian; path = Italian.lproj/NotesDocument.nib; sourceTree = "<group>"; }; CEF3BF750B99CA2900E12E3D /* skimnotes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = skimnotes; sourceTree = BUILT_PRODUCTS_DIR; }; CEF3BF850B99CAD300E12E3D /* skimnotes.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = skimnotes.m; sourceTree = "<group>"; }; CEF7071E0B8F8EFC003A2771 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SnapshotWindow.nib; sourceTree = "<group>"; }; @@ -1187,6 +1188,7 @@ children = ( CEE106590BCBBE1200BF2D3E /* English */, CEE107380BCBCA3200BF2D3E /* Dutch */, + CEE11EF50BCC262800BF2D3E /* Italian */, ); name = NotesDocument.nib; sourceTree = "<group>"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 20:07:37
|
Revision: 1796 http://skim-app.svn.sourceforge.net/skim-app/?rev=1796&view=rev Author: hofman Date: 2007-04-10 13:06:56 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Use Sparkle for updating. Add Sparkle framework and activate in build. Connect/include Sparkle prefs; we use the checkInterval pref. Remove old updater class. Modified Paths: -------------- trunk/Dutch.lproj/MainMenu.nib/classes.nib trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib trunk/Dutch.lproj/PreferenceWindow.nib/classes.nib trunk/Dutch.lproj/PreferenceWindow.nib/info.nib trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/English.lproj/MainMenu.nib/classes.nib trunk/English.lproj/MainMenu.nib/keyedobjects.nib trunk/English.lproj/PreferenceWindow.nib/classes.nib trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/Info.plist trunk/InitialUserDefaults.plist trunk/Italian.lproj/MainMenu.nib/classes.nib trunk/Italian.lproj/MainMenu.nib/info.nib trunk/Italian.lproj/MainMenu.nib/keyedobjects.nib trunk/Italian.lproj/PreferenceWindow.nib/classes.nib trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/SKApplicationController.h trunk/SKApplicationController.m trunk/SKPreferenceController.h trunk/SKPreferenceController.m trunk/SKStringConstants.h trunk/SKStringConstants.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/vendorsrc/Sparkle.framework/ trunk/vendorsrc/Sparkle.framework/Headers trunk/vendorsrc/Sparkle.framework/Resources trunk/vendorsrc/Sparkle.framework/Sparkle trunk/vendorsrc/Sparkle.framework/Versions/ trunk/vendorsrc/Sparkle.framework/Versions/A/ trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/ trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/NSApplication+AppCopies.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/NSFileManager+Authentication.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/NSFileManager+Verification.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/NSString+extras.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/RSS.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUAppcast.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUAutomaticUpdateAlert.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUConstants.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUStatusChecker.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUStatusController.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUUnarchiver.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUUpdateAlert.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUUpdater.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/SUUtilities.h trunk/vendorsrc/Sparkle.framework/Versions/A/Headers/Sparkle.h trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/Info.plist trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/SUStatus.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/cy.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/hu.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/id.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/no.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/ trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/classes.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/info.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib/keyedobjects.nib trunk/vendorsrc/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings trunk/vendorsrc/Sparkle.framework/Versions/A/Sparkle trunk/vendorsrc/Sparkle.framework/Versions/Current Removed Paths: ------------- trunk/SKUpdateChecker.h trunk/SKUpdateChecker.m Modified: trunk/Dutch.lproj/MainMenu.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/MainMenu.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Dutch.lproj/MainMenu.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -53,9 +53,15 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {checkForUpdates = id; showPreferencePanel = id; showReleaseNotes = id; }; + ACTIONS = { + editBookmarks = id; + openBookmark = id; + showPreferencePanel = id; + showReleaseNotes = id; + }; CLASS = SKApplicationController; LANGUAGE = ObjC; + OUTLETS = {updater = SUUpdater; }; SUPERCLASS = NSObject; }, { Modified: trunk/Dutch.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/PreferenceWindow.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Dutch.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -7,7 +7,12 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {changeDiscreteThumbnailSizes = id; resetAll = id; resetCurrent = id; }; + ACTIONS = { + changeDiscreteThumbnailSizes = id; + changeUpdateInterval = id; + resetAll = id; + resetCurrent = id; + }; CLASS = SKPreferenceController; LANGUAGE = ObjC; OUTLETS = { Modified: trunk/Dutch.lproj/PreferenceWindow.nib/info.nib =================================================================== --- trunk/Dutch.lproj/PreferenceWindow.nib/info.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Dutch.lproj/PreferenceWindow.nib/info.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -8,10 +8,6 @@ <string>446.1</string> <key>IBLockedObjects</key> <array/> - <key>IBOpenObjects</key> - <array> - <integer>5</integer> - </array> <key>IBSystem Version</key> <string>8P135</string> </dict> Modified: trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/MainMenu.nib/classes.nib =================================================================== --- trunk/English.lproj/MainMenu.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/English.lproj/MainMenu.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -53,15 +53,27 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {checkForUpdates = id; showPreferencePanel = id; showReleaseNotes = id; }; + ACTIONS = { + editBookmarks = id; + openBookmark = id; + showPreferencePanel = id; + showReleaseNotes = id; + }; CLASS = SKApplicationController; LANGUAGE = ObjC; + OUTLETS = {updater = SUUpdater; }; SUPERCLASS = NSObject; }, { CLASS = SKDocumentController; LANGUAGE = ObjC; SUPERCLASS = NSDocumentController; + }, + { + ACTIONS = {checkForUpdates = id; }; + CLASS = SUUpdater; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; } ); IBVersion = 1; Modified: trunk/English.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/PreferenceWindow.nib/classes.nib =================================================================== --- trunk/English.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/English.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -7,7 +7,12 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {changeDiscreteThumbnailSizes = id; resetAll = id; resetCurrent = id; }; + ACTIONS = { + changeDiscreteThumbnailSizes = id; + changeUpdateInterval = id; + resetAll = id; + resetCurrent = id; + }; CLASS = SKPreferenceController; LANGUAGE = ObjC; OUTLETS = { Modified: trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Info.plist =================================================================== --- trunk/Info.plist 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Info.plist 2007-04-10 20:06:56 UTC (rev 1796) @@ -273,5 +273,7 @@ <string>SKApplication</string> <key>OSAScriptingDefinition</key> <string>Skim.sdef</string> + <key>SUFeedURL</key> + <string>http://skim-app.sourceforge.net/skim.xml</string> </dict> </plist> Modified: trunk/InitialUserDefaults.plist =================================================================== --- trunk/InitialUserDefaults.plist 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/InitialUserDefaults.plist 2007-04-10 20:06:56 UTC (rev 1796) @@ -114,6 +114,10 @@ BAt0eXBlZHN0cmVhbYED6IQBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm ZmZmAQAAAYY= </data> + <key>SUCheckAtStartup</key> + <false/> + <key>SUScheduledCheckInterval</key> + <integer>86400</integer> </dict> <key>ResettableKeys</key> <array> @@ -148,6 +152,8 @@ <string>SKUnderlineNoteColor</string> <string>SKStrikeOutNoteColor</string> <string>SKDefaultPDFDisplaySettings</string> + <string>SUCheckAtStartup</string> + <string>SUScheduledCheckInterval</string> </array> </dict> </plist> Modified: trunk/Italian.lproj/MainMenu.nib/classes.nib =================================================================== --- trunk/Italian.lproj/MainMenu.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Italian.lproj/MainMenu.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -53,9 +53,15 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {checkForUpdates = id; showPreferencePanel = id; showReleaseNotes = id; }; + ACTIONS = { + editBookmarks = id; + openBookmark = id; + showPreferencePanel = id; + showReleaseNotes = id; + }; CLASS = SKApplicationController; LANGUAGE = ObjC; + OUTLETS = {updater = SUUpdater; }; SUPERCLASS = NSObject; }, { Modified: trunk/Italian.lproj/MainMenu.nib/info.nib =================================================================== --- trunk/Italian.lproj/MainMenu.nib/info.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Italian.lproj/MainMenu.nib/info.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -3,11 +3,11 @@ <plist version="1.0"> <dict> <key>IBDocumentLocation</key> - <string>14 107 356 240 0 0 1024 746 </string> + <string>23 148 356 240 0 0 1440 938 </string> <key>IBEditorPositions</key> <dict> <key>29</key> - <string>68 579 654 44 0 0 1024 746 </string> + <string>144 737 654 44 0 0 1440 938 </string> </dict> <key>IBFramework Version</key> <string>446.1</string> Modified: trunk/Italian.lproj/MainMenu.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/PreferenceWindow.nib/classes.nib =================================================================== --- trunk/Italian.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/Italian.lproj/PreferenceWindow.nib/classes.nib 2007-04-10 20:06:56 UTC (rev 1796) @@ -7,7 +7,12 @@ SUPERCLASS = NSObject; }, { - ACTIONS = {changeDiscreteThumbnailSizes = id; resetAll = id; resetCurrent = id; }; + ACTIONS = { + changeDiscreteThumbnailSizes = id; + changeUpdateInterval = id; + resetAll = id; + resetCurrent = id; + }; CLASS = SKPreferenceController; LANGUAGE = ObjC; OUTLETS = { Modified: trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/SKApplicationController.h =================================================================== --- trunk/SKApplicationController.h 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKApplicationController.h 2007-04-10 20:06:56 UTC (rev 1796) @@ -38,16 +38,20 @@ #import <Cocoa/Cocoa.h> +@class SUUpdater; + @interface SKApplicationController : NSObject { + IBOutlet SUUpdater *updater; } + (void)setupDefaults; -- (IBAction)checkForUpdates:(id)sender; - (IBAction)showPreferencePanel:(id)sender; - (IBAction)showReleaseNotes:(id)sender; - (IBAction)editBookmarks:(id)sender; - (IBAction)openBookmark:(id)sender; +- (SUUpdater *)updater; + @end Modified: trunk/SKApplicationController.m =================================================================== --- trunk/SKApplicationController.m 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKApplicationController.m 2007-04-10 20:06:56 UTC (rev 1796) @@ -39,14 +39,15 @@ #import "SKApplicationController.h" #import "SKPreferenceController.h" #import "SKReleaseNotesController.h" -#import "SKUpdateChecker.h" #import "SKStringConstants.h" #import "SKDocument.h" #import "SKMainWindowController.h" #import "SKBookmarkController.h" #import "BDAlias.h" #import "SKVersionNumber.h" +#import "NSUserDefaultsController_SKExtensions.h" #import <Quartz/Quartz.h> +#import <Sparkle/Sparkle.h> @implementation SKApplicationController @@ -134,13 +135,8 @@ [self showReleaseNotes:nil]; [[NSUserDefaults standardUserDefaults] setObject:versionString forKey:SKLastVersionLaunchedKey]; } - [[SKUpdateChecker sharedChecker] scheduleUpdateCheckIfNeeded]; } -- (IBAction)checkForUpdates:(id)sender{ - [[SKUpdateChecker sharedChecker] checkForUpdates:sender]; -} - - (IBAction)showPreferencePanel:(id)sender{ [[SKPreferenceController sharedPrefenceController] showWindow:self]; } @@ -181,4 +177,8 @@ } } +- (SUUpdater *)updater { + return updater; +} + @end Modified: trunk/SKPreferenceController.h =================================================================== --- trunk/SKPreferenceController.h 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKPreferenceController.h 2007-04-10 20:06:56 UTC (rev 1796) @@ -53,6 +53,7 @@ - (NSArray *)sizes; - (IBAction)changeDiscreteThumbnailSizes:(id)sender; +- (IBAction)changeUpdateInterval:(id)sender; - (IBAction)resetAll:(id)sender; - (IBAction)resetCurrent:(id)sender; Modified: trunk/SKPreferenceController.m =================================================================== --- trunk/SKPreferenceController.m 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKPreferenceController.m 2007-04-10 20:06:56 UTC (rev 1796) @@ -39,8 +39,9 @@ #import "SKPreferenceController.h" #import "SKStringConstants.h" #import "NSUserDefaultsController_SKExtensions.h" +#import "SKApplicationController.h" +#import <Sparkle/Sparkle.h> - @implementation SKPreferenceController + (id)sharedPrefenceController { @@ -109,6 +110,12 @@ [snapshotSizeSlider sizeToFit]; } +- (IBAction)changeUpdateInterval:(id)sender { + int checkInterval = [[sender selectedItem] tag]; + if (checkInterval) + [[[NSApp delegate] updater] scheduleCheckWithInterval:checkInterval]; +} + - (IBAction)resetNoteColors:(id)sender { [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValuesForKeys: [NSArray arrayWithObjects:SKFreeTextNoteColorKey, SKAnchoredNoteColorKey, SKCircleNoteColorKey, SKSquareNoteColorKey, @@ -124,11 +131,8 @@ if (returnCode == NSAlertDefaultReturn) { NSString *tabID = (NSString *)contextInfo; NSArray *keys = nil; - if (tabID == nil) { - [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValues:nil]; - return; - } else if ([tabID isEqualToString:@"general"]) { - keys = [NSArray arrayWithObjects:SKReopenLastOpenFilesKey, SKOpenFilesMaximizedKey, SKOpenContentsPaneOnlyForTOCKey, SKRememberLastPageViewedKey, SKSnapshotsOnTopKey, SKUpdateCheckIntervalKey, SKAutoCheckFileUpdateKey, nil]; + if ([tabID isEqualToString:@"general"]) { + keys = [NSArray arrayWithObjects:SKReopenLastOpenFilesKey, SKOpenFilesMaximizedKey, SKOpenContentsPaneOnlyForTOCKey, SKRememberLastPageViewedKey, SKSnapshotsOnTopKey, SUCheckAtStartupKey, SUScheduledCheckIntervalKey, SKAutoCheckFileUpdateKey, nil]; } else if ([tabID isEqualToString:@"display"]) { keys = [NSArray arrayWithObjects:SKThumbnailSizeKey, SKSnapshotThumbnailSizeKey, SKShouldAntiAliasKey, SKGreekingThresholdKey, nil]; } else if ([tabID isEqualToString:@"colors"]) { @@ -138,6 +142,13 @@ } if (keys) [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValuesForKeys:keys]; + else + [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValues:nil]; + if (keys == nil || [keys containsObject:SUScheduledCheckIntervalKey]) { + int checkInterval = [[NSUserDefaults standardUserDefaults] integerForKey:SUScheduledCheckIntervalKey]; + if (checkInterval) + [[[NSApp delegate] updater] scheduleCheckWithInterval:checkInterval]; + } } } Modified: trunk/SKStringConstants.h =================================================================== --- trunk/SKStringConstants.h 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKStringConstants.h 2007-04-10 20:06:56 UTC (rev 1796) @@ -51,9 +51,6 @@ extern NSString *SKSnapshotsOnTopKey; extern NSString *SKSnapshotThumbnailSizeKey; extern NSString *SKThumbnailSizeKey; -extern NSString *SKUpdateCheckIntervalKey; -extern NSString *SKUpdateCheckLastDateKey; -extern NSString *SKUpdateLatestNotifiedVersionKey; extern NSString *SKLastToolModeKey; extern NSString *SKShouldAntiAliasKey; extern NSString *SKGreekingThresholdKey; Modified: trunk/SKStringConstants.m =================================================================== --- trunk/SKStringConstants.m 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKStringConstants.m 2007-04-10 20:06:56 UTC (rev 1796) @@ -52,9 +52,6 @@ NSString *SKSnapshotsOnTopKey = @"SKSnapshotsOnTop"; NSString *SKSnapshotThumbnailSizeKey = @"SKSnapshotThumbnailSize"; NSString *SKThumbnailSizeKey = @"SKThumbnailSize"; -NSString *SKUpdateCheckIntervalKey = @"SKUpdateCheckInterval"; -NSString *SKUpdateCheckLastDateKey = @"SKUpdateCheckLastDate"; -NSString *SKUpdateLatestNotifiedVersionKey = @"SKUpdateLatestNotifiedVersion"; NSString *SKLastToolModeKey = @"SKLastToolMode"; NSString *SKShouldAntiAliasKey = @"SKShouldAntiAlias"; NSString *SKGreekingThresholdKey = @"SKGreekingThreshold"; Deleted: trunk/SKUpdateChecker.h =================================================================== --- trunk/SKUpdateChecker.h 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKUpdateChecker.h 2007-04-10 20:06:56 UTC (rev 1796) @@ -1,67 +0,0 @@ -// -// SKUpdateChecker.h -// Skim -// -// Created by Adam Maxwell on 10/11/06. -/* - This software is Copyright (c) 2006,2007 - Adam Maxwell. 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 Adam Maxwell nor the names of any - 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 <Cocoa/Cocoa.h> - - -// Tags are used as integer constants in the prefs -typedef enum { - SKCheckForUpdatesNever = -1, - SKCheckForUpdatesHourly = 0, - SKCheckForUpdatesDaily = 1, - SKCheckForUpdatesWeekly = 2, - SKCheckForUpdatesMonthly = 3 -} SKUpdateCheckInterval; - -@class SKVersionNumber, SKReleaseNotesController; - -@interface SKUpdateChecker : NSObject { - NSLock *plistLock; - NSDictionary *propertyListFromServer; - NSTimer *updateTimer; - SKVersionNumber *localVersionNumber; - NSString *keyForCurrentMajorVersion; - SKReleaseNotesController *releaseNotesController; -} - -// API -+ (id)sharedChecker; -- (void)scheduleUpdateCheckIfNeeded; -- (IBAction)checkForUpdates:(id)sender; - -@end Deleted: trunk/SKUpdateChecker.m =================================================================== --- trunk/SKUpdateChecker.m 2007-04-10 19:50:20 UTC (rev 1795) +++ trunk/SKUpdateChecker.m 2007-04-10 20:06:56 UTC (rev 1796) @@ -1,589 +0,0 @@ -// -// SKUpdateChecker.m -// Skim -// -// Created by Adam Maxwell on 10/11/06. -/* - This software is Copyright (c) 2006,2007 - Adam Maxwell. 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 Adam Maxwell nor the names of any - 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 "SKUpdateChecker.h" -#import "SKVersionNumber.h" -#import "NSUserDefaultsController_SKExtensions.h" -#import "SKReleaseNotesController.h" -#import "SKStringConstants.h" - -#define PROPERTY_LIST_URL @"http://skim-app.sourceforge.net/skim-versions-xml.txt" -#define DOWNLOAD_URL @"http://skim-app.sourceforge.net/" -#define SKIM_VERSION_KEY @"Skim" - -static NSString *SKErrorDomain = @"net.sourceforge.skim-app.skim.errors"; - -enum { - kSKNetworkConnectionFailed, - kSKPropertyListDeserializationFailed -}; - -@interface SKUpdateChecker (Private) - -- (NSURL *)propertyListURL; -- (NSURL *)releaseNotesURLForVersion:(NSString *)versionString; -- (NSString *)keyForVersion:(NSString *)versionString; -- (SKVersionNumber *)latestReleasedVersionNumber; -- (SKVersionNumber *)latestReleasedVersionNumberForCurrentMajor; -- (SKVersionNumber *)latestNotifiedVersionNumber; -- (SKVersionNumber *)localVersionNumber; -- (BOOL)downloadPropertyListFromServer:(NSError **)error; - -- (void)setUpdateTimer:(NSTimer *)aTimer; -- (CFGregorianUnits)updateCheckGregorianUnits; -- (NSTimeInterval)updateCheckTimeInterval; -- (NSDate *)nextUpdateCheckDate; -- (BOOL)checkForNetworkAvailability:(NSError **)error; -- (void)checkForUpdatesInBackground:(NSTimer *)timer; -- (void)checkForUpdatesInBackground; - -- (void)displayUpdateAvailableWindow:(NSArray *)latestVersions; -- (void)downloadAndDisplayReleaseNotesForVersion:(NSString *)versionString; - -@end - -#pragma mark - - -@implementation SKUpdateChecker - -+ (id)sharedChecker; -{ - static id sharedInstance = nil; - if (nil == sharedInstance) - sharedInstance = [[self alloc] init]; - return sharedInstance; -} - -- (id)init -{ - if (self = [super init]) { - plistLock = [[NSLock alloc] init]; - propertyListFromServer = nil; - keyForCurrentMajorVersion = nil; - updateTimer = nil; - - NSString *versionString = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; - localVersionNumber = [[SKVersionNumber alloc] initWithVersionString:versionString]; - keyForCurrentMajorVersion = [[self keyForVersion:versionString] retain]; - - [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKey:SKUpdateCheckIntervalKey]; - } - return self; -} - -- (void)dealloc -{ - [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKey:SKUpdateCheckIntervalKey]; - - // these objects are only accessed from the main thread - [releaseNotesController release]; - [self setUpdateTimer:nil]; - - // propertyListFromServer is currently the only object shared between threads - [plistLock lock]; - [propertyListFromServer release]; - propertyListFromServer = nil; - [plistLock unlock]; - [plistLock release]; - plistLock = nil; - - // ...well, also these, but they don't change and dealloc is never called anyway - [localVersionNumber release]; - localVersionNumber = nil; - [keyForCurrentMajorVersion release]; - keyForCurrentMajorVersion = nil; - - [super dealloc]; -} - -- (void)scheduleUpdateCheckIfNeeded; -{ - // unschedule any current timers - [self setUpdateTimer:nil]; - - // don't schedule a new timer if updateCheckInterval is zero - if ([self updateCheckTimeInterval] > 0) { - - NSDate *nextCheckDate = [self nextUpdateCheckDate]; - - // if the date is past, check immediately - if ([nextCheckDate timeIntervalSinceNow] <= 0) { - [self checkForUpdatesInBackground:nil]; - - } else { - - // timer will be invalidated after it fires - NSTimer *timer = [[NSTimer alloc] initWithFireDate:nextCheckDate - interval:[self updateCheckTimeInterval] - target:self - selector:@selector(checkForUpdatesInBackground:) - userInfo:nil repeats:NO]; - - [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; - [self setUpdateTimer:timer]; - [timer release]; - } - } -} - -- (IBAction)checkForUpdates:(id)sender; -{ - // reset date of last check and reschedule the timer - [[NSUserDefaults standardUserDefaults] setObject:[[NSDate date] description] forKey:SKUpdateCheckLastDateKey]; - [self scheduleUpdateCheckIfNeeded]; - - // check for network availability and display a warning if it's down - NSError *error = nil; - if([self checkForNetworkAvailability:&error] == NO || [self downloadPropertyListFromServer:&error] == NO) { - - // display a warning based on the error and bail out now - [NSApp presentError:error]; - return; - } - - SKVersionNumber *remoteVersion = [self latestReleasedVersionNumber]; - SKVersionNumber *remoteVersionForCurrentMajor = [self latestReleasedVersionNumberForCurrentMajor]; - SKVersionNumber *localVersion = [self localVersionNumber]; - SKVersionNumber *notifiedVersion = [self latestNotifiedVersionNumber]; - - // simplification if we already have the latest major - if(remoteVersionForCurrentMajor && [remoteVersionForCurrentMajor compareToVersionNumber:remoteVersion] != NSOrderedAscending){ - remoteVersion = nil; - } - - if(remoteVersion && (notifiedVersion == nil || [notifiedVersion compareToVersionNumber:remoteVersion] == NSOrderedAscending)){ - [[NSUserDefaults standardUserDefaults] setObject:[remoteVersion cleanVersionString] forKey:SKUpdateLatestNotifiedVersionKey]; - } else if(remoteVersionForCurrentMajor && (notifiedVersion == nil || [notifiedVersion compareToVersionNumber:remoteVersionForCurrentMajor] == NSOrderedAscending)){ - [[NSUserDefaults standardUserDefaults] setObject:[remoteVersionForCurrentMajor cleanVersionString] forKey:SKUpdateLatestNotifiedVersionKey]; - } - - if(remoteVersionForCurrentMajor && [remoteVersionForCurrentMajor compareToVersionNumber:localVersion] == NSOrderedDescending){ - [self displayUpdateAvailableWindow:[NSArray arrayWithObjects:[remoteVersionForCurrentMajor cleanVersionString], [remoteVersion cleanVersionString], nil]]; - } else if(remoteVersion && [remoteVersion compareToVersionNumber:localVersion] == NSOrderedDescending){ - [self displayUpdateAvailableWindow:[NSArray arrayWithObjects:[remoteVersion cleanVersionString], nil]]; - } else if(remoteVersionForCurrentMajor || remoteVersion){ - // tell user software is up to date - NSRunAlertPanel(NSLocalizedString(@"Skim is up to date", @"Title of alert when a the user's software is up to date."), - NSLocalizedString(@"You have the most recent version of Skim.", @"Alert text when the user's software is up to date."), - nil, nil, nil); - } else { - - // likely an error page or other download failure - [NSApp presentError:error]; - } - -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (object == [NSUserDefaultsController sharedUserDefaultsController]) { - if (NO == [keyPath hasPrefix:@"values."]) - return; - NSString *key = [keyPath substringFromIndex:7]; - if ([key isEqualToString:SKUpdateCheckIntervalKey]) { - [self scheduleUpdateCheckIfNeeded]; - } - } -} - -@end - -#pragma mark - - -@implementation SKUpdateChecker (Private) - -#pragma mark Property list - -- (NSURL *)propertyListURL; -{ - return [NSURL URLWithString:PROPERTY_LIST_URL]; -} - -// we assume this is only called /after/ a successful plist download; if not, it returns nil -- (NSURL *)releaseNotesURLForVersion:(NSString *)versionString; -{ - [plistLock lock]; - NSString *URLString = [[[[propertyListFromServer objectForKey:[self keyForVersion:versionString]] objectForKey:@"ReleaseNotesBaseURL"] copy] autorelease]; - [plistLock unlock]; - - NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"RelNotes" ofType:@"rtf"]; - - // should be e.g. English.lproj - NSString *localizationPath = [[resourcePath stringByDeletingLastPathComponent] lastPathComponent]; - URLString = [URLString stringByAppendingPathComponent:localizationPath]; - URLString = [URLString stringByAppendingPathComponent:@"RelNotes.rtf"]; - - return URLString ? [NSURL URLWithString:URLString] : nil; -} - -// string of the form Skim1.3 for Skim 1.3.x; update check info is keyed to a specific branch of development -- (NSString *)keyForVersion:(NSString *)versionString; -{ - SKVersionNumber *versionNumber = [[[SKVersionNumber alloc] initWithVersionString:versionString] autorelease]; - NSAssert([versionNumber componentCount] > 1, @"expect at least 2 version components"); - return [NSString stringWithFormat:@"%@%d.%d", SKIM_VERSION_KEY, [versionNumber componentAtIndex:0], [versionNumber componentAtIndex:1]]; -} - -- (SKVersionNumber *)latestReleasedVersionNumber; -{ - [plistLock lock]; - NSString *versionString = [[[propertyListFromServer objectForKey:SKIM_VERSION_KEY] copy] autorelease]; - [plistLock unlock]; - SKVersionNumber *versionNumber = versionString ? [[[SKVersionNumber alloc] initWithVersionString:versionString] autorelease] : nil; - return versionNumber; -} - -- (SKVersionNumber *)latestReleasedVersionNumberForCurrentMajor; -{ - [plistLock lock]; - NSDictionary *thisBranchDictionary = [[propertyListFromServer objectForKey:keyForCurrentMajorVersion] copy]; - [plistLock unlock]; - SKVersionNumber *versionNumber = thisBranchDictionary ? [[[SKVersionNumber alloc] initWithVersionString:[thisBranchDictionary valueForKey:@"LatestVersion"]] autorelease] : nil; - [thisBranchDictionary release]; - return versionNumber; -} - -- (SKVersionNumber *)latestNotifiedVersionNumber; -{ - NSString *versionString = [[NSUserDefaults standardUserDefaults] stringForKey:SKUpdateLatestNotifiedVersionKey]; - SKVersionNumber *versionNumber = [[[SKVersionNumber alloc] initWithVersionString:versionString] autorelease]; - return versionNumber; -} - -- (SKVersionNumber *)localVersionNumber; -{ - return localVersionNumber; -} - -- (BOOL)downloadPropertyListFromServer:(NSError **)error; -{ - NSError *downloadError = nil; - - // make sure we ignore the cache policy; use default timeout of 60 seconds - NSURLRequest *request = [NSURLRequest requestWithURL:[self propertyListURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0]; - NSURLResponse *response; - - // load it synchronously; either the user requested this on the main thread, or this is the update thread - NSData *theData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&downloadError]; - NSDictionary *versionDictionary = nil; - BOOL success; - - if(nil != theData){ - NSString *err = nil; - versionDictionary = [NSPropertyListSerialization propertyListFromData:(NSData *)theData - mutabilityOption:NSPropertyListImmutable - format:NULL - errorDescription:&err]; - if(nil == versionDictionary){ - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to read the version number from the server", @"Error description"), NSLocalizedDescriptionKey, err, NSLocalizedRecoverySuggestionErrorKey, downloadError, NSUnderlyingErrorKey, nil]; - *error = [[[NSError alloc] initWithDomain:SKErrorDomain code:kSKPropertyListDeserializationFailed userInfo:userInfo] autorelease]; - } - [err release]; - - // s... [truncated message content] |
From: <ama...@us...> - 2007-04-10 19:50:21
|
Revision: 1795 http://skim-app.svn.sourceforge.net/skim-app/?rev=1795&view=rev Author: amaxwell Date: 2007-04-10 12:50:20 -0700 (Tue, 10 Apr 2007) Log Message: ----------- add additional EA of RTF notes when saving; experimental support for agent Modified Paths: -------------- trunk/SKDocument.m Modified: trunk/SKDocument.m =================================================================== --- trunk/SKDocument.m 2007-04-10 19:45:43 UTC (rev 1794) +++ trunk/SKDocument.m 2007-04-10 19:50:20 UTC (rev 1795) @@ -327,6 +327,7 @@ if (outError) *outError = error; NSLog(@"%@: %@", self, error); } + [fm setExtendedAttributeNamed:@"net_sourceforge_skim-app_rtf_notes" toValue:[self notesRTFData] atPath:path options:0 error:NULL]; } return success; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:45:46
|
Revision: 1794 http://skim-app.svn.sourceforge.net/skim-app/?rev=1794&view=rev Author: amaxwell Date: 2007-04-10 12:45:43 -0700 (Tue, 10 Apr 2007) Log Message: ----------- copy filemanager category Added Paths: ----------- SkimNotesAgent/NSFileManager_ExtendedAttributes.m Copied: SkimNotesAgent/NSFileManager_ExtendedAttributes.m (from rev 1793, trunk/NSFileManager_ExtendedAttributes.m) =================================================================== --- SkimNotesAgent/NSFileManager_ExtendedAttributes.m (rev 0) +++ SkimNotesAgent/NSFileManager_ExtendedAttributes.m 2007-04-10 19:45:43 UTC (rev 1794) @@ -0,0 +1,561 @@ +// +// NSFileManager_ExtendedAttributes.m +// +// Created by Adam R. Maxwell on 05/12/05. +// Copyright 2005, 2006, 2007 Adam R. Maxwell. 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 Adam R. Maxwell nor the names of any 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 "NSFileManager_ExtendedAttributes.h" +#include <sys/xattr.h> +#import "bzlib.h" + +@interface NSData (Bzip2) + +- (NSData *) bzip2; +- (NSData *) bzip2WithCompressionSetting:(int)OneToNine; +- (NSData *) bunzip2; + +@end + +// private function to print error messages +static NSString *xattrError(int err, const char *path); + +@implementation NSFileManager (ExtendedAttributes) + +- (NSArray *)extendedAttributeNamesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; +{ + const char *fsPath = [self fileSystemRepresentationWithPath:path]; + NSString *errMsg; + int err; + + int xopts; + + if(follow) + xopts = 0; + else + xopts = XATTR_NOFOLLOW; + + ssize_t bufSize; + ssize_t status; + + // call with NULL as attr name to get the size of the returned buffer + status = listxattr(fsPath, NULL, 0, xopts); + + if(status == -1){ + err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + return nil; + } + + NSZone *zone = NSDefaultMallocZone(); + bufSize = status; + char *namebuf = (char *)NSZoneMalloc(zone, sizeof(char) * bufSize); + NSAssert(namebuf != NULL, @"unable to allocate memory"); + status = listxattr(fsPath, namebuf, bufSize, xopts); + + if(status == -1){ + err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + NSZoneFree(zone, namebuf); + return nil; + } + + int idx, start = 0; + + NSString *attribute = nil; + NSMutableArray *attrs = [NSMutableArray array]; + + // the names are separated by NULL characters + for(idx = 0; idx < bufSize; idx++){ + if(namebuf[idx] == '\0'){ + attribute = [[NSString alloc] initWithBytes:&namebuf[start] length:(idx - start) encoding:NSUTF8StringEncoding]; + if(attribute) [attrs addObject:attribute]; + [attribute release]; + attribute = nil; + start = idx + 1; + } + } + + NSZoneFree(zone, namebuf); + return attrs; +} + +- (NSArray *)allExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; +{ + NSError *anError = nil; + NSArray *attrNames = [self extendedAttributeNamesAtPath:path traverseLink:follow error:&anError]; + if(attrNames == nil){ + if(error) *error = anError; + return nil; + } + + NSEnumerator *e = [attrNames objectEnumerator]; + NSMutableArray *attributes = [NSMutableArray arrayWithCapacity:[attrNames count]]; + NSData *data = nil; + NSString *attrName = nil; + + while(attrName = [e nextObject]){ + data = [self extendedAttributeNamed:attrName atPath:path traverseLink:follow error:&anError]; + if(data != nil){ + [attributes addObject:data]; + } else { + if(error) *error = anError; + return nil; + } + } + return attributes; +} + +#define MAX_XATTR_LENGTH 2048 +#define UNIQUE_VALUE [[NSProcessInfo processInfo] globallyUniqueString] +#define NAME_PREFIX @"net_sourceforge_skim-app_" +#define UNIQUE_KEY @"net_sourceforge_skim-app_unique_key" +#define WRAPPER_KEY @"net_sourceforge_skim-app_has_wrapper" +#define FRAGMENTS_KEY @"net_sourceforge_skim-app_number_of_fragments" + +- (NSData *)extendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; +{ + const char *fsPath = [self fileSystemRepresentationWithPath:path]; + const char *attrName = [attr UTF8String]; + NSString *errMsg; + int err; + + int xopts; + + if(follow) + xopts = 0; + else + xopts = XATTR_NOFOLLOW; + + ssize_t bufSize; + ssize_t status; + status = getxattr(fsPath, attrName, NULL, 0, 0, xopts); + + if(status == -1){ + int err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + return nil; + } + + bufSize = status; + char *namebuf = (char *)NSZoneMalloc(NSDefaultMallocZone(), sizeof(char) * bufSize); + NSAssert(namebuf != NULL, @"unable to allocate memory"); + status = getxattr(fsPath, attrName, namebuf, bufSize, 0, xopts); + + if(status == -1){ + err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + NSZoneFree(NSDefaultMallocZone(), namebuf); + return nil; + } + + // let NSData worry about freeing the buffer + NSData *attribute = [[NSData alloc] initWithBytesNoCopy:namebuf length:bufSize]; + + NSPropertyListFormat format; + NSString *errorString; + + // the plist parser logs annoying messages when failing to parse non-plist data, so sniff the header (this is correct for the binary plist that we use for split data) + static NSData *plistHeaderData = nil; + if (nil == plistHeaderData) { + char *h = "bplist00"; + plistHeaderData = [[NSData alloc] initWithBytes:h length:strlen(h)]; + } + + id plist = nil; + + if ([attribute length] >= [plistHeaderData length] && [plistHeaderData isEqual:[attribute subdataWithRange:NSMakeRange(0, [plistHeaderData length])]]) + plist = [NSPropertyListSerialization propertyListFromData:attribute mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorString]; + + // even if it's a plist, it may not be a dictionary or have the key we're looking for + if (plist && [plist respondsToSelector:@selector(objectForKey:)] && [[plist objectForKey:WRAPPER_KEY] boolValue]) { + + NSString *uniqueValue = [plist objectForKey:UNIQUE_KEY]; + unsigned int i, numberOfFragments = [[plist objectForKey:FRAGMENTS_KEY] unsignedIntValue]; + NSString *name; + + NSMutableData *buffer = [NSMutableData data]; + NSData *subdata; + BOOL success = (nil != uniqueValue && numberOfFragments > 0); + + // reassemble the original data object + for (i = 0; success && i < numberOfFragments; i++) { + name = [NSString stringWithFormat:@"%@-%i", uniqueValue, i]; + subdata = [self extendedAttributeNamed:name atPath:path traverseLink:follow error:error]; + if (nil == subdata) + success = NO; + else + [buffer appendData:subdata]; + } + + [attribute release]; + attribute = success ? [[buffer bunzip2] copy] : nil; + } + return [attribute autorelease]; +} + +- (id)propertyListFromExtendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)traverse error:(NSError **)outError; +{ + NSError *error; + NSData *data = [self extendedAttributeNamed:attr atPath:path traverseLink:traverse error:&error]; + id plist = nil; + if (nil == data) { + if (outError) *outError = [NSError errorWithDomain:@"BDSKErrorDomain" code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, error, NSUnderlyingErrorKey, nil]]; + } else { + NSString *errorString; + plist = [NSPropertyListSerialization propertyListFromData:data + mutabilityOption:NSPropertyListImmutable + format:NULL + errorDescription:&errorString]; + if (nil == plist) { + if (outError) *outError = [NSError errorWithDomain:@"BDSKErrorDomain" code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errorString, NSLocalizedDescriptionKey, nil]]; + [errorString release]; + } + } + return plist; +} + +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toValue:(NSData *)value atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; +{ + + const char *fsPath = [self fileSystemRepresentationWithPath:path]; + const void *data = [value bytes]; + size_t dataSize = [value length]; + const char *attrName = [attr UTF8String]; + NSString *errMsg; + int err; + + // options passed to xattr functions + int xopts = 0; + if(options & kBDSKXattrNoFollow) + xopts = xopts | XATTR_NOFOLLOW; + if(options & kBDSKXattrCreateOnly) + xopts = xopts | XATTR_CREATE; + if(options & kBDSKXattrReplaceOnly) + xopts = xopts | XATTR_REPLACE; + + BOOL success; + + if ((options & kBDSKXattrNoSplitData) == 0 && [value length] > MAX_XATTR_LENGTH) { + + // compress to save space, and so we don't identify this as a plist when reading it (in case it really is plist data) + value = [value bzip2]; + + // this will be a unique identifier for the set of keys we're about to write (appending a counter to the UUID) + NSString *uniqueValue = [NAME_PREFIX stringByAppendingString:UNIQUE_VALUE]; + unsigned numberOfFragments = ([value length] / MAX_XATTR_LENGTH) + ([value length] % MAX_XATTR_LENGTH ? 1 : 0); + NSDictionary *wrapper = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], WRAPPER_KEY, uniqueValue, UNIQUE_KEY, [NSNumber numberWithUnsignedInt:numberOfFragments], FRAGMENTS_KEY, nil]; + NSData *wrapperData = [NSPropertyListSerialization dataFromPropertyList:wrapper format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL]; + NSParameterAssert([wrapperData length] < MAX_XATTR_LENGTH && [wrapperData length] > 0); + + // we don't want to split this dictionary (or compress it) + if (setxattr(fsPath, attrName, [wrapperData bytes], [wrapperData length], 0, xopts)) + success = NO; + else + success = YES; + + // now split the original data value into multiple segments + NSString *name; + unsigned j; + const char *valuePtr = [value bytes]; + + for (j = 0; success && j < numberOfFragments; j++) { + name = [[NSString alloc] initWithFormat:@"%@-%i", uniqueValue, j]; + + char *subdataPtr = (char *)&valuePtr[j * MAX_XATTR_LENGTH]; + unsigned subdataLen = j == numberOfFragments - 1 ? ([value length] - j * MAX_XATTR_LENGTH) : MAX_XATTR_LENGTH; + + // could recurse here, but it's more efficient to use the variables we already have + if (setxattr(fsPath, [name UTF8String], subdataPtr, subdataLen, 0, xopts)) { + NSLog(@"full data length of note named %@ was %d, subdata length was %d (failed on pass %d)", name, [value length], subdataLen, j); + } + [name release]; + } + + } else { + int status = setxattr(fsPath, attrName, data, dataSize, 0, xopts); + if(status == -1){ + err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + success = NO; + } else { + success = YES; + } + } + return success; +} + +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toPropertyListValue:(id)plist atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; +{ + NSString *errorString; + NSData *data = [NSPropertyListSerialization dataFromPropertyList:plist + format:NSPropertyListBinaryFormat_v1_0 + errorDescription:&errorString]; + BOOL success; + if (nil == data) { + if (error) *error = [NSError errorWithDomain:@"BDSKErrorDomain" code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errorString, NSLocalizedDescriptionKey, nil]]; + [errorString release]; + success = NO; + } else { + success = [self setExtendedAttributeNamed:attr toValue:data atPath:path options:options error:error]; + } + return success; +} + +- (BOOL)removeExtendedAttribute:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; +{ + NSParameterAssert(path != nil); + const char *fsPath = [self fileSystemRepresentationWithPath:path]; + const char *attrName = [attr UTF8String]; + NSString *errMsg; + int err; + + int xopts; + + if(follow) + xopts = 0; + else + xopts = XATTR_NOFOLLOW; + + ssize_t bufSize; + ssize_t status; + status = getxattr(fsPath, attrName, NULL, 0, 0, xopts); + + if(status != -1){ + bufSize = status; + char *namebuf = (char *)NSZoneMalloc(NSDefaultMallocZone(), sizeof(char) * bufSize); + NSAssert(namebuf != NULL, @"unable to allocate memory"); + status = getxattr(fsPath, attrName, namebuf, bufSize, 0, xopts); + + if(status != -1){ + + // let NSData worry about freeing the buffer + NSData *attribute = [[NSData alloc] initWithBytesNoCopy:namebuf length:bufSize]; + + NSPropertyListFormat format; + NSString *errorString; + + // the plist parser logs annoying messages when failing to parse non-plist data, so sniff the header (this is correct for the binary plist that we use for split data) + static NSData *plistHeaderData = nil; + if (nil == plistHeaderData) { + char *h = "bplist00"; + plistHeaderData = [[NSData alloc] initWithBytes:h length:strlen(h)]; + } + + id plist = nil; + + if ([attribute length] >= [plistHeaderData length] && [plistHeaderData isEqual:[attribute subdataWithRange:NSMakeRange(0, [plistHeaderData length])]]) + plist = [NSPropertyListSerialization propertyListFromData:attribute mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorString]; + + // even if it's a plist, it may not be a dictionary or have the key we're looking for + if (plist && [plist respondsToSelector:@selector(objectForKey:)] && [[plist objectForKey:WRAPPER_KEY] boolValue]) { + + NSString *uniqueValue = [plist objectForKey:UNIQUE_KEY]; + unsigned int i, numberOfFragments = [[plist objectForKey:FRAGMENTS_KEY] unsignedIntValue]; + NSString *name; + + // remove the sub attributes + for (i = 0; i < numberOfFragments; i++) { + name = [NSString stringWithFormat:@"%@-%i", uniqueValue, i]; + const char *subAttrName = [name UTF8String]; + status = removexattr(fsPath, subAttrName, xopts); + if (status == -1) { + NSLog(@"failed to remove subattribute %@ of attribute named %@", name, attr); + } + } + } + } + } + + status = removexattr(fsPath, attrName, xopts); + + if(status == -1){ + err = errno; + errMsg = xattrError(err, fsPath); + if(error) *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:[NSDictionary dictionaryWithObjectsAndKeys:path, NSFilePathErrorKey, errMsg, NSLocalizedDescriptionKey, nil]]; + return NO; + } else + return YES; +} + +- (BOOL)removeAllExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; +{ + NSArray *allAttributes = [self extendedAttributeNamesAtPath:path traverseLink:follow error:error]; + if (nil == allAttributes) + return NO; + + NSEnumerator *e = [allAttributes objectEnumerator]; + NSString *attrName; + while (attrName = [e nextObject]) { + + // return NO as soon as any single removal fails + if ([self removeExtendedAttribute:attrName atPath:path traverseLink:follow error:error] == NO) + return NO; + } + return YES; +} + +// guaranteed to return non-nil +static NSString *xattrError(const int err, const char *myPath) +{ + NSString *errMsg = nil; + switch (err) + { + case ENOTSUP: + errMsg = NSLocalizedString(@"File system does not support extended attributes or they are disabled.", @"Error description"); + break; + case ERANGE: + errMsg = NSLocalizedString(@"Buffer too small for attribute names.", @"Error description"); + break; + case EPERM: + errMsg = NSLocalizedString(@"This file system object does not support extended attributes.", @"Error description"); + break; + case ENOTDIR: + errMsg = NSLocalizedString(@"A component of the path is not a directory.", @"Error description"); + break; + case ENAMETOOLONG: + errMsg = NSLocalizedString(@"File name too long.", @"Error description"); + break; + case EACCES: + errMsg = NSLocalizedString(@"Search permission denied for this path.", @"Error description"); + break; + case ELOOP: + errMsg = NSLocalizedString(@"Too many symlinks encountered resolving path.", @"Error description"); + break; + case EIO: + errMsg = NSLocalizedString(@"I/O error occurred.", @"Error description"); + break; + case EINVAL: + errMsg = NSLocalizedString(@"Options not recognized.", @"Error description"); + break; + case EEXIST: + errMsg = NSLocalizedString(@"Options contained XATTR_CREATE but the named attribute exists.", @"Error description"); + break; + case ENOATTR: + errMsg = NSLocalizedString(@"The named attribute does not exist.", @"Error description"); + break; + case EROFS: + errMsg = NSLocalizedString(@"Read-only file system. Unable to change attributes.", @"Error description"); + break; + case EFAULT: + errMsg = NSLocalizedString(@"Path or name points to an invalid address.", @"Error description"); + break; + case E2BIG: + errMsg = NSLocalizedString(@"The data size of the extended attribute is too large.", @"Error description"); + break; + case ENOSPC: + errMsg = NSLocalizedString(@"No space left on file system.", @"Error description"); + break; + default: + errMsg = NSLocalizedString(@"Unknown error occurred.", @"Error description"); + break; + } + return errMsg; +} + + +@end + +// +// implementation modified after http://www.cocoadev.com/index.pl?NSDataPlusBzip (removed exceptions) +// + +@implementation NSData (Bzip2) + +- (NSData *)bzip2 { return [self bzip2WithCompressionSetting:5]; } + +- (NSData *)bzip2WithCompressionSetting:(int)compression +{ + int bzret, buffer_size = 1000000; + bz_stream stream = { 0 }; + stream.next_in = (char *)[self bytes]; + stream.avail_in = [self length]; + + NSMutableData *buffer = [[NSMutableData alloc] initWithLength:buffer_size]; + stream.next_out = [buffer mutableBytes]; + stream.avail_out = buffer_size; + + NSMutableData *compressed = [NSMutableData dataWithCapacity:[self length]]; + + BZ2_bzCompressInit(&stream, compression, 0, 0); + BOOL hadError = NO; + do { + bzret = BZ2_bzCompress(&stream, (stream.avail_in) ? BZ_RUN : BZ_FINISH); + if (bzret != BZ_RUN_OK && bzret != BZ_STREAM_END) { + hadError = YES; + compressed = nil; + } else { + [compressed appendBytes:[buffer bytes] length:(buffer_size - stream.avail_out)]; + stream.next_out = [buffer mutableBytes]; + stream.avail_out = buffer_size; + } + } while(bzret != BZ_STREAM_END && NO == hadError); + + BZ2_bzCompressEnd(&stream); + [buffer release]; + + return compressed; +} + +- (NSData *)bunzip2 +{ + int bzret; + bz_stream stream = { 0 }; + stream.next_in = (char *)[self bytes]; + stream.avail_in = [self length]; + + const int buffer_size = 10000; + NSMutableData *buffer = [[NSMutableData alloc] initWithLength:buffer_size]; + stream.next_out = [buffer mutableBytes]; + stream.avail_out = buffer_size; + + NSMutableData *decompressed = [NSMutableData dataWithCapacity:[self length]]; + + BZ2_bzDecompressInit(&stream, 0, NO); + BOOL hadError = NO; + do { + bzret = BZ2_bzDecompress(&stream); + if (bzret != BZ_OK && bzret != BZ_STREAM_END) { + hadError = YES; + decompressed = nil; + } else { + [decompressed appendBytes:[buffer bytes] length:(buffer_size - stream.avail_out)]; + stream.next_out = [buffer mutableBytes]; + stream.avail_out = buffer_size; + } + } while(bzret != BZ_STREAM_END && NO == hadError); + + BZ2_bzCompressEnd(&stream); + [buffer release]; + + return decompressed; +} +@end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:45:17
|
Revision: 1793 http://skim-app.svn.sourceforge.net/skim-app/?rev=1793&view=rev Author: amaxwell Date: 2007-04-10 12:45:15 -0700 (Tue, 10 Apr 2007) Log Message: ----------- copy filemanager category Added Paths: ----------- SkimNotesAgent/NSFileManager_ExtendedAttributes.h Copied: SkimNotesAgent/NSFileManager_ExtendedAttributes.h (from rev 1792, trunk/NSFileManager_ExtendedAttributes.h) =================================================================== --- SkimNotesAgent/NSFileManager_ExtendedAttributes.h (rev 0) +++ SkimNotesAgent/NSFileManager_ExtendedAttributes.h 2007-04-10 19:45:15 UTC (rev 1793) @@ -0,0 +1,145 @@ +// +// NSFileManager_ExtendedAttributes.h +// +// Created by Adam R. Maxwell on 05/12/05. +// Copyright 2005, 2006, 2007 Adam R. Maxwell. 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 Adam R. Maxwell nor the names of any 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 <Cocoa/Cocoa.h> + +typedef UInt32 BDSKXattrFlags; +enum { + kBDSKXattrDefault = 0, /* create or replace, follow symlinks, split data */ + kBDSKXattrNoFollow = 1L << 1, /* don't follow symlinks */ + kBDSKXattrCreateOnly = 1L << 2, /* setting will fail if the attribute already exists */ + kBDSKXattrReplaceOnly = 1L << 3, /* setting will fail if the attribute does not exist */ + kBDSKXattrNoSplitData = 1L << 4 /* don't split data objects into segments */ +}; + +/*! + @category NSFileManager (ExtendedAttributes) + @abstract Provides an Objective-C wrapper for the low-level BSD functions dealing with file attributes. + @discussion (comprehensive description) +*/ +@interface NSFileManager (ExtendedAttributes) + +/*! + @method extendedAttributeNamesAtPath:traverseLink: + @abstract Return a list of extended attributes for the given file. + @discussion Calls <tt>listxattr(2)</tt> to determine all of the extended attributes, and returns them as + an array of NSString objects. Returns nil if an error occurs. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>listxattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Array of strings or nil. +*/ +- (NSArray *)extendedAttributeNamesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method extendedAttributeNamed:atPath:traverseLink:error: + @abstract Return the extended attribute named <tt>attr</tt> for a given file. + @discussion Calls <tt>getxattr(2)</tt> to determine the extended attribute, and returns it as data. + @param attr The attribute name. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>getxattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Data object representing the extended attribute or nil if an error occurred. +*/ +- (NSData *)extendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method allExtendedAttributesAtPath:traverseLink:error: + @abstract Returns all extended attributes for the given file, each as an NSData object. + @discussion (comprehensive description) + @param path (description) + @param follow (description) + @param error (description) + @result (description) +*/ +- (NSArray *)allExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method propertyListFromExtendedAttributeNamed:atPath:traverseLink:error: + @abstract Returns a property list using NSPropertyListSerialization. + @discussion (comprehensive description) + @param attr (description) + @param path (description) + @param traverse (description) + @param outError (description) + @result (description) +*/ +- (id)propertyListFromExtendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)traverse error:(NSError **)outError; + +/*! + @method setExtendedAttributeNamed:toValue:atPath:options:error: + @abstract Sets the value of attribute named <tt>attr</tt> to <tt>value</tt>, which is an NSData object. + @discussion Calls <tt>setxattr(2)</tt> to set the attributes for the file. + @param attr The attribute name. + @param value The value of the attribute as NSData. + @param path Path to the object in the file system. + @param options see BDSKXattrFlags + @param error Error object describing the error if NO was returned. + @result Returns NO if an error occurred. +*/ +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toValue:(NSData *)value atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; + +/*! + @method setExtendedAttributeNamed:toPropertyListValue:atPath:options:error: + @abstract Sets the extended attribute named <tt>attr</tt> to the specified property list. The plist is converted to NSData using NSPropertyListSerialization. + @discussion (comprehensive description) + @param attr (description) + @param plist (description) + @param path (description) + @param options (description) + @param error (description) + @result (description) +*/ +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toPropertyListValue:(id)plist atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; + +/*! + @method removeExtendedAttribute:atPath:followLinks:error: + @abstract Removes the given attribute <tt>attr</tt> from the named file at <tt>path</tt>. + @discussion Calls <tt>removexattr(2)</tt> to remove the given attribute from the file. + @param attr The attribute name. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>removexattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Returns NO if an error occurred. +*/ +- (BOOL)removeExtendedAttribute:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method removeAllExtendedAttributesAtPath:traverseLink:error: + @abstract Removes all extended attributes at the specified path. + @discussion (comprehensive description) + @param path (description) + @param follow (description) + @param error (description) + @result (description) +*/ +- (BOOL)removeAllExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +@end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:43:44
|
Revision: 1792 http://skim-app.svn.sourceforge.net/skim-app/?rev=1792&view=rev Author: amaxwell Date: 2007-04-10 12:43:43 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Retry import of agent. Added Paths: ----------- SkimNotesAgent/ SkimNotesAgent/SkimNotesAgent.1 SkimNotesAgent/SkimNotesAgent.h SkimNotesAgent/SkimNotesAgent.m SkimNotesAgent/SkimNotesAgent.xcodeproj/ SkimNotesAgent/SkimNotesAgent.xcodeproj/amaxwell.mode1v3 SkimNotesAgent/SkimNotesAgent.xcodeproj/project.pbxproj SkimNotesAgent/SkimNotesAgent_Prefix.pch Added: SkimNotesAgent/SkimNotesAgent.1 =================================================================== --- SkimNotesAgent/SkimNotesAgent.1 (rev 0) +++ SkimNotesAgent/SkimNotesAgent.1 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 04/09/07 \" DATE +.Dt TestAgent 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm TestAgent, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file Added: SkimNotesAgent/SkimNotesAgent.h =================================================================== --- SkimNotesAgent/SkimNotesAgent.h (rev 0) +++ SkimNotesAgent/SkimNotesAgent.h 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,15 @@ +/* + * SkimNotesAgent.h + * SkimNotesAgent + * + * Created by Adam Maxwell on 04/10/07. + * Copyright 2007 __MyCompanyName__. All rights reserved. + * + */ + +@protocol ListenerProtocol + +- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; +- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; + +@end Added: SkimNotesAgent/SkimNotesAgent.m =================================================================== --- SkimNotesAgent/SkimNotesAgent.m (rev 0) +++ SkimNotesAgent/SkimNotesAgent.m 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,120 @@ +#import <AppKit/AppKit.h> +#import "NSFileManager_ExtendedAttributes.h" +#import "SkimNotesAgent.h" + +@interface Listener : NSObject +{ + NSConnection *_connection; +} +- (id)initWithServerName:(NSString *)serverName; +- (void)_destroyConnection; +@end + +@implementation Listener + +- (id)initWithServerName:(NSString *)serverName; +{ + self = [super init]; + if (self) { + _connection = [[NSConnection alloc] initWithReceivePort:[NSPort port] sendPort:nil]; + NSProtocolChecker *checker = [NSProtocolChecker protocolCheckerWithTarget:self protocol:@protocol(ListenerProtocol)]; + [_connection setRootObject:checker]; + [_connection setDelegate:self]; + + // user can pass nil, in which case we generate a server name to be read from standard output + if (nil == serverName) + serverName = [[NSProcessInfo processInfo] globallyUniqueString]; + + if ([_connection registerName:serverName] == NO) { + NSLog(@"failed to register connection; another agent process must be running"); + [self _destroyConnection]; + [self release]; + self = nil; + } + NSFileHandle *fh = [NSFileHandle fileHandleWithStandardOutput]; + [fh writeData:[serverName dataUsingEncoding:NSUTF8StringEncoding]]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + +- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; +{ + NSError *error; + NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_rtf_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; + if (nil == data && [error code] != ENOATTR) + NSLog(@"%@", error); + return data; +} + +- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; +{ + NSError *error; + NSString *string = nil; + NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_text_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; + if (nil == data && [error code] != ENOATTR) + NSLog(@"%@", error); + else + string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; + return string; +} + +- (void)_destroyConnection; +{ + [_connection registerName:nil]; + [[_connection receivePort] invalidate]; + [[_connection sendPort] invalidate]; + [_connection invalidate]; + [_connection release]; + _connection = nil; +} + +- (void)portDied:(id)obj +{ + [self _destroyConnection]; + exit(0); +} + +// first app to connect will be the owner of this instance of the program; when the connection dies, so do we +- (BOOL)makeNewConnection:(NSConnection *)newConnection sender:(NSConnection *)parentConnection +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(portDied:) name:NSPortDidBecomeInvalidNotification object:[newConnection sendPort]]; + return YES; +} + + +- (void)applicationWillTerminate:(NSNotification *)aNotification; +{ + [self _destroyConnection]; +} + +@end + +int main (int argc, const char * argv[]) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSArray *args = [[NSProcessInfo processInfo] arguments]; + NSString *serverName = [args count] > 1 ? [args lastObject] : nil; + Listener *listener = [[Listener alloc] initWithServerName:serverName]; + + NSRunLoop *rl = [NSRunLoop currentRunLoop]; + BOOL didRun; + NSDate *distantFuture = [NSDate distantFuture]; + NSAutoreleasePool *__pool = [NSAutoreleasePool new]; + + do { + [__pool release]; + __pool = [NSAutoreleasePool new]; + didRun = [rl runMode:NSDefaultRunLoopMode beforeDate:distantFuture]; + } while (listener && didRun); + [__pool release]; + + [listener release]; + [pool release]; + return 0; +} Added: SkimNotesAgent/SkimNotesAgent.xcodeproj/amaxwell.mode1v3 =================================================================== --- SkimNotesAgent/SkimNotesAgent.xcodeproj/amaxwell.mode1v3 (rev 0) +++ SkimNotesAgent/SkimNotesAgent.xcodeproj/amaxwell.mode1v3 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,1372 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>ActivePerspectiveName</key> + <string>Project</string> + <key>AllowedModules</key> + <array> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Name</key> + <string>Groups and Files Outline View</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Name</key> + <string>Editor</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCTaskListModule</string> + <key>Name</key> + <string>Task List</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCDetailModule</string> + <key>Name</key> + <string>File and Smart Group Detail Viewer</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXBuildResultsModule</string> + <key>Name</key> + <string>Detailed Build Results Viewer</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXProjectFindModule</string> + <key>Name</key> + <string>Project Batch Find Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXBookmarksModule</string> + <key>Name</key> + <string>Bookmarks Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXClassBrowserModule</string> + <key>Name</key> + <string>Class Browser</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXCVSModule</string> + <key>Name</key> + <string>Source Code Control Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXDebugBreakpointsModule</string> + <key>Name</key> + <string>Debug Breakpoints Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCDockableInspector</string> + <key>Name</key> + <string>Inspector</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXOpenQuicklyModule</string> + <key>Name</key> + <string>Open Quickly Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXDebugSessionModule</string> + <key>Name</key> + <string>Debugger</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXDebugCLIModule</string> + <key>Name</key> + <string>Debug Console</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCSnapshotModule</string> + <key>Name</key> + <string>Snapshots Tool</string> + </dict> + </array> + <key>Description</key> + <string>DefaultDescriptionKey</string> + <key>DockingSystemVisible</key> + <false/> + <key>Extension</key> + <string>mode1v3</string> + <key>FavBarConfig</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A1E0BCB3C62001FB821</string> + <key>XCBarModuleItemNames</key> + <dict/> + <key>XCBarModuleItems</key> + <array/> + </dict> + <key>FirstTimeWindowDisplayed</key> + <false/> + <key>Identifier</key> + <string>com.apple.perspectives.project.mode1v3</string> + <key>MajorVersion</key> + <integer>32</integer> + <key>MinorVersion</key> + <integer>1</integer> + <key>Name</key> + <string>Default</string> + <key>Notifications</key> + <array> + <dict> + <key>XCObserverAutoDisconnectKey</key> + <true/> + <key>XCObserverDefintionKey</key> + <dict/> + <key>XCObserverFactoryKey</key> + <string>XCPerspectivesSpecificationIdentifier</string> + <key>XCObserverGUIDKey</key> + <string>XCObserverProjectIdentifier</string> + <key>XCObserverNotificationKey</key> + <string>PBXStatusBuildStateMessageNotification</string> + <key>XCObserverTargetKey</key> + <string>XCMainBuildResultsModuleGUID</string> + <key>XCObserverTriggerKey</key> + <string>awakenModuleWithObserver:</string> + <key>XCObserverValidationKey</key> + <dict/> + </dict> + </array> + <key>OpenEditors</key> + <array> + <dict> + <key>Content</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A2E0BCB3E11001FB821</string> + <key>PBXProjectModuleLabel</key> + <string>SkimNotesAgent.m</string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A2F0BCB3E11001FB821</string> + <key>PBXProjectModuleLabel</key> + <string>SkimNotesAgent.m</string> + <key>_historyCapacity</key> + <integer>0</integer> + <key>bookmark</key> + <string>F9B57A690BCB4576001FB821</string> + <key>history</key> + <array> + <string>F9B57A4D0BCB40B6001FB821</string> + </array> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>Geometry</key> + <dict> + <key>Frame</key> + <string>{{0, 20}, {839, 659}}</string> + <key>PBXModuleWindowStatusBarHidden2</key> + <false/> + <key>RubberWindowFrame</key> + <string>359 132 839 700 0 0 1280 832 </string> + </dict> + </dict> + </array> + <key>PerspectiveWidths</key> + <array> + <integer>-1</integer> + <integer>-1</integer> + </array> + <key>Perspectives</key> + <array> + <dict> + <key>ChosenToolbarItems</key> + <array> + <string>active-target-popup</string> + <string>action</string> + <string>NSToolbarFlexibleSpaceItem</string> + <string>buildOrClean</string> + <string>build-and-goOrGo</string> + <string>com.apple.ide.PBXToolbarStopButton</string> + <string>get-info</string> + <string>toggle-editor</string> + <string>NSToolbarFlexibleSpaceItem</string> + <string>com.apple.pbx.toolbar.searchfield</string> + </array> + <key>ControllerClassBaseName</key> + <string></string> + <key>IconName</key> + <string>WindowOfProjectWithEditor</string> + <key>Identifier</key> + <string>perspective.project</string> + <key>IsVertical</key> + <false/> + <key>Layout</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C37FBAC04509CD000000102</string> + <string>1C37FAAC04509CD000000102</string> + <string>1C08E77C0454961000C914BD</string> + <string>1C37FABC05509CD000000102</string> + <string>1C37FABC05539CD112110102</string> + <string>E2644B35053B69B200211256</string> + <string>1C37FABC04509CD000100104</string> + <string>1CC0EA4004350EF90044410B</string> + <string>1CC0EA4004350EF90041110B</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>1CE0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>yes</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>186</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>08FB7794FE84155DC02AAC07</string> + <string>1C37FABC05509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {186, 338}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <true/> + <key>XCSharingToken</key> + <string>com.apple.Xcode.GFSharingToken</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {203, 356}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>186</real> + </array> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>203pt</string> + </dict> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20306471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>MyNewFile14.java</string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20406471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>MyNewFile14.java</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {482, 0}}</string> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>0pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <true/> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20506471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Detail</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 5}, {482, 351}}</string> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>XCDetailModule</string> + <key>Proportion</key> + <string>351pt</string> + </dict> + </array> + <key>Proportion</key> + <string>482pt</string> + </dict> + </array> + <key>Name</key> + <string>Project</string> + <key>ServiceClasses</key> + <array> + <string>XCModuleDock</string> + <string>PBXSmartGroupTreeModule</string> + <string>XCModuleDock</string> + <string>PBXNavigatorGroup</string> + <string>XCDetailModule</string> + </array> + <key>TableOfContents</key> + <array> + <string>F9B57A2C0BCB3E11001FB821</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>F9B57A2D0BCB3E11001FB821</string> + <string>1CE0B20306471E060097A5F4</string> + <string>1CE0B20506471E060097A5F4</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.defaultV3</string> + </dict> + <dict> + <key>ControllerClassBaseName</key> + <string></string> + <key>IconName</key> + <string>WindowOfProject</string> + <key>Identifier</key> + <string>perspective.morph</string> + <key>IsVertical</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C37FBAC04509CD000000102</string> + <string>1C37FAAC04509CD000000102</string> + <string>1C08E77C0454961000C914BD</string> + <string>1C37FABC05509CD000000102</string> + <string>1C37FABC05539CD112110102</string> + <string>E2644B35053B69B200211256</string> + <string>1C37FABC04509CD000100104</string> + <string>1CC0EA4004350EF90044410B</string> + <string>1CC0EA4004350EF90041110B</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>11E0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>yes</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>186</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>29B97314FDCFA39411CA2CEA</string> + <string>1C37FABC05509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {186, 337}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <integer>1</integer> + <key>XCSharingToken</key> + <string>com.apple.Xcode.GFSharingToken</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {203, 355}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>186</real> + </array> + <key>RubberWindowFrame</key> + <string>373 269 690 397 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Morph</string> + <key>PreferredWidth</key> + <integer>300</integer> + <key>ServiceClasses</key> + <array> + <string>XCModuleDock</string> + <string>PBXSmartGroupTreeModule</string> + </array> + <key>TableOfContents</key> + <array> + <string>11E0B1FE06471DED0097A5F4</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.default.shortV3</string> + </dict> + </array> + <key>PerspectivesBarVisible</key> + <false/> + <key>ShelfIsVisible</key> + <false/> + <key>SourceDescription</key> + <string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string> + <key>StatusbarIsVisible</key> + <true/> + <key>TimeStamp</key> + <real>197870966.10195199</real> + <key>ToolbarDisplayMode</key> + <integer>1</integer> + <key>ToolbarIsVisible</key> + <true/> + <key>ToolbarSizeMode</key> + <integer>1</integer> + <key>Type</key> + <string>Perspectives</string> + <key>UpdateMessage</key> + <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string> + <key>WindowJustification</key> + <integer>5</integer> + <key>WindowOrderList</key> + <array> + <string>/Volumes/Local/Users/amaxwell/Desktop/SkimNotesAgent/SkimNotesAgent.xcodeproj</string> + <string>F9B57A2E0BCB3E11001FB821</string> + <string>F9B57A310BCB3E11001FB821</string> + </array> + <key>WindowString</key> + <string>547 435 690 397 0 0 1280 832 </string> + <key>WindowToolsV3</key> + <array> + <dict> + <key>FirstTimeWindowDisplayed</key> + <false/> + <key>Identifier</key> + <string>windowTool.build</string> + <key>IsVertical</key> + <true/> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528F0623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string></string> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {500, 218}}</string> + <key>RubberWindowFrame</key> + <string>731 40 500 500 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>218pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <true/> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>XCMainBuildResultsModuleGUID</string> + <key>PBXProjectModuleLabel</key> + <string>Build</string> + <key>XCBuildResultsTrigger_Collapse</key> + <integer>1021</integer> + <key>XCBuildResultsTrigger_Open</key> + <integer>1010</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 223}, {500, 236}}</string> + <key>RubberWindowFrame</key> + <string>731 40 500 500 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXBuildResultsModule</string> + <key>Proportion</key> + <string>236pt</string> + </dict> + </array> + <key>Proportion</key> + <string>459pt</string> + </dict> + </array> + <key>Name</key> + <string>Build Results</string> + <key>ServiceClasses</key> + <array> + <string>PBXBuildResultsModule</string> + </array> + <key>StatusbarIsVisible</key> + <true/> + <key>TableOfContents</key> + <array> + <string>F9B57A310BCB3E11001FB821</string> + <string>F9B57A320BCB3E11001FB821</string> + <string>1CD0528F0623707200166675</string> + <string>XCMainBuildResultsModuleGUID</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.buildV3</string> + <key>WindowString</key> + <string>731 40 500 500 0 0 1280 832 </string> + <key>WindowToolGUID</key> + <string>F9B57A310BCB3E11001FB821</string> + <key>WindowToolIsVisible</key> + <true/> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debugger</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>Debugger</key> + <dict> + <key>HorizontalSplitView</key> + <dict> + <key>_collapsingFrameDimension</key> + <real>0.0</real> + <key>_indexOfCollapsedView</key> + <integer>0</integer> + <key>_percentageOfCollapsedView</key> + <real>0.0</real> + <key>isCollapsed</key> + <string>yes</string> + <key>sizes</key> + <array> + <string>{{0, 0}, {317, 164}}</string> + <string>{{317, 0}, {377, 164}}</string> + </array> + </dict> + <key>VerticalSplitView</key> + <dict> + <key>_collapsingFrameDimension</key> + <real>0.0</real> + <key>_indexOfCollapsedView</key> + <integer>0</integer> + <key>_percentageOfCollapsedView</key> + <real>0.0</real> + <key>isCollapsed</key> + <string>yes</string> + <key>sizes</key> + <array> + <string>{{0, 0}, {694, 164}}</string> + <string>{{0, 164}, {694, 216}}</string> + </array> + </dict> + </dict> + <key>LauncherConfigVersion</key> + <string>8</string> + <key>PBXProjectModuleGUID</key> + <string>1C162984064C10D400B95A72</string> + <key>PBXProjectModuleLabel</key> + <string>Debug - GLUTExamples (Underwater)</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>DebugConsoleDrawerSize</key> + <string>{100, 120}</string> + <key>DebugConsoleVisible</key> + <string>None</string> + <key>DebugConsoleWindowFrame</key> + <string>{{200, 200}, {500, 300}}</string> + <key>DebugSTDIOWindowFrame</key> + <string>{{200, 200}, {500, 300}}</string> + <key>Frame</key> + <string>{{0, 0}, {694, 380}}</string> + <key>RubberWindowFrame</key> + <string>321 238 694 422 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXDebugSessionModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Debugger</string> + <key>ServiceClasses</key> + <array> + <string>PBXDebugSessionModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1CD10A99069EF8BA00B06720</string> + <string>1C0AD2AB069F1E9B00FABCE6</string> + <string>1C162984064C10D400B95A72</string> + <string>1C0AD2AC069F1E9B00FABCE6</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.debugV3</string> + <key>WindowString</key> + <string>321 238 694 422 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1CD10A99069EF8BA00B06720</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.find</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CDD528C0622207200134675</string> + <key>PBXProjectModuleLabel</key> + <string><No Editor></string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528D0623707200166675</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <integer>1</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {781, 167}}</string> + <key>RubberWindowFrame</key> + <string>62 385 781 470 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>781pt</string> + </dict> + </array> + <key>Proportion</key> + <string>50%</string> + </dict> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528E0623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string>Project Find</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{8, 0}, {773, 254}}</string> + <key>RubberWindowFrame</key> + <string>62 385 781 470 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXProjectFindModule</string> + <key>Proportion</key> + <string>50%</string> + </dict> + </array> + <key>Proportion</key> + <string>428pt</string> + </dict> + </array> + <key>Name</key> + <string>Project Find</string> + <key>ServiceClasses</key> + <array> + <string>PBXProjectFindModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C530D57069F1CE1000CFCEE</string> + <string>1C530D58069F1CE1000CFCEE</string> + <string>1C530D59069F1CE1000CFCEE</string> + <string>1CDD528C0622207200134675</string> + <string>1C530D5A069F1CE1000CFCEE</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>1CD0528E0623707200166675</string> + </array> + <key>WindowString</key> + <string>62 385 781 470 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1C530D57069F1CE1000CFCEE</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>MENUSEPARATOR</string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debuggerConsole</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAAC065D492600B07095</string> + <key>PBXProjectModuleLabel</key> + <string>Debugger Console</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {650, 250}}</string> + <key>RubberWindowFrame</key> + <string>650 41 650 250 0 0 1280 1002 </string> + </dict> + <key>Module</key> + <string>PBXDebugCLIModule</string> + <key>Proportion</key> + <string>358pt</string> + </dict> + </array> + <key>Proportion</key> + <string>358pt</string> + </dict> + </array> + <key>Name</key> + <string>Debugger Console</string> + <key>ServiceClasses</key> + <array> + <string>PBXDebugCLIModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C78EAAD065D492600B07095</string> + <string>1C78EAAE065D492600B07095</string> + <string>1C78EAAC065D492600B07095</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.consoleV3</string> + <key>WindowString</key> + <string>650 41 650 250 0 0 1280 1002 </string> + <key>WindowToolGUID</key> + <string>1C78EAAD065D492600B07095</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.snapshots</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>XCSnapshotModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Snapshots</string> + <key>ServiceClasses</key> + <array> + <string>XCSnapshotModule</string> + </array> + <key>StatusbarIsVisible</key> + <string>Yes</string> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.snapshots</string> + <key>WindowString</key> + <string>315 824 300 550 0 0 1440 878 </string> + <key>WindowToolIsVisible</key> + <string>Yes</string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.scm</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAB2065D492600B07095</string> + <key>PBXProjectModuleLabel</key> + <string><No Editor></string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAB3065D492600B07095</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <integer>1</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {452, 0}}</string> + <key>RubberWindowFrame</key> + <string>743 379 452 308 0 0 1280 1002 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>0pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD052920623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string>SCM</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>ConsoleFrame</key> + <string>{{0, 259}, {452, 0}}</string> + <key>Frame</key> + <string>{{0, 7}, {452, 259}}</string> + <key>RubberWindowFrame</key> + <string>743 379 452 308 0 0 1280 1002 </string> + <key>TableConfiguration</key> + <array> + <string>Status</string> + <real>30</real> + <string>FileName</string> + <real>199</real> + <string>Path</string> + <real>197.09500122070312</real> + </array> + <key>TableFrame</key> + <string>{{0, 0}, {452, 250}}</string> + </dict> + <key>Module</key> + <string>PBXCVSModule</string> + <key>Proportion</key> + <string>262pt</string> + </dict> + </array> + <key>Proportion</key> + <string>266pt</string> + </dict> + </array> + <key>Name</key> + <string>SCM</string> + <key>ServiceClasses</key> + <array> + <string>PBXCVSModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C78EAB4065D492600B07095</string> + <string>1C78EAB5065D492600B07095</string> + <string>1C78EAB2065D492600B07095</string> + <string>1CD052920623707200166675</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.scm</string> + <key>WindowString</key> + <string>743 379 452 308 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.breakpoints</string> + <key>IsVertical</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C77FABC04509CD000000102</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>1CE0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>no</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>168</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>1C77FABC04509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {168, 350}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <integer>0</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {185, 368}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>168</real> + </array> + <key>RubberWindowFrame</key> + <string>315 424 744 409 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>185pt</string> + </dict> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CA1AED706398EBD00589147</string> + <key>PBXProjectModuleLabel</key> + <string>Detail</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{190, 0}, {554, 368}}</string> + <key>RubberWindowFrame</key> + <string>315 424 744 409 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>XCDetailModule</string> + <key>Proportion</key> + <string>554pt</string> + </dict> + </array> + <key>Proportion</key> + <string>368pt</string> + </dict> + </array> + <key>MajorVersion</key> + <integer>3</integer> + <key>MinorVersion</key> + <integer>0</integer> + <key>Name</key> + <string>Breakpoints</string> + <key>ServiceClasses</key> + <array> + <string>PBXSmartGroupTreeModule</string> + <string>XCDetailModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1CDDB66807F98D9800BB5817</string> + <string>1CDDB66907F98D9800BB5817</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>1CA1AED706398EBD00589147</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.breakpointsV3</string> + <key>WindowString</key> + <string>315 424 744 409 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1CDDB66807F98D9800BB5817</string> + <key>WindowToolIsVisible</key> + <integer>1</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debugAnimator</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Debug Visualizer</string> + <key>ServiceClasses</key> + <array> + <string>PBXNavigatorGroup</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.debugAnimatorV3</string> + <key>WindowString</key> + <string>100 100 700 500 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.bookmarks</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>PBXBookmarksModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Bookmarks</string> + <key>ServiceClasses</key> + <array> + <string>PBXBookmarksModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>0</integer> + <key>WindowString</key> + <string>538 42 401 187 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.classBrowser</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>OptionsSetName</key> + <string>Hierarchy, all classes</string> + <key>PBXProjectModuleGUID</key> + <string>1CA6456E063B45B4001379D8</string> + <key>PBXProjectModuleLabel</key> + <string>Class Browser - NSObject</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>ClassesFrame</key> + <string>{{0, 0}, {374, 96}}</string> + <key>ClassesTreeTableConfiguration</key> + <array> + <string>PBXClassNameColumnIdentifier</string> + <real>208</real> + <string>PBXClassBookColumnIdentifier</string> + <real>22</real> + </array> + <key>Frame</key> + <string>{{0, 0}, {630, 331}}</string> + <key>MembersFrame</key> + <string>{{0, 105}, {374, 395}}</string> + <key>MembersTreeTableConfiguration</key> + <array> + <string>PBXMemberTypeIconColumnIdentifier</string> + <real>22</real> + <string>PBXMemberNameColumnIdentifier</string> + <real>216</real> + <string>PBXMemberTypeColumnIdentifier</string> + <real>97</real> + <string>PBXMemberBookColumnIdentifier</string> + <real>22</real> + </array> + <key>PBXModuleWindowStatusBarHidden2</key> + <integer>1</integer> + <key>RubberWindowFrame</key> + <string>385 179 630 352 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXClassBrowserModule</string> + <key>Proportion</key> + <string>332pt</string> + </dict> + </array> + <key>Proportion</key> + <string>332pt</string> + </dict> + </array> + <key>Name</key> + <string>Class Browser</string> + <key>ServiceClasses</key> + <array> + <string>PBXClassBrowserModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>0</integer> + <key>TableOfContents</key> + <array> + <string>1C0AD2AF069F1E9B00FABCE6</string> + <string>1C0AD2B0069F1E9B00FABCE6</string> + <string>1CA6456E063B45B4001379D8</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.classbrowser</string> + <key>WindowString</key> + <string>385 179 630 352 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1C0AD2AF069F1E9B00FABCE6</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.refactoring</string> + <key>IncludeInToolsMenu</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{0, 0}, {500, 335}</string> + <key>RubberWindowFrame</key> + <string>{0, 0}, {500, 335}</string> + </dict> + <key>Module</key> + <string>XCRefactoringModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Refactoring</string> + <key>ServiceClasses</key> + <array> + <string>XCRefactoringModule</string> + </array> + <key>WindowString</key> + <string>200 200 500 356 0 0 1920 1200 </string> + </dict> + </array> +</dict> +</plist> Added: SkimNotesAgent/SkimNotesAgent.xcodeproj/project.pbxproj =================================================================== --- SkimNotesAgent/SkimNotesAgent.xcodeproj/project.pbxproj (rev 0) +++ SkimNotesAgent/SkimNotesAgent.xcodeproj/project.pbxproj 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,233 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 8DD76F9A0486AA7600D96B5E /* SkimNotesAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */; settings = {ATTRIBUTES = (); }; }; + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; + 8DD76F9F0486AA7600D96B5E /* SkimNotesAgent.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */; }; + F92BA40B0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */; }; + F92BA40C0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */; }; + F92BA4C90BCAF96A008D5BC3 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */; }; + F92BAD7A0BCC0E02008D5BC3 /* SkimNotesAgent.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 8DD76F9F0486AA7600D96B5E /* SkimNotesAgent.1 in CopyFiles */, + F92BA40B0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h in CopyFiles */, + F92BAD7A0BCC0E02008D5BC3 /* SkimNotesAgent.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SkimNotesAgent.m; sourceTree = "<group>"; }; + 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; + 32A70AAB03705E1F00C91783 /* SkimNotesAgent_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkimNotesAgent_Prefix.pch; sourceTree = "<group>"; }; + 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = SkimNotesAgent; sourceTree = BUILT_PRODUCTS_DIR; }; + C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = SkimNotesAgent.1; sourceTree = "<group>"; }; + F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSFileManager_ExtendedAttributes.h; sourceTree = "<group>"; }; + F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSFileManager_ExtendedAttributes.m; sourceTree = "<group>"; }; + F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = /usr/lib/libbz2.dylib; sourceTree = "<absolute>"; }; + F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkimNotesAgent.h; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F9B0486AA7600D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */, + F92BA4C90BCAF96A008D5BC3 /* libbz2.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* SkimNotesAgent */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + C6859EA2029092E104C91782 /* Documentation */, + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = SkimNotesAgent; + sourceTree = "<group>"; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */, + F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */, + F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */, + 32A70AAB03705E1F00C91783 /* SkimNotesAgent_Prefix.pch */, + 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */, + ); + name = Source; + sourceTree = "<group>"; + }; + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */, + 08FB779EFE84155DC02AAC07 /* Foundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = "<group>"; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */, + ); + name = Products; + sourceTree = "<group>"; + }; + C6859EA2029092E104C91782 /* Documentation */ = { + isa = PBXGroup; + children = ( + C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */, + ); + name = Documentation; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F960486AA7600D96B5E /* SkimNotesAgent */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "SkimNotesAgent" */; + buildPhases = ( + 8DD76F990486AA7600D96B5E /* Sources */, + 8DD76F9B0486AA7600D96B5E /* Frameworks */, + 8DD76F9E0486AA7600D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SkimNotesAgent; + productInstallPath = "$(HOME)/bin"; + productName = SkimNotesAgent; + productReference = 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "SkimNotesAgent" */; + hasScannedForEncodings = 1; + mainGroup = 08FB7794FE84155DC02AAC07 /* SkimNotesAgent */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F960486AA7600D96B5E /* SkimNotesAgent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F990486AA7600D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9A0486AA7600D96B5E /* SkimNotesAgent.m in Sources */, + F92BA40C0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB927508733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = SkimNotesAgent_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = SkimNotesAgent; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB927608733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = SkimNotesAgent_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = SkimNotesAgent; + }; + name = Release; + }; + 1DEB927908733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB927A08733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "SkimNotesAgent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927508733DD40010E9CD /* Debug */, + 1DEB927608733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "SkimNotesAgent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927908733DD40010E9CD /* Debug */, + 1DEB927A08733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} Added: SkimNotesAgent/SkimNotesAgent_Prefix.pch =================================================================== --- SkimNotesAgent/SkimNotesAgent_Prefix.pch (rev 0) +++ SkimNotesAgent/SkimNotesAgent_Prefix.pch 2007-04-10 19:43:43 UTC (rev 1792) @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TestAgent' target in the 'TestAgent' project. +// + +#ifdef __OBJC__ + #import <Foundation/Foundation.h> +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:43:08
|
Revision: 1791 http://skim-app.svn.sourceforge.net/skim-app/?rev=1791&view=rev Author: amaxwell Date: 2007-04-10 12:43:06 -0700 (Tue, 10 Apr 2007) Log Message: ----------- delete file Removed Paths: ------------- SkimNotesAgent.1 Deleted: SkimNotesAgent.1 =================================================================== --- SkimNotesAgent.1 2007-04-10 19:42:34 UTC (rev 1790) +++ SkimNotesAgent.1 2007-04-10 19:43:06 UTC (rev 1791) @@ -1,79 +0,0 @@ -.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. -.\"See Also: -.\"man mdoc.samples for a complete listing of options -.\"man mdoc for the short list of editing options -.\"/usr/share/misc/mdoc.template -.Dd 04/09/07 \" DATE -.Dt TestAgent 1 \" Program name and manual section number -.Os Darwin -.Sh NAME \" Section Header - required - don't modify -.Nm TestAgent, -.\" The following lines are read in generating the apropos(man -k) database. Use only key -.\" words here as the database is built based on the words here and in the .ND line. -.Nm Other_name_for_same_program(), -.Nm Yet another name for the same program. -.\" Use .Nm macro to designate other names for the documented program. -.Nd This line parsed for whatis database. -.Sh SYNOPSIS \" Section Header - required - don't modify -.Nm -.Op Fl abcd \" [-abcd] -.Op Fl a Ar path \" [-a path] -.Op Ar file \" [file] -.Op Ar \" [file ...] -.Ar arg0 \" Underlined argument - use .Ar anywhere to underline -arg2 ... \" Arguments -.Sh DESCRIPTION \" Section Header - required - don't modify -Use the .Nm macro to refer to your program throughout the man page like such: -.Nm -Underlining is accomplished with the .Ar macro like this: -.Ar underlined text . -.Pp \" Inserts a space -A list of items with descriptions: -.Bl -tag -width -indent \" Begins a tagged list -.It item a \" Each item preceded by .It macro -Description of item a -.It item b -Description of item b -.El \" Ends the list -.Pp -A list of flags and their descriptions: -.Bl -tag -width -indent \" Differs from above in tag removed -.It Fl a \"-a flag as a list item -Description of -a flag -.It Fl b -Description of -b flag -.El \" Ends the list -.Pp -.\" .Sh ENVIRONMENT \" May not be needed -.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 -.\" .It Ev ENV_VAR_1 -.\" Description of ENV_VAR_1 -.\" .It Ev ENV_VAR_2 -.\" Description of ENV_VAR_2 -.\" .El -.Sh FILES \" File used or created by the topic of the man page -.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact -.It Pa /usr/share/file_name -FILE_1 description -.It Pa /Users/joeuser/Library/really_long_file_name -FILE_2 description -.El \" Ends the list -.\" .Sh DIAGNOSTICS \" May not be needed -.\" .Bl -diag -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .El -.Sh SEE ALSO -.\" List links in ascending order by section, alphabetically within a section. -.\" Please do not reference files that do not exist without filing a bug report -.Xr a 1 , -.Xr b 1 , -.Xr c 1 , -.Xr a 2 , -.Xr b 2 , -.Xr a 3 , -.Xr b 3 -.\" .Sh BUGS \" Document known, unremedied bugs -.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:42:36
|
Revision: 1790 http://skim-app.svn.sourceforge.net/skim-app/?rev=1790&view=rev Author: amaxwell Date: 2007-04-10 12:42:34 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Delete files. Removed Paths: ------------- SkimAppAgent SkimNotesAgent.h SkimNotesAgent.m SkimNotesAgent.xcodeproj/ SkimNotesAgent_Prefix.pch Deleted: SkimAppAgent =================================================================== --- SkimAppAgent 2007-04-10 19:37:35 UTC (rev 1789) +++ SkimAppAgent 2007-04-10 19:42:34 UTC (rev 1790) @@ -1,145 +0,0 @@ -// -// NSFileManager_ExtendedAttributes.h -// -// Created by Adam R. Maxwell on 05/12/05. -// Copyright 2005, 2006, 2007 Adam R. Maxwell. 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 Adam R. Maxwell nor the names of any 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 <Cocoa/Cocoa.h> - -typedef UInt32 BDSKXattrFlags; -enum { - kBDSKXattrDefault = 0, /* create or replace, follow symlinks, split data */ - kBDSKXattrNoFollow = 1L << 1, /* don't follow symlinks */ - kBDSKXattrCreateOnly = 1L << 2, /* setting will fail if the attribute already exists */ - kBDSKXattrReplaceOnly = 1L << 3, /* setting will fail if the attribute does not exist */ - kBDSKXattrNoSplitData = 1L << 4 /* don't split data objects into segments */ -}; - -/*! - @category NSFileManager (ExtendedAttributes) - @abstract Provides an Objective-C wrapper for the low-level BSD functions dealing with file attributes. - @discussion (comprehensive description) -*/ -@interface NSFileManager (ExtendedAttributes) - -/*! - @method extendedAttributeNamesAtPath:traverseLink: - @abstract Return a list of extended attributes for the given file. - @discussion Calls <tt>listxattr(2)</tt> to determine all of the extended attributes, and returns them as - an array of NSString objects. Returns nil if an error occurs. - @param path Path to the object in the file system. - @param follow Follow symlinks (<tt>listxattr(2)</tt> does this by default, so typically you should pass YES). - @param error Error object describing the error if nil was returned. - @result Array of strings or nil. -*/ -- (NSArray *)extendedAttributeNamesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; - -/*! - @method extendedAttributeNamed:atPath:traverseLink:error: - @abstract Return the extended attribute named <tt>attr</tt> for a given file. - @discussion Calls <tt>getxattr(2)</tt> to determine the extended attribute, and returns it as data. - @param attr The attribute name. - @param path Path to the object in the file system. - @param follow Follow symlinks (<tt>getxattr(2)</tt> does this by default, so typically you should pass YES). - @param error Error object describing the error if nil was returned. - @result Data object representing the extended attribute or nil if an error occurred. -*/ -- (NSData *)extendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; - -/*! - @method allExtendedAttributesAtPath:traverseLink:error: - @abstract Returns all extended attributes for the given file, each as an NSData object. - @discussion (comprehensive description) - @param path (description) - @param follow (description) - @param error (description) - @result (description) -*/ -- (NSArray *)allExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; - -/*! - @method propertyListFromExtendedAttributeNamed:atPath:traverseLink:error: - @abstract Returns a property list using NSPropertyListSerialization. - @discussion (comprehensive description) - @param attr (description) - @param path (description) - @param traverse (description) - @param outError (description) - @result (description) -*/ -- (id)propertyListFromExtendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)traverse error:(NSError **)outError; - -/*! - @method setExtendedAttributeNamed:toValue:atPath:options:error: - @abstract Sets the value of attribute named <tt>attr</tt> to <tt>value</tt>, which is an NSData object. - @discussion Calls <tt>setxattr(2)</tt> to set the attributes for the file. - @param attr The attribute name. - @param value The value of the attribute as NSData. - @param path Path to the object in the file system. - @param options see BDSKXattrFlags - @param error Error object describing the error if NO was returned. - @result Returns NO if an error occurred. -*/ -- (BOOL)setExtendedAttributeNamed:(NSString *)attr toValue:(NSData *)value atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; - -/*! - @method setExtendedAttributeNamed:toPropertyListValue:atPath:options:error: - @abstract Sets the extended attribute named <tt>attr</tt> to the specified property list. The plist is converted to NSData using NSPropertyListSerialization. - @discussion (comprehensive description) - @param attr (description) - @param plist (description) - @param path (description) - @param options (description) - @param error (description) - @result (description) -*/ -- (BOOL)setExtendedAttributeNamed:(NSString *)attr toPropertyListValue:(id)plist atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; - -/*! - @method removeExtendedAttribute:atPath:followLinks:error: - @abstract Removes the given attribute <tt>attr</tt> from the named file at <tt>path</tt>. - @discussion Calls <tt>removexattr(2)</tt> to remove the given attribute from the file. - @param attr The attribute name. - @param path Path to the object in the file system. - @param follow Follow symlinks (<tt>removexattr(2)</tt> does this by default, so typically you should pass YES). - @param error Error object describing the error if nil was returned. - @result Returns NO if an error occurred. -*/ -- (BOOL)removeExtendedAttribute:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; - -/*! - @method removeAllExtendedAttributesAtPath:traverseLink:error: - @abstract Removes all extended attributes at the specified path. - @discussion (comprehensive description) - @param path (description) - @param follow (description) - @param error (description) - @result (description) -*/ -- (BOOL)removeAllExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; - -@end Deleted: SkimNotesAgent.h =================================================================== --- SkimNotesAgent.h 2007-04-10 19:37:35 UTC (rev 1789) +++ SkimNotesAgent.h 2007-04-10 19:42:34 UTC (rev 1790) @@ -1,15 +0,0 @@ -/* - * SkimNotesAgent.h - * SkimNotesAgent - * - * Created by Adam Maxwell on 04/10/07. - * Copyright 2007 __MyCompanyName__. All rights reserved. - * - */ - -@protocol ListenerProtocol - -- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; -- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; - -@end Deleted: SkimNotesAgent.m =================================================================== --- SkimNotesAgent.m 2007-04-10 19:37:35 UTC (rev 1789) +++ SkimNotesAgent.m 2007-04-10 19:42:34 UTC (rev 1790) @@ -1,120 +0,0 @@ -#import <AppKit/AppKit.h> -#import "NSFileManager_ExtendedAttributes.h" -#import "SkimNotesAgent.h" - -@interface Listener : NSObject -{ - NSConnection *_connection; -} -- (id)initWithServerName:(NSString *)serverName; -- (void)_destroyConnection; -@end - -@implementation Listener - -- (id)initWithServerName:(NSString *)serverName; -{ - self = [super init]; - if (self) { - _connection = [[NSConnection alloc] initWithReceivePort:[NSPort port] sendPort:nil]; - NSProtocolChecker *checker = [NSProtocolChecker protocolCheckerWithTarget:self protocol:@protocol(ListenerProtocol)]; - [_connection setRootObject:checker]; - [_connection setDelegate:self]; - - // user can pass nil, in which case we generate a server name to be read from standard output - if (nil == serverName) - serverName = [[NSProcessInfo processInfo] globallyUniqueString]; - - if ([_connection registerName:serverName] == NO) { - NSLog(@"failed to register connection; another agent process must be running"); - [self _destroyConnection]; - [self release]; - self = nil; - } - NSFileHandle *fh = [NSFileHandle fileHandleWithStandardOutput]; - [fh writeData:[serverName dataUsingEncoding:NSUTF8StringEncoding]]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [super dealloc]; -} - -- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; -{ - NSError *error; - NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_rtf_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; - if (nil == data && [error code] != ENOATTR) - NSLog(@"%@", error); - return data; -} - -- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; -{ - NSError *error; - NSString *string = nil; - NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_text_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; - if (nil == data && [error code] != ENOATTR) - NSLog(@"%@", error); - else - string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; - return string; -} - -- (void)_destroyConnection; -{ - [_connection registerName:nil]; - [[_connection receivePort] invalidate]; - [[_connection sendPort] invalidate]; - [_connection invalidate]; - [_connection release]; - _connection = nil; -} - -- (void)portDied:(id)obj -{ - [self _destroyConnection]; - exit(0); -} - -// first app to connect will be the owner of this instance of the program; when the connection dies, so do we -- (BOOL)makeNewConnection:(NSConnection *)newConnection sender:(NSConnection *)parentConnection -{ - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(portDied:) name:NSPortDidBecomeInvalidNotification object:[newConnection sendPort]]; - return YES; -} - - -- (void)applicationWillTerminate:(NSNotification *)aNotification; -{ - [self _destroyConnection]; -} - -@end - -int main (int argc, const char * argv[]) { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - NSArray *args = [[NSProcessInfo processInfo] arguments]; - NSString *serverName = [args count] > 1 ? [args lastObject] : nil; - Listener *listener = [[Listener alloc] initWithServerName:serverName]; - - NSRunLoop *rl = [NSRunLoop currentRunLoop]; - BOOL didRun; - NSDate *distantFuture = [NSDate distantFuture]; - NSAutoreleasePool *__pool = [NSAutoreleasePool new]; - - do { - [__pool release]; - __pool = [NSAutoreleasePool new]; - didRun = [rl runMode:NSDefaultRunLoopMode beforeDate:distantFuture]; - } while (listener && didRun); - [__pool release]; - - [listener release]; - [pool release]; - return 0; -} Deleted: SkimNotesAgent_Prefix.pch =================================================================== --- SkimNotesAgent_Prefix.pch 2007-04-10 19:37:35 UTC (rev 1789) +++ SkimNotesAgent_Prefix.pch 2007-04-10 19:42:34 UTC (rev 1790) @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'TestAgent' target in the 'TestAgent' project. -// - -#ifdef __OBJC__ - #import <Foundation/Foundation.h> -#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:37:36
|
Revision: 1789 http://skim-app.svn.sourceforge.net/skim-app/?rev=1789&view=rev Author: amaxwell Date: 2007-04-10 12:37:35 -0700 (Tue, 10 Apr 2007) Log Message: ----------- copy filemanager category to agent Added Paths: ----------- SkimAppAgent Copied: SkimAppAgent (from rev 1788, trunk/NSFileManager_ExtendedAttributes.h) =================================================================== --- SkimAppAgent (rev 0) +++ SkimAppAgent 2007-04-10 19:37:35 UTC (rev 1789) @@ -0,0 +1,145 @@ +// +// NSFileManager_ExtendedAttributes.h +// +// Created by Adam R. Maxwell on 05/12/05. +// Copyright 2005, 2006, 2007 Adam R. Maxwell. 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 Adam R. Maxwell nor the names of any 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 <Cocoa/Cocoa.h> + +typedef UInt32 BDSKXattrFlags; +enum { + kBDSKXattrDefault = 0, /* create or replace, follow symlinks, split data */ + kBDSKXattrNoFollow = 1L << 1, /* don't follow symlinks */ + kBDSKXattrCreateOnly = 1L << 2, /* setting will fail if the attribute already exists */ + kBDSKXattrReplaceOnly = 1L << 3, /* setting will fail if the attribute does not exist */ + kBDSKXattrNoSplitData = 1L << 4 /* don't split data objects into segments */ +}; + +/*! + @category NSFileManager (ExtendedAttributes) + @abstract Provides an Objective-C wrapper for the low-level BSD functions dealing with file attributes. + @discussion (comprehensive description) +*/ +@interface NSFileManager (ExtendedAttributes) + +/*! + @method extendedAttributeNamesAtPath:traverseLink: + @abstract Return a list of extended attributes for the given file. + @discussion Calls <tt>listxattr(2)</tt> to determine all of the extended attributes, and returns them as + an array of NSString objects. Returns nil if an error occurs. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>listxattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Array of strings or nil. +*/ +- (NSArray *)extendedAttributeNamesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method extendedAttributeNamed:atPath:traverseLink:error: + @abstract Return the extended attribute named <tt>attr</tt> for a given file. + @discussion Calls <tt>getxattr(2)</tt> to determine the extended attribute, and returns it as data. + @param attr The attribute name. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>getxattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Data object representing the extended attribute or nil if an error occurred. +*/ +- (NSData *)extendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method allExtendedAttributesAtPath:traverseLink:error: + @abstract Returns all extended attributes for the given file, each as an NSData object. + @discussion (comprehensive description) + @param path (description) + @param follow (description) + @param error (description) + @result (description) +*/ +- (NSArray *)allExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method propertyListFromExtendedAttributeNamed:atPath:traverseLink:error: + @abstract Returns a property list using NSPropertyListSerialization. + @discussion (comprehensive description) + @param attr (description) + @param path (description) + @param traverse (description) + @param outError (description) + @result (description) +*/ +- (id)propertyListFromExtendedAttributeNamed:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)traverse error:(NSError **)outError; + +/*! + @method setExtendedAttributeNamed:toValue:atPath:options:error: + @abstract Sets the value of attribute named <tt>attr</tt> to <tt>value</tt>, which is an NSData object. + @discussion Calls <tt>setxattr(2)</tt> to set the attributes for the file. + @param attr The attribute name. + @param value The value of the attribute as NSData. + @param path Path to the object in the file system. + @param options see BDSKXattrFlags + @param error Error object describing the error if NO was returned. + @result Returns NO if an error occurred. +*/ +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toValue:(NSData *)value atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; + +/*! + @method setExtendedAttributeNamed:toPropertyListValue:atPath:options:error: + @abstract Sets the extended attribute named <tt>attr</tt> to the specified property list. The plist is converted to NSData using NSPropertyListSerialization. + @discussion (comprehensive description) + @param attr (description) + @param plist (description) + @param path (description) + @param options (description) + @param error (description) + @result (description) +*/ +- (BOOL)setExtendedAttributeNamed:(NSString *)attr toPropertyListValue:(id)plist atPath:(NSString *)path options:(BDSKXattrFlags)options error:(NSError **)error; + +/*! + @method removeExtendedAttribute:atPath:followLinks:error: + @abstract Removes the given attribute <tt>attr</tt> from the named file at <tt>path</tt>. + @discussion Calls <tt>removexattr(2)</tt> to remove the given attribute from the file. + @param attr The attribute name. + @param path Path to the object in the file system. + @param follow Follow symlinks (<tt>removexattr(2)</tt> does this by default, so typically you should pass YES). + @param error Error object describing the error if nil was returned. + @result Returns NO if an error occurred. +*/ +- (BOOL)removeExtendedAttribute:(NSString *)attr atPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +/*! + @method removeAllExtendedAttributesAtPath:traverseLink:error: + @abstract Removes all extended attributes at the specified path. + @discussion (comprehensive description) + @param path (description) + @param follow (description) + @param error (description) + @result (description) +*/ +- (BOOL)removeAllExtendedAttributesAtPath:(NSString *)path traverseLink:(BOOL)follow error:(NSError **)error; + +@end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ama...@us...> - 2007-04-10 19:35:14
|
Revision: 1788 http://skim-app.svn.sourceforge.net/skim-app/?rev=1788&view=rev Author: amaxwell Date: 2007-04-10 12:35:12 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Import background agent for reading Skim notes. Added Paths: ----------- SkimNotesAgent.1 SkimNotesAgent.h SkimNotesAgent.m SkimNotesAgent.xcodeproj/ SkimNotesAgent.xcodeproj/amaxwell.mode1v3 SkimNotesAgent.xcodeproj/project.pbxproj SkimNotesAgent_Prefix.pch Added: SkimNotesAgent.1 =================================================================== --- SkimNotesAgent.1 (rev 0) +++ SkimNotesAgent.1 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 04/09/07 \" DATE +.Dt TestAgent 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm TestAgent, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file Added: SkimNotesAgent.h =================================================================== --- SkimNotesAgent.h (rev 0) +++ SkimNotesAgent.h 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,15 @@ +/* + * SkimNotesAgent.h + * SkimNotesAgent + * + * Created by Adam Maxwell on 04/10/07. + * Copyright 2007 __MyCompanyName__. All rights reserved. + * + */ + +@protocol ListenerProtocol + +- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; +- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; + +@end Added: SkimNotesAgent.m =================================================================== --- SkimNotesAgent.m (rev 0) +++ SkimNotesAgent.m 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,120 @@ +#import <AppKit/AppKit.h> +#import "NSFileManager_ExtendedAttributes.h" +#import "SkimNotesAgent.h" + +@interface Listener : NSObject +{ + NSConnection *_connection; +} +- (id)initWithServerName:(NSString *)serverName; +- (void)_destroyConnection; +@end + +@implementation Listener + +- (id)initWithServerName:(NSString *)serverName; +{ + self = [super init]; + if (self) { + _connection = [[NSConnection alloc] initWithReceivePort:[NSPort port] sendPort:nil]; + NSProtocolChecker *checker = [NSProtocolChecker protocolCheckerWithTarget:self protocol:@protocol(ListenerProtocol)]; + [_connection setRootObject:checker]; + [_connection setDelegate:self]; + + // user can pass nil, in which case we generate a server name to be read from standard output + if (nil == serverName) + serverName = [[NSProcessInfo processInfo] globallyUniqueString]; + + if ([_connection registerName:serverName] == NO) { + NSLog(@"failed to register connection; another agent process must be running"); + [self _destroyConnection]; + [self release]; + self = nil; + } + NSFileHandle *fh = [NSFileHandle fileHandleWithStandardOutput]; + [fh writeData:[serverName dataUsingEncoding:NSUTF8StringEncoding]]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + +- (bycopy NSData *)RTFNotesAtPath:(in bycopy NSString *)aFile; +{ + NSError *error; + NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_rtf_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; + if (nil == data && [error code] != ENOATTR) + NSLog(@"%@", error); + return data; +} + +- (bycopy NSString *)textNotesAtPath:(in bycopy NSString *)aFile; +{ + NSError *error; + NSString *string = nil; + NSData *data = [[NSFileManager defaultManager] extendedAttributeNamed:@"net_sourceforge_skim-app_text_notes" atPath:[aFile stringByStandardizingPath] traverseLink:YES error:&error]; + if (nil == data && [error code] != ENOATTR) + NSLog(@"%@", error); + else + string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; + return string; +} + +- (void)_destroyConnection; +{ + [_connection registerName:nil]; + [[_connection receivePort] invalidate]; + [[_connection sendPort] invalidate]; + [_connection invalidate]; + [_connection release]; + _connection = nil; +} + +- (void)portDied:(id)obj +{ + [self _destroyConnection]; + exit(0); +} + +// first app to connect will be the owner of this instance of the program; when the connection dies, so do we +- (BOOL)makeNewConnection:(NSConnection *)newConnection sender:(NSConnection *)parentConnection +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(portDied:) name:NSPortDidBecomeInvalidNotification object:[newConnection sendPort]]; + return YES; +} + + +- (void)applicationWillTerminate:(NSNotification *)aNotification; +{ + [self _destroyConnection]; +} + +@end + +int main (int argc, const char * argv[]) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSArray *args = [[NSProcessInfo processInfo] arguments]; + NSString *serverName = [args count] > 1 ? [args lastObject] : nil; + Listener *listener = [[Listener alloc] initWithServerName:serverName]; + + NSRunLoop *rl = [NSRunLoop currentRunLoop]; + BOOL didRun; + NSDate *distantFuture = [NSDate distantFuture]; + NSAutoreleasePool *__pool = [NSAutoreleasePool new]; + + do { + [__pool release]; + __pool = [NSAutoreleasePool new]; + didRun = [rl runMode:NSDefaultRunLoopMode beforeDate:distantFuture]; + } while (listener && didRun); + [__pool release]; + + [listener release]; + [pool release]; + return 0; +} Added: SkimNotesAgent.xcodeproj/amaxwell.mode1v3 =================================================================== --- SkimNotesAgent.xcodeproj/amaxwell.mode1v3 (rev 0) +++ SkimNotesAgent.xcodeproj/amaxwell.mode1v3 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,1372 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>ActivePerspectiveName</key> + <string>Project</string> + <key>AllowedModules</key> + <array> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Name</key> + <string>Groups and Files Outline View</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Name</key> + <string>Editor</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCTaskListModule</string> + <key>Name</key> + <string>Task List</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCDetailModule</string> + <key>Name</key> + <string>File and Smart Group Detail Viewer</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXBuildResultsModule</string> + <key>Name</key> + <string>Detailed Build Results Viewer</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXProjectFindModule</string> + <key>Name</key> + <string>Project Batch Find Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXBookmarksModule</string> + <key>Name</key> + <string>Bookmarks Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXClassBrowserModule</string> + <key>Name</key> + <string>Class Browser</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXCVSModule</string> + <key>Name</key> + <string>Source Code Control Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXDebugBreakpointsModule</string> + <key>Name</key> + <string>Debug Breakpoints Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCDockableInspector</string> + <key>Name</key> + <string>Inspector</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>PBXOpenQuicklyModule</string> + <key>Name</key> + <string>Open Quickly Tool</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXDebugSessionModule</string> + <key>Name</key> + <string>Debugger</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>1</string> + <key>Module</key> + <string>PBXDebugCLIModule</string> + <key>Name</key> + <string>Debug Console</string> + </dict> + <dict> + <key>BundleLoadPath</key> + <string></string> + <key>MaxInstances</key> + <string>n</string> + <key>Module</key> + <string>XCSnapshotModule</string> + <key>Name</key> + <string>Snapshots Tool</string> + </dict> + </array> + <key>Description</key> + <string>DefaultDescriptionKey</string> + <key>DockingSystemVisible</key> + <false/> + <key>Extension</key> + <string>mode1v3</string> + <key>FavBarConfig</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A1E0BCB3C62001FB821</string> + <key>XCBarModuleItemNames</key> + <dict/> + <key>XCBarModuleItems</key> + <array/> + </dict> + <key>FirstTimeWindowDisplayed</key> + <false/> + <key>Identifier</key> + <string>com.apple.perspectives.project.mode1v3</string> + <key>MajorVersion</key> + <integer>32</integer> + <key>MinorVersion</key> + <integer>1</integer> + <key>Name</key> + <string>Default</string> + <key>Notifications</key> + <array> + <dict> + <key>XCObserverAutoDisconnectKey</key> + <true/> + <key>XCObserverDefintionKey</key> + <dict/> + <key>XCObserverFactoryKey</key> + <string>XCPerspectivesSpecificationIdentifier</string> + <key>XCObserverGUIDKey</key> + <string>XCObserverProjectIdentifier</string> + <key>XCObserverNotificationKey</key> + <string>PBXStatusBuildStateMessageNotification</string> + <key>XCObserverTargetKey</key> + <string>XCMainBuildResultsModuleGUID</string> + <key>XCObserverTriggerKey</key> + <string>awakenModuleWithObserver:</string> + <key>XCObserverValidationKey</key> + <dict/> + </dict> + </array> + <key>OpenEditors</key> + <array> + <dict> + <key>Content</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A2E0BCB3E11001FB821</string> + <key>PBXProjectModuleLabel</key> + <string>SkimNotesAgent.m</string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>F9B57A2F0BCB3E11001FB821</string> + <key>PBXProjectModuleLabel</key> + <string>SkimNotesAgent.m</string> + <key>_historyCapacity</key> + <integer>0</integer> + <key>bookmark</key> + <string>F9B57A690BCB4576001FB821</string> + <key>history</key> + <array> + <string>F9B57A4D0BCB40B6001FB821</string> + </array> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>Geometry</key> + <dict> + <key>Frame</key> + <string>{{0, 20}, {839, 659}}</string> + <key>PBXModuleWindowStatusBarHidden2</key> + <false/> + <key>RubberWindowFrame</key> + <string>359 132 839 700 0 0 1280 832 </string> + </dict> + </dict> + </array> + <key>PerspectiveWidths</key> + <array> + <integer>-1</integer> + <integer>-1</integer> + </array> + <key>Perspectives</key> + <array> + <dict> + <key>ChosenToolbarItems</key> + <array> + <string>active-target-popup</string> + <string>action</string> + <string>NSToolbarFlexibleSpaceItem</string> + <string>buildOrClean</string> + <string>build-and-goOrGo</string> + <string>com.apple.ide.PBXToolbarStopButton</string> + <string>get-info</string> + <string>toggle-editor</string> + <string>NSToolbarFlexibleSpaceItem</string> + <string>com.apple.pbx.toolbar.searchfield</string> + </array> + <key>ControllerClassBaseName</key> + <string></string> + <key>IconName</key> + <string>WindowOfProjectWithEditor</string> + <key>Identifier</key> + <string>perspective.project</string> + <key>IsVertical</key> + <false/> + <key>Layout</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C37FBAC04509CD000000102</string> + <string>1C37FAAC04509CD000000102</string> + <string>1C08E77C0454961000C914BD</string> + <string>1C37FABC05509CD000000102</string> + <string>1C37FABC05539CD112110102</string> + <string>E2644B35053B69B200211256</string> + <string>1C37FABC04509CD000100104</string> + <string>1CC0EA4004350EF90044410B</string> + <string>1CC0EA4004350EF90041110B</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>1CE0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>yes</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>186</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>08FB7794FE84155DC02AAC07</string> + <string>1C37FABC05509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {186, 338}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <true/> + <key>XCSharingToken</key> + <string>com.apple.Xcode.GFSharingToken</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {203, 356}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>186</real> + </array> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>203pt</string> + </dict> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20306471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>MyNewFile14.java</string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20406471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>MyNewFile14.java</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {482, 0}}</string> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>0pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <true/> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CE0B20506471E060097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Detail</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 5}, {482, 351}}</string> + <key>RubberWindowFrame</key> + <string>547 435 690 397 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>XCDetailModule</string> + <key>Proportion</key> + <string>351pt</string> + </dict> + </array> + <key>Proportion</key> + <string>482pt</string> + </dict> + </array> + <key>Name</key> + <string>Project</string> + <key>ServiceClasses</key> + <array> + <string>XCModuleDock</string> + <string>PBXSmartGroupTreeModule</string> + <string>XCModuleDock</string> + <string>PBXNavigatorGroup</string> + <string>XCDetailModule</string> + </array> + <key>TableOfContents</key> + <array> + <string>F9B57A2C0BCB3E11001FB821</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>F9B57A2D0BCB3E11001FB821</string> + <string>1CE0B20306471E060097A5F4</string> + <string>1CE0B20506471E060097A5F4</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.defaultV3</string> + </dict> + <dict> + <key>ControllerClassBaseName</key> + <string></string> + <key>IconName</key> + <string>WindowOfProject</string> + <key>Identifier</key> + <string>perspective.morph</string> + <key>IsVertical</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C37FBAC04509CD000000102</string> + <string>1C37FAAC04509CD000000102</string> + <string>1C08E77C0454961000C914BD</string> + <string>1C37FABC05509CD000000102</string> + <string>1C37FABC05539CD112110102</string> + <string>E2644B35053B69B200211256</string> + <string>1C37FABC04509CD000100104</string> + <string>1CC0EA4004350EF90044410B</string> + <string>1CC0EA4004350EF90041110B</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>11E0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>yes</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>186</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>29B97314FDCFA39411CA2CEA</string> + <string>1C37FABC05509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {186, 337}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <integer>1</integer> + <key>XCSharingToken</key> + <string>com.apple.Xcode.GFSharingToken</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {203, 355}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>186</real> + </array> + <key>RubberWindowFrame</key> + <string>373 269 690 397 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Morph</string> + <key>PreferredWidth</key> + <integer>300</integer> + <key>ServiceClasses</key> + <array> + <string>XCModuleDock</string> + <string>PBXSmartGroupTreeModule</string> + </array> + <key>TableOfContents</key> + <array> + <string>11E0B1FE06471DED0097A5F4</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.default.shortV3</string> + </dict> + </array> + <key>PerspectivesBarVisible</key> + <false/> + <key>ShelfIsVisible</key> + <false/> + <key>SourceDescription</key> + <string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string> + <key>StatusbarIsVisible</key> + <true/> + <key>TimeStamp</key> + <real>197870966.10195199</real> + <key>ToolbarDisplayMode</key> + <integer>1</integer> + <key>ToolbarIsVisible</key> + <true/> + <key>ToolbarSizeMode</key> + <integer>1</integer> + <key>Type</key> + <string>Perspectives</string> + <key>UpdateMessage</key> + <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string> + <key>WindowJustification</key> + <integer>5</integer> + <key>WindowOrderList</key> + <array> + <string>/Volumes/Local/Users/amaxwell/Desktop/SkimNotesAgent/SkimNotesAgent.xcodeproj</string> + <string>F9B57A2E0BCB3E11001FB821</string> + <string>F9B57A310BCB3E11001FB821</string> + </array> + <key>WindowString</key> + <string>547 435 690 397 0 0 1280 832 </string> + <key>WindowToolsV3</key> + <array> + <dict> + <key>FirstTimeWindowDisplayed</key> + <false/> + <key>Identifier</key> + <string>windowTool.build</string> + <key>IsVertical</key> + <true/> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528F0623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string></string> + <key>StatusBarVisibility</key> + <true/> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {500, 218}}</string> + <key>RubberWindowFrame</key> + <string>731 40 500 500 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>218pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <true/> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>XCMainBuildResultsModuleGUID</string> + <key>PBXProjectModuleLabel</key> + <string>Build</string> + <key>XCBuildResultsTrigger_Collapse</key> + <integer>1021</integer> + <key>XCBuildResultsTrigger_Open</key> + <integer>1010</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 223}, {500, 236}}</string> + <key>RubberWindowFrame</key> + <string>731 40 500 500 0 0 1280 832 </string> + </dict> + <key>Module</key> + <string>PBXBuildResultsModule</string> + <key>Proportion</key> + <string>236pt</string> + </dict> + </array> + <key>Proportion</key> + <string>459pt</string> + </dict> + </array> + <key>Name</key> + <string>Build Results</string> + <key>ServiceClasses</key> + <array> + <string>PBXBuildResultsModule</string> + </array> + <key>StatusbarIsVisible</key> + <true/> + <key>TableOfContents</key> + <array> + <string>F9B57A310BCB3E11001FB821</string> + <string>F9B57A320BCB3E11001FB821</string> + <string>1CD0528F0623707200166675</string> + <string>XCMainBuildResultsModuleGUID</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.buildV3</string> + <key>WindowString</key> + <string>731 40 500 500 0 0 1280 832 </string> + <key>WindowToolGUID</key> + <string>F9B57A310BCB3E11001FB821</string> + <key>WindowToolIsVisible</key> + <true/> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debugger</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>Debugger</key> + <dict> + <key>HorizontalSplitView</key> + <dict> + <key>_collapsingFrameDimension</key> + <real>0.0</real> + <key>_indexOfCollapsedView</key> + <integer>0</integer> + <key>_percentageOfCollapsedView</key> + <real>0.0</real> + <key>isCollapsed</key> + <string>yes</string> + <key>sizes</key> + <array> + <string>{{0, 0}, {317, 164}}</string> + <string>{{317, 0}, {377, 164}}</string> + </array> + </dict> + <key>VerticalSplitView</key> + <dict> + <key>_collapsingFrameDimension</key> + <real>0.0</real> + <key>_indexOfCollapsedView</key> + <integer>0</integer> + <key>_percentageOfCollapsedView</key> + <real>0.0</real> + <key>isCollapsed</key> + <string>yes</string> + <key>sizes</key> + <array> + <string>{{0, 0}, {694, 164}}</string> + <string>{{0, 164}, {694, 216}}</string> + </array> + </dict> + </dict> + <key>LauncherConfigVersion</key> + <string>8</string> + <key>PBXProjectModuleGUID</key> + <string>1C162984064C10D400B95A72</string> + <key>PBXProjectModuleLabel</key> + <string>Debug - GLUTExamples (Underwater)</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>DebugConsoleDrawerSize</key> + <string>{100, 120}</string> + <key>DebugConsoleVisible</key> + <string>None</string> + <key>DebugConsoleWindowFrame</key> + <string>{{200, 200}, {500, 300}}</string> + <key>DebugSTDIOWindowFrame</key> + <string>{{200, 200}, {500, 300}}</string> + <key>Frame</key> + <string>{{0, 0}, {694, 380}}</string> + <key>RubberWindowFrame</key> + <string>321 238 694 422 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXDebugSessionModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Debugger</string> + <key>ServiceClasses</key> + <array> + <string>PBXDebugSessionModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1CD10A99069EF8BA00B06720</string> + <string>1C0AD2AB069F1E9B00FABCE6</string> + <string>1C162984064C10D400B95A72</string> + <string>1C0AD2AC069F1E9B00FABCE6</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.debugV3</string> + <key>WindowString</key> + <string>321 238 694 422 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1CD10A99069EF8BA00B06720</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.find</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CDD528C0622207200134675</string> + <key>PBXProjectModuleLabel</key> + <string><No Editor></string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528D0623707200166675</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <integer>1</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {781, 167}}</string> + <key>RubberWindowFrame</key> + <string>62 385 781 470 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>781pt</string> + </dict> + </array> + <key>Proportion</key> + <string>50%</string> + </dict> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD0528E0623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string>Project Find</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{8, 0}, {773, 254}}</string> + <key>RubberWindowFrame</key> + <string>62 385 781 470 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXProjectFindModule</string> + <key>Proportion</key> + <string>50%</string> + </dict> + </array> + <key>Proportion</key> + <string>428pt</string> + </dict> + </array> + <key>Name</key> + <string>Project Find</string> + <key>ServiceClasses</key> + <array> + <string>PBXProjectFindModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C530D57069F1CE1000CFCEE</string> + <string>1C530D58069F1CE1000CFCEE</string> + <string>1C530D59069F1CE1000CFCEE</string> + <string>1CDD528C0622207200134675</string> + <string>1C530D5A069F1CE1000CFCEE</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>1CD0528E0623707200166675</string> + </array> + <key>WindowString</key> + <string>62 385 781 470 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1C530D57069F1CE1000CFCEE</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>MENUSEPARATOR</string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debuggerConsole</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAAC065D492600B07095</string> + <key>PBXProjectModuleLabel</key> + <string>Debugger Console</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {650, 250}}</string> + <key>RubberWindowFrame</key> + <string>650 41 650 250 0 0 1280 1002 </string> + </dict> + <key>Module</key> + <string>PBXDebugCLIModule</string> + <key>Proportion</key> + <string>358pt</string> + </dict> + </array> + <key>Proportion</key> + <string>358pt</string> + </dict> + </array> + <key>Name</key> + <string>Debugger Console</string> + <key>ServiceClasses</key> + <array> + <string>PBXDebugCLIModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C78EAAD065D492600B07095</string> + <string>1C78EAAE065D492600B07095</string> + <string>1C78EAAC065D492600B07095</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.consoleV3</string> + <key>WindowString</key> + <string>650 41 650 250 0 0 1280 1002 </string> + <key>WindowToolGUID</key> + <string>1C78EAAD065D492600B07095</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.snapshots</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>XCSnapshotModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Snapshots</string> + <key>ServiceClasses</key> + <array> + <string>XCSnapshotModule</string> + </array> + <key>StatusbarIsVisible</key> + <string>Yes</string> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.snapshots</string> + <key>WindowString</key> + <string>315 824 300 550 0 0 1440 878 </string> + <key>WindowToolIsVisible</key> + <string>Yes</string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.scm</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAB2065D492600B07095</string> + <key>PBXProjectModuleLabel</key> + <string><No Editor></string> + <key>PBXSplitModuleInNavigatorKey</key> + <dict> + <key>Split0</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1C78EAB3065D492600B07095</string> + </dict> + <key>SplitCount</key> + <string>1</string> + </dict> + <key>StatusBarVisibility</key> + <integer>1</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {452, 0}}</string> + <key>RubberWindowFrame</key> + <string>743 379 452 308 0 0 1280 1002 </string> + </dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>0pt</string> + </dict> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CD052920623707200166675</string> + <key>PBXProjectModuleLabel</key> + <string>SCM</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>ConsoleFrame</key> + <string>{{0, 259}, {452, 0}}</string> + <key>Frame</key> + <string>{{0, 7}, {452, 259}}</string> + <key>RubberWindowFrame</key> + <string>743 379 452 308 0 0 1280 1002 </string> + <key>TableConfiguration</key> + <array> + <string>Status</string> + <real>30</real> + <string>FileName</string> + <real>199</real> + <string>Path</string> + <real>197.09500122070312</real> + </array> + <key>TableFrame</key> + <string>{{0, 0}, {452, 250}}</string> + </dict> + <key>Module</key> + <string>PBXCVSModule</string> + <key>Proportion</key> + <string>262pt</string> + </dict> + </array> + <key>Proportion</key> + <string>266pt</string> + </dict> + </array> + <key>Name</key> + <string>SCM</string> + <key>ServiceClasses</key> + <array> + <string>PBXCVSModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1C78EAB4065D492600B07095</string> + <string>1C78EAB5065D492600B07095</string> + <string>1C78EAB2065D492600B07095</string> + <string>1CD052920623707200166675</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.scm</string> + <key>WindowString</key> + <string>743 379 452 308 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.breakpoints</string> + <key>IsVertical</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>PBXBottomSmartGroupGIDs</key> + <array> + <string>1C77FABC04509CD000000102</string> + </array> + <key>PBXProjectModuleGUID</key> + <string>1CE0B1FE06471DED0097A5F4</string> + <key>PBXProjectModuleLabel</key> + <string>Files</string> + <key>PBXProjectStructureProvided</key> + <string>no</string> + <key>PBXSmartGroupTreeModuleColumnData</key> + <dict> + <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> + <array> + <real>168</real> + </array> + <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> + <array> + <string>MainColumn</string> + </array> + </dict> + <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> + <dict> + <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> + <array> + <string>1C77FABC04509CD000000102</string> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> + <array> + <array> + <integer>0</integer> + </array> + </array> + <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> + <string>{{0, 0}, {168, 350}}</string> + </dict> + <key>PBXTopSmartGroupGIDs</key> + <array/> + <key>XCIncludePerspectivesSwitch</key> + <integer>0</integer> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{0, 0}, {185, 368}}</string> + <key>GroupTreeTableConfiguration</key> + <array> + <string>MainColumn</string> + <real>168</real> + </array> + <key>RubberWindowFrame</key> + <string>315 424 744 409 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXSmartGroupTreeModule</string> + <key>Proportion</key> + <string>185pt</string> + </dict> + <dict> + <key>ContentConfiguration</key> + <dict> + <key>PBXProjectModuleGUID</key> + <string>1CA1AED706398EBD00589147</string> + <key>PBXProjectModuleLabel</key> + <string>Detail</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{{190, 0}, {554, 368}}</string> + <key>RubberWindowFrame</key> + <string>315 424 744 409 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>XCDetailModule</string> + <key>Proportion</key> + <string>554pt</string> + </dict> + </array> + <key>Proportion</key> + <string>368pt</string> + </dict> + </array> + <key>MajorVersion</key> + <integer>3</integer> + <key>MinorVersion</key> + <integer>0</integer> + <key>Name</key> + <string>Breakpoints</string> + <key>ServiceClasses</key> + <array> + <string>PBXSmartGroupTreeModule</string> + <string>XCDetailModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>TableOfContents</key> + <array> + <string>1CDDB66807F98D9800BB5817</string> + <string>1CDDB66907F98D9800BB5817</string> + <string>1CE0B1FE06471DED0097A5F4</string> + <string>1CA1AED706398EBD00589147</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.breakpointsV3</string> + <key>WindowString</key> + <string>315 424 744 409 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1CDDB66807F98D9800BB5817</string> + <key>WindowToolIsVisible</key> + <integer>1</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.debugAnimator</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>PBXNavigatorGroup</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Debug Visualizer</string> + <key>ServiceClasses</key> + <array> + <string>PBXNavigatorGroup</string> + </array> + <key>StatusbarIsVisible</key> + <integer>1</integer> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.debugAnimatorV3</string> + <key>WindowString</key> + <string>100 100 700 500 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.bookmarks</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>Module</key> + <string>PBXBookmarksModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Bookmarks</string> + <key>ServiceClasses</key> + <array> + <string>PBXBookmarksModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>0</integer> + <key>WindowString</key> + <string>538 42 401 187 0 0 1280 1002 </string> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.classBrowser</string> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>ContentConfiguration</key> + <dict> + <key>OptionsSetName</key> + <string>Hierarchy, all classes</string> + <key>PBXProjectModuleGUID</key> + <string>1CA6456E063B45B4001379D8</string> + <key>PBXProjectModuleLabel</key> + <string>Class Browser - NSObject</string> + </dict> + <key>GeometryConfiguration</key> + <dict> + <key>ClassesFrame</key> + <string>{{0, 0}, {374, 96}}</string> + <key>ClassesTreeTableConfiguration</key> + <array> + <string>PBXClassNameColumnIdentifier</string> + <real>208</real> + <string>PBXClassBookColumnIdentifier</string> + <real>22</real> + </array> + <key>Frame</key> + <string>{{0, 0}, {630, 331}}</string> + <key>MembersFrame</key> + <string>{{0, 105}, {374, 395}}</string> + <key>MembersTreeTableConfiguration</key> + <array> + <string>PBXMemberTypeIconColumnIdentifier</string> + <real>22</real> + <string>PBXMemberNameColumnIdentifier</string> + <real>216</real> + <string>PBXMemberTypeColumnIdentifier</string> + <real>97</real> + <string>PBXMemberBookColumnIdentifier</string> + <real>22</real> + </array> + <key>PBXModuleWindowStatusBarHidden2</key> + <integer>1</integer> + <key>RubberWindowFrame</key> + <string>385 179 630 352 0 0 1440 878 </string> + </dict> + <key>Module</key> + <string>PBXClassBrowserModule</string> + <key>Proportion</key> + <string>332pt</string> + </dict> + </array> + <key>Proportion</key> + <string>332pt</string> + </dict> + </array> + <key>Name</key> + <string>Class Browser</string> + <key>ServiceClasses</key> + <array> + <string>PBXClassBrowserModule</string> + </array> + <key>StatusbarIsVisible</key> + <integer>0</integer> + <key>TableOfContents</key> + <array> + <string>1C0AD2AF069F1E9B00FABCE6</string> + <string>1C0AD2B0069F1E9B00FABCE6</string> + <string>1CA6456E063B45B4001379D8</string> + </array> + <key>ToolbarConfiguration</key> + <string>xcode.toolbar.config.classbrowser</string> + <key>WindowString</key> + <string>385 179 630 352 0 0 1440 878 </string> + <key>WindowToolGUID</key> + <string>1C0AD2AF069F1E9B00FABCE6</string> + <key>WindowToolIsVisible</key> + <integer>0</integer> + </dict> + <dict> + <key>Identifier</key> + <string>windowTool.refactoring</string> + <key>IncludeInToolsMenu</key> + <integer>0</integer> + <key>Layout</key> + <array> + <dict> + <key>Dock</key> + <array> + <dict> + <key>BecomeActive</key> + <integer>1</integer> + <key>GeometryConfiguration</key> + <dict> + <key>Frame</key> + <string>{0, 0}, {500, 335}</string> + <key>RubberWindowFrame</key> + <string>{0, 0}, {500, 335}</string> + </dict> + <key>Module</key> + <string>XCRefactoringModule</string> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Proportion</key> + <string>100%</string> + </dict> + </array> + <key>Name</key> + <string>Refactoring</string> + <key>ServiceClasses</key> + <array> + <string>XCRefactoringModule</string> + </array> + <key>WindowString</key> + <string>200 200 500 356 0 0 1920 1200 </string> + </dict> + </array> +</dict> +</plist> Added: SkimNotesAgent.xcodeproj/project.pbxproj =================================================================== --- SkimNotesAgent.xcodeproj/project.pbxproj (rev 0) +++ SkimNotesAgent.xcodeproj/project.pbxproj 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,233 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 8DD76F9A0486AA7600D96B5E /* SkimNotesAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */; settings = {ATTRIBUTES = (); }; }; + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; }; + 8DD76F9F0486AA7600D96B5E /* SkimNotesAgent.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */; }; + F92BA40B0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */; }; + F92BA40C0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */; }; + F92BA4C90BCAF96A008D5BC3 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */; }; + F92BAD7A0BCC0E02008D5BC3 /* SkimNotesAgent.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F9E0486AA7600D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 8DD76F9F0486AA7600D96B5E /* SkimNotesAgent.1 in CopyFiles */, + F92BA40B0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h in CopyFiles */, + F92BAD7A0BCC0E02008D5BC3 /* SkimNotesAgent.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SkimNotesAgent.m; sourceTree = "<group>"; }; + 08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; + 32A70AAB03705E1F00C91783 /* SkimNotesAgent_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkimNotesAgent_Prefix.pch; sourceTree = "<group>"; }; + 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = SkimNotesAgent; sourceTree = BUILT_PRODUCTS_DIR; }; + C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = SkimNotesAgent.1; sourceTree = "<group>"; }; + F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSFileManager_ExtendedAttributes.h; sourceTree = "<group>"; }; + F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSFileManager_ExtendedAttributes.m; sourceTree = "<group>"; }; + F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = /usr/lib/libbz2.dylib; sourceTree = "<absolute>"; }; + F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkimNotesAgent.h; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F9B0486AA7600D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9C0486AA7600D96B5E /* Foundation.framework in Frameworks */, + F92BA4C90BCAF96A008D5BC3 /* libbz2.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* SkimNotesAgent */ = { + isa = PBXGroup; + children = ( + 08FB7795FE84155DC02AAC07 /* Source */, + C6859EA2029092E104C91782 /* Documentation */, + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = SkimNotesAgent; + sourceTree = "<group>"; + }; + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + F92BAD790BCC0E02008D5BC3 /* SkimNotesAgent.h */, + F92BA4090BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.h */, + F92BA40A0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m */, + 32A70AAB03705E1F00C91783 /* SkimNotesAgent_Prefix.pch */, + 08FB7796FE84155DC02AAC07 /* SkimNotesAgent.m */, + ); + name = Source; + sourceTree = "<group>"; + }; + 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + F92BA4C80BCAF96A008D5BC3 /* libbz2.dylib */, + 08FB779EFE84155DC02AAC07 /* Foundation.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = "<group>"; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */, + ); + name = Products; + sourceTree = "<group>"; + }; + C6859EA2029092E104C91782 /* Documentation */ = { + isa = PBXGroup; + children = ( + C6859EA3029092ED04C91782 /* SkimNotesAgent.1 */, + ); + name = Documentation; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F960486AA7600D96B5E /* SkimNotesAgent */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "SkimNotesAgent" */; + buildPhases = ( + 8DD76F990486AA7600D96B5E /* Sources */, + 8DD76F9B0486AA7600D96B5E /* Frameworks */, + 8DD76F9E0486AA7600D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SkimNotesAgent; + productInstallPath = "$(HOME)/bin"; + productName = SkimNotesAgent; + productReference = 8DD76FA10486AA7600D96B5E /* SkimNotesAgent */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "SkimNotesAgent" */; + hasScannedForEncodings = 1; + mainGroup = 08FB7794FE84155DC02AAC07 /* SkimNotesAgent */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F960486AA7600D96B5E /* SkimNotesAgent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F990486AA7600D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DD76F9A0486AA7600D96B5E /* SkimNotesAgent.m in Sources */, + F92BA40C0BCAF831008D5BC3 /* NSFileManager_ExtendedAttributes.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB927508733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = SkimNotesAgent_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = SkimNotesAgent; + ZERO_LINK = YES; + }; + name = Debug; + }; + 1DEB927608733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = SkimNotesAgent_Prefix.pch; + INSTALL_PATH = "$(HOME)/bin"; + PRODUCT_NAME = SkimNotesAgent; + }; + name = Release; + }; + 1DEB927908733DD40010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB927A08733DD40010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB927408733DD40010E9CD /* Build configuration list for PBXNativeTarget "SkimNotesAgent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927508733DD40010E9CD /* Debug */, + 1DEB927608733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB927808733DD40010E9CD /* Build configuration list for PBXProject "SkimNotesAgent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB927908733DD40010E9CD /* Debug */, + 1DEB927A08733DD40010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} Added: SkimNotesAgent_Prefix.pch =================================================================== --- SkimNotesAgent_Prefix.pch (rev 0) +++ SkimNotesAgent_Prefix.pch 2007-04-10 19:35:12 UTC (rev 1788) @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TestAgent' target in the 'TestAgent' project. +// + +#ifdef __OBJC__ + #import <Foundation/Foundation.h> +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 16:34:53
|
Revision: 1787 http://skim-app.svn.sourceforge.net/skim-app/?rev=1787&view=rev Author: hofman Date: 2007-04-10 09:34:46 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Reconnect binding for Check File Update pref. Modified Paths: -------------- trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib Modified: trunk/Dutch.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/English.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) Modified: trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 13:55:17
|
Revision: 1786 http://skim-app.svn.sourceforge.net/skim-app/?rev=1786&view=rev Author: hofman Date: 2007-04-10 06:55:15 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Add new document class and nib to view skim notes. Modified Paths: -------------- trunk/Info.plist trunk/SKDocument.h trunk/SKDocument.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/Dutch.lproj/NotesDocument.nib/ trunk/Dutch.lproj/NotesDocument.nib/classes.nib trunk/Dutch.lproj/NotesDocument.nib/info.nib trunk/Dutch.lproj/NotesDocument.nib/keyedobjects.nib trunk/English.lproj/NotesDocument.nib/ trunk/English.lproj/NotesDocument.nib/classes.nib trunk/English.lproj/NotesDocument.nib/info.nib trunk/English.lproj/NotesDocument.nib/keyedobjects.nib trunk/SKNotesDocument.h trunk/SKNotesDocument.m Added: trunk/Dutch.lproj/NotesDocument.nib/classes.nib =================================================================== --- trunk/Dutch.lproj/NotesDocument.nib/classes.nib (rev 0) +++ trunk/Dutch.lproj/NotesDocument.nib/classes.nib 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,25 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {myAction = id; }; + CLASS = NSPersistentDocument; + LANGUAGE = ObjC; + SUPERCLASS = NSDocument; + }, + { + CLASS = SKAnnotationTypeImageCell; + LANGUAGE = ObjC; + SUPERCLASS = NSImageCell; + }, + {CLASS = SKNoteOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }, + { + CLASS = SKNotesDocument; + LANGUAGE = ObjC; + OUTLETS = {arrayController = NSArrayController; outlineView = NSOutlineView; }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file Added: trunk/Dutch.lproj/NotesDocument.nib/info.nib =================================================================== --- trunk/Dutch.lproj/NotesDocument.nib/info.nib (rev 0) +++ trunk/Dutch.lproj/NotesDocument.nib/info.nib 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IBDocumentLocation</key> + <string>69 58 356 240 0 0 1440 938 </string> + <key>IBFramework Version</key> + <string>446.1</string> + <key>IBOpenObjects</key> + <array> + <integer>5</integer> + </array> + <key>IBSystem Version</key> + <string>8P135</string> +</dict> +</plist> Added: trunk/Dutch.lproj/NotesDocument.nib/keyedobjects.nib =================================================================== (Binary files differ) Property changes on: trunk/Dutch.lproj/NotesDocument.nib/keyedobjects.nib ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/English.lproj/NotesDocument.nib/classes.nib =================================================================== --- trunk/English.lproj/NotesDocument.nib/classes.nib (rev 0) +++ trunk/English.lproj/NotesDocument.nib/classes.nib 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,25 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + {CLASS = NSObject; LANGUAGE = ObjC; }, + { + ACTIONS = {myAction = id; }; + CLASS = NSPersistentDocument; + LANGUAGE = ObjC; + SUPERCLASS = NSDocument; + }, + { + CLASS = SKAnnotationTypeImageCell; + LANGUAGE = ObjC; + SUPERCLASS = NSImageCell; + }, + {CLASS = SKNoteOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }, + { + CLASS = SKNotesDocument; + LANGUAGE = ObjC; + OUTLETS = {arrayController = NSArrayController; outlineView = NSOutlineView; }; + SUPERCLASS = NSDocument; + } + ); + IBVersion = 1; +} \ No newline at end of file Added: trunk/English.lproj/NotesDocument.nib/info.nib =================================================================== --- trunk/English.lproj/NotesDocument.nib/info.nib (rev 0) +++ trunk/English.lproj/NotesDocument.nib/info.nib 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IBDocumentLocation</key> + <string>69 58 356 240 0 0 1440 938 </string> + <key>IBFramework Version</key> + <string>446.1</string> + <key>IBOpenObjects</key> + <array> + <integer>5</integer> + </array> + <key>IBSystem Version</key> + <string>8P135</string> +</dict> +</plist> Added: trunk/English.lproj/NotesDocument.nib/keyedobjects.nib =================================================================== (Binary files differ) Property changes on: trunk/English.lproj/NotesDocument.nib/keyedobjects.nib ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/Info.plist =================================================================== --- trunk/Info.plist 2007-04-10 13:03:34 UTC (rev 1785) +++ trunk/Info.plist 2007-04-10 13:55:15 UTC (rev 1786) @@ -46,6 +46,28 @@ <dict> <key>CFBundleTypeExtensions</key> <array> + <string>skim</string> + </array> + <key>CFBundleTypeIconFile</key> + <string>NoteDocument</string> + <key>CFBundleTypeName</key> + <string>Skim Notes</string> + <key>CFBundleTypeRole</key> + <string>Editor</string> + <key>LSTypeIsPackage</key> + <false/> + <key>NSDocumentClass</key> + <string>SKNotesDocument</string> + <key>NSExportableAs</key> + <array> + <string>Notes as RTF</string> + </array> + <key>NSPersistentStoreTypeKey</key> + <string>Binary</string> + </dict> + <dict> + <key>CFBundleTypeExtensions</key> + <array> <string>ai</string> <string>AI</string> </array> @@ -199,24 +221,6 @@ <dict> <key>CFBundleTypeExtensions</key> <array> - <string>skim</string> - </array> - <key>CFBundleTypeIconFile</key> - <string>NoteDocument</string> - <key>CFBundleTypeName</key> - <string>Skim Notes</string> - <key>CFBundleTypeRole</key> - <string>None</string> - <key>LSTypeIsPackage</key> - <false/> - <key>NSDocumentClass</key> - <string>SKDocument</string> - <key>NSPersistentStoreTypeKey</key> - <string>Binary</string> - </dict> - <dict> - <key>CFBundleTypeExtensions</key> - <array> <string>rtf</string> </array> <key>CFBundleTypeMIMETypes</key> Modified: trunk/SKDocument.h =================================================================== --- trunk/SKDocument.h 2007-04-10 13:03:34 UTC (rev 1785) +++ trunk/SKDocument.h 2007-04-10 13:55:15 UTC (rev 1786) @@ -42,6 +42,14 @@ extern NSString *SKDocumentWillSaveNotification; +extern NSString *SKPDFDocumentType; +extern NSString *SKEmbeddedPDFDocumentType; +extern NSString *SKBarePDFDocumentType; +extern NSString *SKNotesDocumentType; +extern NSString *SKNotesRTFDocumentType; +extern NSString *SKPostScriptDocumentType; + + @class PDFDocument, SKMainWindowController, SKPDFView; @interface SKDocument : NSDocument Modified: trunk/SKDocument.m =================================================================== --- trunk/SKDocument.m 2007-04-10 13:03:34 UTC (rev 1785) +++ trunk/SKDocument.m 2007-04-10 13:55:15 UTC (rev 1786) @@ -55,12 +55,12 @@ NSString *SKDocumentErrorDomain = @"SKDocumentErrorDomain"; // See CFBundleTypeName in Info.plist -static NSString *SKPDFDocumentType = nil; /* set to NSPDFPboardType, not @"NSPDFPboardType" */ -static NSString *SKEmbeddedPDFDocumentType = @"PDF With Embedded Notes"; -static NSString *SKBarePDFDocumentType = @"PDF Without Notes"; -static NSString *SKNotesDocumentType = @"Skim Notes"; -static NSString *SKNotesRTFDocumentType = @"Notes as RTF"; -static NSString *SKPostScriptDocumentType = @"PostScript document"; +NSString *SKPDFDocumentType = nil; /* set to NSPDFPboardType, not @"NSPDFPboardType" */ +NSString *SKEmbeddedPDFDocumentType = @"PDF With Embedded Notes"; +NSString *SKBarePDFDocumentType = @"PDF Without Notes"; +NSString *SKNotesDocumentType = @"Skim Notes"; +NSString *SKNotesRTFDocumentType = @"Notes as RTF"; +NSString *SKPostScriptDocumentType = @"PostScript document"; NSString *SKDocumentWillSaveNotification = @"SKDocumentWillSaveNotification"; Added: trunk/SKNotesDocument.h =================================================================== --- trunk/SKNotesDocument.h (rev 0) +++ trunk/SKNotesDocument.h 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,57 @@ +// +// SKNotesDocument.h +// Skim +// +// Created by Christiaan Hofman on 4/10/07. +/* + This software is Copyright (c) 2007 + Christiaan Hofman. 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 Christiaan Hofman nor the names of any + 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 <Cocoa/Cocoa.h> + + +@interface SKNotesDocument : NSDocument { + IBOutlet NSOutlineView *outlineView; + IBOutlet NSArrayController *arrayController; + NSMutableArray *notes; +} + +- (NSArray *)notes; +- (void)setNotes:(NSArray *)newNotes; +- (unsigned)countOfNotes; +- (id)objectInNotesAtIndex:(unsigned)index; +- (void)insertObject:(id)obj inNotesAtIndex:(unsigned)index; +- (void)removeObjectFromNotesAtIndex:(unsigned)index; + +- (NSData *)notesRTFData; + +@end Added: trunk/SKNotesDocument.m =================================================================== --- trunk/SKNotesDocument.m (rev 0) +++ trunk/SKNotesDocument.m 2007-04-10 13:55:15 UTC (rev 1786) @@ -0,0 +1,258 @@ +// +// SKNotesDocument.m +// Skim +// +// Created by Christiaan Hofman on 4/10/07. +/* + This software is Copyright (c) 2007 + Christiaan Hofman. 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 Christiaan Hofman nor the names of any + 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 "SKNotesDocument.h" +#import "SKDocument.h" +#import "SKNoteOutlineView.h" + +@implementation SKNotesDocument + +- (id)init { + if (self = [super init]) { + notes = [[NSMutableArray alloc] initWithCapacity:10]; + } + return self; +} + +- (void)dealloc { + [notes release]; + [super dealloc]; +} + +- (NSString *)windowNibName { + return @"NotesDocument"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)aController { + [aController setShouldCloseDocument:YES]; + + NSSortDescriptor *indexSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"pageIndex" ascending:YES] autorelease]; + NSSortDescriptor *contentsSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"contents" ascending:YES] autorelease]; + [arrayController setSortDescriptors:[NSArray arrayWithObjects:indexSortDescriptor, contentsSortDescriptor, nil]]; + + [outlineView reloadData]; +} + +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { + NSData *data = nil; + + if ([typeName isEqualToString:SKNotesDocumentType]) { + data = [NSKeyedArchiver archivedDataWithRootObject:[notes valueForKey:@"dictionaryValue"]]; + } else if ([typeName isEqualToString:SKNotesRTFDocumentType]) { + data = [self notesRTFData]; + } + + if (data == nil && outError != NULL) + *outError = [NSError errorWithDomain:SKDocumentErrorDomain code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to write notes", @"Error description"), NSLocalizedDescriptionKey, nil]]; + + return data; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError { + BOOL didRead = NO; + + if ([typeName isEqualToString:SKNotesDocumentType]) { + NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]; + + if (array) { + NSEnumerator *dictEnum = [array objectEnumerator]; + NSDictionary *dict; + NSMutableArray *newNotes = [NSMutableArray arrayWithCapacity:[array count]]; + + while (dict = [dictEnum nextObject]) { + NSMutableDictionary *note = [dict mutableCopy]; + + if ([[dict valueForKey:@"type"] isEqualToString:@"Note"]) + [note setObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:85.0], @"rowHeight", [dict valueForKey:@"text"], @"contents", nil] forKey:@"child"]; + + [newNotes addObject:note]; + [note release]; + } + [[self mutableArrayValueForKey:@"notes"] setArray:newNotes]; + [outlineView reloadData]; + didRead = YES; + } + } + + if (didRead == NO && outError != NULL) + *outError = [NSError errorWithDomain:SKDocumentErrorDomain code:0 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Unable to load file", @"Error description"), NSLocalizedDescriptionKey, nil]]; + + return didRead; +} + +- (NSData *)notesRTFData { + NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] init]; + NSEnumerator *noteEnum = [notes objectEnumerator]; + NSDictionary *note; + NSData *data; + NSFont *standardFont = [NSFont systemFontOfSize:12.0]; + NSAttributedString *newlinesAttrString = [[NSAttributedString alloc] initWithString:@"\n\n" attributes:[NSDictionary dictionaryWithObjectsAndKeys:standardFont, NSFontAttributeName, nil]]; + + while (note = [noteEnum nextObject]) { + NSString *type = [note valueForKey:@"type"]; + NSString *contents = [note valueForKey:@"contents"]; + NSFont *font = [note valueForKey:@"font"]; + NSAttributedString *tmpAttrString = nil; + NSString *tmpString = nil; + + if ([type isEqualToString:@"FreeText"]) + tmpString = NSLocalizedString(@"Text Note", @"Description for export"); + else if ([type isEqualToString:@"Note"]) + tmpString = NSLocalizedString(@"Anchored Note", @"Description for export"); + else if ([type isEqualToString:@"Circle"]) + tmpString = NSLocalizedString(@"Circle", @"Description for export"); + else if ([type isEqualToString:@"Square"]) + tmpString = NSLocalizedString(@"Box", @"Description for export"); + else if ([type isEqualToString:@"MarkUp"] || [type isEqualToString:@"Highlight"]) + tmpString = NSLocalizedString(@"Highlight", @"Description for export"); + else if ([type isEqualToString:@"Underline"]) + tmpString = NSLocalizedString(@"Underline", @"Description for export"); + else if ([type isEqualToString:@"StrikeOut"]) + tmpString = NSLocalizedString(@"Strike Out", @"Description for export"); + tmpString = [NSString stringWithFormat:NSLocalizedString(@"%C %@, page %i", @"Description for export"), 0x2022, tmpString, [[note valueForKey:@"pageIndex"] unsignedIntValue] + 1]; + tmpAttrString = [[NSAttributedString alloc] initWithString:tmpString attributes:[NSDictionary dictionaryWithObjectsAndKeys:standardFont, NSFontAttributeName, nil]]; + [attrString appendAttributedString:tmpAttrString]; + [tmpAttrString release]; + [attrString appendAttributedString:newlinesAttrString]; + + tmpAttrString = [[NSAttributedString alloc] initWithString:contents ? contents : @"" attributes:[NSDictionary dictionaryWithObjectsAndKeys:font ? font : standardFont, NSFontAttributeName, nil]]; + [attrString appendAttributedString:tmpAttrString]; + [tmpAttrString release]; + [attrString appendAttributedString:newlinesAttrString]; + + if (tmpAttrString = [note valueForKey:@"text"]) { + [attrString appendAttributedString:tmpAttrString]; + [attrString appendAttributedString:newlinesAttrString]; + } + } + + data = [attrString RTFFromRange:NSMakeRange(0, [attrString length]) documentAttributes:nil]; + [attrString release]; + [newlinesAttrString release]; + + return data; +} + +// these are necessary for the app controller, we may change it there +- (NSDictionary *)currentDocumentSetup { + return [NSDictionary dictionary]; +} + +- (NSWindowController *)mainWindowController { + return nil; +} + +#pragma mark Accessors + +- (NSArray *)notes { + return notes; +} + +- (void)setNotes:(NSArray *)newNotes { + [notes setArray:notes]; +} + +- (unsigned)countOfNotes { + return [notes count]; +} + +- (id)objectInNotesAtIndex:(unsigned)theIndex { + return [notes objectAtIndex:theIndex]; +} + +- (void)insertObject:(id)obj inNotesAtIndex:(unsigned)theIndex { + [notes insertObject:obj atIndex:theIndex]; +} + +- (void)removeObjectFromNotesAtIndex:(unsigned)theIndex { + [notes removeObjectAtIndex:theIndex]; +} + +#pragma mark NSOutlineView datasource and delegate methods + +- (int)outlineView:(NSOutlineView *)ov numberOfChildrenOfItem:(id)item { + if (item == nil) + return [notes count]; + else if ([[item valueForKey:@"type"] isEqualToString:@"Note"]) + return 1; + return 0; +} + +- (BOOL)outlineView:(NSOutlineView *)ov isItemExpandable:(id)item { + return [[item valueForKey:@"type"] isEqualToString:@"Note"]; +} + +- (id)outlineView:(NSOutlineView *)ov child:(int)index ofItem:(id)item { + if (item == nil) { + return [[arrayController arrangedObjects] objectAtIndex:index]; + } else { + return [item valueForKey:@"child"]; + } +} + +- (id)outlineView:(NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { + NSString *tcID = [tableColumn identifier]; + if ([tcID isEqualToString:@"note"]) { + return [item valueForKey:@"contents"]; + } else if([tcID isEqualToString:@"type"]) { + return [NSDictionary dictionaryWithObjectsAndKeys:[item valueForKey:@"type"], @"type", nil]; + } else if ([tcID isEqualToString:@"page"]) { + NSNumber *pageNumber = [item valueForKey:@"pageIndex"]; + return pageNumber ? [NSString stringWithFormat:@"%i", [pageNumber intValue] + 1] : nil; + } + return nil; +} + +- (float)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item { + NSNumber *heightNumber = [item valueForKey:@"rowHeight"]; + return heightNumber ? [heightNumber floatValue] : 17.0; +} + +- (void)outlineView:(NSOutlineView *)ov setHeightOfRow:(int)newHeight byItem:(id)item { + [item setObject:[NSNumber numberWithFloat:newHeight] forKey:@"rowHeight"]; +} + +- (BOOL)outlineView:(NSOutlineView *)ov canResizeRowByItem:(id)item { + return nil != [item valueForKey:@"rowHeight"]; +} + +- (NSString *)outlineView:(NSOutlineView *)ov toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tableColumn item:(id)item mouseLocation:(NSPoint)mouseLocation { + return [item valueForKey:@"type"] ? [item valueForKey:@"contents"] : [[item valueForKey:@"contents"] string]; +} + +@end Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2007-04-10 13:03:34 UTC (rev 1785) +++ trunk/Skim.xcodeproj/project.pbxproj 2007-04-10 13:55:15 UTC (rev 1786) @@ -135,6 +135,8 @@ CEA575CE0B9206E60003D2E7 /* SKNoteOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA575CD0B9206E60003D2E7 /* SKNoteOutlineView.m */; }; CEA575E50B9207B80003D2E7 /* SKThumbnailTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA575E40B9207B80003D2E7 /* SKThumbnailTableView.m */; }; CEA575FD0B9208B60003D2E7 /* SKOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA575FC0B9208B60003D2E7 /* SKOutlineView.m */; }; + CEE106150BCBB72C00BF2D3E /* SKNotesDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE106140BCBB72C00BF2D3E /* SKNotesDocument.m */; }; + CEE1065E0BCBBE1300BF2D3E /* NotesDocument.nib in Resources */ = {isa = PBXBuildFile; fileRef = CEE106580BCBBE1200BF2D3E /* NotesDocument.nib */; }; CEF3BF7E0B99CA4A00E12E3D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */; }; CEF3BF860B99CAD300E12E3D /* skimnotes.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF3BF850B99CAD300E12E3D /* skimnotes.m */; }; CEF3C0210B99FF8F00E12E3D /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F977319E0B939B7D002A7823 /* libbz2.dylib */; }; @@ -363,6 +365,10 @@ CEA575E40B9207B80003D2E7 /* SKThumbnailTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKThumbnailTableView.m; sourceTree = "<group>"; }; CEA575FB0B9208B60003D2E7 /* SKOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKOutlineView.h; sourceTree = "<group>"; }; CEA575FC0B9208B60003D2E7 /* SKOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKOutlineView.m; sourceTree = "<group>"; }; + CEE106130BCBB72C00BF2D3E /* SKNotesDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKNotesDocument.h; sourceTree = "<group>"; }; + CEE106140BCBB72C00BF2D3E /* SKNotesDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKNotesDocument.m; sourceTree = "<group>"; }; + CEE106590BCBBE1200BF2D3E /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/NotesDocument.nib; sourceTree = "<group>"; }; + CEE107380BCBCA3200BF2D3E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Dutch; path = Dutch.lproj/NotesDocument.nib; sourceTree = "<group>"; }; CEF3BF750B99CA2900E12E3D /* skimnotes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = skimnotes; sourceTree = BUILT_PRODUCTS_DIR; }; CEF3BF850B99CAD300E12E3D /* skimnotes.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = skimnotes.m; sourceTree = "<group>"; }; CEF7071E0B8F8EFC003A2771 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SnapshotWindow.nib; sourceTree = "<group>"; }; @@ -492,6 +498,7 @@ 2A37F4B6FDCFA73011CA2CEA /* MainMenu.nib */, 4530D81B0B27ACAC007C59F4 /* MainWindow.nib */, CE5470010B32D96500F8AFB6 /* NoteWindow.nib */, + CEE106580BCBBE1200BF2D3E /* NotesDocument.nib */, CEF7071D0B8F8EFC003A2771 /* SnapshotWindow.nib */, CE9C42360B8B5633004AD8CF /* PreferenceWindow.nib */, CE2DEB900B86206400D0DA12 /* FindPanel.nib */, @@ -572,6 +579,8 @@ 4530D8C80B27B04D007C59F4 /* SKApplicationController.m */, 2A37F4AEFDCFA73011CA2CEA /* SKDocument.h */, 2A37F4ACFDCFA73011CA2CEA /* SKDocument.m */, + CEE106130BCBB72C00BF2D3E /* SKNotesDocument.h */, + CEE106140BCBB72C00BF2D3E /* SKNotesDocument.m */, 4530D7ED0B27AAD6007C59F4 /* SKMainWindowController.h */, 4530D7EE0B27AAD6007C59F4 /* SKMainWindowController.m */, 4530D7E60B27AAB9007C59F4 /* SKSnapshotWindowController.h */, @@ -878,6 +887,7 @@ CE54AA8F0BBC037400008750 /* ReleaseNotes.rtf in Resources */, CE4F9DEE0BC1BE3A005BE0A1 /* Localizable.strings in Resources */, CE67BB260BC44AC9007B6929 /* ZoomValues.strings in Resources */, + CEE1065E0BCBBE1300BF2D3E /* NotesDocument.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -990,6 +1000,7 @@ CE4A659F0BAB1598004AD07D /* SKBookmarkController.m in Sources */, CE4A8BA20BB15980004AD07D /* NSWindowController_SKExtensions.m in Sources */, CE4294A30BBD29120016FDC2 /* SKReadingBar.m in Sources */, + CEE106150BCBB72C00BF2D3E /* SKNotesDocument.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1158,6 +1169,15 @@ name = PreferenceWindow.nib; sourceTree = "<group>"; }; + CEE106580BCBBE1200BF2D3E /* NotesDocument.nib */ = { + isa = PBXVariantGroup; + children = ( + CEE106590BCBBE1200BF2D3E /* English */, + CEE107380BCBCA3200BF2D3E /* Dutch */, + ); + name = NotesDocument.nib; + sourceTree = "<group>"; + }; CEF7071D0B8F8EFC003A2771 /* SnapshotWindow.nib */ = { isa = PBXVariantGroup; children = ( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-10 13:03:35
|
Revision: 1785 http://skim-app.svn.sourceforge.net/skim-app/?rev=1785&view=rev Author: hofman Date: 2007-04-10 06:03:34 -0700 (Tue, 10 Apr 2007) Log Message: ----------- Add data.dependency file to localized nib Added Paths: ----------- trunk/Dutch.lproj/SnapshotWindow.nib/data.dependency Added: trunk/Dutch.lproj/SnapshotWindow.nib/data.dependency =================================================================== --- trunk/Dutch.lproj/SnapshotWindow.nib/data.dependency (rev 0) +++ trunk/Dutch.lproj/SnapshotWindow.nib/data.dependency 2007-04-10 13:03:34 UTC (rev 1785) @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IBPaletteDependency</key> + <array> + <string>PDFKit</string> + </array> +</dict> +</plist> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 21:43:49
|
Revision: 1784 http://skim-app.svn.sourceforge.net/skim-app/?rev=1784&view=rev Author: hofman Date: 2007-04-09 14:43:48 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Invert check for empty link destination. Also check for empty left margins. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-09 21:25:17 UTC (rev 1783) +++ trunk/SKPDFHoverWindow.m 2007-04-09 21:43:48 UTC (rev 1784) @@ -132,9 +132,13 @@ PDFSelection *selection = [page selectionForRect:bounds]; if ([selection string]) { - float top = NSMaxY([selection boundsForPage:page]); - if (top > NSMaxY(rect)) + NSRect selBounds = [selection boundsForPage:page]; + float top = fmax(NSMaxY(selBounds), NSMinX(selBounds) + NSHeight(rect)); + float left = fmin(NSMinX(selBounds), NSMaxX(bounds) - NSWidth(rect)); + if (top < NSMaxY(rect)) rect.origin.y = top - NSHeight(rect); + if (left > NSMinX(rect)) + rect.origin.x = left; } [imageView setFrameSize:[image size]]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 21:25:22
|
Revision: 1783 http://skim-app.svn.sourceforge.net/skim-app/?rev=1783&view=rev Author: hofman Date: 2007-04-09 14:25:17 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Fix format for clean version string Modified Paths: -------------- trunk/SKVersionNumber.m Modified: trunk/SKVersionNumber.m =================================================================== --- trunk/SKVersionNumber.m 2007-04-09 15:41:18 UTC (rev 1782) +++ trunk/SKVersionNumber.m 2007-04-09 21:25:17 UTC (rev 1783) @@ -48,7 +48,7 @@ // Failed to scan integer break; - [mutableVersionString appendFormat: @"%@%C", c == '.' ? @"." : @"", component]; + [mutableVersionString appendFormat: @"%@%i", c == '.' ? @"." : @"", component]; componentCount++; components = realloc(components, sizeof(*components) * componentCount); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 15:41:19
|
Revision: 1782 http://skim-app.svn.sourceforge.net/skim-app/?rev=1782&view=rev Author: hofman Date: 2007-04-09 08:41:18 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Set document encoding for help to UTF-8 Modified Paths: -------------- trunk/English.lproj/Skim Help/skim.texi Modified: trunk/English.lproj/Skim Help/skim.texi =================================================================== --- trunk/English.lproj/Skim Help/skim.texi 2007-04-09 15:25:55 UTC (rev 1781) +++ trunk/English.lproj/Skim Help/skim.texi 2007-04-09 15:41:18 UTC (rev 1782) @@ -109,6 +109,7 @@ @c ====================================================================================== @documentlanguage en +@documentencoding UTF-8 @settitle Skim Help This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 15:25:56
|
Revision: 1781 http://skim-app.svn.sourceforge.net/skim-app/?rev=1781&view=rev Author: hofman Date: 2007-04-09 08:25:55 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Show top of text in hover window when a link targets the top of the page. RFE # 1694559. Modified Paths: -------------- trunk/SKPDFHoverWindow.m Modified: trunk/SKPDFHoverWindow.m =================================================================== --- trunk/SKPDFHoverWindow.m 2007-04-09 14:54:10 UTC (rev 1780) +++ trunk/SKPDFHoverWindow.m 2007-04-09 15:25:55 UTC (rev 1781) @@ -130,6 +130,13 @@ rect.origin.x -= NSMinX(bounds); rect.origin.y -= NSMinY(bounds) + NSHeight(rect); + PDFSelection *selection = [page selectionForRect:bounds]; + if ([selection string]) { + float top = NSMaxY([selection boundsForPage:page]); + if (top > NSMaxY(rect)) + rect.origin.y = top - NSHeight(rect); + } + [imageView setFrameSize:[image size]]; [imageView setImage:image]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 14:54:11
|
Revision: 1780 http://skim-app.svn.sourceforge.net/skim-app/?rev=1780&view=rev Author: hofman Date: 2007-04-09 07:54:10 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Disable tooltips. This fix a PDFKit bug with tooltips when a PDFDocument is changed. Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2007-04-09 12:43:11 UTC (rev 1779) +++ trunk/SKPDFView.m 2007-04-09 14:54:10 UTC (rev 1780) @@ -176,6 +176,10 @@ [super dealloc]; } +// Fix a bug in Tiger's PDFKit, tooltips lead to a crash when you reload a PDFDocument in a PDFView +// see http://www.cocoabuilder.com/archive/message/cocoa/2007/3/12/180190 +- (void)scheduleAddingToolips {} + #pragma mark Drawing - (void)drawPage:(PDFPage *)pdfPage { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 12:43:12
|
Revision: 1779 http://skim-app.svn.sourceforge.net/skim-app/?rev=1779&view=rev Author: hofman Date: 2007-04-09 05:43:11 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Fix layout Modified Paths: -------------- trunk/Italian.lproj/PreferenceWindow.nib/info.nib trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib Modified: trunk/Italian.lproj/PreferenceWindow.nib/info.nib =================================================================== --- trunk/Italian.lproj/PreferenceWindow.nib/info.nib 2007-04-09 12:22:46 UTC (rev 1778) +++ trunk/Italian.lproj/PreferenceWindow.nib/info.nib 2007-04-09 12:43:11 UTC (rev 1779) @@ -3,7 +3,7 @@ <plist version="1.0"> <dict> <key>IBDocumentLocation</key> - <string>43 101 356 240 0 0 1024 746 </string> + <string>70 139 356 240 0 0 1440 938 </string> <key>IBFramework Version</key> <string>446.1</string> <key>IBLockedObjects</key> Modified: trunk/Italian.lproj/PreferenceWindow.nib/keyedobjects.nib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 12:22:48
|
Revision: 1778 http://skim-app.svn.sourceforge.net/skim-app/?rev=1778&view=rev Author: hofman Date: 2007-04-09 05:22:46 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Resize disk image to its minimum size Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2007-04-09 11:48:44 UTC (rev 1777) +++ trunk/Skim.xcodeproj/project.pbxproj 2007-04-09 12:22:46 UTC (rev 1778) @@ -930,7 +930,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rm -f /tmp/Skim.dmg\nunzip ${SOURCE_ROOT}/Skim.dmg.zip\n/bin/cp ${SOURCE_ROOT}/Skim.dmg /tmp\n/usr/bin/hdiutil attach /tmp/Skim.dmg\n${SYSTEM_DEVELOPER_TOOLS}/CpMac -r ${BUILT_PRODUCTS_DIR}/Skim.app /Volumes/Skim\nosascript -e \"tell application \\\"Finder\\\" to set the position of application file \\\"Skim.app\\\" of disk named \\\"Skim\\\" to {90, 206}\" && \\\nsleep 7; \\\n/usr/sbin/diskutil eject /Volumes/Skim\n/usr/bin/hdiutil convert /tmp/Skim.dmg -format UDZO -imagekey zlib-level=9 -o $HOME/Desktop/Skim.dmg\n/usr/bin/hdiutil internet-enable -YES $HOME/Desktop/Skim.dmg\nexit 0"; + shellScript = "rm -f /tmp/Skim.dmg\nunzip ${SOURCE_ROOT}/Skim.dmg.zip\n/bin/cp ${SOURCE_ROOT}/Skim.dmg /tmp\n/usr/bin/hdiutil attach /tmp/Skim.dmg\n${SYSTEM_DEVELOPER_TOOLS}/CpMac -r ${BUILT_PRODUCTS_DIR}/Skim.app /Volumes/Skim\nosascript -e \"tell application \\\"Finder\\\" to set the position of application file \\\"Skim.app\\\" of disk named \\\"Skim\\\" to {90, 206}\" && \\\nsleep 7; \\\n/usr/sbin/diskutil eject /Volumes/Skim\n/usr/bin/hdiutil resize -size `/usr/bin/hdiutil resize /tmp/Skim.dmg | cut -f -1 -d \" \" -`b /tmp/Skim.dmg\n/usr/bin/hdiutil convert /tmp/Skim.dmg -format UDZO -imagekey zlib-level=9 -o $HOME/Desktop/Skim.dmg\n/usr/bin/hdiutil internet-enable -YES $HOME/Desktop/Skim.dmg\nexit 0"; }; /* End PBXShellScriptBuildPhase section */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 11:48:46
|
Revision: 1777 http://skim-app.svn.sourceforge.net/skim-app/?rev=1777&view=rev Author: hofman Date: 2007-04-09 04:48:44 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Resize disk image Modified Paths: -------------- trunk/Skim.dmg.zip Modified: trunk/Skim.dmg.zip =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ho...@us...> - 2007-04-09 10:07:43
|
Revision: 1776 http://skim-app.svn.sourceforge.net/skim-app/?rev=1776&view=rev Author: hofman Date: 2007-04-09 03:07:42 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Add new recent documents at the beginning for faster lookup. Restrict number of recent documents. Modified Paths: -------------- trunk/SKBookmarkController.m Modified: trunk/SKBookmarkController.m =================================================================== --- trunk/SKBookmarkController.m 2007-04-09 09:52:37 UTC (rev 1775) +++ trunk/SKBookmarkController.m 2007-04-09 10:07:42 UTC (rev 1776) @@ -39,6 +39,7 @@ #import "SKBookmarkController.h" #import "BDAlias.h" +#define MAX_RECENT_DOCUMENTS_COUNT 50 @implementation SKBookmarkController @@ -140,7 +141,9 @@ [recentDocuments removeObjectAtIndex:index]; NSData *data = [[BDAlias aliasWithPath:path] aliasData]; NSMutableDictionary *bm = [NSMutableDictionary dictionaryWithObjectsAndKeys:path, @"path", [NSNumber numberWithUnsignedInt:pageIndex], @"pageIndex", data, @"_BDAlias", nil]; - [recentDocuments addObject:bm]; + [recentDocuments insertObject:bm atIndex:0]; + if ([recentDocuments count] > MAX_RECENT_DOCUMENTS_COUNT) + [recentDocuments removeLastObject]; [self saveBookmarks]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |