├── English.lproj
├── Credits.rtf
├── InfoPlist.strings
├── MainMenu.xib
└── XFImageDocument.xib
├── ExtraFile-Info.plist
├── ExtraFile.xcodeproj
├── kimasendorf.mode1v3
├── kimasendorf.pbxuser
└── project.pbxproj
├── ExtraFile_Prefix.pch
├── README
├── XFApp.h
├── XFApp.m
├── XFImageDocument.h
├── XFImageDocument.m
├── XFImageDocumentController.h
├── XFImageDocumentController.m
├── XFImageFilter.h
├── XFImageFilter.m
├── XFImageView.h
├── XFImageView.m
├── XFPrintView.h
├── XFPrintView.m
├── XFProfile.h
├── XFProfile.m
├── XFZoomScrollView.h
├── XFZoomScrollView.m
├── icons
├── 4bc.icns
├── bascii.icns
├── blinx.icns
├── cci.icns
├── extrafile.icns
├── mcf.icns
├── uspec.icns
└── xff.icns
├── license.txt
└── main.m
/English.lproj/Credits.rtf:
--------------------------------------------------------------------------------
1 | {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
2 | {\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
3 | {\colortbl;\red255\green255\blue255;}
4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
5 |
6 | \f0\fs20 \cf0 \
7 | Initiated and developed by
8 | \b\fs24 \
9 | Kim Asendorf\
10 |
11 | \b0\fs20 \
12 | Thanks to\
13 |
14 | \b Ted Davis (Alpha tester)\
15 | \
16 |
17 | \b0 Beta tester
18 | \b \
19 | Benjamin Gaulon\
20 | Bit Synthesis\
21 | Dataswitch\
22 | Fritz Weber\
23 | Hellocatfood\
24 | ILovePresets\
25 | Jim Punk\
26 | Jose Irion Neto\
27 | Pixelnoizz\
28 | Rosa Menkman\
29 | }
--------------------------------------------------------------------------------
/English.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/ExtraFile-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleDocumentTypes
8 |
9 |
10 | CFBundleTypeExtensions
11 |
12 | uspec
13 |
14 | CFBundleTypeIconFile
15 | uspec.icns
16 | CFBundleTypeName
17 | Uniform Spectrum
18 | CFBundleTypeOSTypes
19 |
20 | USPEC
21 |
22 | CFBundleTypeRole
23 | Editor
24 | LSItemContentTypes
25 |
26 | org.extrafile.uspec
27 |
28 | LSTypeIsPackage
29 |
30 | NSDocumentClass
31 | XFImageDocument
32 | NSPersistentStoreTypeKey
33 | Binary
34 |
35 |
36 | CFBundleTypeExtensions
37 |
38 | blinx
39 |
40 | CFBundleTypeIconFile
41 | blinx.icns
42 | CFBundleTypeName
43 | Block Indexed
44 | CFBundleTypeOSTypes
45 |
46 | BLINX
47 |
48 | CFBundleTypeRole
49 | Editor
50 | LSItemContentTypes
51 |
52 | org.extrafile.blinx
53 |
54 | LSTypeIsPackage
55 |
56 | NSDocumentClass
57 | XFImageDocument
58 | NSPersistentStoreTypeKey
59 | Binary
60 |
61 |
62 | CFBundleTypeExtensions
63 |
64 | bascii
65 |
66 | CFBundleTypeIconFile
67 | bascii.icns
68 | CFBundleTypeName
69 | Block Ascii
70 | CFBundleTypeOSTypes
71 |
72 | BASCII
73 |
74 | CFBundleTypeRole
75 | Editor
76 | LSItemContentTypes
77 |
78 | org.extrafile.bascii
79 |
80 | LSTypeIsPackage
81 |
82 | NSDocumentClass
83 | XFImageDocument
84 | NSPersistentStoreTypeKey
85 | Binary
86 |
87 |
88 | CFBundleTypeExtensions
89 |
90 | 4bc
91 |
92 | CFBundleTypeIconFile
93 | 4bc.icns
94 | CFBundleTypeName
95 | 4 Bit Components
96 | CFBundleTypeOSTypes
97 |
98 | 4BC
99 |
100 | CFBundleTypeRole
101 | Editor
102 | LSItemContentTypes
103 |
104 | org.extrafile.4bc
105 |
106 | LSTypeIsPackage
107 |
108 | NSDocumentClass
109 | XFImageDocument
110 | NSPersistentStoreTypeKey
111 | Binary
112 |
113 |
114 | CFBundleTypeExtensions
115 |
116 | mcf
117 |
118 | CFBundleTypeIconFile
119 | mcf.icns
120 | CFBundleTypeName
121 | Monochrome Collector File
122 | CFBundleTypeOSTypes
123 |
124 | MCF
125 |
126 | CFBundleTypeRole
127 | Editor
128 | LSItemContentTypes
129 |
130 | org.extrafile.mcf
131 |
132 | LSTypeIsPackage
133 |
134 | NSDocumentClass
135 | XFImageDocument
136 | NSPersistentStoreTypeKey
137 | Binary
138 |
139 |
140 | CFBundleTypeExtensions
141 |
142 | cci
143 |
144 | CFBundleTypeIconFile
145 | cci.icns
146 | CFBundleTypeName
147 | Channel Compressed Image
148 | CFBundleTypeOSTypes
149 |
150 | CCI
151 |
152 | CFBundleTypeRole
153 | Editor
154 | LSItemContentTypes
155 |
156 | org.extrafile.cci
157 |
158 | LSTypeIsPackage
159 |
160 | NSDocumentClass
161 | XFImageDocument
162 | NSPersistentStoreTypeKey
163 | Binary
164 |
165 |
166 | CFBundleTypeExtensions
167 |
168 | xff
169 |
170 | CFBundleTypeIconFile
171 | xff.icns
172 | CFBundleTypeName
173 | Extra File Format
174 | CFBundleTypeOSTypes
175 |
176 | XFF
177 |
178 | CFBundleTypeRole
179 | Editor
180 | LSItemContentTypes
181 |
182 | org.extrafile.xff
183 |
184 | LSTypeIsPackage
185 |
186 | NSDocumentClass
187 | XFImageDocument
188 | NSPersistentStoreTypeKey
189 | Binary
190 |
191 |
192 | CFBundleTypeIconFile
193 | extrafile.icns
194 | CFBundleTypeName
195 | Image
196 | CFBundleTypeRole
197 | Editor
198 | LSItemContentTypes
199 |
200 | public.image
201 |
202 | LSMinimumSystemVersion
203 | 10.6
204 | NSDocumentClass
205 | XFImageDocument
206 | NSPersistentStoreTypeKey
207 | Binary
208 | XXCFBundleTypeExtensions
209 |
210 | png
211 | gif
212 | jpeg
213 | jpg
214 | jp2
215 | tiff
216 | tif
217 | crw
218 | nef
219 |
220 |
221 |
222 | CFBundleExecutable
223 | ${EXECUTABLE_NAME}
224 | CFBundleGetInfoString
225 | 2011 extrafile.org
226 | CFBundleIconFile
227 | extrafile.icns
228 | CFBundleIdentifier
229 | org.extrafile
230 | CFBundleInfoDictionaryVersion
231 | 6.0
232 | CFBundleName
233 | ${PRODUCT_NAME}
234 | CFBundlePackageType
235 | APPL
236 | CFBundleShortVersionString
237 | 0.52
238 | CFBundleSignature
239 | XFOS
240 | CFBundleVersion
241 | 28
242 | LSMinimumSystemVersion
243 | ${MACOSX_DEPLOYMENT_TARGET}
244 | NSHumanReadableCopyright
245 | Copyright 2011 extrafile.org
246 | NSMainNibFile
247 | MainMenu
248 | NSPrincipalClass
249 | XFApp
250 | NSSupportsSuddenTermination
251 |
252 | UTExportedTypeDeclarations
253 |
254 |
255 | UTTypeConformsTo
256 |
257 | public.data
258 |
259 | UTTypeDescription
260 | Uniform Spectrum
261 | UTTypeIconFile
262 | uspec.icns
263 | UTTypeIdentifier
264 | org.extrafile.uspec
265 | UTTypeTagSpecification
266 |
267 | public.filename-extension
268 |
269 | uspec
270 |
271 |
272 |
273 |
274 | UTTypeConformsTo
275 |
276 | public.data
277 |
278 | UTTypeDescription
279 | Block Index
280 | UTTypeIconFile
281 | blinx.icns
282 | UTTypeIdentifier
283 | org.extrafile.blinx
284 | UTTypeTagSpecification
285 |
286 | public.filename-extension
287 |
288 | blinx
289 |
290 |
291 |
292 |
293 | UTTypeConformsTo
294 |
295 | public.data
296 |
297 | UTTypeDescription
298 | Block Ascii
299 | UTTypeIconFile
300 | bascii.icns
301 | UTTypeIdentifier
302 | org.extrafile.bascii
303 | UTTypeTagSpecification
304 |
305 | public.filename-extension
306 |
307 | bascii
308 |
309 |
310 |
311 |
312 | UTTypeConformsTo
313 |
314 | public.data
315 |
316 | UTTypeDescription
317 | 4 Bit Components
318 | UTTypeIconFile
319 | 4bc.icns
320 | UTTypeIdentifier
321 | org.extrafile.4bc
322 | UTTypeTagSpecification
323 |
324 | public.filename-extension
325 |
326 | 4bc
327 |
328 |
329 |
330 |
331 | UTTypeConformsTo
332 |
333 | public.data
334 |
335 | UTTypeDescription
336 | Monochrome Collector File
337 | UTTypeIconFile
338 | mcf.icns
339 | UTTypeIdentifier
340 | org.extrafile.mcf
341 | UTTypeTagSpecification
342 |
343 | public.filename-extension
344 |
345 | mcf
346 |
347 |
348 |
349 |
350 | UTTypeConformsTo
351 |
352 | public.data
353 |
354 | UTTypeDescription
355 | Channel Compressed Image
356 | UTTypeIconFile
357 | cci.icns
358 | UTTypeIdentifier
359 | org.extrafile.cci
360 | UTTypeTagSpecification
361 |
362 | public.filename-extension
363 |
364 | cci
365 |
366 |
367 |
368 |
369 | UTTypeConformsTo
370 |
371 | public.data
372 |
373 | UTTypeDescription
374 | Extra File Format
375 | UTTypeIconFile
376 | xff.icns
377 | UTTypeIdentifier
378 | org.extrafile.xff
379 | UTTypeTagSpecification
380 |
381 | public.filename-extension
382 |
383 | xff
384 |
385 |
386 |
387 |
388 |
389 |
390 |
--------------------------------------------------------------------------------
/ExtraFile.xcodeproj/kimasendorf.mode1v3:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ActivePerspectiveName
6 | Project
7 | AllowedModules
8 |
9 |
10 | BundleLoadPath
11 |
12 | MaxInstances
13 | n
14 | Module
15 | PBXSmartGroupTreeModule
16 | Name
17 | Groups and Files Outline View
18 |
19 |
20 | BundleLoadPath
21 |
22 | MaxInstances
23 | n
24 | Module
25 | PBXNavigatorGroup
26 | Name
27 | Editor
28 |
29 |
30 | BundleLoadPath
31 |
32 | MaxInstances
33 | n
34 | Module
35 | XCTaskListModule
36 | Name
37 | Task List
38 |
39 |
40 | BundleLoadPath
41 |
42 | MaxInstances
43 | n
44 | Module
45 | XCDetailModule
46 | Name
47 | File and Smart Group Detail Viewer
48 |
49 |
50 | BundleLoadPath
51 |
52 | MaxInstances
53 | 1
54 | Module
55 | PBXBuildResultsModule
56 | Name
57 | Detailed Build Results Viewer
58 |
59 |
60 | BundleLoadPath
61 |
62 | MaxInstances
63 | 1
64 | Module
65 | PBXProjectFindModule
66 | Name
67 | Project Batch Find Tool
68 |
69 |
70 | BundleLoadPath
71 |
72 | MaxInstances
73 | n
74 | Module
75 | XCProjectFormatConflictsModule
76 | Name
77 | Project Format Conflicts List
78 |
79 |
80 | BundleLoadPath
81 |
82 | MaxInstances
83 | n
84 | Module
85 | PBXBookmarksModule
86 | Name
87 | Bookmarks Tool
88 |
89 |
90 | BundleLoadPath
91 |
92 | MaxInstances
93 | n
94 | Module
95 | PBXClassBrowserModule
96 | Name
97 | Class Browser
98 |
99 |
100 | BundleLoadPath
101 |
102 | MaxInstances
103 | n
104 | Module
105 | PBXCVSModule
106 | Name
107 | Source Code Control Tool
108 |
109 |
110 | BundleLoadPath
111 |
112 | MaxInstances
113 | n
114 | Module
115 | PBXDebugBreakpointsModule
116 | Name
117 | Debug Breakpoints Tool
118 |
119 |
120 | BundleLoadPath
121 |
122 | MaxInstances
123 | n
124 | Module
125 | XCDockableInspector
126 | Name
127 | Inspector
128 |
129 |
130 | BundleLoadPath
131 |
132 | MaxInstances
133 | n
134 | Module
135 | PBXOpenQuicklyModule
136 | Name
137 | Open Quickly Tool
138 |
139 |
140 | BundleLoadPath
141 |
142 | MaxInstances
143 | 1
144 | Module
145 | PBXDebugSessionModule
146 | Name
147 | Debugger
148 |
149 |
150 | BundleLoadPath
151 |
152 | MaxInstances
153 | 1
154 | Module
155 | PBXDebugCLIModule
156 | Name
157 | Debug Console
158 |
159 |
160 | BundleLoadPath
161 |
162 | MaxInstances
163 | n
164 | Module
165 | XCSnapshotModule
166 | Name
167 | Snapshots Tool
168 |
169 |
170 | BundlePath
171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources
172 | Description
173 | DefaultDescriptionKey
174 | DockingSystemVisible
175 |
176 | Extension
177 | mode1v3
178 | FavBarConfig
179 |
180 | PBXProjectModuleGUID
181 | 7181C5161373DE90006DDE90
182 | XCBarModuleItemNames
183 |
184 | XCBarModuleItems
185 |
186 |
187 | FirstTimeWindowDisplayed
188 |
189 | Identifier
190 | com.apple.perspectives.project.mode1v3
191 | MajorVersion
192 | 33
193 | MinorVersion
194 | 0
195 | Name
196 | Default
197 | Notifications
198 |
199 | OpenEditors
200 |
201 | PerspectiveWidths
202 |
203 | -1
204 | -1
205 |
206 | Perspectives
207 |
208 |
209 | ChosenToolbarItems
210 |
211 | active-combo-popup
212 | action
213 | NSToolbarFlexibleSpaceItem
214 | debugger-enable-breakpoints
215 | build-and-go
216 | com.apple.ide.PBXToolbarStopButton
217 | get-info
218 | NSToolbarFlexibleSpaceItem
219 | com.apple.pbx.toolbar.searchfield
220 |
221 | ControllerClassBaseName
222 |
223 | IconName
224 | WindowOfProjectWithEditor
225 | Identifier
226 | perspective.project
227 | IsVertical
228 |
229 | Layout
230 |
231 |
232 | ContentConfiguration
233 |
234 | PBXBottomSmartGroupGIDs
235 |
236 | 1C37FBAC04509CD000000102
237 | 1C37FAAC04509CD000000102
238 | 1C37FABC05509CD000000102
239 | 1C37FABC05539CD112110102
240 | E2644B35053B69B200211256
241 | 1C37FABC04509CD000100104
242 | 1CC0EA4004350EF90044410B
243 | 1CC0EA4004350EF90041110B
244 |
245 | PBXProjectModuleGUID
246 | 1CE0B1FE06471DED0097A5F4
247 | PBXProjectModuleLabel
248 | Files
249 | PBXProjectStructureProvided
250 | yes
251 | PBXSmartGroupTreeModuleColumnData
252 |
253 | PBXSmartGroupTreeModuleColumnWidthsKey
254 |
255 | 186
256 |
257 | PBXSmartGroupTreeModuleColumnsKey_v4
258 |
259 | MainColumn
260 |
261 |
262 | PBXSmartGroupTreeModuleOutlineStateKey_v7
263 |
264 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
265 |
266 | 2A37F4AAFDCFA73011CA2CEA
267 | 2A37F4ABFDCFA73011CA2CEA
268 | 2A37F4AFFDCFA73011CA2CEA
269 | 2A37F4B8FDCFA73011CA2CEA
270 | 1C37FBAC04509CD000000102
271 | 1C37FABC05509CD000000102
272 |
273 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
274 |
275 |
276 | 30
277 | 21
278 | 0
279 |
280 |
281 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
282 | {{0, 0}, {186, 1156}}
283 |
284 | PBXTopSmartGroupGIDs
285 |
286 | XCIncludePerspectivesSwitch
287 |
288 | XCSharingToken
289 | com.apple.Xcode.GFSharingToken
290 |
291 | GeometryConfiguration
292 |
293 | Frame
294 | {{0, 0}, {203, 1174}}
295 | GroupTreeTableConfiguration
296 |
297 | MainColumn
298 | 186
299 |
300 | RubberWindowFrame
301 | 909 152 1351 1215 0 0 2560 1418
302 |
303 | Module
304 | PBXSmartGroupTreeModule
305 | Proportion
306 | 203pt
307 |
308 |
309 | Dock
310 |
311 |
312 | BecomeActive
313 |
314 | ContentConfiguration
315 |
316 | PBXProjectModuleGUID
317 | 1CE0B20306471E060097A5F4
318 | PBXProjectModuleLabel
319 | Credits.rtf
320 | PBXSplitModuleInNavigatorKey
321 |
322 | Split0
323 |
324 | PBXProjectModuleGUID
325 | 1CE0B20406471E060097A5F4
326 | PBXProjectModuleLabel
327 | Credits.rtf
328 | _historyCapacity
329 | 0
330 | bookmark
331 | 71BCE47A13FB08150037C7B4
332 | history
333 |
334 | 7125A547137F409800699395
335 | 7193078A1389D753001A6737
336 | 714B5425139302070095067A
337 | 71924C2713998D250025019D
338 | 71924C43139990210025019D
339 | 71924C44139990210025019D
340 | 71924C4C139996D50025019D
341 | 71F9201D13AFE99D00C2D785
342 | 71FEA7E013FB05C9008B7E19
343 | 71FEA7E113FB05C9008B7E19
344 | 71FEA7E213FB05C9008B7E19
345 | 71FEA7E313FB05C9008B7E19
346 | 71FEA7E413FB05C9008B7E19
347 | 71FEA7E513FB05C9008B7E19
348 | 71FEA7E613FB05C9008B7E19
349 | 71FEA7E713FB05C9008B7E19
350 | 71FEA7E813FB05C9008B7E19
351 | 71FEA7E913FB05C9008B7E19
352 | 71FEA7EA13FB05C9008B7E19
353 | 71FEA7EB13FB05C9008B7E19
354 | 71FEA7EC13FB05C9008B7E19
355 | 71FEA7ED13FB05C9008B7E19
356 | 71FEA7EE13FB05C9008B7E19
357 | 71FEA7EF13FB05C9008B7E19
358 | 71FEA7F013FB05C9008B7E19
359 | 71FEA7F113FB05C9008B7E19
360 | 71FEA7F213FB05C9008B7E19
361 | 71FEA7F313FB05C9008B7E19
362 | 71FEA7F413FB05C9008B7E19
363 | 71BCE45C13FB07B90037C7B4
364 |
365 |
366 | SplitCount
367 | 1
368 |
369 | StatusBarVisibility
370 |
371 |
372 | GeometryConfiguration
373 |
374 | Frame
375 | {{0, 0}, {1143, 922}}
376 | RubberWindowFrame
377 | 909 152 1351 1215 0 0 2560 1418
378 |
379 | Module
380 | PBXNavigatorGroup
381 | Proportion
382 | 922pt
383 |
384 |
385 | ContentConfiguration
386 |
387 | PBXProjectModuleGUID
388 | 1CE0B20506471E060097A5F4
389 | PBXProjectModuleLabel
390 | Detail
391 |
392 | GeometryConfiguration
393 |
394 | Frame
395 | {{0, 927}, {1143, 247}}
396 | RubberWindowFrame
397 | 909 152 1351 1215 0 0 2560 1418
398 |
399 | Module
400 | XCDetailModule
401 | Proportion
402 | 247pt
403 |
404 |
405 | Proportion
406 | 1143pt
407 |
408 |
409 | Name
410 | Project
411 | ServiceClasses
412 |
413 | XCModuleDock
414 | PBXSmartGroupTreeModule
415 | XCModuleDock
416 | PBXNavigatorGroup
417 | XCDetailModule
418 |
419 | TableOfContents
420 |
421 | 71BCE46D13FB07E80037C7B4
422 | 1CE0B1FE06471DED0097A5F4
423 | 71BCE46E13FB07E80037C7B4
424 | 1CE0B20306471E060097A5F4
425 | 1CE0B20506471E060097A5F4
426 |
427 | ToolbarConfigUserDefaultsMinorVersion
428 | 2
429 | ToolbarConfiguration
430 | xcode.toolbar.config.defaultV3
431 |
432 |
433 | ControllerClassBaseName
434 |
435 | IconName
436 | WindowOfProject
437 | Identifier
438 | perspective.morph
439 | IsVertical
440 | 0
441 | Layout
442 |
443 |
444 | BecomeActive
445 | 1
446 | ContentConfiguration
447 |
448 | PBXBottomSmartGroupGIDs
449 |
450 | 1C37FBAC04509CD000000102
451 | 1C37FAAC04509CD000000102
452 | 1C08E77C0454961000C914BD
453 | 1C37FABC05509CD000000102
454 | 1C37FABC05539CD112110102
455 | E2644B35053B69B200211256
456 | 1C37FABC04509CD000100104
457 | 1CC0EA4004350EF90044410B
458 | 1CC0EA4004350EF90041110B
459 |
460 | PBXProjectModuleGUID
461 | 11E0B1FE06471DED0097A5F4
462 | PBXProjectModuleLabel
463 | Files
464 | PBXProjectStructureProvided
465 | yes
466 | PBXSmartGroupTreeModuleColumnData
467 |
468 | PBXSmartGroupTreeModuleColumnWidthsKey
469 |
470 | 186
471 |
472 | PBXSmartGroupTreeModuleColumnsKey_v4
473 |
474 | MainColumn
475 |
476 |
477 | PBXSmartGroupTreeModuleOutlineStateKey_v7
478 |
479 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
480 |
481 | 29B97314FDCFA39411CA2CEA
482 | 1C37FABC05509CD000000102
483 |
484 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
485 |
486 |
487 | 0
488 |
489 |
490 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
491 | {{0, 0}, {186, 337}}
492 |
493 | PBXTopSmartGroupGIDs
494 |
495 | XCIncludePerspectivesSwitch
496 | 1
497 | XCSharingToken
498 | com.apple.Xcode.GFSharingToken
499 |
500 | GeometryConfiguration
501 |
502 | Frame
503 | {{0, 0}, {203, 355}}
504 | GroupTreeTableConfiguration
505 |
506 | MainColumn
507 | 186
508 |
509 | RubberWindowFrame
510 | 373 269 690 397 0 0 1440 878
511 |
512 | Module
513 | PBXSmartGroupTreeModule
514 | Proportion
515 | 100%
516 |
517 |
518 | Name
519 | Morph
520 | PreferredWidth
521 | 300
522 | ServiceClasses
523 |
524 | XCModuleDock
525 | PBXSmartGroupTreeModule
526 |
527 | TableOfContents
528 |
529 | 11E0B1FE06471DED0097A5F4
530 |
531 | ToolbarConfiguration
532 | xcode.toolbar.config.default.shortV3
533 |
534 |
535 | PerspectivesBarVisible
536 |
537 | ShelfIsVisible
538 |
539 | SourceDescription
540 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'
541 | StatusbarIsVisible
542 |
543 | TimeStamp
544 | 0.0
545 | ToolbarConfigUserDefaultsMinorVersion
546 | 2
547 | ToolbarDisplayMode
548 | 1
549 | ToolbarIsVisible
550 |
551 | ToolbarSizeMode
552 | 1
553 | Type
554 | Perspectives
555 | UpdateMessage
556 | 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 '%@'?
557 | WindowJustification
558 | 5
559 | WindowOrderList
560 |
561 | 71BCE47813FB07E80037C7B4
562 | 71BCE47913FB07E80037C7B4
563 | 1CD10A99069EF8BA00B06720
564 | 7181C5171373DE90006DDE90
565 | 1C78EAAD065D492600B07095
566 | /Users/kimasendorf/Documents/Development/Cocoa/ExtraFile/ExtraFile.xcodeproj
567 |
568 | WindowString
569 | 909 152 1351 1215 0 0 2560 1418
570 | WindowToolsV3
571 |
572 |
573 | FirstTimeWindowDisplayed
574 |
575 | Identifier
576 | windowTool.build
577 | IsVertical
578 |
579 | Layout
580 |
581 |
582 | Dock
583 |
584 |
585 | ContentConfiguration
586 |
587 | PBXProjectModuleGUID
588 | 1CD0528F0623707200166675
589 | PBXProjectModuleLabel
590 |
591 | StatusBarVisibility
592 |
593 |
594 | GeometryConfiguration
595 |
596 | Frame
597 | {{0, 0}, {964, 232}}
598 | RubberWindowFrame
599 | 761 620 964 514 0 0 2560 1418
600 |
601 | Module
602 | PBXNavigatorGroup
603 | Proportion
604 | 232pt
605 |
606 |
607 | ContentConfiguration
608 |
609 | PBXProjectModuleGUID
610 | XCMainBuildResultsModuleGUID
611 | PBXProjectModuleLabel
612 | Build Results
613 | XCBuildResultsTrigger_Collapse
614 | 1021
615 | XCBuildResultsTrigger_Open
616 | 1011
617 |
618 | GeometryConfiguration
619 |
620 | Frame
621 | {{0, 237}, {964, 236}}
622 | RubberWindowFrame
623 | 761 620 964 514 0 0 2560 1418
624 |
625 | Module
626 | PBXBuildResultsModule
627 | Proportion
628 | 236pt
629 |
630 |
631 | Proportion
632 | 473pt
633 |
634 |
635 | Name
636 | Build Results
637 | ServiceClasses
638 |
639 | PBXBuildResultsModule
640 |
641 | StatusbarIsVisible
642 |
643 | TableOfContents
644 |
645 | 7181C5171373DE90006DDE90
646 | 71BCE46F13FB07E80037C7B4
647 | 1CD0528F0623707200166675
648 | XCMainBuildResultsModuleGUID
649 |
650 | ToolbarConfiguration
651 | xcode.toolbar.config.buildV3
652 | WindowContentMinSize
653 | 486 300
654 | WindowString
655 | 761 620 964 514 0 0 2560 1418
656 | WindowToolGUID
657 | 7181C5171373DE90006DDE90
658 | WindowToolIsVisible
659 |
660 |
661 |
662 | FirstTimeWindowDisplayed
663 |
664 | Identifier
665 | windowTool.debugger
666 | IsVertical
667 |
668 | Layout
669 |
670 |
671 | Dock
672 |
673 |
674 | ContentConfiguration
675 |
676 | Debugger
677 |
678 | HorizontalSplitView
679 |
680 | _collapsingFrameDimension
681 | 0.0
682 | _indexOfCollapsedView
683 | 0
684 | _percentageOfCollapsedView
685 | 0.0
686 | isCollapsed
687 | yes
688 | sizes
689 |
690 | {{0, 0}, {316, 203}}
691 | {{316, 0}, {378, 203}}
692 |
693 |
694 | VerticalSplitView
695 |
696 | _collapsingFrameDimension
697 | 0.0
698 | _indexOfCollapsedView
699 | 0
700 | _percentageOfCollapsedView
701 | 0.0
702 | isCollapsed
703 | yes
704 | sizes
705 |
706 | {{0, 0}, {694, 203}}
707 | {{0, 203}, {694, 178}}
708 |
709 |
710 |
711 | LauncherConfigVersion
712 | 8
713 | PBXProjectModuleGUID
714 | 1C162984064C10D400B95A72
715 | PBXProjectModuleLabel
716 | Debug - GLUTExamples (Underwater)
717 |
718 | GeometryConfiguration
719 |
720 | DebugConsoleVisible
721 | None
722 | DebugConsoleWindowFrame
723 | {{200, 200}, {500, 300}}
724 | DebugSTDIOWindowFrame
725 | {{200, 200}, {500, 300}}
726 | Frame
727 | {{0, 0}, {694, 381}}
728 | PBXDebugSessionStackFrameViewKey
729 |
730 | DebugVariablesTableConfiguration
731 |
732 | Name
733 | 120
734 | Value
735 | 85
736 | Summary
737 | 148
738 |
739 | Frame
740 | {{316, 0}, {378, 203}}
741 | RubberWindowFrame
742 | 75 973 694 422 0 0 2560 1418
743 |
744 | RubberWindowFrame
745 | 75 973 694 422 0 0 2560 1418
746 |
747 | Module
748 | PBXDebugSessionModule
749 | Proportion
750 | 381pt
751 |
752 |
753 | Proportion
754 | 381pt
755 |
756 |
757 | Name
758 | Debugger
759 | ServiceClasses
760 |
761 | PBXDebugSessionModule
762 |
763 | StatusbarIsVisible
764 |
765 | TableOfContents
766 |
767 | 1CD10A99069EF8BA00B06720
768 | 71BCE47013FB07E80037C7B4
769 | 1C162984064C10D400B95A72
770 | 71BCE47113FB07E80037C7B4
771 | 71BCE47213FB07E80037C7B4
772 | 71BCE47313FB07E80037C7B4
773 | 71BCE47413FB07E80037C7B4
774 | 71BCE47513FB07E80037C7B4
775 |
776 | ToolbarConfiguration
777 | xcode.toolbar.config.debugV3
778 | WindowString
779 | 75 973 694 422 0 0 2560 1418
780 | WindowToolGUID
781 | 1CD10A99069EF8BA00B06720
782 | WindowToolIsVisible
783 |
784 |
785 |
786 | Identifier
787 | windowTool.find
788 | Layout
789 |
790 |
791 | Dock
792 |
793 |
794 | Dock
795 |
796 |
797 | ContentConfiguration
798 |
799 | PBXProjectModuleGUID
800 | 1CDD528C0622207200134675
801 | PBXProjectModuleLabel
802 | <No Editor>
803 | PBXSplitModuleInNavigatorKey
804 |
805 | Split0
806 |
807 | PBXProjectModuleGUID
808 | 1CD0528D0623707200166675
809 |
810 | SplitCount
811 | 1
812 |
813 | StatusBarVisibility
814 | 1
815 |
816 | GeometryConfiguration
817 |
818 | Frame
819 | {{0, 0}, {781, 167}}
820 | RubberWindowFrame
821 | 62 385 781 470 0 0 1440 878
822 |
823 | Module
824 | PBXNavigatorGroup
825 | Proportion
826 | 781pt
827 |
828 |
829 | Proportion
830 | 50%
831 |
832 |
833 | BecomeActive
834 | 1
835 | ContentConfiguration
836 |
837 | PBXProjectModuleGUID
838 | 1CD0528E0623707200166675
839 | PBXProjectModuleLabel
840 | Project Find
841 |
842 | GeometryConfiguration
843 |
844 | Frame
845 | {{8, 0}, {773, 254}}
846 | RubberWindowFrame
847 | 62 385 781 470 0 0 1440 878
848 |
849 | Module
850 | PBXProjectFindModule
851 | Proportion
852 | 50%
853 |
854 |
855 | Proportion
856 | 428pt
857 |
858 |
859 | Name
860 | Project Find
861 | ServiceClasses
862 |
863 | PBXProjectFindModule
864 |
865 | StatusbarIsVisible
866 | 1
867 | TableOfContents
868 |
869 | 1C530D57069F1CE1000CFCEE
870 | 1C530D58069F1CE1000CFCEE
871 | 1C530D59069F1CE1000CFCEE
872 | 1CDD528C0622207200134675
873 | 1C530D5A069F1CE1000CFCEE
874 | 1CE0B1FE06471DED0097A5F4
875 | 1CD0528E0623707200166675
876 |
877 | WindowString
878 | 62 385 781 470 0 0 1440 878
879 | WindowToolGUID
880 | 1C530D57069F1CE1000CFCEE
881 | WindowToolIsVisible
882 | 0
883 |
884 |
885 | Identifier
886 | MENUSEPARATOR
887 |
888 |
889 | FirstTimeWindowDisplayed
890 |
891 | Identifier
892 | windowTool.debuggerConsole
893 | IsVertical
894 |
895 | Layout
896 |
897 |
898 | Dock
899 |
900 |
901 | BecomeActive
902 |
903 | ContentConfiguration
904 |
905 | PBXProjectModuleGUID
906 | 1C78EAAC065D492600B07095
907 | PBXProjectModuleLabel
908 | Debugger Console
909 |
910 | GeometryConfiguration
911 |
912 | Frame
913 | {{0, 0}, {1028, 238}}
914 | RubberWindowFrame
915 | 49 60 1028 279 0 0 2560 1418
916 |
917 | Module
918 | PBXDebugCLIModule
919 | Proportion
920 | 238pt
921 |
922 |
923 | Proportion
924 | 238pt
925 |
926 |
927 | Name
928 | Debugger Console
929 | ServiceClasses
930 |
931 | PBXDebugCLIModule
932 |
933 | StatusbarIsVisible
934 |
935 | TableOfContents
936 |
937 | 1C78EAAD065D492600B07095
938 | 71BCE47613FB07E80037C7B4
939 | 1C78EAAC065D492600B07095
940 |
941 | ToolbarConfiguration
942 | xcode.toolbar.config.consoleV3
943 | WindowString
944 | 49 60 1028 279 0 0 2560 1418
945 | WindowToolGUID
946 | 1C78EAAD065D492600B07095
947 | WindowToolIsVisible
948 |
949 |
950 |
951 | Identifier
952 | windowTool.snapshots
953 | Layout
954 |
955 |
956 | Dock
957 |
958 |
959 | Module
960 | XCSnapshotModule
961 | Proportion
962 | 100%
963 |
964 |
965 | Proportion
966 | 100%
967 |
968 |
969 | Name
970 | Snapshots
971 | ServiceClasses
972 |
973 | XCSnapshotModule
974 |
975 | StatusbarIsVisible
976 | Yes
977 | ToolbarConfiguration
978 | xcode.toolbar.config.snapshots
979 | WindowString
980 | 315 824 300 550 0 0 1440 878
981 | WindowToolIsVisible
982 | Yes
983 |
984 |
985 | Identifier
986 | windowTool.scm
987 | Layout
988 |
989 |
990 | Dock
991 |
992 |
993 | ContentConfiguration
994 |
995 | PBXProjectModuleGUID
996 | 1C78EAB2065D492600B07095
997 | PBXProjectModuleLabel
998 | <No Editor>
999 | PBXSplitModuleInNavigatorKey
1000 |
1001 | Split0
1002 |
1003 | PBXProjectModuleGUID
1004 | 1C78EAB3065D492600B07095
1005 |
1006 | SplitCount
1007 | 1
1008 |
1009 | StatusBarVisibility
1010 | 1
1011 |
1012 | GeometryConfiguration
1013 |
1014 | Frame
1015 | {{0, 0}, {452, 0}}
1016 | RubberWindowFrame
1017 | 743 379 452 308 0 0 1280 1002
1018 |
1019 | Module
1020 | PBXNavigatorGroup
1021 | Proportion
1022 | 0pt
1023 |
1024 |
1025 | BecomeActive
1026 | 1
1027 | ContentConfiguration
1028 |
1029 | PBXProjectModuleGUID
1030 | 1CD052920623707200166675
1031 | PBXProjectModuleLabel
1032 | SCM
1033 |
1034 | GeometryConfiguration
1035 |
1036 | ConsoleFrame
1037 | {{0, 259}, {452, 0}}
1038 | Frame
1039 | {{0, 7}, {452, 259}}
1040 | RubberWindowFrame
1041 | 743 379 452 308 0 0 1280 1002
1042 | TableConfiguration
1043 |
1044 | Status
1045 | 30
1046 | FileName
1047 | 199
1048 | Path
1049 | 197.0950012207031
1050 |
1051 | TableFrame
1052 | {{0, 0}, {452, 250}}
1053 |
1054 | Module
1055 | PBXCVSModule
1056 | Proportion
1057 | 262pt
1058 |
1059 |
1060 | Proportion
1061 | 266pt
1062 |
1063 |
1064 | Name
1065 | SCM
1066 | ServiceClasses
1067 |
1068 | PBXCVSModule
1069 |
1070 | StatusbarIsVisible
1071 | 1
1072 | TableOfContents
1073 |
1074 | 1C78EAB4065D492600B07095
1075 | 1C78EAB5065D492600B07095
1076 | 1C78EAB2065D492600B07095
1077 | 1CD052920623707200166675
1078 |
1079 | ToolbarConfiguration
1080 | xcode.toolbar.config.scm
1081 | WindowString
1082 | 743 379 452 308 0 0 1280 1002
1083 |
1084 |
1085 | Identifier
1086 | windowTool.breakpoints
1087 | IsVertical
1088 | 0
1089 | Layout
1090 |
1091 |
1092 | Dock
1093 |
1094 |
1095 | BecomeActive
1096 | 1
1097 | ContentConfiguration
1098 |
1099 | PBXBottomSmartGroupGIDs
1100 |
1101 | 1C77FABC04509CD000000102
1102 |
1103 | PBXProjectModuleGUID
1104 | 1CE0B1FE06471DED0097A5F4
1105 | PBXProjectModuleLabel
1106 | Files
1107 | PBXProjectStructureProvided
1108 | no
1109 | PBXSmartGroupTreeModuleColumnData
1110 |
1111 | PBXSmartGroupTreeModuleColumnWidthsKey
1112 |
1113 | 168
1114 |
1115 | PBXSmartGroupTreeModuleColumnsKey_v4
1116 |
1117 | MainColumn
1118 |
1119 |
1120 | PBXSmartGroupTreeModuleOutlineStateKey_v7
1121 |
1122 | PBXSmartGroupTreeModuleOutlineStateExpansionKey
1123 |
1124 | 1C77FABC04509CD000000102
1125 |
1126 | PBXSmartGroupTreeModuleOutlineStateSelectionKey
1127 |
1128 |
1129 | 0
1130 |
1131 |
1132 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
1133 | {{0, 0}, {168, 350}}
1134 |
1135 | PBXTopSmartGroupGIDs
1136 |
1137 | XCIncludePerspectivesSwitch
1138 | 0
1139 |
1140 | GeometryConfiguration
1141 |
1142 | Frame
1143 | {{0, 0}, {185, 368}}
1144 | GroupTreeTableConfiguration
1145 |
1146 | MainColumn
1147 | 168
1148 |
1149 | RubberWindowFrame
1150 | 315 424 744 409 0 0 1440 878
1151 |
1152 | Module
1153 | PBXSmartGroupTreeModule
1154 | Proportion
1155 | 185pt
1156 |
1157 |
1158 | ContentConfiguration
1159 |
1160 | PBXProjectModuleGUID
1161 | 1CA1AED706398EBD00589147
1162 | PBXProjectModuleLabel
1163 | Detail
1164 |
1165 | GeometryConfiguration
1166 |
1167 | Frame
1168 | {{190, 0}, {554, 368}}
1169 | RubberWindowFrame
1170 | 315 424 744 409 0 0 1440 878
1171 |
1172 | Module
1173 | XCDetailModule
1174 | Proportion
1175 | 554pt
1176 |
1177 |
1178 | Proportion
1179 | 368pt
1180 |
1181 |
1182 | MajorVersion
1183 | 3
1184 | MinorVersion
1185 | 0
1186 | Name
1187 | Breakpoints
1188 | ServiceClasses
1189 |
1190 | PBXSmartGroupTreeModule
1191 | XCDetailModule
1192 |
1193 | StatusbarIsVisible
1194 | 1
1195 | TableOfContents
1196 |
1197 | 1CDDB66807F98D9800BB5817
1198 | 1CDDB66907F98D9800BB5817
1199 | 1CE0B1FE06471DED0097A5F4
1200 | 1CA1AED706398EBD00589147
1201 |
1202 | ToolbarConfiguration
1203 | xcode.toolbar.config.breakpointsV3
1204 | WindowString
1205 | 315 424 744 409 0 0 1440 878
1206 | WindowToolGUID
1207 | 1CDDB66807F98D9800BB5817
1208 | WindowToolIsVisible
1209 | 1
1210 |
1211 |
1212 | Identifier
1213 | windowTool.debugAnimator
1214 | Layout
1215 |
1216 |
1217 | Dock
1218 |
1219 |
1220 | Module
1221 | PBXNavigatorGroup
1222 | Proportion
1223 | 100%
1224 |
1225 |
1226 | Proportion
1227 | 100%
1228 |
1229 |
1230 | Name
1231 | Debug Visualizer
1232 | ServiceClasses
1233 |
1234 | PBXNavigatorGroup
1235 |
1236 | StatusbarIsVisible
1237 | 1
1238 | ToolbarConfiguration
1239 | xcode.toolbar.config.debugAnimatorV3
1240 | WindowString
1241 | 100 100 700 500 0 0 1280 1002
1242 |
1243 |
1244 | Identifier
1245 | windowTool.bookmarks
1246 | Layout
1247 |
1248 |
1249 | Dock
1250 |
1251 |
1252 | Module
1253 | PBXBookmarksModule
1254 | Proportion
1255 | 100%
1256 |
1257 |
1258 | Proportion
1259 | 100%
1260 |
1261 |
1262 | Name
1263 | Bookmarks
1264 | ServiceClasses
1265 |
1266 | PBXBookmarksModule
1267 |
1268 | StatusbarIsVisible
1269 | 0
1270 | WindowString
1271 | 538 42 401 187 0 0 1280 1002
1272 |
1273 |
1274 | Identifier
1275 | windowTool.projectFormatConflicts
1276 | Layout
1277 |
1278 |
1279 | Dock
1280 |
1281 |
1282 | Module
1283 | XCProjectFormatConflictsModule
1284 | Proportion
1285 | 100%
1286 |
1287 |
1288 | Proportion
1289 | 100%
1290 |
1291 |
1292 | Name
1293 | Project Format Conflicts
1294 | ServiceClasses
1295 |
1296 | XCProjectFormatConflictsModule
1297 |
1298 | StatusbarIsVisible
1299 | 0
1300 | WindowContentMinSize
1301 | 450 300
1302 | WindowString
1303 | 50 850 472 307 0 0 1440 877
1304 |
1305 |
1306 | Identifier
1307 | windowTool.classBrowser
1308 | Layout
1309 |
1310 |
1311 | Dock
1312 |
1313 |
1314 | BecomeActive
1315 | 1
1316 | ContentConfiguration
1317 |
1318 | OptionsSetName
1319 | Hierarchy, all classes
1320 | PBXProjectModuleGUID
1321 | 1CA6456E063B45B4001379D8
1322 | PBXProjectModuleLabel
1323 | Class Browser - NSObject
1324 |
1325 | GeometryConfiguration
1326 |
1327 | ClassesFrame
1328 | {{0, 0}, {374, 96}}
1329 | ClassesTreeTableConfiguration
1330 |
1331 | PBXClassNameColumnIdentifier
1332 | 208
1333 | PBXClassBookColumnIdentifier
1334 | 22
1335 |
1336 | Frame
1337 | {{0, 0}, {630, 331}}
1338 | MembersFrame
1339 | {{0, 105}, {374, 395}}
1340 | MembersTreeTableConfiguration
1341 |
1342 | PBXMemberTypeIconColumnIdentifier
1343 | 22
1344 | PBXMemberNameColumnIdentifier
1345 | 216
1346 | PBXMemberTypeColumnIdentifier
1347 | 97
1348 | PBXMemberBookColumnIdentifier
1349 | 22
1350 |
1351 | PBXModuleWindowStatusBarHidden2
1352 | 1
1353 | RubberWindowFrame
1354 | 385 179 630 352 0 0 1440 878
1355 |
1356 | Module
1357 | PBXClassBrowserModule
1358 | Proportion
1359 | 332pt
1360 |
1361 |
1362 | Proportion
1363 | 332pt
1364 |
1365 |
1366 | Name
1367 | Class Browser
1368 | ServiceClasses
1369 |
1370 | PBXClassBrowserModule
1371 |
1372 | StatusbarIsVisible
1373 | 0
1374 | TableOfContents
1375 |
1376 | 1C0AD2AF069F1E9B00FABCE6
1377 | 1C0AD2B0069F1E9B00FABCE6
1378 | 1CA6456E063B45B4001379D8
1379 |
1380 | ToolbarConfiguration
1381 | xcode.toolbar.config.classbrowser
1382 | WindowString
1383 | 385 179 630 352 0 0 1440 878
1384 | WindowToolGUID
1385 | 1C0AD2AF069F1E9B00FABCE6
1386 | WindowToolIsVisible
1387 | 0
1388 |
1389 |
1390 | Identifier
1391 | windowTool.refactoring
1392 | IncludeInToolsMenu
1393 | 0
1394 | Layout
1395 |
1396 |
1397 | Dock
1398 |
1399 |
1400 | BecomeActive
1401 | 1
1402 | GeometryConfiguration
1403 |
1404 | Frame
1405 | {0, 0}, {500, 335}
1406 | RubberWindowFrame
1407 | {0, 0}, {500, 335}
1408 |
1409 | Module
1410 | XCRefactoringModule
1411 | Proportion
1412 | 100%
1413 |
1414 |
1415 | Proportion
1416 | 100%
1417 |
1418 |
1419 | Name
1420 | Refactoring
1421 | ServiceClasses
1422 |
1423 | XCRefactoringModule
1424 |
1425 | WindowString
1426 | 200 200 500 356 0 0 1920 1200
1427 |
1428 |
1429 |
1430 |
1431 |
--------------------------------------------------------------------------------
/ExtraFile.xcodeproj/kimasendorf.pbxuser:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | 089C1660FE840EACC02AAC07 /* English */ = {
4 | uiCtxt = {
5 | sepNavIntBoundsRect = "{{0, 0}, {1082, 875}}";
6 | sepNavSelRange = "{0, 0}";
7 | sepNavVisRange = "{0, 45}";
8 | sepNavWindowFrame = "{{15, 855}, {750, 558}}";
9 | };
10 | };
11 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */ = {
12 | uiCtxt = {
13 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
14 | sepNavSelRange = "{0, 0}";
15 | sepNavVisRange = "{0, 149}";
16 | };
17 | };
18 | 2A37F4A9FDCFA73011CA2CEA /* Project object */ = {
19 | activeBuildConfigurationName = Release;
20 | activeExecutable = 7181C4FA1373DD85006DDE90 /* ExtraFile */;
21 | activeTarget = 8D15AC270486D014006FF6A4 /* ExtraFile */;
22 | addToTargets = (
23 | 8D15AC270486D014006FF6A4 /* ExtraFile */,
24 | );
25 | codeSenseManager = 7181C5081373DDA3006DDE90 /* Code sense */;
26 | executables = (
27 | 7181C4FA1373DD85006DDE90 /* ExtraFile */,
28 | );
29 | perUserDictionary = {
30 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
31 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
32 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
33 | PBXFileTableDataSourceColumnWidthsKey = (
34 | 20,
35 | 904,
36 | 20,
37 | 48,
38 | 43,
39 | 43,
40 | 20,
41 | );
42 | PBXFileTableDataSourceColumnsKey = (
43 | PBXFileDataSource_FiletypeID,
44 | PBXFileDataSource_Filename_ColumnID,
45 | PBXFileDataSource_Built_ColumnID,
46 | PBXFileDataSource_ObjectSize_ColumnID,
47 | PBXFileDataSource_Errors_ColumnID,
48 | PBXFileDataSource_Warnings_ColumnID,
49 | PBXFileDataSource_Target_ColumnID,
50 | );
51 | };
52 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
53 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
54 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
55 | PBXFileTableDataSourceColumnWidthsKey = (
56 | 20,
57 | 864,
58 | 60,
59 | 20,
60 | 48,
61 | 43,
62 | 43,
63 | );
64 | PBXFileTableDataSourceColumnsKey = (
65 | PBXFileDataSource_FiletypeID,
66 | PBXFileDataSource_Filename_ColumnID,
67 | PBXTargetDataSource_PrimaryAttribute,
68 | PBXFileDataSource_Built_ColumnID,
69 | PBXFileDataSource_ObjectSize_ColumnID,
70 | PBXFileDataSource_Errors_ColumnID,
71 | PBXFileDataSource_Warnings_ColumnID,
72 | );
73 | };
74 | PBXPerProjectTemplateStateSaveDate = 335218646;
75 | PBXWorkspaceStateSaveDate = 335218646;
76 | };
77 | perUserProjectItems = {
78 | 7125A547137F409800699395 /* PBXTextBookmark */ = 7125A547137F409800699395 /* PBXTextBookmark */;
79 | 714B5425139302070095067A /* PBXBookmark */ = 714B5425139302070095067A /* PBXBookmark */;
80 | 71924C2713998D250025019D /* PBXBookmark */ = 71924C2713998D250025019D /* PBXBookmark */;
81 | 71924C43139990210025019D /* PBXBookmark */ = 71924C43139990210025019D /* PBXBookmark */;
82 | 71924C44139990210025019D /* PBXBookmark */ = 71924C44139990210025019D /* PBXBookmark */;
83 | 71924C4C139996D50025019D /* PBXBookmark */ = 71924C4C139996D50025019D /* PBXBookmark */;
84 | 7193078A1389D753001A6737 /* PBXBookmark */ = 7193078A1389D753001A6737 /* PBXBookmark */;
85 | 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */ = 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */;
86 | 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */ = 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */;
87 | 71F9201D13AFE99D00C2D785 /* PBXBookmark */ = 71F9201D13AFE99D00C2D785 /* PBXBookmark */;
88 | 71FEA7E013FB05C9008B7E19 /* PBXBookmark */ = 71FEA7E013FB05C9008B7E19 /* PBXBookmark */;
89 | 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */;
90 | 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */;
91 | 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */;
92 | 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */;
93 | 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */;
94 | 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */;
95 | 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */;
96 | 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */;
97 | 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */;
98 | 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */;
99 | 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */;
100 | 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */;
101 | 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */;
102 | 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */;
103 | 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */;
104 | 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */;
105 | 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */;
106 | 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */;
107 | 71FEA7F313FB05C9008B7E19 /* PlistBookmark */ = 71FEA7F313FB05C9008B7E19 /* PlistBookmark */;
108 | 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */ = 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */;
109 | };
110 | sourceControlManager = 7181C5071373DDA3006DDE90 /* Source Control */;
111 | userBuildSettings = {
112 | };
113 | };
114 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */ = {
115 | uiCtxt = {
116 | sepNavIntBoundsRect = "{{0, 0}, {1082, 24076}}";
117 | sepNavSelRange = "{55416, 0}";
118 | sepNavVisRange = "{0, 1897}";
119 | sepNavWindowFrame = "{{489, 691}, {750, 558}}";
120 | };
121 | };
122 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */ = {
123 | uiCtxt = {
124 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1040}}";
125 | sepNavSelRange = "{82, 0}";
126 | sepNavVisRange = "{199, 1721}";
127 | };
128 | };
129 | 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {
130 | uiCtxt = {
131 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
132 | sepNavSelRange = "{71, 0}";
133 | sepNavVisRange = "{0, 196}";
134 | };
135 | };
136 | 2A37F4BAFDCFA73011CA2CEA /* English */ = {
137 | uiCtxt = {
138 | sepNavIntBoundsRect = "{{0, 0}, {1096, 905}}";
139 | sepNavSelRange = "{0, 0}";
140 | sepNavVisRect = "{{0, 0}, {1096, 905}}";
141 | };
142 | };
143 | 7125A547137F409800699395 /* PBXTextBookmark */ = {
144 | isa = PBXTextBookmark;
145 | fRef = 7125A548137F409800699395 /* CGBase.h */;
146 | name = "CGBase.h: 105";
147 | rLen = 30;
148 | rLoc = 2998;
149 | rType = 0;
150 | vrLen = 1547;
151 | vrLoc = 1531;
152 | };
153 | 7125A548137F409800699395 /* CGBase.h */ = {
154 | isa = PBXFileReference;
155 | lastKnownFileType = sourcecode.c.h;
156 | name = CGBase.h;
157 | path = /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Headers/CGBase.h;
158 | sourceTree = "";
159 | };
160 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */ = {
161 | uiCtxt = {
162 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
163 | sepNavSelRange = "{83, 0}";
164 | sepNavVisRange = "{0, 333}";
165 | };
166 | };
167 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */ = {
168 | uiCtxt = {
169 | sepNavIntBoundsRect = "{{0, 0}, {1181, 1560}}";
170 | sepNavSelRange = "{83, 0}";
171 | sepNavVisRange = "{0, 2075}";
172 | };
173 | };
174 | 714B5425139302070095067A /* PBXBookmark */ = {
175 | isa = PBXBookmark;
176 | fRef = 714B541D139301FE0095067A /* 4bc.icns */;
177 | };
178 | 7181C4FA1373DD85006DDE90 /* ExtraFile */ = {
179 | isa = PBXExecutable;
180 | activeArgIndices = (
181 | );
182 | argumentStrings = (
183 | );
184 | autoAttachOnCrash = 1;
185 | breakpointsEnabled = 0;
186 | configStateDict = {
187 | };
188 | customDataFormattersEnabled = 1;
189 | dataTipCustomDataFormattersEnabled = 1;
190 | dataTipShowTypeColumn = 1;
191 | dataTipSortType = 0;
192 | debuggerPlugin = GDBDebugging;
193 | disassemblyDisplayState = 0;
194 | dylibVariantSuffix = "";
195 | enableDebugStr = 1;
196 | environmentEntries = (
197 | );
198 | executableSystemSymbolLevel = 0;
199 | executableUserSymbolLevel = 0;
200 | libgmallocEnabled = 0;
201 | name = ExtraFile;
202 | savedGlobals = {
203 | };
204 | showTypeColumn = 0;
205 | sourceDirectories = (
206 | );
207 | variableFormatDictionary = {
208 | };
209 | };
210 | 7181C5071373DDA3006DDE90 /* Source Control */ = {
211 | isa = PBXSourceControlManager;
212 | fallbackIsa = XCSourceControlManager;
213 | isSCMEnabled = 0;
214 | scmConfiguration = {
215 | repositoryNamesForRoots = {
216 | "" = "";
217 | };
218 | };
219 | };
220 | 7181C5081373DDA3006DDE90 /* Code sense */ = {
221 | isa = PBXCodeSenseManager;
222 | indexTemplatePath = "";
223 | };
224 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */ = {
225 | uiCtxt = {
226 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
227 | sepNavSelRange = "{92, 0}";
228 | sepNavVisRange = "{0, 194}";
229 | };
230 | };
231 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */ = {
232 | uiCtxt = {
233 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1859}}";
234 | sepNavSelRange = "{92, 0}";
235 | sepNavVisRange = "{0, 1700}";
236 | };
237 | };
238 | 7181C5261373FB8F006DDE90 /* XFImageView.h */ = {
239 | uiCtxt = {
240 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
241 | sepNavSelRange = "{78, 0}";
242 | sepNavVisRange = "{0, 493}";
243 | };
244 | };
245 | 7181C5271373FB8F006DDE90 /* XFImageView.m */ = {
246 | uiCtxt = {
247 | sepNavIntBoundsRect = "{{0, 0}, {1082, 13793}}";
248 | sepNavSelRange = "{78, 0}";
249 | sepNavVisRange = "{0, 1829}";
250 | sepNavWindowFrame = "{{1334, 226}, {973, 1140}}";
251 | };
252 | };
253 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */ = {
254 | uiCtxt = {
255 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
256 | sepNavSelRange = "{80, 0}";
257 | sepNavVisRange = "{0, 630}";
258 | };
259 | };
260 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */ = {
261 | uiCtxt = {
262 | sepNavIntBoundsRect = "{{0, 0}, {1082, 2574}}";
263 | sepNavSelRange = "{80, 0}";
264 | sepNavVisRange = "{3424, 2008}";
265 | };
266 | };
267 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */ = {
268 | uiCtxt = {
269 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
270 | sepNavSelRange = "{78, 0}";
271 | sepNavVisRange = "{0, 278}";
272 | };
273 | };
274 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */ = {
275 | uiCtxt = {
276 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1092}}";
277 | sepNavSelRange = "{78, 0}";
278 | sepNavVisRange = "{237, 1692}";
279 | };
280 | };
281 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */ = {
282 | uiCtxt = {
283 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
284 | sepNavSelRange = "{76, 0}";
285 | sepNavVisRange = "{0, 1179}";
286 | };
287 | };
288 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */ = {
289 | uiCtxt = {
290 | sepNavIntBoundsRect = "{{0, 0}, {1082, 5525}}";
291 | sepNavSelRange = "{76, 0}";
292 | sepNavVisRange = "{9500, 2064}";
293 | };
294 | };
295 | 7181C5BD13743415006DDE90 /* XFApp.h */ = {
296 | uiCtxt = {
297 | sepNavIntBoundsRect = "{{0, 0}, {1082, 898}}";
298 | sepNavSelRange = "{37, 0}";
299 | sepNavVisRange = "{0, 559}";
300 | };
301 | };
302 | 7181C5BE13743415006DDE90 /* XFApp.m */ = {
303 | uiCtxt = {
304 | sepNavIntBoundsRect = "{{0, 0}, {1082, 1794}}";
305 | sepNavSelRange = "{72, 0}";
306 | sepNavVisRange = "{1461, 1232}";
307 | };
308 | };
309 | 71924C2713998D250025019D /* PBXBookmark */ = {
310 | isa = PBXBookmark;
311 | fRef = 718782A51375B43D00A22FA2 /* xff.icns */;
312 | };
313 | 71924C43139990210025019D /* PBXBookmark */ = {
314 | isa = PBXBookmark;
315 | fRef = 71924C3C139990170025019D /* blinx.icns */;
316 | };
317 | 71924C44139990210025019D /* PBXBookmark */ = {
318 | isa = PBXBookmark;
319 | fRef = 714B541E139301FE0095067A /* bascii.icns */;
320 | };
321 | 71924C4C139996D50025019D /* PBXBookmark */ = {
322 | isa = PBXBookmark;
323 | fRef = 71924C3D139990170025019D /* uspec.icns */;
324 | };
325 | 7193078A1389D753001A6737 /* PBXBookmark */ = {
326 | isa = PBXBookmark;
327 | fRef = 719306DD1389434C001A6737 /* mcf.icns */;
328 | };
329 | 71BCE45C13FB07B90037C7B4 /* PBXTextBookmark */ = {
330 | isa = PBXTextBookmark;
331 | fRef = 2A37F4BAFDCFA73011CA2CEA /* English */;
332 | name = "English: 1";
333 | rLen = 0;
334 | rLoc = 0;
335 | rType = 0;
336 | vrLen = 218;
337 | vrLoc = 0;
338 | };
339 | 71BCE47A13FB08150037C7B4 /* PBXTextBookmark */ = {
340 | isa = PBXTextBookmark;
341 | fRef = 2A37F4BAFDCFA73011CA2CEA /* English */;
342 | name = "English: 1";
343 | rLen = 0;
344 | rLoc = 0;
345 | rType = 0;
346 | vrLen = 218;
347 | vrLoc = 0;
348 | };
349 | 71F9201D13AFE99D00C2D785 /* PBXBookmark */ = {
350 | isa = PBXBookmark;
351 | fRef = 71EF247E13746DF700979489 /* extrafile.icns */;
352 | };
353 | 71FEA7E013FB05C9008B7E19 /* PBXBookmark */ = {
354 | isa = PBXBookmark;
355 | fRef = 71FEA7D613FAC65C008B7E19 /* cci.icns */;
356 | };
357 | 71FEA7E113FB05C9008B7E19 /* PBXTextBookmark */ = {
358 | isa = PBXTextBookmark;
359 | fRef = 7181C5BD13743415006DDE90 /* XFApp.h */;
360 | name = "XFApp.h: 4";
361 | rLen = 0;
362 | rLoc = 37;
363 | rType = 0;
364 | vrLen = 559;
365 | vrLoc = 0;
366 | };
367 | 71FEA7E213FB05C9008B7E19 /* PBXTextBookmark */ = {
368 | isa = PBXTextBookmark;
369 | fRef = 7181C5BE13743415006DDE90 /* XFApp.m */;
370 | name = "XFApp.m: 5";
371 | rLen = 0;
372 | rLoc = 72;
373 | rType = 0;
374 | vrLen = 1232;
375 | vrLoc = 1461;
376 | };
377 | 71FEA7E313FB05C9008B7E19 /* PBXTextBookmark */ = {
378 | isa = PBXTextBookmark;
379 | fRef = 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */;
380 | name = "XFImageDocument.h: 5";
381 | rLen = 0;
382 | rLoc = 82;
383 | rType = 0;
384 | vrLen = 1721;
385 | vrLoc = 199;
386 | };
387 | 71FEA7E413FB05C9008B7E19 /* PBXTextBookmark */ = {
388 | isa = PBXTextBookmark;
389 | fRef = 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */;
390 | name = "XFImageDocument.m: 1825";
391 | rLen = 0;
392 | rLoc = 55416;
393 | rType = 0;
394 | vrLen = 1897;
395 | vrLoc = 0;
396 | };
397 | 71FEA7E513FB05C9008B7E19 /* PBXTextBookmark */ = {
398 | isa = PBXTextBookmark;
399 | fRef = 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */;
400 | name = "XFImageDocumentController.h: 5";
401 | rLen = 0;
402 | rLoc = 92;
403 | rType = 0;
404 | vrLen = 194;
405 | vrLoc = 0;
406 | };
407 | 71FEA7E613FB05C9008B7E19 /* PBXTextBookmark */ = {
408 | isa = PBXTextBookmark;
409 | fRef = 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */;
410 | name = "XFImageDocumentController.m: 5";
411 | rLen = 0;
412 | rLoc = 92;
413 | rType = 0;
414 | vrLen = 1700;
415 | vrLoc = 0;
416 | };
417 | 71FEA7E713FB05C9008B7E19 /* PBXTextBookmark */ = {
418 | isa = PBXTextBookmark;
419 | fRef = 7181C5261373FB8F006DDE90 /* XFImageView.h */;
420 | name = "XFImageView.h: 5";
421 | rLen = 0;
422 | rLoc = 78;
423 | rType = 0;
424 | vrLen = 493;
425 | vrLoc = 0;
426 | };
427 | 71FEA7E813FB05C9008B7E19 /* PBXTextBookmark */ = {
428 | isa = PBXTextBookmark;
429 | fRef = 7181C5271373FB8F006DDE90 /* XFImageView.m */;
430 | name = "XFImageView.m: 5";
431 | rLen = 0;
432 | rLoc = 78;
433 | rType = 0;
434 | vrLen = 1829;
435 | vrLoc = 0;
436 | };
437 | 71FEA7E913FB05C9008B7E19 /* PBXTextBookmark */ = {
438 | isa = PBXTextBookmark;
439 | fRef = 7181C5291373FBBF006DDE90 /* XFImageFilter.h */;
440 | name = "XFImageFilter.h: 5";
441 | rLen = 0;
442 | rLoc = 80;
443 | rType = 0;
444 | vrLen = 630;
445 | vrLoc = 0;
446 | };
447 | 71FEA7EA13FB05C9008B7E19 /* PBXTextBookmark */ = {
448 | isa = PBXTextBookmark;
449 | fRef = 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */;
450 | name = "XFImageFilter.m: 5";
451 | rLen = 0;
452 | rLoc = 80;
453 | rType = 0;
454 | vrLen = 2008;
455 | vrLoc = 3424;
456 | };
457 | 71FEA7EB13FB05C9008B7E19 /* PBXTextBookmark */ = {
458 | isa = PBXTextBookmark;
459 | fRef = 7181C5371373FBF7006DDE90 /* XFPrintView.h */;
460 | name = "XFPrintView.h: 5";
461 | rLen = 0;
462 | rLoc = 78;
463 | rType = 0;
464 | vrLen = 278;
465 | vrLoc = 0;
466 | };
467 | 71FEA7EC13FB05C9008B7E19 /* PBXTextBookmark */ = {
468 | isa = PBXTextBookmark;
469 | fRef = 7181C5381373FBF7006DDE90 /* XFPrintView.m */;
470 | name = "XFPrintView.m: 5";
471 | rLen = 0;
472 | rLoc = 78;
473 | rType = 0;
474 | vrLen = 1692;
475 | vrLoc = 237;
476 | };
477 | 71FEA7ED13FB05C9008B7E19 /* PBXTextBookmark */ = {
478 | isa = PBXTextBookmark;
479 | fRef = 7181C53A1373FC1B006DDE90 /* XFProfile.h */;
480 | name = "XFProfile.h: 5";
481 | rLen = 0;
482 | rLoc = 76;
483 | rType = 0;
484 | vrLen = 1179;
485 | vrLoc = 0;
486 | };
487 | 71FEA7EE13FB05C9008B7E19 /* PBXTextBookmark */ = {
488 | isa = PBXTextBookmark;
489 | fRef = 7181C53B1373FC1B006DDE90 /* XFProfile.m */;
490 | name = "XFProfile.m: 5";
491 | rLen = 0;
492 | rLoc = 76;
493 | rType = 0;
494 | vrLen = 2064;
495 | vrLoc = 9500;
496 | };
497 | 71FEA7EF13FB05C9008B7E19 /* PBXTextBookmark */ = {
498 | isa = PBXTextBookmark;
499 | fRef = 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */;
500 | name = "XFZoomScrollView.h: 5";
501 | rLen = 0;
502 | rLoc = 83;
503 | rType = 0;
504 | vrLen = 333;
505 | vrLoc = 0;
506 | };
507 | 71FEA7F013FB05C9008B7E19 /* PBXTextBookmark */ = {
508 | isa = PBXTextBookmark;
509 | fRef = 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */;
510 | name = "XFZoomScrollView.m: 5";
511 | rLen = 0;
512 | rLoc = 83;
513 | rType = 0;
514 | vrLen = 2075;
515 | vrLoc = 0;
516 | };
517 | 71FEA7F113FB05C9008B7E19 /* PBXTextBookmark */ = {
518 | isa = PBXTextBookmark;
519 | fRef = 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */;
520 | name = "ExtraFile_Prefix.pch: 1";
521 | rLen = 0;
522 | rLoc = 0;
523 | rType = 0;
524 | vrLen = 149;
525 | vrLoc = 0;
526 | };
527 | 71FEA7F213FB05C9008B7E19 /* PBXTextBookmark */ = {
528 | isa = PBXTextBookmark;
529 | fRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */;
530 | name = "main.m: 5";
531 | rLen = 0;
532 | rLoc = 71;
533 | rType = 0;
534 | vrLen = 196;
535 | vrLoc = 0;
536 | };
537 | 71FEA7F313FB05C9008B7E19 /* PlistBookmark */ = {
538 | isa = PlistBookmark;
539 | fRef = 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */;
540 | fallbackIsa = PBXBookmark;
541 | isK = 0;
542 | kPath = (
543 | CFBundleShortVersionString,
544 | );
545 | name = "/Users/kimasendorf/Documents/Development/Cocoa/ExtraFile/ExtraFile-Info.plist";
546 | rLen = 0;
547 | rLoc = 9223372036854775808;
548 | };
549 | 71FEA7F413FB05C9008B7E19 /* PBXTextBookmark */ = {
550 | isa = PBXTextBookmark;
551 | fRef = 089C1660FE840EACC02AAC07 /* English */;
552 | name = "InfoPlist.strings: 1";
553 | rLen = 0;
554 | rLoc = 0;
555 | rType = 0;
556 | vrLen = 45;
557 | vrLoc = 0;
558 | };
559 | 8D15AC270486D014006FF6A4 /* ExtraFile */ = {
560 | activeExec = 0;
561 | executables = (
562 | 7181C4FA1373DD85006DDE90 /* ExtraFile */,
563 | );
564 | };
565 | }
566 |
--------------------------------------------------------------------------------
/ExtraFile.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 45;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1DDD582C0DA1D0D100B32029 /* XFImageDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */; };
11 | 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */; };
12 | 71285D711381C7C500FC0FE3 /* XFZoomScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */; };
13 | 71285D721381C7C500FC0FE3 /* XFZoomScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */; };
14 | 714B541F139301FE0095067A /* 4bc.icns in Resources */ = {isa = PBXBuildFile; fileRef = 714B541D139301FE0095067A /* 4bc.icns */; };
15 | 714B5420139301FE0095067A /* bascii.icns in Resources */ = {isa = PBXBuildFile; fileRef = 714B541E139301FE0095067A /* bascii.icns */; };
16 | 7181C5251373FB59006DDE90 /* XFImageDocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */; };
17 | 7181C5281373FB8F006DDE90 /* XFImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5271373FB8F006DDE90 /* XFImageView.m */; };
18 | 7181C52B1373FBBF006DDE90 /* XFImageFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */; };
19 | 7181C5391373FBF7006DDE90 /* XFPrintView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5381373FBF7006DDE90 /* XFPrintView.m */; };
20 | 7181C53C1373FC1B006DDE90 /* XFProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C53B1373FC1B006DDE90 /* XFProfile.m */; };
21 | 7181C56B1374121E006DDE90 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7181C56A1374121E006DDE90 /* Quartz.framework */; };
22 | 7181C5BF13743415006DDE90 /* XFApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 7181C5BE13743415006DDE90 /* XFApp.m */; };
23 | 718782A61375B43D00A22FA2 /* xff.icns in Resources */ = {isa = PBXBuildFile; fileRef = 718782A51375B43D00A22FA2 /* xff.icns */; };
24 | 71924C3E139990170025019D /* blinx.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71924C3C139990170025019D /* blinx.icns */; };
25 | 71924C3F139990170025019D /* uspec.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71924C3D139990170025019D /* uspec.icns */; };
26 | 719306DE1389434C001A6737 /* mcf.icns in Resources */ = {isa = PBXBuildFile; fileRef = 719306DD1389434C001A6737 /* mcf.icns */; };
27 | 71EF247F13746DF700979489 /* extrafile.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71EF247E13746DF700979489 /* extrafile.icns */; };
28 | 71EF259813749C3900979489 /* XFApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5BD13743415006DDE90 /* XFApp.h */; };
29 | 71EF259913749C3900979489 /* XFImageDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */; };
30 | 71EF259A13749C3900979489 /* XFImageDocumentController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */; };
31 | 71EF259B13749C3900979489 /* XFImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5261373FB8F006DDE90 /* XFImageView.h */; };
32 | 71EF259C13749C3900979489 /* XFImageFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5291373FBBF006DDE90 /* XFImageFilter.h */; };
33 | 71EF259D13749C3900979489 /* XFPrintView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C5371373FBF7006DDE90 /* XFPrintView.h */; };
34 | 71EF259E13749C3900979489 /* XFProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 7181C53A1373FC1B006DDE90 /* XFProfile.h */; };
35 | 71FEA7D713FAC65C008B7E19 /* cci.icns in Resources */ = {isa = PBXBuildFile; fileRef = 71FEA7D613FAC65C008B7E19 /* cci.icns */; };
36 | 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */; };
37 | 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
38 | 8D15AC310486D014006FF6A4 /* XFImageDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */; settings = {ATTRIBUTES = (); }; };
39 | 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
40 | 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; };
41 | /* End PBXBuildFile section */
42 |
43 | /* Begin PBXCopyFilesBuildPhase section */
44 | 71EF274813749CCE00979489 /* CopyFiles */ = {
45 | isa = PBXCopyFilesBuildPhase;
46 | buildActionMask = 2147483647;
47 | dstPath = "";
48 | dstSubfolderSpec = 7;
49 | files = (
50 | );
51 | runOnlyForDeploymentPostprocessing = 0;
52 | };
53 | /* End PBXCopyFilesBuildPhase section */
54 |
55 | /* Begin PBXFileReference section */
56 | 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
57 | 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
58 | 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; };
59 | 1DDD58290DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/XFImageDocument.xib; sourceTree = ""; };
60 | 1DDD582B0DA1D0D100B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; };
61 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtraFile_Prefix.pch; sourceTree = ""; };
62 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageDocument.m; sourceTree = ""; };
63 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageDocument.h; sourceTree = ""; };
64 | 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
65 | 2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; };
66 | 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
67 | 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
68 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFZoomScrollView.h; sourceTree = ""; };
69 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFZoomScrollView.m; sourceTree = ""; };
70 | 714B541D139301FE0095067A /* 4bc.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = 4bc.icns; path = icons/4bc.icns; sourceTree = ""; };
71 | 714B541E139301FE0095067A /* bascii.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = bascii.icns; path = icons/bascii.icns; sourceTree = ""; };
72 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageDocumentController.h; sourceTree = ""; };
73 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageDocumentController.m; sourceTree = ""; };
74 | 7181C5261373FB8F006DDE90 /* XFImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageView.h; sourceTree = ""; };
75 | 7181C5271373FB8F006DDE90 /* XFImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageView.m; sourceTree = ""; };
76 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFImageFilter.h; sourceTree = ""; };
77 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFImageFilter.m; sourceTree = ""; };
78 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFPrintView.h; sourceTree = ""; };
79 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFPrintView.m; sourceTree = ""; };
80 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFProfile.h; sourceTree = ""; };
81 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFProfile.m; sourceTree = ""; };
82 | 7181C56A1374121E006DDE90 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; };
83 | 7181C5891374165D006DDE90 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; };
84 | 7181C5BD13743415006DDE90 /* XFApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFApp.h; sourceTree = ""; };
85 | 7181C5BE13743415006DDE90 /* XFApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XFApp.m; sourceTree = ""; };
86 | 7181C5C2137435D2006DDE90 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
87 | 7181C5C4137435D2006DDE90 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
88 | 718782A51375B43D00A22FA2 /* xff.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = xff.icns; path = icons/xff.icns; sourceTree = ""; };
89 | 71924C3C139990170025019D /* blinx.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = blinx.icns; path = icons/blinx.icns; sourceTree = ""; };
90 | 71924C3D139990170025019D /* uspec.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = uspec.icns; path = icons/uspec.icns; sourceTree = ""; };
91 | 719306DD1389434C001A6737 /* mcf.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = mcf.icns; path = icons/mcf.icns; sourceTree = ""; };
92 | 71EF247E13746DF700979489 /* extrafile.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = extrafile.icns; path = icons/extrafile.icns; sourceTree = ""; };
93 | 71FEA7D613FAC65C008B7E19 /* cci.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = cci.icns; path = icons/cci.icns; sourceTree = ""; };
94 | 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ExtraFile-Info.plist"; sourceTree = ""; };
95 | 8D15AC370486D014006FF6A4 /* ExtraFile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExtraFile.app; sourceTree = BUILT_PRODUCTS_DIR; };
96 | /* End PBXFileReference section */
97 |
98 | /* Begin PBXFrameworksBuildPhase section */
99 | 8D15AC330486D014006FF6A4 /* Frameworks */ = {
100 | isa = PBXFrameworksBuildPhase;
101 | buildActionMask = 2147483647;
102 | files = (
103 | 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */,
104 | 7181C56B1374121E006DDE90 /* Quartz.framework in Frameworks */,
105 | );
106 | runOnlyForDeploymentPostprocessing = 0;
107 | };
108 | /* End PBXFrameworksBuildPhase section */
109 |
110 | /* Begin PBXGroup section */
111 | 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = {
112 | isa = PBXGroup;
113 | children = (
114 | 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */,
115 | );
116 | name = "Linked Frameworks";
117 | sourceTree = "";
118 | };
119 | 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */ = {
120 | isa = PBXGroup;
121 | children = (
122 | 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */,
123 | 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */,
124 | 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */,
125 | 7181C56A1374121E006DDE90 /* Quartz.framework */,
126 | 7181C5891374165D006DDE90 /* ApplicationServices.framework */,
127 | 7181C5C2137435D2006DDE90 /* CoreFoundation.framework */,
128 | 7181C5C4137435D2006DDE90 /* CoreServices.framework */,
129 | );
130 | name = "Other Frameworks";
131 | sourceTree = "";
132 | };
133 | 19C28FB0FE9D524F11CA2CBB /* Products */ = {
134 | isa = PBXGroup;
135 | children = (
136 | 8D15AC370486D014006FF6A4 /* ExtraFile.app */,
137 | );
138 | name = Products;
139 | sourceTree = "";
140 | };
141 | 2A37F4AAFDCFA73011CA2CEA /* ExtraFile */ = {
142 | isa = PBXGroup;
143 | children = (
144 | 2A37F4ABFDCFA73011CA2CEA /* Classes */,
145 | 2A37F4AFFDCFA73011CA2CEA /* Other Sources */,
146 | 2A37F4B8FDCFA73011CA2CEA /* Resources */,
147 | 2A37F4C3FDCFA73011CA2CEA /* Frameworks */,
148 | 19C28FB0FE9D524F11CA2CBB /* Products */,
149 | );
150 | name = ExtraFile;
151 | sourceTree = "";
152 | };
153 | 2A37F4ABFDCFA73011CA2CEA /* Classes */ = {
154 | isa = PBXGroup;
155 | children = (
156 | 7181C5BD13743415006DDE90 /* XFApp.h */,
157 | 7181C5BE13743415006DDE90 /* XFApp.m */,
158 | 2A37F4AEFDCFA73011CA2CEA /* XFImageDocument.h */,
159 | 2A37F4ACFDCFA73011CA2CEA /* XFImageDocument.m */,
160 | 7181C5231373FB59006DDE90 /* XFImageDocumentController.h */,
161 | 7181C5241373FB59006DDE90 /* XFImageDocumentController.m */,
162 | 7181C5261373FB8F006DDE90 /* XFImageView.h */,
163 | 7181C5271373FB8F006DDE90 /* XFImageView.m */,
164 | 7181C5291373FBBF006DDE90 /* XFImageFilter.h */,
165 | 7181C52A1373FBBF006DDE90 /* XFImageFilter.m */,
166 | 7181C5371373FBF7006DDE90 /* XFPrintView.h */,
167 | 7181C5381373FBF7006DDE90 /* XFPrintView.m */,
168 | 7181C53A1373FC1B006DDE90 /* XFProfile.h */,
169 | 7181C53B1373FC1B006DDE90 /* XFProfile.m */,
170 | 71285D6F1381C7C500FC0FE3 /* XFZoomScrollView.h */,
171 | 71285D701381C7C500FC0FE3 /* XFZoomScrollView.m */,
172 | );
173 | name = Classes;
174 | sourceTree = "";
175 | };
176 | 2A37F4AFFDCFA73011CA2CEA /* Other Sources */ = {
177 | isa = PBXGroup;
178 | children = (
179 | 2564AD2C0F5327BB00F57823 /* ExtraFile_Prefix.pch */,
180 | 2A37F4B0FDCFA73011CA2CEA /* main.m */,
181 | );
182 | name = "Other Sources";
183 | sourceTree = "";
184 | };
185 | 2A37F4B8FDCFA73011CA2CEA /* Resources */ = {
186 | isa = PBXGroup;
187 | children = (
188 | 71FEA7D613FAC65C008B7E19 /* cci.icns */,
189 | 71924C3D139990170025019D /* uspec.icns */,
190 | 71924C3C139990170025019D /* blinx.icns */,
191 | 714B541E139301FE0095067A /* bascii.icns */,
192 | 714B541D139301FE0095067A /* 4bc.icns */,
193 | 719306DD1389434C001A6737 /* mcf.icns */,
194 | 718782A51375B43D00A22FA2 /* xff.icns */,
195 | 71EF247E13746DF700979489 /* extrafile.icns */,
196 | 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */,
197 | 8D15AC360486D014006FF6A4 /* ExtraFile-Info.plist */,
198 | 089C165FFE840EACC02AAC07 /* InfoPlist.strings */,
199 | 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */,
200 | 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */,
201 | );
202 | name = Resources;
203 | sourceTree = "";
204 | };
205 | 2A37F4C3FDCFA73011CA2CEA /* Frameworks */ = {
206 | isa = PBXGroup;
207 | children = (
208 | 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */,
209 | 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */,
210 | );
211 | name = Frameworks;
212 | sourceTree = "";
213 | };
214 | /* End PBXGroup section */
215 |
216 | /* Begin PBXHeadersBuildPhase section */
217 | 71EF259313749C2400979489 /* Headers */ = {
218 | isa = PBXHeadersBuildPhase;
219 | buildActionMask = 2147483647;
220 | files = (
221 | 71EF259813749C3900979489 /* XFApp.h in Headers */,
222 | 71EF259913749C3900979489 /* XFImageDocument.h in Headers */,
223 | 71EF259A13749C3900979489 /* XFImageDocumentController.h in Headers */,
224 | 71EF259B13749C3900979489 /* XFImageView.h in Headers */,
225 | 71EF259C13749C3900979489 /* XFImageFilter.h in Headers */,
226 | 71EF259D13749C3900979489 /* XFPrintView.h in Headers */,
227 | 71EF259E13749C3900979489 /* XFProfile.h in Headers */,
228 | 71285D711381C7C500FC0FE3 /* XFZoomScrollView.h in Headers */,
229 | );
230 | runOnlyForDeploymentPostprocessing = 0;
231 | };
232 | /* End PBXHeadersBuildPhase section */
233 |
234 | /* Begin PBXNativeTarget section */
235 | 8D15AC270486D014006FF6A4 /* ExtraFile */ = {
236 | isa = PBXNativeTarget;
237 | buildConfigurationList = C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "ExtraFile" */;
238 | buildPhases = (
239 | 71EF259313749C2400979489 /* Headers */,
240 | 8D15AC2B0486D014006FF6A4 /* Resources */,
241 | 8D15AC300486D014006FF6A4 /* Sources */,
242 | 8D15AC330486D014006FF6A4 /* Frameworks */,
243 | 71EF274713749CCE00979489 /* Rez */,
244 | 71EF274813749CCE00979489 /* CopyFiles */,
245 | );
246 | buildRules = (
247 | );
248 | dependencies = (
249 | );
250 | name = ExtraFile;
251 | productInstallPath = "$(HOME)/Applications";
252 | productName = ExtraFile;
253 | productReference = 8D15AC370486D014006FF6A4 /* ExtraFile.app */;
254 | productType = "com.apple.product-type.application";
255 | };
256 | /* End PBXNativeTarget section */
257 |
258 | /* Begin PBXProject section */
259 | 2A37F4A9FDCFA73011CA2CEA /* Project object */ = {
260 | isa = PBXProject;
261 | buildConfigurationList = C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "ExtraFile" */;
262 | compatibilityVersion = "Xcode 3.1";
263 | developmentRegion = English;
264 | hasScannedForEncodings = 1;
265 | knownRegions = (
266 | English,
267 | Japanese,
268 | French,
269 | German,
270 | );
271 | mainGroup = 2A37F4AAFDCFA73011CA2CEA /* ExtraFile */;
272 | projectDirPath = "";
273 | projectRoot = "";
274 | targets = (
275 | 8D15AC270486D014006FF6A4 /* ExtraFile */,
276 | );
277 | };
278 | /* End PBXProject section */
279 |
280 | /* Begin PBXResourcesBuildPhase section */
281 | 8D15AC2B0486D014006FF6A4 /* Resources */ = {
282 | isa = PBXResourcesBuildPhase;
283 | buildActionMask = 2147483647;
284 | files = (
285 | 8D15AC2C0486D014006FF6A4 /* Credits.rtf in Resources */,
286 | 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
287 | 1DDD582C0DA1D0D100B32029 /* XFImageDocument.xib in Resources */,
288 | 1DDD582D0DA1D0D100B32029 /* MainMenu.xib in Resources */,
289 | 71EF247F13746DF700979489 /* extrafile.icns in Resources */,
290 | 718782A61375B43D00A22FA2 /* xff.icns in Resources */,
291 | 719306DE1389434C001A6737 /* mcf.icns in Resources */,
292 | 714B541F139301FE0095067A /* 4bc.icns in Resources */,
293 | 714B5420139301FE0095067A /* bascii.icns in Resources */,
294 | 71924C3E139990170025019D /* blinx.icns in Resources */,
295 | 71924C3F139990170025019D /* uspec.icns in Resources */,
296 | 71FEA7D713FAC65C008B7E19 /* cci.icns in Resources */,
297 | );
298 | runOnlyForDeploymentPostprocessing = 0;
299 | };
300 | /* End PBXResourcesBuildPhase section */
301 |
302 | /* Begin PBXRezBuildPhase section */
303 | 71EF274713749CCE00979489 /* Rez */ = {
304 | isa = PBXRezBuildPhase;
305 | buildActionMask = 2147483647;
306 | files = (
307 | );
308 | runOnlyForDeploymentPostprocessing = 0;
309 | };
310 | /* End PBXRezBuildPhase section */
311 |
312 | /* Begin PBXSourcesBuildPhase section */
313 | 8D15AC300486D014006FF6A4 /* Sources */ = {
314 | isa = PBXSourcesBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | 8D15AC310486D014006FF6A4 /* XFImageDocument.m in Sources */,
318 | 8D15AC320486D014006FF6A4 /* main.m in Sources */,
319 | 7181C5251373FB59006DDE90 /* XFImageDocumentController.m in Sources */,
320 | 7181C5281373FB8F006DDE90 /* XFImageView.m in Sources */,
321 | 7181C52B1373FBBF006DDE90 /* XFImageFilter.m in Sources */,
322 | 7181C5391373FBF7006DDE90 /* XFPrintView.m in Sources */,
323 | 7181C53C1373FC1B006DDE90 /* XFProfile.m in Sources */,
324 | 7181C5BF13743415006DDE90 /* XFApp.m in Sources */,
325 | 71285D721381C7C500FC0FE3 /* XFZoomScrollView.m in Sources */,
326 | );
327 | runOnlyForDeploymentPostprocessing = 0;
328 | };
329 | /* End PBXSourcesBuildPhase section */
330 |
331 | /* Begin PBXVariantGroup section */
332 | 089C165FFE840EACC02AAC07 /* InfoPlist.strings */ = {
333 | isa = PBXVariantGroup;
334 | children = (
335 | 089C1660FE840EACC02AAC07 /* English */,
336 | );
337 | name = InfoPlist.strings;
338 | sourceTree = "";
339 | };
340 | 1DDD58280DA1D0D100B32029 /* XFImageDocument.xib */ = {
341 | isa = PBXVariantGroup;
342 | children = (
343 | 1DDD58290DA1D0D100B32029 /* English */,
344 | );
345 | name = XFImageDocument.xib;
346 | sourceTree = "";
347 | };
348 | 1DDD582A0DA1D0D100B32029 /* MainMenu.xib */ = {
349 | isa = PBXVariantGroup;
350 | children = (
351 | 1DDD582B0DA1D0D100B32029 /* English */,
352 | );
353 | name = MainMenu.xib;
354 | sourceTree = "";
355 | };
356 | 2A37F4B9FDCFA73011CA2CEA /* Credits.rtf */ = {
357 | isa = PBXVariantGroup;
358 | children = (
359 | 2A37F4BAFDCFA73011CA2CEA /* English */,
360 | );
361 | name = Credits.rtf;
362 | sourceTree = "";
363 | };
364 | /* End PBXVariantGroup section */
365 |
366 | /* Begin XCBuildConfiguration section */
367 | C05733C808A9546B00998B17 /* Debug */ = {
368 | isa = XCBuildConfiguration;
369 | buildSettings = {
370 | ALWAYS_SEARCH_USER_PATHS = YES;
371 | COPY_PHASE_STRIP = NO;
372 | GCC_C_LANGUAGE_STANDARD = "compiler-default";
373 | GCC_DYNAMIC_NO_PIC = YES;
374 | GCC_ENABLE_FIX_AND_CONTINUE = NO;
375 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
376 | GCC_MODEL_TUNING = G5;
377 | GCC_OPTIMIZATION_LEVEL = 0;
378 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
379 | GCC_PREFIX_HEADER = ExtraFile_Prefix.pch;
380 | GCC_WARN_ABOUT_RETURN_TYPE = NO;
381 | GCC_WARN_UNUSED_VARIABLE = NO;
382 | INFOPLIST_FILE = "ExtraFile-Info.plist";
383 | INSTALL_PATH = "$(HOME)/Applications";
384 | OTHER_CFLAGS = "-no-cpp-precomp";
385 | PREBINDING = YES;
386 | PRODUCT_NAME = ExtraFile;
387 | SDKROOT = macosx10.6;
388 | SKIP_INSTALL = YES;
389 | STRIP_INSTALLED_PRODUCT = NO;
390 | WARNING_CFLAGS = (
391 | "-Wmost",
392 | "-Wno-four-char-constants",
393 | "-Wno-unknown-pragmas",
394 | );
395 | ZERO_LINK = NO;
396 | };
397 | name = Debug;
398 | };
399 | C05733C908A9546B00998B17 /* Release */ = {
400 | isa = XCBuildConfiguration;
401 | buildSettings = {
402 | ALWAYS_SEARCH_USER_PATHS = YES;
403 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
404 | GCC_C_LANGUAGE_STANDARD = "compiler-default";
405 | GCC_DYNAMIC_NO_PIC = YES;
406 | GCC_ENABLE_FIX_AND_CONTINUE = NO;
407 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
408 | GCC_MODEL_TUNING = G5;
409 | GCC_OPTIMIZATION_LEVEL = 0;
410 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
411 | GCC_PREFIX_HEADER = ExtraFile_Prefix.pch;
412 | GCC_WARN_ABOUT_RETURN_TYPE = NO;
413 | GCC_WARN_UNUSED_VARIABLE = NO;
414 | INFOPLIST_FILE = "ExtraFile-Info.plist";
415 | INSTALL_PATH = "$(HOME)/Applications";
416 | OTHER_CFLAGS = "-no-cpp-precomp";
417 | PREBINDING = YES;
418 | PRODUCT_NAME = ExtraFile;
419 | SDKROOT = macosx10.6;
420 | SKIP_INSTALL = YES;
421 | STRIP_INSTALLED_PRODUCT = NO;
422 | WARNING_CFLAGS = (
423 | "-Wmost",
424 | "-Wno-four-char-constants",
425 | "-Wno-unknown-pragmas",
426 | );
427 | ZERO_LINK = NO;
428 | };
429 | name = Release;
430 | };
431 | C05733CC08A9546B00998B17 /* Debug */ = {
432 | isa = XCBuildConfiguration;
433 | buildSettings = {
434 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
435 | GCC_C_LANGUAGE_STANDARD = gnu99;
436 | GCC_MODEL_TUNING = G5;
437 | GCC_OPTIMIZATION_LEVEL = s;
438 | GCC_WARN_ABOUT_RETURN_TYPE = NO;
439 | GCC_WARN_UNUSED_VARIABLE = NO;
440 | ONLY_ACTIVE_ARCH = YES;
441 | PREBINDING = YES;
442 | SDKROOT = macosx10.6;
443 | };
444 | name = Debug;
445 | };
446 | C05733CD08A9546B00998B17 /* Release */ = {
447 | isa = XCBuildConfiguration;
448 | buildSettings = {
449 | ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
450 | GCC_C_LANGUAGE_STANDARD = gnu99;
451 | GCC_MODEL_TUNING = G5;
452 | GCC_WARN_ABOUT_RETURN_TYPE = NO;
453 | GCC_WARN_UNUSED_VARIABLE = NO;
454 | PREBINDING = YES;
455 | SDKROOT = macosx10.6;
456 | };
457 | name = Release;
458 | };
459 | /* End XCBuildConfiguration section */
460 |
461 | /* Begin XCConfigurationList section */
462 | C05733C708A9546B00998B17 /* Build configuration list for PBXNativeTarget "ExtraFile" */ = {
463 | isa = XCConfigurationList;
464 | buildConfigurations = (
465 | C05733C808A9546B00998B17 /* Debug */,
466 | C05733C908A9546B00998B17 /* Release */,
467 | );
468 | defaultConfigurationIsVisible = 0;
469 | defaultConfigurationName = Release;
470 | };
471 | C05733CB08A9546B00998B17 /* Build configuration list for PBXProject "ExtraFile" */ = {
472 | isa = XCConfigurationList;
473 | buildConfigurations = (
474 | C05733CC08A9546B00998B17 /* Debug */,
475 | C05733CD08A9546B00998B17 /* Release */,
476 | );
477 | defaultConfigurationIsVisible = 0;
478 | defaultConfigurationName = Release;
479 | };
480 | /* End XCConfigurationList section */
481 | };
482 | rootObject = 2A37F4A9FDCFA73011CA2CEA /* Project object */;
483 | }
484 |
--------------------------------------------------------------------------------
/ExtraFile_Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'ExtraFile' target in the 'ExtraFile' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #endif
8 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | ExtraFile is conceptional software art but with a practical usage.
2 |
3 | It's main intention is to wiggle the static system of image file formats.
4 |
5 | All started with the idea of inventing a new image file format, a format as a piece of art. Far away from the mainstream and commercial standards. Just to express the feeling of using and saving data in a new, fictitious or artificial way. Getting the filename extension into the scope of the artwork itself. In simple terms: Creating an exclusivity.
6 |
7 | The freedom not to have to pay attention to the file size or the loading and saving times provides the option to implement artistically byte orders, odd quality behaviors and visual designed formats.
8 |
9 | ExtraFile is breaking the rules of commercial formats like JPG, PNG or TIFF. It is a pioneer art project in storing image data. The process and the resulting bytes, regardless of content, become the artwork itself.
10 |
11 | You want painters to build their own canvas?
12 | Digital artists and collectors deserve exclusive formats. Personalized files, including costume headers or comments. Every bit could be placed like the artist wants it.
13 |
14 |
15 | ExtraFile is a native Mac OS X image converter application with the ability to open, preview and save the most common image file formats. It offers the possibility to use the seven build-in formats, 4Bit Components, Block Ascii, Block Indexed, Channel Compressed Image, Monochrome Collector File, Uniform Spectrum and the ExtraFile Format, to store image data.
16 |
17 |
18 | ExtraFile is open source licensed under the Artistic License 2.0
19 | http://www.perlfoundation.org/artistic_license_2_0
20 |
21 |
22 | ExtraFile
23 | http://extrafile.org
24 |
25 | Kim Asendorf
26 | http://kimasendorf.com
--------------------------------------------------------------------------------
/XFApp.h:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | ExtraFile
4 | http://extrafile.org
5 |
6 | */
7 |
8 | //
9 | // XFApp.h
10 | // ExtraFile
11 | //
12 | // Created by Kim Asendorf on 06.05.11.
13 | //
14 |
15 | #import
16 |
17 |
18 | @interface XFApp : NSApplication
19 | {
20 | IBOutlet NSButton* xfReloadCheckBox;
21 | IBOutlet NSButton* xfBufferCheckBox;
22 | IBOutlet NSColorWell* xfBackgroundColorWell;
23 | }
24 |
25 | - (IBAction)changeAutomaticReload:(id)sender;
26 | - (IBAction)changeCleanBuffer:(id)sender;
27 | - (IBAction)changeBackgroundColor:(id)sender;
28 |
29 | + (BOOL)getAutomaticReload;
30 | + (BOOL)getCleanBuffer;
31 | + (NSColor *)getBackgroundColor;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/XFApp.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFApp.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFApp.h"
9 | #import "XFImageDocumentController.h"
10 | #import "XFProfile.h"
11 |
12 |
13 | static BOOL automaticReload;
14 | static BOOL cleanBuffer;
15 | static NSColor* backgroundColor;
16 |
17 |
18 | @implementation XFApp
19 |
20 | - (id)init
21 | {
22 | [[XFImageDocumentController alloc] init];
23 |
24 | self = [super init];
25 | [self setDelegate:self];
26 | return self;
27 | }
28 |
29 |
30 | - (void)applicationDidFinishLaunching:(NSNotification *)notification
31 | {
32 | NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
33 | NSColor* defaultColor = [defaults objectForKey:@"DefaultBackgroundColor"];
34 | if (defaultColor == nil) {
35 | [xfBackgroundColorWell setColor:[NSColor colorWithCalibratedRed:0.5f green:0.5f blue:0.5f alpha:1.0f]];
36 | }
37 | backgroundColor = [xfBackgroundColorWell color];
38 |
39 | NSNumber* ar = [defaults objectForKey:@"DefaultReload"];
40 | if (ar == nil) {
41 | automaticReload = YES;
42 | } else {
43 | automaticReload = [defaults boolForKey:@"DefaultReload"];
44 | }
45 | [xfReloadCheckBox setState:automaticReload];
46 |
47 | NSNumber* cb = [defaults objectForKey:@"DefaultBuffer"];
48 | if (cb == nil) {
49 | cleanBuffer = YES;
50 | } else {
51 | cleanBuffer = [defaults boolForKey:@"DefaultBuffer"];
52 | }
53 | [xfBufferCheckBox setState:cleanBuffer];
54 |
55 | NSNumber* extn = [defaults objectForKey:@"NSNavLastUserSetHideExtensionButtonState"];
56 | if(extn == nil) {
57 | [defaults setBool:NO forKey:@"NSNavLastUserSetHideExtensionButtonState"];
58 | }
59 |
60 | [defaults synchronize];
61 | }
62 |
63 |
64 | - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)theApp
65 | {
66 | return NO;
67 | }
68 |
69 |
70 | #pragma mark #### Preferences
71 |
72 | - (IBAction)changeAutomaticReload:(id)sender
73 | {
74 | automaticReload = [sender state];
75 | [[[NSDocumentController sharedDocumentController] currentDocument]
76 | performSelector:@selector(changeAutomaticReload:) withObject:sender
77 | afterDelay:0];
78 | }
79 |
80 |
81 | + (BOOL)getAutomaticReload
82 | {
83 | return automaticReload;
84 | }
85 |
86 |
87 | - (IBAction)changeCleanBuffer:(id)sender
88 | {
89 | cleanBuffer = [sender state];
90 | [[[NSDocumentController sharedDocumentController] currentDocument]
91 | performSelector:@selector(changeCleanBuffer:) withObject:sender
92 | afterDelay:0];
93 | }
94 |
95 |
96 | + (BOOL)getCleanBuffer
97 | {
98 | return cleanBuffer;
99 | }
100 |
101 |
102 | - (IBAction)changeBackgroundColor:(id)sender
103 | {
104 | backgroundColor = [sender color];
105 | [[[NSDocumentController sharedDocumentController] currentDocument]
106 | performSelector:@selector(changeBackgroundColor:) withObject:sender
107 | afterDelay:0];
108 | }
109 |
110 |
111 | + (NSColor *)getBackgroundColor
112 | {
113 | return backgroundColor;
114 | }
115 |
116 |
117 | #pragma mark -
118 |
119 | - (NSArray *)RGBProfiles
120 | {
121 | return [XFProfile arrayOfAllProfilesWithSpace:cmRGBData];
122 | }
123 |
124 |
125 | - (NSArray *)GrayProfiles
126 | {
127 | return [XFProfile arrayOfAllProfilesWithSpace:cmGrayData];
128 | }
129 |
130 |
131 | - (NSArray *)CMYKProfiles
132 | {
133 | return [XFProfile arrayOfAllProfilesWithSpace:cmCMYKData];
134 | }
135 |
136 |
137 | @end
138 |
--------------------------------------------------------------------------------
/XFImageDocument.h:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageDocument.h
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 | #import
10 | #import
11 |
12 | #import "XFProfile.h"
13 | #import "XFImageView.h"
14 | #import "XFImageFilter.h"
15 | #import "XFZoomScrollView.h"
16 |
17 |
18 | @class XFImageView, XFZoomScrollView;
19 |
20 | @interface XFImageDocument : NSDocument
21 | {
22 | IBOutlet XFImageView* xfImageView;
23 | IBOutlet XFZoomScrollView* xfZoomScrollView;
24 | IBOutlet NSSlider* xfExposureSlider;
25 | IBOutlet NSSlider* xfSaturationSlider;
26 | IBOutlet NSPopUpButton* xfProfilePopup;
27 |
28 | IBOutlet NSView* xfSavePanelView;
29 | NSString* xfSaveUTI;
30 | CFMutableDictionaryRef xfSaveMetaAndOpts;
31 |
32 | IBOutlet NSPanel* xfProgressPanel;
33 | IBOutlet NSProgressIndicator* xfProgressIndicator;
34 | IBOutlet NSTextField* xfProgressStatus;
35 |
36 | CGImageRef xfImage;
37 | CFDictionaryRef xfMetadata;
38 | XFImageFilter* xfFilteredImage;
39 |
40 | NSArray* xfProfiles;
41 |
42 | NSNumber* xfSwitchValue;
43 | XFProfile* xfProfileValue;
44 | NSNumber* xfExposureValue;
45 | NSNumber* xfSaturationValue;
46 |
47 | NSPrintInfo* xfPrintInfo;
48 |
49 | CGFloat _zoomFactor;
50 | BOOL automaticReload;
51 | BOOL cleanBuffer;
52 | NSColor* backgroundColor;
53 | }
54 |
55 | - (CGAffineTransform)imageTransform;
56 | - (CIImage *)currentCIImageWithTransform:(CGAffineTransform)ctm;
57 | - (CGImageRef)currentCGImage;
58 | - (CGSize)imageSize;
59 | - (CGFloat)zoomFactor;
60 | - (NSRect)visibleRect;
61 |
62 | - (NSNumber *)saveQuality;
63 |
64 | - (void)setupAll;
65 | - (void)setupExposure;
66 | - (void)setupSaturation;
67 |
68 | - (BOOL)switchState;
69 |
70 | - (IBAction)reload:(id)sender;
71 | - (IBAction)zoomIn:(id)sender;
72 | - (IBAction)zoomOut:(id)sender;
73 |
74 | - (IBAction)changeAutomaticReload:(id)sender;
75 | - (IBAction)changeCleanBuffer:(id)sender;
76 | - (IBAction)changeBackgroundColor:(id)sender;
77 | - (void)setBackgroundColor:(NSColor *)color;
78 |
79 | @end
80 |
--------------------------------------------------------------------------------
/XFImageDocumentController.h:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageDocumentController.h
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 |
10 |
11 | @interface XFImageDocumentController : NSDocumentController
12 | {
13 |
14 | }
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/XFImageDocumentController.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageDocumentController.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFImageDocumentController.h"
9 |
10 |
11 | static NSString* ImageIOLocalizedString(NSString* key)
12 | {
13 | static NSBundle* b = nil;
14 |
15 | if (b == nil)
16 | b = [NSBundle bundleWithIdentifier:@"com.apple.ImageIO.framework"];
17 |
18 | return [b localizedStringForKey:key value:key table: @"CGImageSource"];
19 | }
20 |
21 |
22 | static NSString* XFTypeNameRoot = @"org.extrafile";
23 | static NSString* XFTypeNameXFF = @"org.extrafile.xff";
24 | static NSString* XFTypeNameCCI = @"org.extrafile.cci";
25 | static NSString* XFTypeNameMCF = @"org.extrafile.mcf";
26 | static NSString* XFTypeName4BC = @"org.extrafile.4bc";
27 | static NSString* XFTypeNameBASCII = @"org.extrafile.bascii";
28 | static NSString* XFTypeNameBLINX = @"org.extrafile.blinx";
29 | static NSString* XFTypeNameUSPEC = @"org.extrafile.uspec";
30 |
31 |
32 | static NSString* XFIOLocalizedString(NSString* key)
33 | {
34 | static NSString* type = nil;
35 |
36 | if ([key isEqualToString:XFTypeNameXFF]) {
37 | type = @"XFF";
38 | } else if ([key isEqualToString:XFTypeNameCCI]) {
39 | type = @"CCI";
40 | } else if ([key isEqualToString:XFTypeNameMCF]) {
41 | type = @"MCF";
42 | } else if ([key isEqualToString:XFTypeName4BC]) {
43 | type = @"4BC";
44 | } else if ([key isEqualToString:XFTypeNameBASCII]) {
45 | type = @"BASCII";
46 | } else if ([key isEqualToString:XFTypeNameBLINX]) {
47 | type = @"BLINX";
48 | } else if ([key isEqualToString:XFTypeNameUSPEC]) {
49 | type = @"USPEC";
50 | }
51 | return type;
52 | }
53 |
54 |
55 | @implementation XFImageDocumentController
56 |
57 |
58 | - (NSString *)defaultType
59 | {
60 | return @"public.tiff";
61 | }
62 |
63 |
64 | - (NSArray *)documentClassNames
65 | {
66 | return [NSArray arrayWithObject:@"XFImageDocument"];
67 | }
68 |
69 |
70 | - (Class)documentClassForType:(NSString *)typeName
71 | {
72 | return [[NSBundle mainBundle] classNamed:@"XFImageDocument"];
73 | }
74 |
75 |
76 | - (NSString *)displayNameForType:(NSString *)typeName;
77 | {
78 | NSString* displayName = nil;
79 | if ([typeName rangeOfString:XFTypeNameRoot].location != NSNotFound) {
80 | displayName = XFIOLocalizedString(typeName);
81 | } else {
82 | displayName = ImageIOLocalizedString(typeName);
83 | }
84 | return displayName;
85 | }
86 |
87 |
88 | // Return the name of the document type that should be used when opening a URL
89 | // In this app, we return the UTI type returned by CGImageSourceGetType.
90 | //
91 | /*
92 | - (NSString *)typeForContentsOfURL:(NSURL *)absURL error:(NSError **)outError
93 | {
94 | NSLog(@"TYPE CONTENT URL");
95 | NSLog(@"%@", absURL);
96 |
97 | NSString* type = nil;
98 | CGImageSourceRef isrc = CGImageSourceCreateWithURL((CFURLRef)absURL, nil);
99 | NSLog(@"%@", isrc);
100 |
101 | if (isrc)
102 | {
103 | NSLog(@"TYPE CGI");
104 | type = [[(NSString *)CGImageSourceGetType(isrc) retain] autorelease];
105 | NSLog(@"%@", type);
106 | CFRelease(isrc);
107 | }
108 |
109 | return type;
110 | }
111 | */
112 |
113 |
114 | // Given a document type, return an array of corresponding file name extensions
115 | // and HFS file type strings of the sort returned by NSFileTypeForHFSTypeCode().
116 | // In this app, 'typeName' is a UTI type so we can call UTTypeCopyDeclaration().
117 | //
118 |
119 | - (NSArray *)fileExtensionsFromType:(NSString *)typeName;
120 | {
121 | NSArray* readExts = nil;
122 |
123 | CFDictionaryRef utiDecl = UTTypeCopyDeclaration((CFStringRef)typeName);
124 | if (utiDecl)
125 | {
126 | CFDictionaryRef utiSpec = CFDictionaryGetValue(utiDecl, kUTTypeTagSpecificationKey);
127 | if (utiSpec)
128 | {
129 | CFTypeRef ext = CFDictionaryGetValue(utiSpec, kUTTagClassFilenameExtension);
130 |
131 | if (ext && CFGetTypeID(ext) == CFStringGetTypeID())
132 | readExts = [NSArray arrayWithObject:(id)ext];
133 | if (ext && CFGetTypeID(ext) == CFArrayGetTypeID())
134 | readExts = [NSArray arrayWithArray:(id)ext];
135 | }
136 | CFRelease(utiDecl);
137 | }
138 |
139 | return readExts;
140 | }
141 |
142 | @end
143 |
--------------------------------------------------------------------------------
/XFImageFilter.h:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageFilter.h
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 | #import
10 |
11 | #import "XFProfile.h"
12 |
13 |
14 | @interface XFImageFilter : NSObject
15 | {
16 | CGImageRef xfImage;
17 | CIImage* xfCIImage;
18 |
19 | XFProfile* xfProfile;
20 | CIFilter* xfCIExposure;
21 | CIFilter* xfCIColorControls;
22 | CIFilter* xfCIColorCube;
23 | }
24 |
25 | - (id)initWithImage:(CGImageRef)image;
26 | - (void)setProfile:(XFProfile *)profile;
27 | - (void)setExposure:(NSNumber *)exposure;
28 | - (void)setSaturation:(NSNumber *)saturation;
29 |
30 | - (CIImage *)imageWithTransform:(CGAffineTransform)ctm;
31 | - (CGImageRef)createCGImage;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/XFImageFilter.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageFilter.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFImageFilter.h"
9 |
10 |
11 | @implementation XFImageFilter
12 |
13 | - (void)dealloc
14 | {
15 | CGImageRelease(xfImage);
16 | [xfCIImage release];
17 | [xfProfile release];
18 | [xfCIExposure release];
19 | [xfCIColorControls release];
20 | [xfCIColorCube release];
21 |
22 | [super dealloc];
23 | }
24 |
25 |
26 | - (id)initWithImage:(CGImageRef)image
27 | {
28 | if ((self = [super init]))
29 | {
30 | xfImage = CGImageRetain(image);
31 | xfCIImage = [[CIImage imageWithCGImage:xfImage] retain];
32 | }
33 | return self;
34 | }
35 |
36 |
37 | - (void)setProfile:(XFProfile *)profile
38 | {
39 | [xfProfile release];
40 | xfProfile = [profile retain];
41 |
42 | if (xfProfile == nil)
43 | {
44 | [xfCIColorCube autorelease];
45 | xfCIColorCube = nil;
46 | }
47 | else
48 | {
49 | // Use the CIColorCube filter three-dimensional color table
50 | // to transform the source image pixels
51 | if (xfCIColorCube == nil)
52 | xfCIColorCube = [[CIFilter filterWithName: @"CIColorCube"] retain];
53 |
54 | // Get the transformed data
55 | static const int kSoftProofGrid = 32;
56 | NSData *data = [xfProfile dataForCISoftproofTextureWithGridSize:kSoftProofGrid];
57 |
58 | [xfCIColorCube setValue:data
59 | forKey:@"inputCubeData"];
60 | [xfCIColorCube setValue:[NSNumber numberWithInt:kSoftProofGrid]
61 | forKey:@"inputCubeDimension"];
62 | }
63 | }
64 |
65 |
66 | - (void)setExposure:(NSNumber *)exposure
67 | {
68 | if (xfCIExposure == nil)
69 | xfCIExposure = [[CIFilter filterWithName: @"CIExposureAdjust"] retain];
70 |
71 | [xfCIExposure setValue:exposure
72 | forKey: @"inputEV"];
73 | }
74 |
75 |
76 | - (void)setSaturation:(NSNumber *)saturation
77 | {
78 | if (xfCIColorControls == nil)
79 | xfCIColorControls = [[CIFilter filterWithName: @"CIColorControls"] retain];
80 |
81 | [xfCIColorControls setValue:saturation
82 | forKey: @"inputSaturation"];
83 |
84 | [xfCIColorControls setValue:[[[xfCIColorControls attributes]
85 | objectForKey: @"inputBrightness"]
86 | objectForKey: @"CIAttributeIdentity"]
87 | forKey: @"inputBrightness"];
88 |
89 | [xfCIColorControls setValue:[[[xfCIColorControls attributes]
90 | objectForKey: @"inputContrast"]
91 | objectForKey: @"CIAttributeIdentity"]
92 | forKey: @"inputContrast"];
93 | }
94 |
95 |
96 | - (CIImage *)imageWithTransform:(CGAffineTransform)ctm
97 | {
98 | // Returns a new image representing the original image with the transform
99 | // 'ctm' appended to it.
100 | CIImage* ciimg = [xfCIImage imageByApplyingTransform:ctm];
101 |
102 | if (xfCIExposure)
103 | {
104 | [xfCIExposure setValue:ciimg forKey:@"inputImage"];
105 | ciimg = [xfCIExposure valueForKey: @"outputImage"];
106 | }
107 |
108 | if (xfCIColorControls)
109 | {
110 | [xfCIColorControls setValue:ciimg forKey:@"inputImage"];
111 | ciimg = [xfCIColorControls valueForKey: @"outputImage"];
112 | }
113 |
114 | if (xfCIColorCube)
115 | {
116 | [xfCIColorCube setValue:ciimg forKey: @"inputImage"];
117 | ciimg = [xfCIColorCube valueForKey: @"outputImage"];
118 | }
119 |
120 | return ciimg;
121 | }
122 |
123 |
124 | - (CGImageRef)createCGImage
125 | {
126 | if (xfImage==nil)
127 | return nil;
128 |
129 | XFProfile* prof = xfProfile;
130 | if (xfProfile==nil)
131 | prof = [XFProfile profileWithGenericRGB];
132 |
133 | // calculate bits per pixel and row bytes and alphaInfo
134 | size_t height = CGImageGetHeight(xfImage);
135 | size_t width = CGImageGetWidth(xfImage);
136 | CGRect rect = {{0,0}, {width, height}};
137 | size_t bitsPerComponent = 8;
138 | size_t bytesPerRow = 0;
139 | CGImageAlphaInfo alphaInfo = kCGImageAlphaNone;
140 |
141 | switch ([prof spaceType])
142 | {
143 | case cmGrayData:
144 | bytesPerRow = width;
145 | alphaInfo = kCGImageAlphaNone; /* RGB. */
146 | break;
147 | case cmRGBData:
148 | bytesPerRow = width*4;
149 | alphaInfo = kCGImageAlphaPremultipliedLast; /* premultiplied RGBA */
150 | break;
151 | case cmCMYKData:
152 | bytesPerRow = width*4;
153 | alphaInfo = kCGImageAlphaNone; /* RGB. */
154 | break;
155 | default:
156 | return nil;
157 | break;
158 | }
159 |
160 | CGContextRef context = CGBitmapContextCreate(nil, width, height,
161 | bitsPerComponent, bytesPerRow,
162 | [prof colorspace], alphaInfo);
163 |
164 | CIContext* cicontext = [CIContext contextWithCGContext: context options: nil];
165 |
166 | // If context doesn't support alpha then first fill it with white.
167 | // That is most likely to be desireable.
168 | if (alphaInfo == kCGImageAlphaNone)
169 | {
170 | CGColorSpaceRef graySpace = CGColorSpaceCreateDeviceGray();
171 | const CGFloat whiteComps[2] = {1.0, 1.0};
172 | CGColorRef whiteColor = CGColorCreate(graySpace, whiteComps);
173 | CFRelease(graySpace);
174 | CGContextSetFillColorWithColor(context, whiteColor);
175 | CGContextFillRect(context, rect);
176 | CFRelease(whiteColor);
177 | }
178 |
179 | CIImage* ciimg = xfCIImage;
180 |
181 | // exposure adjustment
182 | if (xfCIExposure)
183 | {
184 | [xfCIExposure setValue:ciimg forKey:@"inputImage"];
185 | ciimg = [xfCIExposure valueForKey: @"outputImage"];
186 | }
187 |
188 | // three-dimensional color table adjustment
189 | if (xfCIColorControls)
190 | {
191 | [xfCIColorControls setValue:ciimg forKey:@"inputImage"];
192 | ciimg = [xfCIColorControls valueForKey: @"outputImage"];
193 | }
194 |
195 |
196 | CGRect extent = [ciimg extent];
197 |
198 | [cicontext drawImage: ciimg inRect:rect fromRect:extent];
199 |
200 | CGImageRef image = CGBitmapContextCreateImage(context);
201 |
202 | CGContextRelease(context);
203 |
204 | return image;
205 | }
206 |
207 | @end
208 |
--------------------------------------------------------------------------------
/XFImageView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageView.h
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 |
10 | #import "XFImageDocument.h"
11 |
12 |
13 | @class XFImageDocument;
14 |
15 | @interface XFImageView : NSView
16 | {
17 | IBOutlet XFImageDocument* xfImageDoc;
18 |
19 | NSColor* backgroundColor;
20 | }
21 |
22 | - (void)changeBackgroundColor:(NSColor *)color;
23 |
24 | - (NSData *)dataInXFF;
25 | - (NSData *)dataInCCI;
26 | - (NSData *)dataInMCF;
27 | - (NSData *)dataIn4BC;
28 | - (NSData *)dataInBASCII;
29 | - (NSData *)dataInBLINX;
30 | - (NSData *)dataInUSPEC;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/XFImageView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFImageView.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFImageView.h"
9 | #import "XFImageDocument.h"
10 |
11 | #import
12 |
13 |
14 | #define BITOP(a,b,op) \
15 | ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a))))
16 |
17 | // BITOP(array, 40, |=); /* sets bit 40 */
18 | // BITOP(array, 41, ^=); /* toggles bit 41 */
19 | // if (BITOP(array, 42, &)) return 0; /* tests bit 42 */
20 | // BITOP(array, 43, &=~); /* clears bit 43 */
21 |
22 |
23 | static NSString* separatorString = @">data>";
24 |
25 | static unsigned char bAscii0[16] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
26 | static unsigned char bAscii1[16] = {0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22, 0x88, 0x88, 0x22, 0x22};
27 | static unsigned char bAscii2[16] = {0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55};
28 | static unsigned char bAscii3[16] = {0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB, 0xEE, 0xEE, 0xBB, 0xBB};
29 | static unsigned char bAscii4[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
30 |
31 |
32 | @implementation XFImageView
33 |
34 | - (void)dealloc
35 | {
36 | [[NSNotificationCenter defaultCenter] removeObserver:self];
37 | [super dealloc];
38 | }
39 |
40 |
41 | - (id)initWithFrame:(NSRect)frame
42 | {
43 | self = [super initWithFrame:frame];
44 | if (self) {
45 | [[NSNotificationCenter defaultCenter]
46 | addObserver:self selector:@selector(newScreenProfile:)
47 | name:NSWindowDidChangeScreenProfileNotification object:nil];
48 | }
49 | return self;
50 | }
51 |
52 |
53 | #pragma mark -
54 |
55 | - (CMDisplayIDType)displayID
56 | {
57 | return (CMDisplayIDType)[[[[[self window] screen] deviceDescription] objectForKey:@"NSScreenNumber"] longValue];
58 | }
59 |
60 |
61 | - (BOOL)isFlipped
62 | {
63 | return YES;
64 | }
65 |
66 |
67 | - (BOOL)isOpaque
68 | {
69 | return YES;
70 | }
71 |
72 |
73 | #pragma mark -
74 |
75 | - (void)changeBackgroundColor:(NSColor *)color
76 | {
77 | backgroundColor = color;
78 | [self setNeedsDisplay:YES];
79 | }
80 |
81 |
82 | - (void)drawImage
83 | {
84 | CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
85 | if (context==nil)
86 | return;
87 |
88 | CGImageRef image = [xfImageDoc currentCGImage];
89 | if (image==nil)
90 | return;
91 |
92 | NSRect viewBounds = [self bounds];
93 | CGRect imageRect = {{0,0}, [xfImageDoc imageSize]};
94 |
95 | CGAffineTransform ctm = [xfImageDoc imageTransform];
96 |
97 | CGSize ctmdSize = CGRectApplyAffineTransform(imageRect, ctm).size;
98 | ctm.tx += viewBounds.origin.x + (viewBounds.size.width - ctmdSize.width)/2;
99 | ctm.ty += viewBounds.origin.y + (viewBounds.size.height - ctmdSize.height)/2;
100 |
101 | CGContextConcatCTM(context, ctm);
102 |
103 | //CGInterpolationQuality q = [self inLiveResize] ? NSImageInterpolationNone : NSImageInterpolationHigh;
104 | CGInterpolationQuality q = NSImageInterpolationNone;
105 | CGContextSetInterpolationQuality(context, q);
106 |
107 | // now draw using updated transform
108 | CGContextDrawImage(context, imageRect, image);
109 |
110 | CGImageRelease(image);
111 | }
112 |
113 |
114 | - (void)drawCIImage
115 | {
116 | CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
117 | if (context==nil)
118 | return;
119 |
120 | CIImage* image = [xfImageDoc currentCIImageWithTransform:[xfImageDoc imageTransform]];
121 | if (image==nil)
122 | return;
123 |
124 | NSRect viewBounds = [self bounds];
125 | CGRect sRect = [image extent];
126 | CGRect dRect = sRect;
127 | dRect.origin.x = viewBounds.origin.x + (viewBounds.size.width - sRect.size.width)/2;
128 | dRect.origin.y = viewBounds.origin.y + (viewBounds.size.height - sRect.size.height)/2;
129 |
130 | CIContext* ciContext = [CIContext contextWithCGContext:context options:nil];
131 | [ciContext drawImage:image inRect:dRect fromRect:sRect];
132 | }
133 |
134 |
135 | - (void)drawRect:(NSRect)rect
136 | {
137 | NSSize imageSize = NSSizeFromCGSize([xfImageDoc imageSize]);
138 | NSRect viewBounds = [xfImageDoc visibleRect];
139 | NSRect imageBounds = NSMakeRect(0, 0, MAX(imageSize.width, viewBounds.size.width), MAX(imageSize.height, viewBounds.size.height));
140 | [self setFrame:imageBounds];
141 |
142 | [backgroundColor set];
143 | [NSBezierPath fillRect:[self bounds]];
144 |
145 | if ([xfImageDoc switchState])
146 | [self drawCIImage];
147 | else
148 | [self drawImage];
149 | }
150 |
151 |
152 | - (void)viewDidEndLiveResize
153 | {
154 | if ([xfImageDoc switchState]==NO)
155 | [self setNeedsDisplay:YES];
156 | }
157 |
158 |
159 | - (void)newScreenProfile:(NSNotification*)n
160 | {
161 | }
162 |
163 |
164 | #pragma mark #### GET DATA
165 |
166 | - (NSData *)dataInXFF
167 | {
168 | CGImageRef cgImage = [xfImageDoc currentCGImage];
169 | if (cgImage==nil)
170 | return nil;
171 |
172 | NSMutableData* xffData = [NSMutableData dataWithCapacity:0];
173 |
174 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage));
175 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size];
176 |
177 | [image lockFocus];
178 |
179 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage);
180 |
181 | [image unlockFocus];
182 |
183 | NSData* data = [image TIFFRepresentation];
184 | [image release];
185 |
186 |
187 | //PROPERTIES
188 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)];
189 | const char* utfSizeString = [sizeString UTF8String];
190 |
191 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1];
192 |
193 | //SEPARATOR
194 | const char* utfSeparatorString = [separatorString UTF8String];
195 |
196 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1];
197 |
198 | [xffData appendData:size];
199 | [xffData appendData:separator];
200 | [xffData appendData:data];
201 |
202 | CGImageRelease(cgImage);
203 |
204 | return xffData;
205 | }
206 |
207 |
208 | - (NSData *)dataInCCI
209 | {
210 | CGImageRef cgImage = [xfImageDoc currentCGImage];
211 | if (cgImage==nil)
212 | return nil;
213 |
214 | NSMutableData* cciData = [NSMutableData dataWithCapacity:0];
215 |
216 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage));
217 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size];
218 |
219 | [image lockFocus];
220 |
221 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage);
222 |
223 | [image unlockFocus];
224 |
225 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
226 | [image release];
227 |
228 | NSMutableData* rData = [NSMutableData dataWithCapacity:0];
229 | NSMutableData* gData = [NSMutableData dataWithCapacity:0];
230 | NSMutableData* bData = [NSMutableData dataWithCapacity:0];
231 |
232 | NSColor* color = [bitmap colorAtX:0 y:0];
233 | CGFloat rFloat = lround(255.0f * [color redComponent]);
234 | CGFloat gFloat = lround(255.0f * [color greenComponent]);
235 | CGFloat bFloat = lround(255.0f * [color blueComponent]);
236 |
237 | Byte rByteBuffer = (Byte)rFloat;
238 | Byte rByteCount = 0;
239 | Byte gByteBuffer = (Byte)gFloat;
240 | Byte gByteCount = 0;
241 | Byte bByteBuffer = (Byte)bFloat;
242 | Byte bByteCount = 0;
243 |
244 | float quality = [[xfImageDoc saveQuality] floatValue];
245 | int qualityOffset = lround((1.0f-quality)*10);
246 |
247 | int numPixels = CGImageGetWidth(cgImage) * CGImageGetHeight(cgImage);
248 | int i;
249 | for (i=1; i rByteBuffer+qualityOffset || rByteCount >= 255) {
259 |
260 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer;
261 | unsigned char* rCountChar = (unsigned char *)&rByteCount;
262 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
263 | [rData appendBytes:rCountChar length:sizeof(unsigned char)];
264 |
265 | rByteBuffer = rByte;
266 | rByteCount = 0;
267 | }
268 | else {
269 | rByteCount++;
270 | }
271 |
272 |
273 | CGFloat gFloat = lround(255.0f * [color greenComponent]);
274 | Byte gByte = (Byte)gFloat;
275 |
276 | if (gByte < gByteBuffer-qualityOffset || gByte > gByteBuffer+qualityOffset || gByteCount >= 255) {
277 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer;
278 | unsigned char* gCountChar = (unsigned char *)&gByteCount;
279 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
280 | [gData appendBytes:gCountChar length:sizeof(unsigned char)];
281 |
282 | gByteBuffer = gByte;
283 | gByteCount = 0;
284 | }
285 | else {
286 | gByteCount++;
287 | }
288 |
289 |
290 | CGFloat bFloat = lround(255.0f * [color blueComponent]);
291 | Byte bByte = (Byte)bFloat;
292 |
293 | if (bByte < bByteBuffer-qualityOffset || bByte > bByteBuffer+qualityOffset || bByteCount >= 255) {
294 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer;
295 | unsigned char* bCountChar = (unsigned char *)&bByteCount;
296 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
297 | [bData appendBytes:bCountChar length:sizeof(unsigned char)];
298 |
299 | bByteBuffer = bByte;
300 | bByteCount = 0;
301 | }
302 | else {
303 | bByteCount++;
304 | }
305 | }
306 |
307 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer;
308 | unsigned char* rCountChar = (unsigned char *)&rByteCount;
309 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
310 | [rData appendBytes:rCountChar length:sizeof(unsigned char)];
311 |
312 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer;
313 | unsigned char* gCountChar = (unsigned char *)&gByteCount;
314 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
315 | [gData appendBytes:gCountChar length:sizeof(unsigned char)];
316 |
317 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer;
318 | unsigned char* bCountChar = (unsigned char *)&bByteCount;
319 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
320 | [bData appendBytes:bCountChar length:sizeof(unsigned char)];
321 |
322 |
323 | //PROPERTIES
324 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)];
325 | const char* utfSizeString = [sizeString UTF8String];
326 |
327 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1];
328 |
329 | //SEPARATOR
330 | const char* utfSeparatorString = [separatorString UTF8String];
331 |
332 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1];
333 |
334 | [cciData appendData:size];
335 | [cciData appendData:separator];
336 | [cciData appendData:rData];
337 | [cciData appendData:gData];
338 | [cciData appendData:bData];
339 |
340 | CGImageRelease(cgImage);
341 |
342 | return cciData;
343 | }
344 |
345 |
346 | - (NSData *)dataInMCF
347 | {
348 | CGImageRef cgImage = [xfImageDoc currentCGImage];
349 | if (cgImage==nil)
350 | return nil;
351 |
352 | NSMutableData* mcfData = [NSMutableData dataWithCapacity:0];
353 |
354 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage));
355 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size];
356 |
357 | [image lockFocus];
358 |
359 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage);
360 |
361 | [image unlockFocus];
362 |
363 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
364 | [image release];
365 |
366 | NSMutableData* mData = [NSMutableData dataWithCapacity:0];
367 |
368 | float columnWidth = 4.0f;
369 | float rowHeight = 2.0f;
370 |
371 | int xOff[8] = {0, 1, 2, 3, 0, 1, 2, 3};
372 | int yOff[8] = {0, 1, 0, 1, 1, 0, 1, 0};
373 |
374 | int columns = ceil(CGImageGetWidth(cgImage) / columnWidth);
375 | int rows = ceil(CGImageGetHeight(cgImage) / rowHeight);
376 |
377 | int gridSize = columns * rows;
378 |
379 | int i;
380 | for (i=0; i rByteBuffer+qualityOffset || rByteCount >= 255) {
797 |
798 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer;
799 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
800 |
801 | if (rByteCount > 0) {
802 |
803 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
804 |
805 | unsigned char* rCountChar = (unsigned char *)&rByteCount;
806 | [rData appendBytes:rCountChar length:sizeof(unsigned char)];
807 | }
808 |
809 | rByteBuffer = rByte;
810 | rByteCount = 0;
811 | }
812 | else {
813 | rByteCount++;
814 | }
815 |
816 |
817 | CGFloat gFloat = lround(255.0f * [color greenComponent]);
818 | Byte gByte = (Byte)gFloat;
819 |
820 | if (gByte < gByteBuffer-qualityOffset || gByte > gByteBuffer+qualityOffset || gByteCount >= 255) {
821 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer;
822 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
823 |
824 | if (gByteCount > 0) {
825 |
826 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
827 |
828 | unsigned char* gCountChar = (unsigned char *)&gByteCount;
829 | [gData appendBytes:gCountChar length:sizeof(unsigned char)];
830 | }
831 |
832 | gByteBuffer = gByte;
833 | gByteCount = 0;
834 | }
835 | else {
836 | gByteCount++;
837 | }
838 |
839 |
840 | CGFloat bFloat = lround(255.0f * [color blueComponent]);
841 | Byte bByte = (Byte)bFloat;
842 |
843 | if (bByte < bByteBuffer-qualityOffset || bByte > bByteBuffer+qualityOffset || bByteCount >= 255) {
844 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer;
845 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
846 |
847 | if (bByteCount > 0) {
848 |
849 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
850 |
851 | unsigned char* bCountChar = (unsigned char *)&bByteCount;
852 | [bData appendBytes:bCountChar length:sizeof(unsigned char)];
853 | }
854 |
855 | bByteBuffer = bByte;
856 | bByteCount = 0;
857 | }
858 | else {
859 | bByteCount++;
860 | }
861 |
862 |
863 | if (j==35 || j==51 || j==67 || j==83 || j==99 || j==112 || j==121 || j==126) {
864 | yOff++;
865 | }
866 |
867 | if (j==106 || j==117 || j==124) {
868 | xOff++;
869 | }
870 |
871 | if (xUp) {
872 | xOff++;
873 | yOff--;
874 | } else {
875 | xOff--;
876 | yOff++;
877 | }
878 |
879 | if (xOff == xLimit) {
880 | xUp = NO;
881 | xLimit += 2;
882 | xLimit = MIN(columnWidth-1, xLimit);
883 | }
884 |
885 | if (yOff == yLimit) {
886 | xUp = YES;
887 | yLimit += 2;
888 | yLimit = MIN(rowHeight-1, yLimit);
889 | }
890 |
891 | xOff = MIN(columnWidth-1, MAX(0, xOff));
892 | yOff = MIN(rowHeight-1, MAX(0, yOff));
893 | }
894 |
895 | unsigned char* rValueChar = (unsigned char *)&rByteBuffer;
896 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
897 |
898 | if (rByteCount > 0) {
899 |
900 | [rData appendBytes:rValueChar length:sizeof(unsigned char)];
901 |
902 | unsigned char* rCountChar = (unsigned char *)&rByteCount;
903 | [rData appendBytes:rCountChar length:sizeof(unsigned char)];
904 | }
905 |
906 | unsigned char* gValueChar = (unsigned char *)&gByteBuffer;
907 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
908 |
909 | if (gByteCount > 0) {
910 |
911 | [gData appendBytes:gValueChar length:sizeof(unsigned char)];
912 |
913 | unsigned char* gCountChar = (unsigned char *)&gByteCount;
914 | [gData appendBytes:gCountChar length:sizeof(unsigned char)];
915 | }
916 |
917 | unsigned char* bValueChar = (unsigned char *)&bByteBuffer;
918 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
919 |
920 | if (bByteCount > 0) {
921 |
922 | [bData appendBytes:bValueChar length:sizeof(unsigned char)];
923 |
924 | unsigned char* bCountChar = (unsigned char *)&bByteCount;
925 | [bData appendBytes:bCountChar length:sizeof(unsigned char)];
926 | }
927 |
928 | NSData* blockID = [NSData dataWithBytes:&i length:sizeof(i)];
929 |
930 | [rHeadData appendData:blockID];
931 | Byte rLengthByte = (Byte)[rData length];
932 | unsigned char* rLengthChar = (unsigned char *)&rLengthByte;
933 | [rHeadData appendBytes:rLengthChar length:sizeof(unsigned char)];
934 |
935 | [gHeadData appendData:blockID];
936 | Byte gLengthByte = (Byte)[gData length];
937 | unsigned char* gLengthChar = (unsigned char *)&gLengthByte;
938 | [gHeadData appendBytes:gLengthChar length:sizeof(unsigned char)];
939 |
940 | [bHeadData appendData:blockID];
941 | Byte bLengthByte = (Byte)[bData length];
942 | unsigned char* bLengthChar = (unsigned char *)&bLengthByte;
943 | [bHeadData appendBytes:bLengthChar length:sizeof(unsigned char)];
944 |
945 | [blockData appendData:rHeadData];
946 | [blockData appendData:rData];
947 | [blockData appendData:gHeadData];
948 | [blockData appendData:gData];
949 | [blockData appendData:bHeadData];
950 | [blockData appendData:bData];
951 | }
952 |
953 | //PROPERTIES
954 | NSString* sizeString = [NSString stringWithFormat:@"%dx%d", CGImageGetWidth(cgImage), CGImageGetHeight(cgImage)];
955 | const char* utfSizeString = [sizeString UTF8String];
956 |
957 | NSData* size = [NSData dataWithBytes:utfSizeString length:strlen(utfSizeString)+1];
958 |
959 | //SEPARATOR
960 | const char* utfSeparatorString = [separatorString UTF8String];
961 |
962 | NSData* separator = [NSData dataWithBytes:utfSeparatorString length:strlen(utfSeparatorString)+1];
963 |
964 | [basciiData appendData:size];
965 | [basciiData appendData:separator];
966 | [basciiData appendData:blockData];
967 |
968 | CGImageRelease(cgImage);
969 |
970 | return basciiData;
971 | }
972 |
973 |
974 | - (NSData *)dataInUSPEC
975 | {
976 | CGImageRef cgImage = [xfImageDoc currentCGImage];
977 | if (cgImage==nil)
978 | return nil;
979 |
980 | NSMutableData* uspecData = [NSMutableData dataWithCapacity:0];
981 |
982 | NSRect bounds = NSMakeRect(0, 0, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage));
983 | NSImage* image = [[NSImage alloc] initWithSize:bounds.size];
984 |
985 | [image lockFocus];
986 |
987 | CGContextDrawImage([[NSGraphicsContext currentContext] graphicsPort], *(CGRect*)&bounds, cgImage);
988 |
989 | [image unlockFocus];
990 |
991 | NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
992 | [image release];
993 |
994 | NSMutableArray* pixelArray = [[NSMutableArray alloc] init];
995 |
996 | NSString* indexString = @"index";
997 | NSString* colorString = @"color";
998 |
999 | NSArray* keys = [NSArray arrayWithObjects:indexString, colorString, nil];
1000 |
1001 | int imageWidth = CGImageGetWidth(cgImage);
1002 | int imageHeight = CGImageGetHeight(cgImage);
1003 |
1004 | int imageSize = imageWidth * imageHeight;
1005 |
1006 | int i;
1007 | for (i=0; i
9 |
10 |
11 | @class XFImageDocument;
12 |
13 | @interface XFPrintView : NSView
14 | {
15 | XFImageDocument* xfImageDoc;
16 | }
17 |
18 | - (id)initWithFrame:(NSRect)frame document:(XFImageDocument*)imageDoc;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/XFPrintView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFPrintView.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFPrintView.h"
9 | #import "XFImageDocument.h"
10 |
11 |
12 | @implementation XFPrintView
13 |
14 | - (id)initWithFrame:(NSRect)frame document:(XFImageDocument*)imageDoc{
15 | self = [super initWithFrame:frame];
16 | if (self) {
17 | xfImageDoc = [imageDoc retain];
18 | }
19 | return self;
20 | }
21 |
22 |
23 | - (void)dealloc
24 | {
25 | [xfImageDoc release];
26 | [super dealloc];
27 | }
28 |
29 |
30 | - (NSString*)printJobTitle
31 | {
32 | return [xfImageDoc displayName];
33 | }
34 |
35 |
36 | - (void)drawRect:(NSRect)dirtyRect
37 | {
38 | CGImageRef image = [xfImageDoc currentCGImage];
39 |
40 | if (image)
41 | {
42 | CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
43 |
44 | CGContextSaveGState(context);
45 |
46 | float scale, xScale, yScale;
47 |
48 | CGSize imageSize;
49 | NSRect printableRect = NSIntegralRect([self frame]);
50 |
51 | CGRect imageRect = {{0,0}, {CGImageGetWidth(image), CGImageGetHeight(image)}};
52 |
53 | CGAffineTransform imTransform = [xfImageDoc imageTransform];
54 |
55 | imageSize = CGRectApplyAffineTransform(imageRect, imTransform).size;
56 |
57 | xScale = printableRect.size.width / imageSize.width;
58 | yScale = printableRect.size.height / imageSize.height;
59 | scale = MIN(xScale, yScale);
60 |
61 | imTransform = CGAffineTransformConcat(imTransform, CGAffineTransformMakeScale(scale,scale));
62 |
63 | float tx = (printableRect.size.width - imageSize.width * scale) / 2.
64 | + printableRect.origin.x;
65 | float ty = (printableRect.size.height - imageSize.height* scale) / 2.
66 | + printableRect.origin.y;
67 |
68 | imTransform.tx += tx;
69 | imTransform.ty += ty;
70 |
71 | // adjust transform
72 | CGContextConcatCTM(context, imTransform);
73 |
74 | // draw!
75 | CGContextDrawImage (context, imageRect, image);
76 |
77 | CGContextRestoreGState(context);
78 |
79 | CGImageRelease(image);
80 | }
81 | }
82 |
83 | @end
84 |
--------------------------------------------------------------------------------
/XFProfile.h:
--------------------------------------------------------------------------------
1 | //
2 | // XFProfile.h
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 |
10 |
11 | @interface XFProfile : NSObject
12 | {
13 | CMProfileRef xfRef;
14 | CGColorSpaceRef xfColorspace;
15 | CMProfileLocation xfLocation;
16 | OSType xfClass;
17 | OSType xfSpace;
18 | NSString* xfName;
19 | NSString* xfPath;
20 | }
21 |
22 | + (NSArray *)arrayOfAllProfiles;
23 | + (NSArray *)arrayOfAllProfilesWithSpace:(OSType)space;
24 |
25 | + (XFProfile *)profileDefaultRGB;
26 | + (XFProfile *)profileDefaultGray;
27 | + (XFProfile *)profileDefaultCMYK;
28 |
29 | + (XFProfile *)profileWithIterateData:(CMProfileIterateData *)data;
30 | - (XFProfile *)initWithIterateData:(CMProfileIterateData *)data;
31 | + (XFProfile *)profileWithPath:(NSString *)path;
32 | - (XFProfile *)initWithPath:(NSString *)path;
33 | + (XFProfile *)profileWithGenericRGB;
34 | - (XFProfile *)initWithGenericRGB;
35 | + (XFProfile *)profileWithLinearRGB;
36 | - (XFProfile *)initWithLinearRGB;
37 |
38 | - (CMProfileRef)ref;
39 | - (CMProfileLocation *)location;
40 | - (OSType)classType;
41 | - (OSType)spaceType;
42 | - (NSString*) path;
43 | - (CGColorSpaceRef)colorspace;
44 |
45 | - (NSData*)dataForCISoftproofTextureWithGridSize:(size_t)grid;
46 |
47 | @end
48 |
49 | CGImageRef CGImageCreateCopyWithDefaultSpace(CGImageRef image);
50 |
--------------------------------------------------------------------------------
/XFProfile.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFProfile.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import "XFProfile.h"
9 |
10 |
11 | static OSErr profileIterate(CMProfileIterateData *info, void *refCon)
12 | {
13 | NSMutableArray* array = (NSMutableArray*)refCon;
14 |
15 | XFProfile* prof = [XFProfile profileWithIterateData:info];
16 | if (prof)
17 | [array addObject:prof];
18 |
19 | return noErr;
20 | }
21 |
22 |
23 | @implementation XFProfile
24 |
25 | + (NSArray*)arrayOfAllProfilesWithSpace:(OSType)space
26 | {
27 | CFIndex i, count;
28 | NSArray* profArray = [XFProfile arrayOfAllProfiles];
29 | NSMutableArray* profs = [NSMutableArray arrayWithCapacity:0];
30 |
31 | count = [profArray count];
32 | for (i=0; ilocation;
187 | xfClass = info->header.profileClass;
188 | xfSpace = info->header.dataColorSpace;
189 |
190 | if (info->uniCodeNameCount > 1)
191 | {
192 | CFIndex numChars = info->uniCodeNameCount - 1;
193 | if (numChars > kMaxProfNameLen)
194 | numChars = kMaxProfNameLen;
195 | xfName = [[NSString stringWithCharacters:info->uniCodeName length:numChars] retain];
196 | }
197 |
198 | return self;
199 | }
200 |
201 |
202 | - (XFProfile *)initWithPath:(NSString *)path
203 | {
204 | if (path)
205 | {
206 | xfPath = [path retain];
207 |
208 | xfLocation.locType = cmPathBasedProfile;
209 | strncpy(xfLocation.u.pathLoc.path, [path fileSystemRepresentation], 255);
210 |
211 | CMAppleProfileHeader header;
212 | if (noErr==CMGetProfileHeader([self ref], &header))
213 | {
214 | xfClass = header.cm2.profileClass;
215 | xfSpace = header.cm2.dataColorSpace;
216 | }
217 | else
218 | {
219 | [self autorelease];
220 | return nil;
221 | }
222 | }
223 |
224 | return self;
225 | }
226 |
227 |
228 | - (void)dealloc
229 | {
230 | CMCloseProfile(xfRef);
231 | CGColorSpaceRelease(xfColorspace);
232 | [xfName release];
233 | [xfPath release];
234 | [super dealloc];
235 | }
236 |
237 |
238 | - (CMProfileRef)ref
239 | {
240 | if (xfRef == NULL)
241 | (void) CMOpenProfile(&xfRef, &xfLocation);
242 |
243 | return xfRef;
244 | }
245 |
246 |
247 | - (CMProfileLocation *)location
248 | {
249 | return &xfLocation;
250 | }
251 |
252 |
253 | - (OSType)classType
254 | {
255 | return xfClass;
256 | }
257 |
258 |
259 | - (OSType)spaceType
260 | {
261 | return xfSpace;
262 | }
263 |
264 |
265 | - (NSString *)description
266 | {
267 | if (xfName == nil)
268 | CMCopyProfileDescriptionString([self ref], (CFStringRef *) &xfName);
269 |
270 | return xfName;
271 | }
272 |
273 |
274 | - (NSString *)path
275 | {
276 | if (xfPath == nil)
277 | {
278 | /*
279 | if (xfLocation.locType == cmFileBasedProfile)
280 | {
281 | FSRef fsref;
282 | UInt8 path[1024];
283 | if (FSpMakeFSRef(&(mLocation.u.fileLoc.spec), &fsref) == noErr &&
284 | FSRefMakePath(&fsref, path, 1024) == noErr)
285 | xfPath = [[NSString stringWithUTF8String:(const char *)path] retain];
286 | }
287 | else
288 | */
289 | if (xfLocation.locType == cmPathBasedProfile)
290 | {
291 | xfPath = [[NSString stringWithUTF8String:xfLocation.u.pathLoc.path] retain];
292 | }
293 | }
294 |
295 | return xfPath;
296 | }
297 |
298 |
299 | - (BOOL)isEqual:(id)obj
300 | {
301 | if ([obj isKindOfClass:[self class]])
302 | return [[self path] isEqualToString:[obj path]];
303 | return [super isEqual:obj];
304 | }
305 |
306 |
307 | - (CGColorSpaceRef)colorspace
308 | {
309 | if (xfColorspace == nil)
310 | xfColorspace = CGColorSpaceCreateWithPlatformColorSpace([self ref]);
311 | return xfColorspace;
312 | }
313 |
314 |
315 | - (NSData *)dataForCISoftproofTextureWithGridSize:(size_t) grid
316 | {
317 | NSData* nsdata = nil;
318 | NCMConcatProfileSet* set = nil;
319 | size_t count = (grid*grid*grid) * 4;
320 | size_t size;
321 | UInt8* data8 = nil;
322 | CMWorldRef cw = nil;
323 | CMProfileRef displayProf = nil;
324 | XFProfile* linRGB = nil;
325 |
326 | // profile for transform
327 | linRGB = [XFProfile profileWithLinearRGB];
328 | if (linRGB == nil)
329 | goto bail;
330 |
331 | // specify size of resulting data
332 | size = count * sizeof(float);
333 | nsdata = [NSMutableData dataWithLength:size];
334 | if (nsdata == nil)
335 | goto bail;
336 |
337 | // now build our color world transform
338 | size = offsetof(NCMConcatProfileSet, profileSpecs[3]);
339 | set = (NCMConcatProfileSet *) calloc(1, size);
340 | if (set==nil)
341 | goto bail;
342 |
343 | set->cmm = 0000;
344 | set->flagsMask = 0xFFFFFFFF;
345 | set->profileCount = 3;
346 | set->flags = (cmBestMode) << 16 | cmGamutCheckingMask;
347 |
348 | set->profileSpecs[0].profile = [linRGB ref];
349 | set->profileSpecs[1].profile = [self ref];
350 | set->profileSpecs[2].profile = [linRGB ref];
351 |
352 | set->profileSpecs[0].renderingIntent = kUseProfileIntent;
353 | set->profileSpecs[1].renderingIntent = kUseProfileIntent;
354 | set->profileSpecs[2].renderingIntent = kUseProfileIntent;
355 |
356 | set->profileSpecs[0].transformTag = kDeviceToPCS;
357 | set->profileSpecs[1].transformTag = kPCSToPCS;
358 | set->profileSpecs[2].transformTag = kPCSToDevice;
359 |
360 | // Define a color world for color transformations among concatenated profiles.
361 | if (NCWConcatColorWorld (&cw, set, nil, nil) != noErr)
362 | goto bail;
363 |
364 | size = count * sizeof(UInt8);
365 | data8 = malloc(size);
366 |
367 |
368 | // cmTextureRGBtoRGBX8 = RGB to 8-bit RGBx texture
369 |
370 | if (CWFillLookupTexture (cw, grid, cmTextureRGBtoRGBX8, size, data8) != noErr)
371 | goto bail;
372 |
373 | float* dataPtr = (float*) [(NSMutableData *)nsdata mutableBytes];
374 | if (dataPtr == nil)
375 | goto bail;
376 |
377 | size_t i;
378 | for (i=0; i
9 |
10 |
11 | extern NSString* XFZoomScrollViewFactor;
12 |
13 | @interface XFZoomScrollView : NSScrollView
14 | {
15 | NSPopUpButton* xfFactorPopUpButton;
16 | CGFloat _factor;
17 | }
18 |
19 | - (void)setFactor:(CGFloat)factor;
20 | - (void)zoomIn;
21 | - (void)zoomOut;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/XFZoomScrollView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XFZoomScrollView.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 16.05.11.
6 | //
7 |
8 | #import "XFZoomScrollView.h"
9 |
10 |
11 | NSString* XFZoomScrollViewFactor = @"factor";
12 |
13 | static NSString* const XFZoomScrollViewLabels[] = {@"10%", @"25%", @"50%", @"75%", @"100%", @"125%", @"150%", @"200%", @"400%", @"800%", @"1600%", @"3200%", @"6400%"};
14 | static const CGFloat XFZoomScrollViewFactors[] = {0.1f, 0.25f, 0.5f, 0.75f, 1.0f, 1.25f, 1.5f, 2.0f, 4.0f, 8.0f, 16.0f, 32.0f, 64.0f};
15 | static const NSInteger XFZoomScrollViewPopUpButtonItemCount = sizeof(XFZoomScrollViewLabels) / sizeof(NSString *);
16 |
17 |
18 | @implementation XFZoomScrollView
19 |
20 | - (void)validateFactorPopUpButton
21 | {
22 | if (!xfFactorPopUpButton) {
23 | xfFactorPopUpButton = [[NSPopUpButton alloc] initWithFrame:NSZeroRect pullsDown:NO];
24 | NSPopUpButtonCell* factorPopUpButtonCell = [xfFactorPopUpButton cell];
25 | [factorPopUpButtonCell setArrowPosition:NSPopUpArrowAtBottom];
26 | [factorPopUpButtonCell setBezelStyle:NSShadowlessSquareBezelStyle];
27 | [xfFactorPopUpButton setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
28 |
29 | int i;
30 | for (i=0; i 0) {
59 | index--;
60 | [xfFactorPopUpButton selectItemAtIndex:index];
61 | CGFloat factor = XFZoomScrollViewFactors[index];
62 | [self setFactor:factor];
63 | }
64 | }
65 |
66 |
67 | #pragma mark Bindings
68 |
69 | - (void)setFactor:(CGFloat)factor
70 | {
71 | _factor = factor;
72 | NSView* clipView = [[self documentView] superview];
73 | NSSize clipViewFrameSize = [clipView frame].size;
74 | [clipView setBoundsSize:NSMakeSize((clipViewFrameSize.width / _factor), (clipViewFrameSize.height / _factor))];
75 | }
76 |
77 |
78 | - (void)bind:(NSString *)binding toObject:(id)observableObject withKeyPath:(NSString *)observableKeyPath options:(NSDictionary *)options
79 | {
80 | if ([binding isEqualToString:XFZoomScrollViewFactor]) {
81 | [self validateFactorPopUpButton];
82 | [xfFactorPopUpButton bind:NSSelectedObjectBinding toObject:observableObject withKeyPath:observableKeyPath options:options];
83 | }
84 | [super bind:binding toObject:observableObject withKeyPath:observableKeyPath options:options];
85 | }
86 |
87 |
88 | - (void)unbind:(NSString *)binding
89 | {
90 | [super unbind:binding];
91 | if ([binding isEqualToString:XFZoomScrollViewFactor]) {
92 | [xfFactorPopUpButton unbind:NSSelectedObjectBinding];
93 | }
94 | }
95 |
96 |
97 | #pragma mark Custom Look
98 |
99 | - (void)tile
100 | {
101 | NSAssert([self hasHorizontalScroller], @"XFZoomScrollView doesn't support use without a horizontal scrollbar.");
102 |
103 | [super tile];
104 | NSScroller* horizontalScroller = [self horizontalScroller];
105 | NSRect horizontalScrollerFrame = [horizontalScroller frame];
106 |
107 | [self validateFactorPopUpButton];
108 | NSRect factorPopUpButtonFrame = [xfFactorPopUpButton frame];
109 | factorPopUpButtonFrame.origin.x = horizontalScrollerFrame.origin.x;
110 | factorPopUpButtonFrame.origin.y = horizontalScrollerFrame.origin.y;
111 | factorPopUpButtonFrame.size.height = horizontalScrollerFrame.size.height;
112 | [xfFactorPopUpButton setFrame:factorPopUpButtonFrame];
113 |
114 | horizontalScrollerFrame.origin.x += factorPopUpButtonFrame.size.width;
115 | horizontalScrollerFrame.size.width -= factorPopUpButtonFrame.size.width;
116 | [horizontalScroller setFrame:horizontalScrollerFrame];
117 | }
118 |
119 | @end
120 |
--------------------------------------------------------------------------------
/icons/4bc.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/4bc.icns
--------------------------------------------------------------------------------
/icons/bascii.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/bascii.icns
--------------------------------------------------------------------------------
/icons/blinx.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/blinx.icns
--------------------------------------------------------------------------------
/icons/cci.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/cci.icns
--------------------------------------------------------------------------------
/icons/extrafile.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/extrafile.icns
--------------------------------------------------------------------------------
/icons/mcf.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/mcf.icns
--------------------------------------------------------------------------------
/icons/uspec.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/uspec.icns
--------------------------------------------------------------------------------
/icons/xff.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kimasendorf/ExtraFile/73b9b22c117968dd8000eaf84d6e2106ddf2a780/icons/xff.icns
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | Artistic License 2.0
2 | Copyright (c) 2000-2006, The Perl Foundation.
3 |
4 | Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
5 |
6 | Preamble
7 | This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software.
8 | You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement.
9 |
10 | Definitions
11 | "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package.
12 | "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures.
13 | "You" and "your" means any person who would like to copy, distribute, or modify the Package.
14 | "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version.
15 | "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization.
16 | "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees.
17 | "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder.
18 | "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder.
19 | "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future.
20 | "Source" form means the source code, documentation source, and configuration files for the Package.
21 | "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form.
22 |
23 | Permission for Use and Modification Without Distribution
24 | (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version.
25 |
26 | Permissions for Redistribution of the Standard Version
27 | (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package.
28 | (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License.
29 |
30 | Distribution of Modified Versions of the Package as Source
31 | (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following:
32 | (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version.
(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version.
(c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under
(i) the Original License or
(ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed.
Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source
33 | (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license.
34 | (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version.
35 |
36 | Aggregating or Linking the Package
37 | (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation.
38 | (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package.
39 |
40 | Items That are Not Considered Part of a Modified Version
41 | (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license.
42 |
43 | General Provisions
44 | (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.
45 | (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.
46 | (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.
47 | (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.
48 | (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 |
50 | http://www.perlfoundation.org/artistic_license_2_0
--------------------------------------------------------------------------------
/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // ExtraFile
4 | //
5 | // Created by Kim Asendorf on 06.05.11.
6 | //
7 |
8 | #import
9 |
10 | int main(int argc, char *argv[])
11 | {
12 | return NSApplicationMain(argc, (const char **) argv);
13 | }
14 |
--------------------------------------------------------------------------------