[macruby-changes] [4397] MacRuby/trunk/sample-macruby

source_changes at macosforge.org source_changes at macosforge.org
Mon Aug 2 14:04:50 PDT 2010


Revision: 4397
          http://trac.macosforge.org/projects/ruby/changeset/4397
Author:   lsansonetti at apple.com
Date:     2010-08-02 14:04:50 -0700 (Mon, 02 Aug 2010)
Log Message:
-----------
adding a macruby version of Sketch, contributed by Dave Baldwin

Modified Paths:
--------------
    MacRuby/trunk/sample-macruby/About MacRuby Examples.rtf

Added Paths:
-----------
    MacRuby/trunk/sample-macruby/Sketch/
    MacRuby/trunk/sample-macruby/Sketch/Arrow.tiff
    MacRuby/trunk/sample-macruby/Sketch/Circle.tiff
    MacRuby/trunk/sample-macruby/Sketch/Cross.tiff
    MacRuby/trunk/sample-macruby/Sketch/Draw2App.icns
    MacRuby/trunk/sample-macruby/Sketch/Draw2File.icns
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/SKTError.strings
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/Sketch.scriptTerminology
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/designable.nib
    MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/keyedobjects.nib
    MacRuby/trunk/sample-macruby/Sketch/Info.plist
    MacRuby/trunk/sample-macruby/Sketch/InfoPlist.strings
    MacRuby/trunk/sample-macruby/Sketch/Line.tiff
    MacRuby/trunk/sample-macruby/Sketch/README
    MacRuby/trunk/sample-macruby/Sketch/ReadMe.rtf
    MacRuby/trunk/sample-macruby/Sketch/Rectangle.tiff
    MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/
    MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/project.pbxproj
    MacRuby/trunk/sample-macruby/Sketch/SKTAppDelegate.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTCircle.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTDocument.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTError.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTGraphic.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTGraphicView.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTGrid.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTImage.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTLine.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTObserver.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTRectangle.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTRenderingView.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTText.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTToolPaletteController.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTWindowController.rb
    MacRuby/trunk/sample-macruby/Sketch/SKTZoomingScrollView.rb
    MacRuby/trunk/sample-macruby/Sketch/Sketch.scriptSuite
    MacRuby/trunk/sample-macruby/Sketch/Sketch.sdef
    MacRuby/trunk/sample-macruby/Sketch/TextGraphic.tiff
    MacRuby/trunk/sample-macruby/Sketch/main.m
    MacRuby/trunk/sample-macruby/Sketch/rb_main.rb

Modified: MacRuby/trunk/sample-macruby/About MacRuby Examples.rtf
===================================================================
--- MacRuby/trunk/sample-macruby/About MacRuby Examples.rtf	2010-07-31 00:29:32 UTC (rev 4396)
+++ MacRuby/trunk/sample-macruby/About MacRuby Examples.rtf	2010-08-02 21:04:50 UTC (rev 4397)
@@ -1,6 +1,6 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1078\cocoasubrtf200
+{\rtf1\ansi\ansicpg1252\cocoartf1084\cocoasubrtf100
 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;\f2\froman\fcharset0 Times-Roman;
-\f3\fnil\fcharset0 Monaco;}
+}
 {\colortbl;\red255\green255\blue255;}
 \vieww18720\viewh15120\viewkind0
 \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\li1120\fi-400\ri140\ql\qnatural
@@ -59,19 +59,17 @@
 \
 
 \b PhileasFrog
-\b0 	2D video game (CALayer, 
-\f3 \CocoaLigature0 CATransaction, CABasicAnimation,
-\f1 \CocoaLigature1 \
-		Cocoa wrapper, key controls, NSSound,\
-		NSTimer, 
-\f3 \CocoaLigature0 CIFilter)
-\f1 \CocoaLigature1 \
+\b0 	2D video game (CALayer, \CocoaLigature0 CATransaction, CABasicAnimation,\CocoaLigature1  Cocoa wrapper, key controls, NSSound, NSTimer, \CocoaLigature0 CIFilter)\CocoaLigature1 \
 \
 
 \b RoundTransparentWindow	
 \b0 Custom-shaped NSWindow with transparent window content.\
 \
 
+\b Sketch
+\b0 	NSDocument architecture, NSUndoManager, NSBezierPath.\
+\
+
 \b Skreenics	
 \b0 QTKit, NSOperation, NSUserDefaults,\
 		NSValueTransformer, Drag and drop,\

Added: MacRuby/trunk/sample-macruby/Sketch/Arrow.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Arrow.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Circle.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Circle.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Cross.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Cross.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Draw2App.icns
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Draw2App.icns
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Draw2File.icns
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Draw2File.icns
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,3593 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs"/>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048454076">
+			<object class="NSCustomObject" id="967900775">
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSApplication</characters>
+				</object>
+			</object>
+			<object class="NSCustomObject" id="501776261">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="183027920">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSMenu" id="986630581">
+				<string key="NSTitle">Draw2</string>
+				<array class="NSMutableArray" key="NSMenuItems">
+					<object class="NSMenuItem" id="251709406">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">Sketch</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<object class="NSCustomResource" key="NSOnImage" id="397920607">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuCheckmark</string>
+						</object>
+						<object class="NSCustomResource" key="NSMixedImage" id="81776796">
+							<string key="NSClassName">NSImage</string>
+							<string key="NSResourceName">NSMenuMixedState</string>
+						</object>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="327998057">
+							<string key="NSTitle">Sketch</string>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="627560474">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">About Sketch</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="139826239">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Preferences...</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="313120163">
+									<reference key="NSMenu" ref="327998057"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="857432455">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Services</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="320556452">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Services</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems"/>
+										<string key="NSName">_NSServicesMenu</string>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="180153081">
+									<reference key="NSMenu" ref="327998057"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="546688121">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Hide Sketch</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="199395213">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Hide Others</string>
+									<string key="NSKeyEquiv">h</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="183165023">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Show All</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="605724048">
+									<reference key="NSMenu" ref="327998057"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="584825983">
+									<reference key="NSMenu" ref="327998057"/>
+									<string key="NSTitle">Quit Sketch</string>
+									<string key="NSKeyEquiv">q</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+							<string key="NSName">_NSAppleMenu</string>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="532490658">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">File</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="397920607"/>
+						<reference key="NSMixedImage" ref="81776796"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="577039127">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">File</characters>
+							</object>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="420506749">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">New</string>
+									<string key="NSKeyEquiv">n</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="911180420">
+									<reference key="NSMenu" ref="577039127"/>
+									<bool key="NSIsAlternate">YES</bool>
+									<string key="NSTitle">New Window</string>
+									<string key="NSKeyEquiv">n</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="127329532">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Open...</string>
+									<string key="NSKeyEquiv">o</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="328259263">
+									<reference key="NSMenu" ref="577039127"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="809916052">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Close</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="446135543">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Save</string>
+									<string key="NSKeyEquiv">s</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="804973215">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Save As...</string>
+									<string key="NSKeyEquiv">S</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="137795787">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Save a Copy As...</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="774132600">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Save All</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="129151998">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Revert to Saved</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="833360775">
+									<reference key="NSMenu" ref="577039127"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="84720685">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Page Setup...</string>
+									<string key="NSKeyEquiv">P</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="684052464">
+									<reference key="NSMenu" ref="577039127"/>
+									<string key="NSTitle">Print...</string>
+									<string key="NSKeyEquiv">p</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="941157552">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">Edit</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="397920607"/>
+						<reference key="NSMixedImage" ref="81776796"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="1071921357">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Edit</characters>
+							</object>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="219571583">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Undo</string>
+									<string key="NSKeyEquiv">z</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="277427904">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Redo</string>
+									<string key="NSKeyEquiv">Z</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="254393846">
+									<reference key="NSMenu" ref="1071921357"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="224909029">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Cut</string>
+									<string key="NSKeyEquiv">x</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="271431277">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Copy</string>
+									<string key="NSKeyEquiv">c</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="1069368830">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Paste</string>
+									<string key="NSKeyEquiv">v</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="889237046">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Paste As</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="200936165">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Paste As</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems">
+											<object class="NSMenuItem" id="195895099">
+												<reference key="NSMenu" ref="200936165"/>
+												<string key="NSTitle">ASCII</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="315985123">
+												<reference key="NSMenu" ref="200936165"/>
+												<string key="NSTitle">Rich Text</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+										</array>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="1071147480">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Clear</string>
+									<string key="NSKeyEquiv"></string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="625411273">
+									<reference key="NSMenu" ref="1071921357"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="1048110029">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Select All</string>
+									<string key="NSKeyEquiv">a</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="785525614">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Deselect All</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="116590910">
+									<reference key="NSMenu" ref="1071921357"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="747548413">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Spelling...</string>
+									<string key="NSKeyEquiv">:</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="243315307">
+									<reference key="NSMenu" ref="1071921357"/>
+									<string key="NSTitle">Check Spelling</string>
+									<string key="NSKeyEquiv">;</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="699459215">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">Format</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="397920607"/>
+						<reference key="NSMixedImage" ref="81776796"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="690475869">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Format</characters>
+							</object>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="1001857120">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Bring to Front</string>
+									<string key="NSKeyEquiv">F</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="520469181">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Send to Back</string>
+									<string key="NSKeyEquiv">B</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="742582220">
+									<reference key="NSMenu" ref="690475869"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="307141264">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Font</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="648546264">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Font</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems">
+											<object class="NSMenuItem" id="557780405">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Show Fonts</string>
+												<string key="NSKeyEquiv">t</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="76550856">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Bold</string>
+												<string key="NSKeyEquiv">b</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+												<int key="NSTag">2</int>
+											</object>
+											<object class="NSMenuItem" id="758130632">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Italic</string>
+												<string key="NSKeyEquiv">i</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+												<int key="NSTag">1</int>
+											</object>
+											<object class="NSMenuItem" id="863971682">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Underline</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="231260559">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Kern</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+												<string key="NSAction">submenuAction:</string>
+												<object class="NSMenu" key="NSSubmenu" id="585606353">
+													<object class="NSMutableString" key="NSTitle">
+														<characters key="NS.bytes">Kern</characters>
+													</object>
+													<array class="NSMutableArray" key="NSMenuItems">
+														<object class="NSMenuItem" id="884468253">
+															<reference key="NSMenu" ref="585606353"/>
+															<string key="NSTitle">Use Default</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="886157999">
+															<reference key="NSMenu" ref="585606353"/>
+															<string key="NSTitle">Use None</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="991446895">
+															<reference key="NSMenu" ref="585606353"/>
+															<string key="NSTitle">Tighten</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="586546776">
+															<reference key="NSMenu" ref="585606353"/>
+															<string key="NSTitle">Loosen</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+													</array>
+												</object>
+											</object>
+											<object class="NSMenuItem" id="738310319">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Ligature</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+												<string key="NSAction">submenuAction:</string>
+												<object class="NSMenu" key="NSSubmenu" id="805751915">
+													<object class="NSMutableString" key="NSTitle">
+														<characters key="NS.bytes">Ligature</characters>
+													</object>
+													<array class="NSMutableArray" key="NSMenuItems">
+														<object class="NSMenuItem" id="137274656">
+															<reference key="NSMenu" ref="805751915"/>
+															<string key="NSTitle">Use Default</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="240263631">
+															<reference key="NSMenu" ref="805751915"/>
+															<string key="NSTitle">Use None</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="384295677">
+															<reference key="NSMenu" ref="805751915"/>
+															<string key="NSTitle">Use All</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+													</array>
+												</object>
+											</object>
+											<object class="NSMenuItem" id="687404770">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Baseline</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+												<string key="NSAction">submenuAction:</string>
+												<object class="NSMenu" key="NSSubmenu" id="439326293">
+													<object class="NSMutableString" key="NSTitle">
+														<characters key="NS.bytes">Baseline</characters>
+													</object>
+													<array class="NSMutableArray" key="NSMenuItems">
+														<object class="NSMenuItem" id="381719898">
+															<reference key="NSMenu" ref="439326293"/>
+															<string key="NSTitle">Use Default</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="862075470">
+															<reference key="NSMenu" ref="439326293"/>
+															<string key="NSTitle">Superscript</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="281653127">
+															<reference key="NSMenu" ref="439326293"/>
+															<string key="NSTitle">Subscript</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="410802127">
+															<reference key="NSMenu" ref="439326293"/>
+															<string key="NSTitle">Raise</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+														<object class="NSMenuItem" id="881802755">
+															<reference key="NSMenu" ref="439326293"/>
+															<string key="NSTitle">Lower</string>
+															<string key="NSKeyEquiv"/>
+															<int key="NSKeyEquivModMask">1048576</int>
+															<int key="NSMnemonicLoc">2147483647</int>
+															<reference key="NSOnImage" ref="397920607"/>
+															<reference key="NSMixedImage" ref="81776796"/>
+														</object>
+													</array>
+												</object>
+											</object>
+											<object class="NSMenuItem" id="494776894">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Copy Font</string>
+												<string key="NSKeyEquiv">3</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="490146686">
+												<reference key="NSMenu" ref="648546264"/>
+												<string key="NSTitle">Paste Font</string>
+												<string key="NSKeyEquiv">4</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+										</array>
+										<string key="NSName">_NSFontMenu</string>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="162484338">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Text</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="461954287">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Text</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems">
+											<object class="NSMenuItem" id="765997004">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Align Left</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="394322566">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Center</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="500083856">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Justify</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="1006110104">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Align Right</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="772513724">
+												<reference key="NSMenu" ref="461954287"/>
+												<bool key="NSIsDisabled">YES</bool>
+												<bool key="NSIsSeparator">YES</bool>
+												<string key="NSTitle"/>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="699908867">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Copy Ruler</string>
+												<string key="NSKeyEquiv">1</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="141459265">
+												<reference key="NSMenu" ref="461954287"/>
+												<string key="NSTitle">Paste Ruler</string>
+												<string key="NSKeyEquiv">2</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+										</array>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="900808108">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Grid</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="66089137">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Grid</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems">
+											<object class="NSMenuItem" id="1067582930">
+												<reference key="NSMenu" ref="66089137"/>
+												<string key="NSTitle">Show Grid Options</string>
+												<string key="NSKeyEquiv">d</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="797803470">
+												<reference key="NSMenu" ref="66089137"/>
+												<bool key="NSIsDisabled">YES</bool>
+												<bool key="NSIsSeparator">YES</bool>
+												<string key="NSTitle"/>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="392800060">
+												<reference key="NSMenu" ref="66089137"/>
+												<string key="NSTitle">Snap to Grid</string>
+												<string key="NSKeyEquiv">e</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="994809747">
+												<reference key="NSMenu" ref="66089137"/>
+												<string key="NSTitle">Show Grid</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="555283399">
+												<reference key="NSMenu" ref="66089137"/>
+												<bool key="NSIsDisabled">YES</bool>
+												<bool key="NSIsSeparator">YES</bool>
+												<string key="NSTitle"/>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="825678580">
+												<reference key="NSMenu" ref="66089137"/>
+												<string key="NSTitle">Grid Selected Graphics</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+										</array>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="960366873">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Align and Size</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+									<string key="NSAction">submenuAction:</string>
+									<object class="NSMenu" key="NSSubmenu" id="358625591">
+										<object class="NSMutableString" key="NSTitle">
+											<characters key="NS.bytes">Align and Size</characters>
+										</object>
+										<array class="NSMutableArray" key="NSMenuItems">
+											<object class="NSMenuItem" id="605186868">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Left Edges</string>
+												<string key="NSKeyEquiv">[</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="385431770">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Right Edges</string>
+												<string key="NSKeyEquiv">]</string>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="444396451">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Top Edges</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="278991459">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Bottom Edges</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="628744079">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Horizontal Centers</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="440023456">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Vertical Centers</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="228207188">
+												<reference key="NSMenu" ref="358625591"/>
+												<bool key="NSIsDisabled">YES</bool>
+												<bool key="NSIsSeparator">YES</bool>
+												<string key="NSTitle"/>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="550421736">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Make Same Width</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="853652108">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Make Same Height</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+											<object class="NSMenuItem" id="446992794">
+												<reference key="NSMenu" ref="358625591"/>
+												<string key="NSTitle">Make Natural Size</string>
+												<string key="NSKeyEquiv"/>
+												<int key="NSKeyEquivModMask">1048576</int>
+												<int key="NSMnemonicLoc">2147483647</int>
+												<reference key="NSOnImage" ref="397920607"/>
+												<reference key="NSMixedImage" ref="81776796"/>
+											</object>
+										</array>
+									</object>
+								</object>
+								<object class="NSMenuItem" id="362391947">
+									<reference key="NSMenu" ref="690475869"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="808575296">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Group</string>
+									<string key="NSKeyEquiv">g</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="494518975">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Ungroup</string>
+									<string key="NSKeyEquiv">G</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="356231054">
+									<reference key="NSMenu" ref="690475869"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="1040633348">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Lock</string>
+									<string key="NSKeyEquiv">l</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="796874468">
+									<reference key="NSMenu" ref="690475869"/>
+									<string key="NSTitle">Unlock</string>
+									<string key="NSKeyEquiv">L</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="1022636345">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">Tools</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="397920607"/>
+						<reference key="NSMixedImage" ref="81776796"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="289732896">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Tools</characters>
+							</object>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="302358491">
+									<reference key="NSMenu" ref="289732896"/>
+									<string key="NSTitle">Show Inspector</string>
+									<string key="NSKeyEquiv">i</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="993477348">
+									<reference key="NSMenu" ref="289732896"/>
+									<string key="NSTitle">Show Tools</string>
+									<string key="NSKeyEquiv">t</string>
+									<int key="NSKeyEquivModMask">1572864</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="584008620">
+									<reference key="NSMenu" ref="289732896"/>
+									<string key="NSTitle">Show Ruler</string>
+									<string key="NSKeyEquiv">r</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="775874797">
+									<reference key="NSMenu" ref="289732896"/>
+									<string key="NSTitle">Show Colors</string>
+									<string key="NSKeyEquiv">C</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="879997107">
+									<reference key="NSMenu" ref="289732896"/>
+									<string key="NSTitle">Selection Tool</string>
+									<string key="NSKeyEquiv">A</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+						</object>
+					</object>
+					<object class="NSMenuItem" id="459198582">
+						<reference key="NSMenu" ref="986630581"/>
+						<string key="NSTitle">Windows</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSKeyEquivModMask">1048576</int>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="397920607"/>
+						<reference key="NSMixedImage" ref="81776796"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="19529609">
+							<object class="NSMutableString" key="NSTitle">
+								<characters key="NS.bytes">Windows</characters>
+							</object>
+							<array class="NSMutableArray" key="NSMenuItems">
+								<object class="NSMenuItem" id="699281774">
+									<reference key="NSMenu" ref="19529609"/>
+									<string key="NSTitle">Close Window</string>
+									<string key="NSKeyEquiv">w</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="1015245075">
+									<reference key="NSMenu" ref="19529609"/>
+									<string key="NSTitle">Zoom Window</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="910158541">
+									<reference key="NSMenu" ref="19529609"/>
+									<string key="NSTitle">Minimize Window</string>
+									<string key="NSKeyEquiv">m</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="7437289">
+									<reference key="NSMenu" ref="19529609"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+								<object class="NSMenuItem" id="518877499">
+									<reference key="NSMenu" ref="19529609"/>
+									<string key="NSTitle">Arrange in Front</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="397920607"/>
+									<reference key="NSMixedImage" ref="81776796"/>
+								</object>
+							</array>
+							<string key="NSName">_NSWindowsMenu</string>
+						</object>
+					</object>
+				</array>
+				<string key="NSName">_NSMainMenu</string>
+			</object>
+			<object class="NSCustomObject" id="411063565">
+				<string key="NSClassName">SKTAppDelegate</string>
+			</object>
+			<object class="NSCustomObject" id="538130659">
+				<object class="NSMutableString" key="NSClassName">
+					<characters key="NS.bytes">NSFontManager</characters>
+				</object>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performMiniaturize:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="910158541"/>
+					</object>
+					<int key="connectionID">37</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performClose:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="699281774"/>
+					</object>
+					<int key="connectionID">38</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">arrangeInFront:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="518877499"/>
+					</object>
+					<int key="connectionID">39</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">runPageLayout:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="84720685"/>
+					</object>
+					<int key="connectionID">88</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">selectAll:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1048110029"/>
+					</object>
+					<int key="connectionID">111</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">delete:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1071147480"/>
+					</object>
+					<int key="connectionID">112</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showGuessPanel:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="747548413"/>
+					</object>
+					<int key="connectionID">113</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">checkSpelling:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="243315307"/>
+					</object>
+					<int key="connectionID">114</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">paste:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1069368830"/>
+					</object>
+					<int key="connectionID">115</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copy:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="271431277"/>
+					</object>
+					<int key="connectionID">116</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">cut:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="224909029"/>
+					</object>
+					<int key="connectionID">117</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">saveDocument:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="446135543"/>
+					</object>
+					<int key="connectionID">127</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">saveDocumentAs:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="804973215"/>
+					</object>
+					<int key="connectionID">128</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">saveDocumentTo:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="137795787"/>
+					</object>
+					<int key="connectionID">129</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">saveAllDocuments:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="774132600"/>
+					</object>
+					<int key="connectionID">130</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">revertDocumentToSaved:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="129151998"/>
+					</object>
+					<int key="connectionID">131</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">undo:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="219571583"/>
+					</object>
+					<int key="connectionID">132</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">redo:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="277427904"/>
+					</object>
+					<int key="connectionID">133</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openDocument:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="127329532"/>
+					</object>
+					<int key="connectionID">134</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newDocument:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="420506749"/>
+					</object>
+					<int key="connectionID">135</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">orderFrontColorPanel:</string>
+						<reference key="source" ref="967900775"/>
+						<reference key="destination" ref="775874797"/>
+					</object>
+					<int key="connectionID">162</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignRight:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1006110104"/>
+					</object>
+					<int key="connectionID">190</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copyRuler:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="699908867"/>
+					</object>
+					<int key="connectionID">191</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">pasteRuler:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="141459265"/>
+					</object>
+					<int key="connectionID">192</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignCenter:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="394322566"/>
+					</object>
+					<int key="connectionID">194</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignLeft:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="765997004"/>
+					</object>
+					<int key="connectionID">195</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignJustified:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="500083856"/>
+					</object>
+					<int key="connectionID">196</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">printDocument:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="684052464"/>
+					</object>
+					<int key="connectionID">200</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">deselectAll:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="785525614"/>
+					</object>
+					<int key="connectionID">201</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">bringToFront:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1001857120"/>
+					</object>
+					<int key="connectionID">202</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">sendToBack:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="520469181"/>
+					</object>
+					<int key="connectionID">203</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="967900775"/>
+						<reference key="destination" ref="411063565"/>
+					</object>
+					<int key="connectionID">205</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">makeNaturalSize:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="446992794"/>
+					</object>
+					<int key="connectionID">217</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignLeftEdges:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="605186868"/>
+					</object>
+					<int key="connectionID">220</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignRightEdges:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="385431770"/>
+					</object>
+					<int key="connectionID">221</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignTopEdges:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="444396451"/>
+					</object>
+					<int key="connectionID">222</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignBottomEdges:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="278991459"/>
+					</object>
+					<int key="connectionID">223</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignHorizontalCenters:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="628744079"/>
+					</object>
+					<int key="connectionID">224</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignVerticalCenters:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="440023456"/>
+					</object>
+					<int key="connectionID">225</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">makeSameWidth:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="550421736"/>
+					</object>
+					<int key="connectionID">227</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">makeSameHeight:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="853652108"/>
+					</object>
+					<int key="connectionID">228</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">turnOffKerning:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="886157999"/>
+					</object>
+					<int key="connectionID">262</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">subscript:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="281653127"/>
+					</object>
+					<int key="connectionID">263</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">tightenKerning:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="991446895"/>
+					</object>
+					<int key="connectionID">264</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">loosenKerning:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="586546776"/>
+					</object>
+					<int key="connectionID">265</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">raiseBaseline:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="410802127"/>
+					</object>
+					<int key="connectionID">266</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">useStandardLigatures:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="137274656"/>
+					</object>
+					<int key="connectionID">267</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">underline:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="863971682"/>
+					</object>
+					<int key="connectionID">268</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">orderFrontFontPanel:</string>
+						<reference key="source" ref="538130659"/>
+						<reference key="destination" ref="557780405"/>
+					</object>
+					<int key="connectionID">269</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">addFontTrait:</string>
+						<reference key="source" ref="538130659"/>
+						<reference key="destination" ref="758130632"/>
+					</object>
+					<int key="connectionID">271</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">turnOffLigatures:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="240263631"/>
+					</object>
+					<int key="connectionID">272</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">pasteFont:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="490146686"/>
+					</object>
+					<int key="connectionID">273</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">useAllLigatures:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="384295677"/>
+					</object>
+					<int key="connectionID">274</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">unscript:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="381719898"/>
+					</object>
+					<int key="connectionID">275</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">useStandardKerning:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="884468253"/>
+					</object>
+					<int key="connectionID">277</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">addFontTrait:</string>
+						<reference key="source" ref="538130659"/>
+						<reference key="destination" ref="76550856"/>
+					</object>
+					<int key="connectionID">278</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">lowerBaseline:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="881802755"/>
+					</object>
+					<int key="connectionID">279</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">copyFont:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="494776894"/>
+					</object>
+					<int key="connectionID">280</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">superscript:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="862075470"/>
+					</object>
+					<int key="connectionID">281</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performClose:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="809916052"/>
+					</object>
+					<int key="connectionID">288</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">performZoom:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="1015245075"/>
+					</object>
+					<int key="connectionID">289</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hideOtherApplications:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="199395213"/>
+					</object>
+					<int key="connectionID">324</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">unhideAllApplications:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="183165023"/>
+					</object>
+					<int key="connectionID">325</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">hide:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="546688121"/>
+					</object>
+					<int key="connectionID">326</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">terminate:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="584825983"/>
+					</object>
+					<int key="connectionID">327</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">orderFrontStandardAboutPanel:</string>
+						<reference key="source" ref="967900775"/>
+						<reference key="destination" ref="627560474"/>
+					</object>
+					<int key="connectionID">328</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">alignWithGrid:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="825678580"/>
+					</object>
+					<int key="connectionID">335</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showPreferencesPanel:</string>
+						<reference key="source" ref="411063565"/>
+						<reference key="destination" ref="139826239"/>
+					</object>
+					<int key="connectionID">349</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showOrHideGridInspector:</string>
+						<reference key="source" ref="411063565"/>
+						<reference key="destination" ref="1067582930"/>
+					</object>
+					<int key="connectionID">350</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showOrHideGraphicsInspector:</string>
+						<reference key="source" ref="411063565"/>
+						<reference key="destination" ref="302358491"/>
+					</object>
+					<int key="connectionID">351</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showOrHideToolPalette:</string>
+						<reference key="source" ref="411063565"/>
+						<reference key="destination" ref="993477348"/>
+					</object>
+					<int key="connectionID">352</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">chooseSelectionTool:</string>
+						<reference key="source" ref="411063565"/>
+						<reference key="destination" ref="879997107"/>
+					</object>
+					<int key="connectionID">353</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">showOrHideRulers:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="584008620"/>
+					</object>
+					<int key="connectionID">358</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">newDocumentWindow:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="911180420"/>
+					</object>
+					<int key="connectionID">359</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">toggleGridConstraining:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="392800060"/>
+					</object>
+					<int key="connectionID">360</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">toggleGridShowing:</string>
+						<reference key="source" ref="501776261"/>
+						<reference key="destination" ref="994809747"/>
+					</object>
+					<int key="connectionID">361</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1048454076"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="967900775"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="501776261"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="183027920"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="986630581"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="459198582"/>
+							<reference ref="532490658"/>
+							<reference ref="941157552"/>
+							<reference ref="699459215"/>
+							<reference ref="1022636345"/>
+							<reference ref="251709406"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">MainMenu</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">19</int>
+						<reference key="object" ref="459198582"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="19529609"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">24</int>
+						<reference key="object" ref="19529609"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="518877499"/>
+							<reference ref="699281774"/>
+							<reference ref="910158541"/>
+							<reference ref="7437289"/>
+							<reference ref="1015245075"/>
+						</array>
+						<reference key="parent" ref="459198582"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="518877499"/>
+						<reference key="parent" ref="19529609"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">20</int>
+						<reference key="object" ref="699281774"/>
+						<reference key="parent" ref="19529609"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">23</int>
+						<reference key="object" ref="910158541"/>
+						<reference key="parent" ref="19529609"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">286</int>
+						<reference key="object" ref="7437289"/>
+						<reference key="parent" ref="19529609"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">287</int>
+						<reference key="object" ref="1015245075"/>
+						<reference key="parent" ref="19529609"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">80</int>
+						<reference key="object" ref="532490658"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="577039127"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">72</int>
+						<reference key="object" ref="577039127"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="684052464"/>
+							<reference ref="804973215"/>
+							<reference ref="84720685"/>
+							<reference ref="833360775"/>
+							<reference ref="137795787"/>
+							<reference ref="127329532"/>
+							<reference ref="420506749"/>
+							<reference ref="774132600"/>
+							<reference ref="446135543"/>
+							<reference ref="129151998"/>
+							<reference ref="328259263"/>
+							<reference ref="809916052"/>
+							<reference ref="911180420"/>
+						</array>
+						<reference key="parent" ref="532490658"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">73</int>
+						<reference key="object" ref="684052464"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">74</int>
+						<reference key="object" ref="804973215"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">75</int>
+						<reference key="object" ref="84720685"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">77</int>
+						<reference key="object" ref="833360775"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">78</int>
+						<reference key="object" ref="137795787"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">79</int>
+						<reference key="object" ref="127329532"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">82</int>
+						<reference key="object" ref="420506749"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">83</int>
+						<reference key="object" ref="774132600"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">84</int>
+						<reference key="object" ref="446135543"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">86</int>
+						<reference key="object" ref="129151998"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">218</int>
+						<reference key="object" ref="328259263"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">282</int>
+						<reference key="object" ref="809916052"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">345</int>
+						<reference key="object" ref="911180420"/>
+						<reference key="parent" ref="577039127"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">99</int>
+						<reference key="object" ref="941157552"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1071921357"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">103</int>
+						<reference key="object" ref="1071921357"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="224909029"/>
+							<reference ref="889237046"/>
+							<reference ref="243315307"/>
+							<reference ref="747548413"/>
+							<reference ref="1071147480"/>
+							<reference ref="1048110029"/>
+							<reference ref="1069368830"/>
+							<reference ref="219571583"/>
+							<reference ref="271431277"/>
+							<reference ref="277427904"/>
+							<reference ref="254393846"/>
+							<reference ref="116590910"/>
+							<reference ref="625411273"/>
+							<reference ref="785525614"/>
+						</array>
+						<reference key="parent" ref="941157552"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">91</int>
+						<reference key="object" ref="224909029"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">92</int>
+						<reference key="object" ref="889237046"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="200936165"/>
+						</array>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">100</int>
+						<reference key="object" ref="200936165"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="195895099"/>
+							<reference ref="315985123"/>
+						</array>
+						<reference key="parent" ref="889237046"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">94</int>
+						<reference key="object" ref="195895099"/>
+						<reference key="parent" ref="200936165"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">96</int>
+						<reference key="object" ref="315985123"/>
+						<reference key="parent" ref="200936165"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">93</int>
+						<reference key="object" ref="243315307"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">95</int>
+						<reference key="object" ref="747548413"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">105</int>
+						<reference key="object" ref="1071147480"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">106</int>
+						<reference key="object" ref="1048110029"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">107</int>
+						<reference key="object" ref="1069368830"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">108</int>
+						<reference key="object" ref="219571583"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">110</int>
+						<reference key="object" ref="271431277"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">118</int>
+						<reference key="object" ref="277427904"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">119</int>
+						<reference key="object" ref="254393846"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">120</int>
+						<reference key="object" ref="116590910"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">121</int>
+						<reference key="object" ref="625411273"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">179</int>
+						<reference key="object" ref="785525614"/>
+						<reference key="parent" ref="1071921357"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">138</int>
+						<reference key="object" ref="699459215"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="690475869"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">139</int>
+						<reference key="object" ref="690475869"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1001857120"/>
+							<reference ref="520469181"/>
+							<reference ref="808575296"/>
+							<reference ref="742582220"/>
+							<reference ref="900808108"/>
+							<reference ref="362391947"/>
+							<reference ref="494518975"/>
+							<reference ref="1040633348"/>
+							<reference ref="356231054"/>
+							<reference ref="796874468"/>
+							<reference ref="960366873"/>
+							<reference ref="162484338"/>
+							<reference ref="307141264"/>
+						</array>
+						<reference key="parent" ref="699459215"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">140</int>
+						<reference key="object" ref="1001857120"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">147</int>
+						<reference key="object" ref="520469181"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">148</int>
+						<reference key="object" ref="808575296"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">149</int>
+						<reference key="object" ref="742582220"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">150</int>
+						<reference key="object" ref="900808108"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="66089137"/>
+						</array>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">151</int>
+						<reference key="object" ref="66089137"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1067582930"/>
+							<reference ref="392800060"/>
+							<reference ref="797803470"/>
+							<reference ref="994809747"/>
+							<reference ref="555283399"/>
+							<reference ref="825678580"/>
+						</array>
+						<reference key="parent" ref="900808108"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">152</int>
+						<reference key="object" ref="1067582930"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">164</int>
+						<reference key="object" ref="392800060"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">165</int>
+						<reference key="object" ref="797803470"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">166</int>
+						<reference key="object" ref="994809747"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">167</int>
+						<reference key="object" ref="555283399"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">168</int>
+						<reference key="object" ref="825678580"/>
+						<reference key="parent" ref="66089137"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">153</int>
+						<reference key="object" ref="362391947"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">154</int>
+						<reference key="object" ref="494518975"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">155</int>
+						<reference key="object" ref="1040633348"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">156</int>
+						<reference key="object" ref="356231054"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">157</int>
+						<reference key="object" ref="796874468"/>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">169</int>
+						<reference key="object" ref="960366873"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="358625591"/>
+						</array>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">170</int>
+						<reference key="object" ref="358625591"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="605186868"/>
+							<reference ref="385431770"/>
+							<reference ref="444396451"/>
+							<reference ref="278991459"/>
+							<reference ref="628744079"/>
+							<reference ref="440023456"/>
+							<reference ref="550421736"/>
+							<reference ref="853652108"/>
+							<reference ref="446992794"/>
+							<reference ref="228207188"/>
+						</array>
+						<reference key="parent" ref="960366873"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">171</int>
+						<reference key="object" ref="605186868"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">172</int>
+						<reference key="object" ref="385431770"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">173</int>
+						<reference key="object" ref="444396451"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">174</int>
+						<reference key="object" ref="278991459"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">175</int>
+						<reference key="object" ref="628744079"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">176</int>
+						<reference key="object" ref="440023456"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">213</int>
+						<reference key="object" ref="550421736"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">214</int>
+						<reference key="object" ref="853652108"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">215</int>
+						<reference key="object" ref="446992794"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">216</int>
+						<reference key="object" ref="228207188"/>
+						<reference key="parent" ref="358625591"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">187</int>
+						<reference key="object" ref="162484338"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="461954287"/>
+						</array>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">188</int>
+						<reference key="object" ref="461954287"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="394322566"/>
+							<reference ref="1006110104"/>
+							<reference ref="765997004"/>
+							<reference ref="699908867"/>
+							<reference ref="500083856"/>
+							<reference ref="141459265"/>
+							<reference ref="772513724"/>
+						</array>
+						<reference key="parent" ref="162484338"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">181</int>
+						<reference key="object" ref="394322566"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">182</int>
+						<reference key="object" ref="1006110104"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">183</int>
+						<reference key="object" ref="765997004"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">184</int>
+						<reference key="object" ref="699908867"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">185</int>
+						<reference key="object" ref="500083856"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">189</int>
+						<reference key="object" ref="141459265"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">197</int>
+						<reference key="object" ref="772513724"/>
+						<reference key="parent" ref="461954287"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">240</int>
+						<reference key="object" ref="307141264"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="648546264"/>
+						</array>
+						<reference key="parent" ref="690475869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">241</int>
+						<reference key="object" ref="648546264"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="863971682"/>
+							<reference ref="557780405"/>
+							<reference ref="758130632"/>
+							<reference ref="738310319"/>
+							<reference ref="490146686"/>
+							<reference ref="687404770"/>
+							<reference ref="76550856"/>
+							<reference ref="494776894"/>
+							<reference ref="231260559"/>
+						</array>
+						<reference key="parent" ref="307141264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">238</int>
+						<reference key="object" ref="863971682"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">242</int>
+						<reference key="object" ref="557780405"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">243</int>
+						<reference key="object" ref="758130632"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">246</int>
+						<reference key="object" ref="738310319"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="805751915"/>
+						</array>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">258</int>
+						<reference key="object" ref="805751915"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="240263631"/>
+							<reference ref="137274656"/>
+							<reference ref="384295677"/>
+						</array>
+						<reference key="parent" ref="738310319"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">244</int>
+						<reference key="object" ref="240263631"/>
+						<reference key="parent" ref="805751915"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">249</int>
+						<reference key="object" ref="137274656"/>
+						<reference key="parent" ref="805751915"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">255</int>
+						<reference key="object" ref="384295677"/>
+						<reference key="parent" ref="805751915"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">248</int>
+						<reference key="object" ref="490146686"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">253</int>
+						<reference key="object" ref="687404770"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="439326293"/>
+						</array>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">260</int>
+						<reference key="object" ref="439326293"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="410802127"/>
+							<reference ref="862075470"/>
+							<reference ref="381719898"/>
+							<reference ref="281653127"/>
+							<reference ref="881802755"/>
+						</array>
+						<reference key="parent" ref="687404770"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">239</int>
+						<reference key="object" ref="410802127"/>
+						<reference key="parent" ref="439326293"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">247</int>
+						<reference key="object" ref="862075470"/>
+						<reference key="parent" ref="439326293"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">250</int>
+						<reference key="object" ref="381719898"/>
+						<reference key="parent" ref="439326293"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">251</int>
+						<reference key="object" ref="281653127"/>
+						<reference key="parent" ref="439326293"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">254</int>
+						<reference key="object" ref="881802755"/>
+						<reference key="parent" ref="439326293"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">256</int>
+						<reference key="object" ref="76550856"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">259</int>
+						<reference key="object" ref="494776894"/>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">261</int>
+						<reference key="object" ref="231260559"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="585606353"/>
+						</array>
+						<reference key="parent" ref="648546264"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">252</int>
+						<reference key="object" ref="585606353"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="884468253"/>
+							<reference ref="886157999"/>
+							<reference ref="991446895"/>
+							<reference ref="586546776"/>
+						</array>
+						<reference key="parent" ref="231260559"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">235</int>
+						<reference key="object" ref="884468253"/>
+						<reference key="parent" ref="585606353"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">236</int>
+						<reference key="object" ref="886157999"/>
+						<reference key="parent" ref="585606353"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">237</int>
+						<reference key="object" ref="991446895"/>
+						<reference key="parent" ref="585606353"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">257</int>
+						<reference key="object" ref="586546776"/>
+						<reference key="parent" ref="585606353"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">142</int>
+						<reference key="object" ref="1022636345"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="289732896"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">143</int>
+						<reference key="object" ref="289732896"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="302358491"/>
+							<reference ref="775874797"/>
+							<reference ref="584008620"/>
+							<reference ref="993477348"/>
+							<reference ref="879997107"/>
+						</array>
+						<reference key="parent" ref="1022636345"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">144</int>
+						<reference key="object" ref="302358491"/>
+						<reference key="parent" ref="289732896"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">146</int>
+						<reference key="object" ref="775874797"/>
+						<reference key="parent" ref="289732896"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">161</int>
+						<reference key="object" ref="584008620"/>
+						<reference key="parent" ref="289732896"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">210</int>
+						<reference key="object" ref="993477348"/>
+						<reference key="parent" ref="289732896"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">293</int>
+						<reference key="object" ref="879997107"/>
+						<reference key="parent" ref="289732896"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">318</int>
+						<reference key="object" ref="251709406"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="327998057"/>
+						</array>
+						<reference key="parent" ref="986630581"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">314</int>
+						<reference key="object" ref="327998057"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="605724048"/>
+							<reference ref="546688121"/>
+							<reference ref="199395213"/>
+							<reference ref="313120163"/>
+							<reference ref="139826239"/>
+							<reference ref="183165023"/>
+							<reference ref="180153081"/>
+							<reference ref="857432455"/>
+							<reference ref="627560474"/>
+							<reference ref="584825983"/>
+						</array>
+						<reference key="parent" ref="251709406"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">311</int>
+						<reference key="object" ref="605724048"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">312</int>
+						<reference key="object" ref="546688121"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">313</int>
+						<reference key="object" ref="199395213"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">315</int>
+						<reference key="object" ref="313120163"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">316</int>
+						<reference key="object" ref="139826239"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">317</int>
+						<reference key="object" ref="183165023"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">319</int>
+						<reference key="object" ref="180153081"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">320</int>
+						<reference key="object" ref="857432455"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="320556452"/>
+						</array>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">321</int>
+						<reference key="object" ref="320556452"/>
+						<reference key="parent" ref="857432455"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">322</int>
+						<reference key="object" ref="627560474"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">323</int>
+						<reference key="object" ref="584825983"/>
+						<reference key="parent" ref="327998057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">204</int>
+						<reference key="object" ref="411063565"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">DrawAppDelegate</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">270</int>
+						<reference key="object" ref="538130659"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Font Manager</string>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="-3.ImportedFromIB2"/>
+				<string key="100.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="100.ImportedFromIB2"/>
+				<string key="103.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="103.ImportedFromIB2"/>
+				<string key="105.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="105.ImportedFromIB2"/>
+				<string key="106.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="106.ImportedFromIB2"/>
+				<string key="107.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="107.ImportedFromIB2"/>
+				<string key="108.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="108.ImportedFromIB2"/>
+				<string key="110.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="110.ImportedFromIB2"/>
+				<string key="118.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="118.ImportedFromIB2"/>
+				<string key="119.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="119.ImportedFromIB2"/>
+				<string key="120.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="120.ImportedFromIB2"/>
+				<string key="121.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="121.ImportedFromIB2"/>
+				<string key="138.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="138.ImportedFromIB2"/>
+				<string key="139.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="139.ImportedFromIB2"/>
+				<string key="140.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="140.ImportedFromIB2"/>
+				<string key="142.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="142.ImportedFromIB2"/>
+				<string key="143.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="143.ImportedFromIB2"/>
+				<string key="144.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="144.ImportedFromIB2"/>
+				<string key="146.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="146.ImportedFromIB2"/>
+				<string key="147.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="147.ImportedFromIB2"/>
+				<string key="148.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="148.ImportedFromIB2"/>
+				<string key="149.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="149.ImportedFromIB2"/>
+				<string key="150.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="150.ImportedFromIB2"/>
+				<string key="151.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="151.ImportedFromIB2"/>
+				<string key="152.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="152.ImportedFromIB2"/>
+				<string key="153.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="153.ImportedFromIB2"/>
+				<string key="154.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="154.ImportedFromIB2"/>
+				<string key="155.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="155.ImportedFromIB2"/>
+				<string key="156.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="156.ImportedFromIB2"/>
+				<string key="157.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="157.ImportedFromIB2"/>
+				<string key="161.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="161.ImportedFromIB2"/>
+				<string key="164.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="164.ImportedFromIB2"/>
+				<string key="165.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="165.ImportedFromIB2"/>
+				<string key="166.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="166.ImportedFromIB2"/>
+				<string key="167.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="167.ImportedFromIB2"/>
+				<string key="168.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="168.ImportedFromIB2"/>
+				<string key="169.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="169.ImportedFromIB2"/>
+				<string key="170.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="170.ImportedFromIB2"/>
+				<string key="171.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="171.ImportedFromIB2"/>
+				<string key="172.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="172.ImportedFromIB2"/>
+				<string key="173.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="173.ImportedFromIB2"/>
+				<string key="174.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="174.ImportedFromIB2"/>
+				<string key="175.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="175.ImportedFromIB2"/>
+				<string key="176.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="176.ImportedFromIB2"/>
+				<string key="179.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="179.ImportedFromIB2"/>
+				<string key="181.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="181.ImportedFromIB2"/>
+				<string key="182.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="182.ImportedFromIB2"/>
+				<string key="183.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="183.ImportedFromIB2"/>
+				<string key="184.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="184.ImportedFromIB2"/>
+				<string key="185.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="185.ImportedFromIB2"/>
+				<string key="187.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="187.ImportedFromIB2"/>
+				<string key="188.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="188.ImportedFromIB2"/>
+				<string key="189.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="189.ImportedFromIB2"/>
+				<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="19.ImportedFromIB2"/>
+				<string key="197.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="197.ImportedFromIB2"/>
+				<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="20.ImportedFromIB2"/>
+				<boolean value="YES" key="204.ImportedFromIB2"/>
+				<string key="210.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="210.ImportedFromIB2"/>
+				<string key="213.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="213.ImportedFromIB2"/>
+				<string key="214.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="214.ImportedFromIB2"/>
+				<string key="215.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="215.ImportedFromIB2"/>
+				<string key="216.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="216.ImportedFromIB2"/>
+				<string key="218.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="218.ImportedFromIB2"/>
+				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="23.ImportedFromIB2"/>
+				<string key="235.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="235.ImportedFromIB2"/>
+				<string key="236.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="236.ImportedFromIB2"/>
+				<string key="237.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="237.ImportedFromIB2"/>
+				<string key="238.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="238.ImportedFromIB2"/>
+				<string key="239.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="239.ImportedFromIB2"/>
+				<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="24.ImportedFromIB2"/>
+				<string key="240.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="240.ImportedFromIB2"/>
+				<string key="241.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="241.ImportedFromIB2"/>
+				<string key="242.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="242.ImportedFromIB2"/>
+				<string key="243.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="243.ImportedFromIB2"/>
+				<string key="244.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="244.ImportedFromIB2"/>
+				<string key="246.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="246.ImportedFromIB2"/>
+				<string key="247.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="247.ImportedFromIB2"/>
+				<string key="248.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="248.ImportedFromIB2"/>
+				<string key="249.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="249.ImportedFromIB2"/>
+				<string key="250.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="250.ImportedFromIB2"/>
+				<string key="251.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="251.ImportedFromIB2"/>
+				<string key="252.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="252.ImportedFromIB2"/>
+				<string key="253.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="253.ImportedFromIB2"/>
+				<string key="254.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="254.ImportedFromIB2"/>
+				<string key="255.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="255.ImportedFromIB2"/>
+				<string key="256.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="256.ImportedFromIB2"/>
+				<string key="257.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="257.ImportedFromIB2"/>
+				<string key="258.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="258.ImportedFromIB2"/>
+				<string key="259.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="259.ImportedFromIB2"/>
+				<string key="260.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="260.ImportedFromIB2"/>
+				<string key="261.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="261.ImportedFromIB2"/>
+				<boolean value="YES" key="270.ImportedFromIB2"/>
+				<string key="282.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="282.ImportedFromIB2"/>
+				<string key="286.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="286.ImportedFromIB2"/>
+				<string key="287.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="287.ImportedFromIB2"/>
+				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="29.ImportedFromIB2"/>
+				<string key="293.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="293.ImportedFromIB2"/>
+				<string key="311.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="311.ImportedFromIB2"/>
+				<string key="312.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="312.ImportedFromIB2"/>
+				<string key="313.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="313.ImportedFromIB2"/>
+				<string key="314.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="314.ImportedFromIB2"/>
+				<string key="315.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="315.ImportedFromIB2"/>
+				<string key="316.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="316.ImportedFromIB2"/>
+				<string key="317.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="317.ImportedFromIB2"/>
+				<string key="318.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="318.ImportedFromIB2"/>
+				<string key="319.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="319.ImportedFromIB2"/>
+				<string key="320.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="320.ImportedFromIB2"/>
+				<string key="321.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="321.ImportedFromIB2"/>
+				<string key="322.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="322.ImportedFromIB2"/>
+				<string key="323.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="323.ImportedFromIB2"/>
+				<string key="345.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="345.ImportedFromIB2"/>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="5.ImportedFromIB2"/>
+				<string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="72.ImportedFromIB2"/>
+				<string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="73.ImportedFromIB2"/>
+				<string key="74.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="74.ImportedFromIB2"/>
+				<string key="75.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="75.ImportedFromIB2"/>
+				<string key="77.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="77.ImportedFromIB2"/>
+				<string key="78.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="78.ImportedFromIB2"/>
+				<string key="79.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="79.ImportedFromIB2"/>
+				<string key="80.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="80.ImportedFromIB2"/>
+				<string key="82.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="82.ImportedFromIB2"/>
+				<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="83.ImportedFromIB2"/>
+				<string key="84.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="84.ImportedFromIB2"/>
+				<string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="86.ImportedFromIB2"/>
+				<string key="91.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="91.ImportedFromIB2"/>
+				<string key="92.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="92.ImportedFromIB2"/>
+				<string key="93.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="93.ImportedFromIB2"/>
+				<string key="94.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="94.ImportedFromIB2"/>
+				<string key="95.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="95.ImportedFromIB2"/>
+				<string key="96.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="96.ImportedFromIB2"/>
+				<string key="99.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="99.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">362</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="alignBottomEdges:">id</string>
+						<string key="alignHorizontalCenters:">id</string>
+						<string key="alignLeftEdges:">id</string>
+						<string key="alignRightEdges:">id</string>
+						<string key="alignTopEdges:">id</string>
+						<string key="alignVerticalCenters:">id</string>
+						<string key="alignWithGrid:">id</string>
+						<string key="bringToFront:">id</string>
+						<string key="deselectAll:">id</string>
+						<string key="makeNaturalSize:">id</string>
+						<string key="makeSameHeight:">id</string>
+						<string key="makeSameWidth:">id</string>
+						<string key="newDocumentWindow:">id</string>
+						<string key="performZoom:">id</string>
+						<string key="sendToBack:">id</string>
+						<string key="showOrHideRulers:">id</string>
+						<string key="toggleGridConstraining:">id</string>
+						<string key="toggleGridShowing:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">orderFrontStandardAboutPanel:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTAppDelegate</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="chooseSelectionTool:">id</string>
+						<string key="showOrHideGraphicsInspector:">id</string>
+						<string key="showOrHideGridInspector:">id</string>
+						<string key="showOrHideToolPalette:">id</string>
+						<string key="showPreferencesPanel:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTAppDelegate.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTAppDelegate</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTGraphicView</string>
+					<string key="superclassName">NSView</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="alignBottomEdges:">id</string>
+						<string key="alignHorizontalCenters:">id</string>
+						<string key="alignLeftEdges:">id</string>
+						<string key="alignRightEdges:">id</string>
+						<string key="alignTopEdges:">id</string>
+						<string key="alignVerticalCenters:">id</string>
+						<string key="alignWithGrid:">id</string>
+						<string key="bringToFront:">id</string>
+						<string key="changeColor:">id</string>
+						<string key="concludeDragOperation:">id</string>
+						<string key="copy:">id</string>
+						<string key="cut:">id</string>
+						<string key="delete:">id</string>
+						<string key="deleteBackward:">id</string>
+						<string key="deleteForward:">id</string>
+						<string key="deselectAll:">id</string>
+						<string key="dragOperationForDraggingInfo:">id</string>
+						<string key="draggingEntered:">id</string>
+						<string key="draggingExited:">id</string>
+						<string key="draggingUpdated:">id</string>
+						<string key="makeNaturalSize:">id</string>
+						<string key="makeSameHeight:">id</string>
+						<string key="makeSameWidth:">id</string>
+						<string key="moveDown:">id</string>
+						<string key="moveLeft:">id</string>
+						<string key="moveRight:">id</string>
+						<string key="moveUp:">id</string>
+						<string key="paste:">id</string>
+						<string key="performDragOperation:">id</string>
+						<string key="prepareForDragOperation:">id</string>
+						<string key="selectAll:">id</string>
+						<string key="sendToBack:">id</string>
+						<string key="showOrHideRulers:">id</string>
+						<string key="undo:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTGraphicView.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTWindowController</string>
+					<string key="superclassName">NSWindowController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="newDocumentWindow:">id</string>
+						<string key="toggleGridConstraining:">id</string>
+						<string key="toggleGridShowing:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="graphicView">id</string>
+						<string key="graphicsController">id</string>
+						<string key="grid">id</string>
+						<string key="zoomFactor">id</string>
+						<string key="zoomingScrollView">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTWindowController.rb</string>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1013512856">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="111947895">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="136049675">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSBrowser</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="194162880">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocument</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="printDocument:">id</string>
+						<string key="revertDocumentToSaved:">id</string>
+						<string key="runPageLayout:">id</string>
+						<string key="saveDocument:">id</string>
+						<string key="saveDocumentAs:">id</string>
+						<string key="saveDocumentTo:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocument</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocumentController</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="clearRecentDocuments:">id</string>
+						<string key="newDocument:">id</string>
+						<string key="openDocument:">id</string>
+						<string key="saveAllDocuments:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFontManager</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="228535807">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMatrix</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="761459948">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenuItem</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="544519931">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMovieView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="1013512856"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="111947895"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="136049675"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="194162880"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="228535807"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="761459948"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="390056979">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="496291421">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTableView</string>
+					<string key="superclassName">NSControl</string>
+					<reference key="sourceIdentifier" ref="390056979"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSText</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSText.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextView</string>
+					<string key="superclassName">NSText</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<reference key="sourceIdentifier" ref="544519931"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="496291421"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Draw2.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,870 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<integer value="6"/>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="597167934">
+			<object class="NSCustomObject" id="887454368">
+				<string key="NSClassName">SKTWindowController</string>
+			</object>
+			<object class="NSCustomObject" id="812652159">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="440774844">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="156303725">
+				<int key="NSWindowStyleMask">15</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{52, 348}, {483, 627}}</string>
+				<int key="NSWTFlags">1613234176</int>
+				<string key="NSWindowTitle">Window</string>
+				<string key="NSWindowClass">NSWindow</string>
+				<string key="NSViewClass">View</string>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{263, 207}</string>
+				<object class="NSView" key="NSWindowView" id="28493091">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<array class="NSMutableArray" key="NSSubviews">
+						<object class="NSScrollView" id="830935111">
+							<reference key="NSNextResponder" ref="28493091"/>
+							<int key="NSvFlags">274</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSClipView" id="266351160">
+									<reference key="NSNextResponder" ref="830935111"/>
+									<int key="NSvFlags">2304</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSCustomView" id="1018097653">
+											<reference key="NSNextResponder" ref="266351160"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrameSize">{468, 612}</string>
+											<reference key="NSSuperview" ref="266351160"/>
+											<string key="NSClassName">SKTGraphicView</string>
+											<string key="NSExtension">NSView</string>
+										</object>
+									</array>
+									<string key="NSFrameSize">{468, 612}</string>
+									<reference key="NSSuperview" ref="830935111"/>
+									<reference key="NSNextKeyView" ref="1018097653"/>
+									<reference key="NSDocView" ref="1018097653"/>
+									<object class="NSColor" key="NSBGColor">
+										<int key="NSColorSpace">6</int>
+										<string key="NSCatalogName">System</string>
+										<string key="NSColorName">controlColor</string>
+										<object class="NSColor" key="NSColor">
+											<int key="NSColorSpace">3</int>
+											<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+										</object>
+									</object>
+									<int key="NScvFlags">4</int>
+								</object>
+								<object class="NSScroller" id="951350511">
+									<reference key="NSNextResponder" ref="830935111"/>
+									<int key="NSvFlags">256</int>
+									<string key="NSFrame">{{468, 0}, {15, 612}}</string>
+									<reference key="NSSuperview" ref="830935111"/>
+									<reference key="NSTarget" ref="830935111"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSCurValue">1</double>
+									<double key="NSPercent">0.99836599826812744</double>
+								</object>
+								<object class="NSScroller" id="773996595">
+									<reference key="NSNextResponder" ref="830935111"/>
+									<int key="NSvFlags">256</int>
+									<string key="NSFrame">{{0, 612}, {468, 15}}</string>
+									<reference key="NSSuperview" ref="830935111"/>
+									<int key="NSsFlags">1</int>
+									<reference key="NSTarget" ref="830935111"/>
+									<string key="NSAction">_doScroller:</string>
+									<double key="NSPercent">0.99786323308944702</double>
+								</object>
+							</array>
+							<string key="NSFrameSize">{483, 627}</string>
+							<reference key="NSSuperview" ref="28493091"/>
+							<reference key="NSNextKeyView" ref="266351160"/>
+							<int key="NSsFlags">48</int>
+							<reference key="NSVScroller" ref="951350511"/>
+							<reference key="NSHScroller" ref="773996595"/>
+							<reference key="NSContentView" ref="266351160"/>
+						</object>
+					</array>
+					<string key="NSFrameSize">{483, 627}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
+				<string key="NSMinSize">{263, 229}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSArrayController" id="825041838">
+				<bool key="NSEditable">YES</bool>
+				<object class="_NSManagedProxy" key="_NSManagedProxy"/>
+				<bool key="NSPreservesSelection">YES</bool>
+				<bool key="NSFilterRestrictsInsertion">YES</bool>
+				<bool key="NSClearsFilterPredicateOnInsertion">YES</bool>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="887454368"/>
+						<reference key="destination" ref="156303725"/>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="156303725"/>
+						<reference key="destination" ref="887454368"/>
+					</object>
+					<int key="connectionID">10</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">contentArray: document.graphics</string>
+						<reference key="source" ref="825041838"/>
+						<reference key="destination" ref="887454368"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="825041838"/>
+							<reference key="NSDestination" ref="887454368"/>
+							<string key="NSLabel">contentArray: document.graphics</string>
+							<string key="NSBinding">contentArray</string>
+							<string key="NSKeyPath">document.graphics</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">26</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">initialFirstResponder</string>
+						<reference key="source" ref="156303725"/>
+						<reference key="destination" ref="1018097653"/>
+					</object>
+					<int key="connectionID">30</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">graphicsController</string>
+						<reference key="source" ref="887454368"/>
+						<reference key="destination" ref="825041838"/>
+					</object>
+					<int key="connectionID">35</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">zoomingScrollView</string>
+						<reference key="source" ref="887454368"/>
+						<reference key="destination" ref="830935111"/>
+					</object>
+					<int key="connectionID">36</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">graphicView</string>
+						<reference key="source" ref="887454368"/>
+						<reference key="destination" ref="1018097653"/>
+					</object>
+					<int key="connectionID">37</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="597167934"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="887454368"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="812652159"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="440774844"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="156303725"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="28493091"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Window</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="28493091"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="830935111"/>
+						</array>
+						<reference key="parent" ref="156303725"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="830935111"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1018097653"/>
+							<reference ref="951350511"/>
+							<reference ref="773996595"/>
+						</array>
+						<reference key="parent" ref="28493091"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">22</int>
+						<reference key="object" ref="1018097653"/>
+						<reference key="parent" ref="830935111"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">23</int>
+						<reference key="object" ref="825041838"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Graphics Controller</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">33</int>
+						<reference key="object" ref="951350511"/>
+						<reference key="parent" ref="830935111"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">34</int>
+						<reference key="object" ref="773996595"/>
+						<reference key="parent" ref="830935111"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="-3.ImportedFromIB2"/>
+				<string key="11.CustomClassName">SKTZoomingScrollView</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="11.ImportedFromIB2"/>
+				<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="22.ImportedFromIB2"/>
+				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="23.ImportedFromIB2"/>
+				<string key="33.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="33.IBShouldRemoveOnLegacySave"/>
+				<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="34.IBShouldRemoveOnLegacySave"/>
+				<string key="5.IBEditorWindowLastContentRect">{{14, 518}, {483, 627}}</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="5.IBWindowTemplateEditedContentRect">{{14, 518}, {483, 627}}</string>
+				<boolean value="YES" key="5.ImportedFromIB2"/>
+				<boolean value="YES" key="5.windowTemplate.hasMinSize"/>
+				<string key="5.windowTemplate.minSize">{263, 207}</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="6.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">37</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTGraphicView</string>
+					<string key="superclassName">NSView</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="alignBottomEdges:">id</string>
+						<string key="alignHorizontalCenters:">id</string>
+						<string key="alignLeftEdges:">id</string>
+						<string key="alignRightEdges:">id</string>
+						<string key="alignTopEdges:">id</string>
+						<string key="alignVerticalCenters:">id</string>
+						<string key="alignWithGrid:">id</string>
+						<string key="bringToFront:">id</string>
+						<string key="changeColor:">id</string>
+						<string key="concludeDragOperation:">id</string>
+						<string key="copy:">id</string>
+						<string key="cut:">id</string>
+						<string key="delete:">id</string>
+						<string key="deleteBackward:">id</string>
+						<string key="deleteForward:">id</string>
+						<string key="deselectAll:">id</string>
+						<string key="dragOperationForDraggingInfo:">id</string>
+						<string key="draggingEntered:">id</string>
+						<string key="draggingExited:">id</string>
+						<string key="draggingUpdated:">id</string>
+						<string key="makeNaturalSize:">id</string>
+						<string key="makeSameHeight:">id</string>
+						<string key="makeSameWidth:">id</string>
+						<string key="moveDown:">id</string>
+						<string key="moveLeft:">id</string>
+						<string key="moveRight:">id</string>
+						<string key="moveUp:">id</string>
+						<string key="paste:">id</string>
+						<string key="performDragOperation:">id</string>
+						<string key="prepareForDragOperation:">id</string>
+						<string key="selectAll:">id</string>
+						<string key="sendToBack:">id</string>
+						<string key="showOrHideRulers:">id</string>
+						<string key="undo:">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTGraphicView.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTGraphicView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTWindowController</string>
+					<string key="superclassName">NSWindowController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="newDocumentWindow:">id</string>
+						<string key="toggleGridConstraining:">id</string>
+						<string key="toggleGridShowing:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="graphicView">id</string>
+						<string key="graphicsController">id</string>
+						<string key="grid">id</string>
+						<string key="zoomFactor">id</string>
+						<string key="zoomingScrollView">id</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTWindowController.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTWindowController</string>
+					<string key="superclassName">NSWindowController</string>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="_graphicView">SKTGraphicView</string>
+						<string key="_graphicsController">NSArrayController</string>
+						<string key="_zoomingScrollView">SKTZoomingScrollView</string>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTZoomingScrollView</string>
+					<string key="superclassName">NSScrollView</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">factor</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTZoomingScrollView.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTZoomingScrollView</string>
+					<string key="superclassName">NSScrollView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="868957931">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="893091935">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="295122887">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSArrayController</string>
+					<string key="superclassName">NSObjectController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSArrayController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="419400624">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSManagedObjectContext</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">CoreData.framework/Headers/NSManagedObjectContext.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="979531548">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="868957931"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="893091935"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="295122887"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="419400624"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="979531548"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="118205820">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObjectController</string>
+					<string key="superclassName">NSController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSObjectController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSScrollView</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSScroller</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSScroller.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="118205820"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/DrawWindow.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,1124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<integer value="5"/>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="642225243">
+			<object class="NSCustomObject" id="882990811">
+				<string key="NSClassName">NSWindowController</string>
+			</object>
+			<object class="NSCustomObject" id="22009719">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="90476954">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="583328869">
+				<int key="NSWindowStyleMask">147</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{540, 512}, {306, 168}}</string>
+				<int key="NSWTFlags">-265814016</int>
+				<string key="NSWindowTitle">Grid</string>
+				<string key="NSWindowClass">NSPanel</string>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{90.5532, 8}</string>
+				<object class="NSView" key="NSWindowView" id="583684260">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<array class="NSMutableArray" key="NSSubviews">
+						<object class="NSBox" id="1022901260">
+							<reference key="NSNextResponder" ref="583684260"/>
+							<int key="NSvFlags">256</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSView" id="858935337">
+									<reference key="NSNextResponder" ref="1022901260"/>
+									<int key="NSvFlags">256</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSColorWell" id="305538409">
+											<reference key="NSNextResponder" ref="858935337"/>
+											<int key="NSvFlags">256</int>
+											<set class="NSMutableSet" key="NSDragTypes">
+												<object class="NSMutableString">
+													<characters key="NS.bytes">NSColor pasteboard type</characters>
+												</object>
+											</set>
+											<string key="NSFrame">{{64, 15}, {53, 30}}</string>
+											<reference key="NSSuperview" ref="858935337"/>
+											<bool key="NSEnabled">YES</bool>
+											<bool key="NSIsBordered">YES</bool>
+											<object class="NSColor" key="NSColor" id="523501833">
+												<int key="NSColorSpace">3</int>
+												<bytes key="NSWhite">MQA</bytes>
+											</object>
+										</object>
+										<object class="NSTextField" id="811890449">
+											<reference key="NSNextResponder" ref="858935337"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{13, 22}, {46, 16}}</string>
+											<reference key="NSSuperview" ref="858935337"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="398439766">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">4194304</int>
+												<string key="NSContents">Color:</string>
+												<object class="NSFont" key="NSSupport" id="721673159">
+													<string key="NSName">LucidaGrande</string>
+													<double key="NSSize">13</double>
+													<int key="NSfFlags">1044</int>
+												</object>
+												<reference key="NSControlView" ref="811890449"/>
+												<object class="NSColor" key="NSBackgroundColor">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+													</object>
+												</object>
+												<object class="NSColor" key="NSTextColor">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlTextColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+									</array>
+									<string key="NSFrame">{{2, 2}, {133, 56}}</string>
+									<reference key="NSSuperview" ref="1022901260"/>
+								</object>
+							</array>
+							<string key="NSFrame">{{152, 90}, {137, 60}}</string>
+							<reference key="NSSuperview" ref="583684260"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Title</string>
+								<reference key="NSSupport" ref="721673159"/>
+								<object class="NSColor" key="NSBackgroundColor" id="738670559">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">textBackgroundColor</string>
+									<reference key="NSColor" ref="523501833"/>
+								</object>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="858935337"/>
+							<int key="NSBorderType">3</int>
+							<int key="NSBoxType">0</int>
+							<int key="NSTitlePosition">0</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSBox" id="425551396">
+							<reference key="NSNextResponder" ref="583684260"/>
+							<int key="NSvFlags">256</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSView" id="952932718">
+									<reference key="NSNextResponder" ref="425551396"/>
+									<int key="NSvFlags">256</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSSlider" id="55482058">
+											<reference key="NSNextResponder" ref="952932718"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{14, 8}, {240, 25}}</string>
+											<reference key="NSSuperview" ref="952932718"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSSliderCell" key="NSCell" id="121894771">
+												<int key="NSCellFlags">67501824</int>
+												<int key="NSCellFlags2">0</int>
+												<object class="NSMutableString" key="NSContents" id="1072853833">
+													<characters key="NS.bytes"/>
+												</object>
+												<reference key="NSSupport" ref="721673159"/>
+												<reference key="NSControlView" ref="55482058"/>
+												<double key="NSMaxValue">72</double>
+												<double key="NSMinValue">0.0</double>
+												<double key="NSValue">9</double>
+												<double key="NSAltIncValue">0.0</double>
+												<int key="NSNumberOfTickMarks">17</int>
+												<int key="NSTickMarkPosition">0</int>
+												<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+												<bool key="NSVertical">NO</bool>
+											</object>
+										</object>
+									</array>
+									<string key="NSFrame">{{2, 2}, {268, 44}}</string>
+									<reference key="NSSuperview" ref="425551396"/>
+								</object>
+							</array>
+							<string key="NSFrame">{{17, 22}, {272, 64}}</string>
+							<reference key="NSSuperview" ref="583684260"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Spacing</string>
+								<reference key="NSSupport" ref="721673159"/>
+								<reference key="NSBackgroundColor" ref="738670559"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="952932718"/>
+							<int key="NSBorderType">3</int>
+							<int key="NSBoxType">0</int>
+							<int key="NSTitlePosition">2</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSBox" id="59341977">
+							<reference key="NSNextResponder" ref="583684260"/>
+							<int key="NSvFlags">256</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSView" id="912911515">
+									<reference key="NSNextResponder" ref="59341977"/>
+									<int key="NSvFlags">256</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSButton" id="1059226011">
+											<reference key="NSNextResponder" ref="912911515"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{14, 29}, {86, 18}}</string>
+											<reference key="NSSuperview" ref="912911515"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSButtonCell" key="NSCell" id="360484459">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Show Grid</string>
+												<reference key="NSSupport" ref="721673159"/>
+												<reference key="NSControlView" ref="1059226011"/>
+												<int key="NSButtonFlags">1211912703</int>
+												<int key="NSButtonFlags2">0</int>
+												<object class="NSCustomResource" key="NSNormalImage" id="121531863">
+													<string key="NSClassName">NSImage</string>
+													<string key="NSResourceName">NSSwitch</string>
+												</object>
+												<object class="NSButtonImageSource" key="NSAlternateImage" id="193272890">
+													<string key="NSImageName">NSSwitch</string>
+												</object>
+												<string key="NSAlternateContents"/>
+												<reference key="NSKeyEquivalent" ref="1072853833"/>
+												<int key="NSPeriodicDelay">200</int>
+												<int key="NSPeriodicInterval">25</int>
+											</object>
+										</object>
+										<object class="NSButton" id="1024858410">
+											<reference key="NSNextResponder" ref="912911515"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{14, 9}, {101, 18}}</string>
+											<reference key="NSSuperview" ref="912911515"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSButtonCell" key="NSCell" id="231645554">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">0</int>
+												<string key="NSContents">Snap to Grid</string>
+												<reference key="NSSupport" ref="721673159"/>
+												<reference key="NSControlView" ref="1024858410"/>
+												<int key="NSButtonFlags">1211912703</int>
+												<int key="NSButtonFlags2">0</int>
+												<reference key="NSNormalImage" ref="121531863"/>
+												<reference key="NSAlternateImage" ref="193272890"/>
+												<string key="NSAlternateContents"/>
+												<reference key="NSKeyEquivalent" ref="1072853833"/>
+												<int key="NSPeriodicDelay">200</int>
+												<int key="NSPeriodicInterval">25</int>
+											</object>
+										</object>
+									</array>
+									<string key="NSFrame">{{2, 2}, {129, 56}}</string>
+									<reference key="NSSuperview" ref="59341977"/>
+								</object>
+							</array>
+							<string key="NSFrame">{{17, 90}, {133, 60}}</string>
+							<reference key="NSSuperview" ref="583684260"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Title</string>
+								<reference key="NSSupport" ref="721673159"/>
+								<reference key="NSBackgroundColor" ref="738670559"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="912911515"/>
+							<int key="NSBorderType">3</int>
+							<int key="NSBoxType">0</int>
+							<int key="NSTitlePosition">0</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+					</array>
+					<string key="NSFrameSize">{306, 168}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
+				<string key="NSMinSize">{90.5532, 24}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSCustomObject" id="724169326">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="882990811"/>
+						<reference key="destination" ref="583328869"/>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="583328869"/>
+						<reference key="destination" ref="882990811"/>
+					</object>
+					<int key="connectionID">30</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.grid.canSetColor</string>
+						<reference key="source" ref="811890449"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="811890449"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.grid.canSetColor</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.canSetColor</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">62</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.grid.canSetColor</string>
+						<reference key="source" ref="305538409"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="305538409"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.grid.canSetColor</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.canSetColor</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">63</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.grid.color</string>
+						<reference key="source" ref="305538409"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="305538409"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">value: mainWindow.windowController.grid.color</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.color</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">64</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.grid.spacing</string>
+						<reference key="source" ref="55482058"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="55482058"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">value: mainWindow.windowController.grid.spacing</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.spacing</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">65</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.grid.canSetSpacing</string>
+						<reference key="source" ref="55482058"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="55482058"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.grid.canSetSpacing</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.canSetSpacing</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">66</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.grid.alwaysShown</string>
+						<reference key="source" ref="1059226011"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="1059226011"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">value: mainWindow.windowController.grid.alwaysShown</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.alwaysShown</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">67</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.grid.usable</string>
+						<reference key="source" ref="1059226011"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="1059226011"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.grid.usable</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.usable</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">68</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.grid.usable</string>
+						<reference key="source" ref="1024858410"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="1024858410"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.grid.usable</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.usable</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">70</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.grid.constraining</string>
+						<reference key="source" ref="1024858410"/>
+						<reference key="destination" ref="724169326"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="1024858410"/>
+							<reference key="NSDestination" ref="724169326"/>
+							<string key="NSLabel">value: mainWindow.windowController.grid.constraining</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.grid.constraining</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">71</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="642225243"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="882990811"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="22009719"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="583328869"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="583684260"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Panel</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="583684260"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="425551396"/>
+							<reference ref="59341977"/>
+							<reference ref="1022901260"/>
+						</array>
+						<reference key="parent" ref="583328869"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">16</int>
+						<reference key="object" ref="425551396"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="55482058"/>
+						</array>
+						<reference key="parent" ref="583684260"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">18</int>
+						<reference key="object" ref="59341977"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1059226011"/>
+							<reference ref="1024858410"/>
+						</array>
+						<reference key="parent" ref="583684260"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">20</int>
+						<reference key="object" ref="1022901260"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="305538409"/>
+							<reference ref="811890449"/>
+						</array>
+						<reference key="parent" ref="583684260"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">32</int>
+						<reference key="object" ref="724169326"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Shared App</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="90476954"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="55482058"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="121894771"/>
+						</array>
+						<reference key="parent" ref="425551396"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">73</int>
+						<reference key="object" ref="121894771"/>
+						<reference key="parent" ref="55482058"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="1059226011"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="360484459"/>
+						</array>
+						<reference key="parent" ref="59341977"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">74</int>
+						<reference key="object" ref="360484459"/>
+						<reference key="parent" ref="1059226011"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="1024858410"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="231645554"/>
+						</array>
+						<reference key="parent" ref="59341977"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">75</int>
+						<reference key="object" ref="231645554"/>
+						<reference key="parent" ref="1024858410"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="305538409"/>
+						<reference key="parent" ref="1022901260"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">14</int>
+						<reference key="object" ref="811890449"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="398439766"/>
+						</array>
+						<reference key="parent" ref="1022901260"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">76</int>
+						<reference key="object" ref="398439766"/>
+						<reference key="parent" ref="811890449"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="10.ImportedFromIB2"/>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="11.ImportedFromIB2"/>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="12.ImportedFromIB2"/>
+				<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="13.ImportedFromIB2"/>
+				<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="14.ImportedFromIB2"/>
+				<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="16.ImportedFromIB2"/>
+				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="18.ImportedFromIB2"/>
+				<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="20.ImportedFromIB2"/>
+				<boolean value="YES" key="32.ImportedFromIB2"/>
+				<string key="5.IBEditorWindowLastContentRect">{{14, 983}, {306, 168}}</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="5.IBWindowTemplateEditedContentRect">{{14, 983}, {306, 168}}</string>
+				<boolean value="YES" key="5.ImportedFromIB2"/>
+				<boolean value="YES" key="5.windowTemplate.hasMinSize"/>
+				<string key="5.windowTemplate.minSize">{90.5532, 8}</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="6.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">76</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="585582248">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="535297492">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="982123026">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSBox</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSBox.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButton</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButtonCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSColorWell</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorWell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="534739685">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="320489006">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="585582248"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="535297492"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="982123026"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="534739685"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="320489006"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="720269652">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSPanel</string>
+					<string key="superclassName">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSlider</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSlider.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSliderCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSliderCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextField</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextFieldCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="720269652"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/GridPanel.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,1900 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<integer value="5"/>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="988772923">
+			<object class="NSCustomObject" id="932219528">
+				<string key="NSClassName">NSWindowController</string>
+			</object>
+			<object class="NSCustomObject" id="737654716">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="570859332">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="388837833">
+				<int key="NSWindowStyleMask">147</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{540, 701}, {306, 280}}</string>
+				<int key="NSWTFlags">-265814016</int>
+				<string key="NSWindowTitle">Graphics</string>
+				<object class="NSMutableString" key="NSWindowClass">
+					<characters key="NS.bytes">NSPanel</characters>
+				</object>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{114.696, 5}</string>
+				<object class="NSView" key="NSWindowView" id="843987841">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<array class="NSMutableArray" key="NSSubviews">
+						<object class="NSBox" id="72079224">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSView" id="61857917">
+									<reference key="NSNextResponder" ref="72079224"/>
+									<int key="NSvFlags">256</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSTextField" id="120308904">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{176, 51}, {72, 21}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="288784548">
+												<int key="NSCellFlags">-1804468671</int>
+												<int key="NSCellFlags2">4195328</int>
+												<object class="NSFont" key="NSSupport" id="689751179">
+													<string key="NSName">LucidaGrande</string>
+													<double key="NSSize">13</double>
+													<int key="NSfFlags">1044</int>
+												</object>
+												<object class="NSNumberFormatter" key="NSFormatter" id="92528146">
+													<dictionary class="NSMutableDictionary" key="NS.attributes">
+														<boolean value="YES" key="allowsFloats"/>
+														<object class="NSAttributedString" key="attributedStringForNil" id="121198894">
+															<string key="NSString"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForNotANumber" id="738636592">
+															<string key="NSString">NaN</string>
+															<dictionary key="NSAttributes" id="899468899"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForZero" id="810748783">
+															<string key="NSString">0.00</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<string key="decimalSeparator">.</string>
+														<integer value="1000" key="formatterBehavior"/>
+														<string key="groupingSeparator">,</string>
+														<object class="NSLocale" key="locale" id="519826077">
+															<string key="NS.identifier"/>
+														</object>
+														<object class="NSDecimalNumberPlaceholder" key="minimum" id="796230972">
+															<int key="NS.exponent">0</int>
+															<int key="NS.length">0</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">NO</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<string key="negativeFormat">-0.00</string>
+														<string key="positiveFormat">0.00</string>
+														<boolean value="NO" key="usesGroupingSeparator"/>
+													</dictionary>
+													<string key="NS.positiveformat">0.00</string>
+													<string key="NS.negativeformat">-0.00</string>
+													<nil key="NS.positiveattrs"/>
+													<nil key="NS.negativeattrs"/>
+													<reference key="NS.zero" ref="810748783"/>
+													<reference key="NS.nil" ref="121198894"/>
+													<reference key="NS.nan" ref="738636592"/>
+													<reference key="NS.min" ref="796230972"/>
+													<object class="NSDecimalNumberPlaceholder" key="NS.max" id="587283856">
+														<int key="NS.exponent">0</int>
+														<int key="NS.length">0</int>
+														<bool key="NS.negative">YES</bool>
+														<bool key="NS.compact">NO</bool>
+														<int key="NS.mantissa.bo">1</int>
+														<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+													</object>
+													<nil key="NS.rounding"/>
+													<string key="NS.decimal">.</string>
+													<string key="NS.thousand">,</string>
+													<bool key="NS.hasthousands">NO</bool>
+													<bool key="NS.localized">NO</bool>
+													<bool key="NS.allowsfloats">YES</bool>
+												</object>
+												<reference key="NSControlView" ref="120308904"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<object class="NSColor" key="NSBackgroundColor" id="280921921">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">textBackgroundColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MQA</bytes>
+													</object>
+												</object>
+												<object class="NSColor" key="NSTextColor" id="985722622">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">textColor</string>
+													<object class="NSColor" key="NSColor" id="313580795">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MAA</bytes>
+													</object>
+												</object>
+											</object>
+										</object>
+										<object class="NSTextField" id="917761835">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{122, 54}, {49, 16}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="229791022">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">67108864</int>
+												<object class="NSMutableString" key="NSContents">
+													<characters key="NS.bytes">Width:</characters>
+												</object>
+												<reference key="NSSupport" ref="689751179"/>
+												<reference key="NSControlView" ref="917761835"/>
+												<object class="NSColor" key="NSBackgroundColor" id="727008824">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlColor</string>
+													<object class="NSColor" key="NSColor">
+														<int key="NSColorSpace">3</int>
+														<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+													</object>
+												</object>
+												<object class="NSColor" key="NSTextColor" id="896908664">
+													<int key="NSColorSpace">6</int>
+													<string key="NSCatalogName">System</string>
+													<string key="NSColorName">controlTextColor</string>
+													<reference key="NSColor" ref="313580795"/>
+												</object>
+											</object>
+										</object>
+										<object class="NSTextField" id="869400574">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{117, 23}, {54, 16}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="638494388">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">67108864</int>
+												<object class="NSMutableString" key="NSContents">
+													<characters key="NS.bytes">Height:</characters>
+												</object>
+												<reference key="NSSupport" ref="689751179"/>
+												<reference key="NSControlView" ref="869400574"/>
+												<reference key="NSBackgroundColor" ref="727008824"/>
+												<reference key="NSTextColor" ref="896908664"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="902318256">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{40, 51}, {72, 21}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="333402523">
+												<int key="NSCellFlags">-1804468671</int>
+												<int key="NSCellFlags2">4195328</int>
+												<reference key="NSSupport" ref="689751179"/>
+												<object class="NSNumberFormatter" key="NSFormatter" id="627356307">
+													<dictionary class="NSMutableDictionary" key="NS.attributes">
+														<boolean value="YES" key="allowsFloats"/>
+														<object class="NSAttributedString" key="attributedStringForNil" id="465390085">
+															<string key="NSString"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForNotANumber" id="541834797">
+															<string key="NSString">NaN</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForZero" id="1032544235">
+															<string key="NSString">0.00</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<string key="decimalSeparator">.</string>
+														<integer value="1000" key="formatterBehavior"/>
+														<string key="groupingSeparator">,</string>
+														<reference key="locale" ref="519826077"/>
+														<object class="NSDecimalNumberPlaceholder" key="minimum" id="49277367">
+															<int key="NS.exponent">-1</int>
+															<int key="NS.length">0</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">NO</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<string key="negativeFormat">-0.00</string>
+														<string key="positiveFormat">0.00</string>
+														<boolean value="NO" key="usesGroupingSeparator"/>
+													</dictionary>
+													<string key="NS.positiveformat">0.00</string>
+													<string key="NS.negativeformat">-0.00</string>
+													<nil key="NS.positiveattrs"/>
+													<nil key="NS.negativeattrs"/>
+													<reference key="NS.zero" ref="1032544235"/>
+													<reference key="NS.nil" ref="465390085"/>
+													<reference key="NS.nan" ref="541834797"/>
+													<reference key="NS.min" ref="49277367"/>
+													<reference key="NS.max" ref="587283856"/>
+													<nil key="NS.rounding"/>
+													<string key="NS.decimal">.</string>
+													<string key="NS.thousand">,</string>
+													<bool key="NS.hasthousands">NO</bool>
+													<bool key="NS.localized">NO</bool>
+													<bool key="NS.allowsfloats">YES</bool>
+												</object>
+												<reference key="NSControlView" ref="902318256"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="280921921"/>
+												<reference key="NSTextColor" ref="985722622"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="414156681">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{13, 54}, {22, 16}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="710689379">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">67108864</int>
+												<object class="NSMutableString" key="NSContents">
+													<characters key="NS.bytes">X:</characters>
+												</object>
+												<reference key="NSSupport" ref="689751179"/>
+												<reference key="NSControlView" ref="414156681"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="727008824"/>
+												<reference key="NSTextColor" ref="896908664"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="540627655">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{40, 20}, {72, 21}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="694584804">
+												<int key="NSCellFlags">-1804468671</int>
+												<int key="NSCellFlags2">4195328</int>
+												<reference key="NSSupport" ref="689751179"/>
+												<object class="NSNumberFormatter" key="NSFormatter" id="640930946">
+													<dictionary class="NSMutableDictionary" key="NS.attributes">
+														<boolean value="YES" key="allowsFloats"/>
+														<object class="NSAttributedString" key="attributedStringForNil" id="894101826">
+															<string key="NSString"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForNotANumber" id="948895367">
+															<string key="NSString">NaN</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForZero" id="816216415">
+															<string key="NSString">0.00</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<string key="decimalSeparator">.</string>
+														<integer value="1000" key="formatterBehavior"/>
+														<string key="groupingSeparator">,</string>
+														<reference key="locale" ref="519826077"/>
+														<object class="NSDecimalNumberPlaceholder" key="minimum" id="62961598">
+															<int key="NS.exponent">0</int>
+															<int key="NS.length">0</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">NO</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<string key="negativeFormat">-0.00</string>
+														<string key="positiveFormat">0.00</string>
+														<boolean value="NO" key="usesGroupingSeparator"/>
+													</dictionary>
+													<string key="NS.positiveformat">0.00</string>
+													<string key="NS.negativeformat">-0.00</string>
+													<nil key="NS.positiveattrs"/>
+													<nil key="NS.negativeattrs"/>
+													<reference key="NS.zero" ref="816216415"/>
+													<reference key="NS.nil" ref="894101826"/>
+													<reference key="NS.nan" ref="948895367"/>
+													<reference key="NS.min" ref="62961598"/>
+													<reference key="NS.max" ref="587283856"/>
+													<nil key="NS.rounding"/>
+													<string key="NS.decimal">.</string>
+													<string key="NS.thousand">,</string>
+													<bool key="NS.hasthousands">NO</bool>
+													<bool key="NS.localized">NO</bool>
+													<bool key="NS.allowsfloats">YES</bool>
+												</object>
+												<reference key="NSControlView" ref="540627655"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="280921921"/>
+												<reference key="NSTextColor" ref="985722622"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="57820565">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{13, 23}, {22, 16}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="626904381">
+												<int key="NSCellFlags">67239424</int>
+												<int key="NSCellFlags2">67108864</int>
+												<object class="NSMutableString" key="NSContents">
+													<characters key="NS.bytes">Y:</characters>
+												</object>
+												<reference key="NSSupport" ref="689751179"/>
+												<reference key="NSControlView" ref="57820565"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="727008824"/>
+												<reference key="NSTextColor" ref="896908664"/>
+											</object>
+										</object>
+										<object class="NSTextField" id="349710840">
+											<reference key="NSNextResponder" ref="61857917"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{176, 20}, {72, 21}}</string>
+											<reference key="NSSuperview" ref="61857917"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="295604057">
+												<int key="NSCellFlags">-1804468671</int>
+												<int key="NSCellFlags2">4195328</int>
+												<reference key="NSSupport" ref="689751179"/>
+												<object class="NSNumberFormatter" key="NSFormatter" id="450164334">
+													<dictionary class="NSMutableDictionary" key="NS.attributes">
+														<boolean value="YES" key="allowsFloats"/>
+														<object class="NSAttributedString" key="attributedStringForNil" id="612705879">
+															<string key="NSString"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForNotANumber" id="119677482">
+															<string key="NSString">NaN</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForZero" id="906948439">
+															<string key="NSString">0.00</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<string key="decimalSeparator">.</string>
+														<integer value="1000" key="formatterBehavior"/>
+														<string key="groupingSeparator">,</string>
+														<reference key="locale" ref="519826077"/>
+														<object class="NSDecimalNumberPlaceholder" key="minimum" id="732673515">
+															<int key="NS.exponent">0</int>
+															<int key="NS.length">0</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">NO</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<string key="negativeFormat">-0.00</string>
+														<string key="positiveFormat">0.00</string>
+														<boolean value="NO" key="usesGroupingSeparator"/>
+													</dictionary>
+													<string key="NS.positiveformat">0.00</string>
+													<string key="NS.negativeformat">-0.00</string>
+													<nil key="NS.positiveattrs"/>
+													<nil key="NS.negativeattrs"/>
+													<reference key="NS.zero" ref="906948439"/>
+													<reference key="NS.nil" ref="612705879"/>
+													<reference key="NS.nan" ref="119677482"/>
+													<reference key="NS.min" ref="732673515"/>
+													<reference key="NS.max" ref="587283856"/>
+													<nil key="NS.rounding"/>
+													<string key="NS.decimal">.</string>
+													<string key="NS.thousand">,</string>
+													<bool key="NS.hasthousands">NO</bool>
+													<bool key="NS.localized">NO</bool>
+													<bool key="NS.allowsfloats">YES</bool>
+												</object>
+												<reference key="NSControlView" ref="349710840"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="280921921"/>
+												<reference key="NSTextColor" ref="985722622"/>
+											</object>
+										</object>
+									</array>
+									<string key="NSFrame">{{2, 2}, {268, 92}}</string>
+									<reference key="NSSuperview" ref="72079224"/>
+								</object>
+							</array>
+							<string key="NSFrame">{{17, 16}, {272, 112}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Dimensions</string>
+								<reference key="NSSupport" ref="689751179"/>
+								<reference key="NSBackgroundColor" ref="280921921"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="61857917"/>
+							<int key="NSBorderType">3</int>
+							<int key="NSBoxType">0</int>
+							<int key="NSTitlePosition">2</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSColorWell" id="39880554">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<set class="NSMutableSet" key="NSDragTypes">
+								<object class="NSMutableString" id="240875376">
+									<characters key="NS.bytes">NSColor pasteboard type</characters>
+								</object>
+							</set>
+							<string key="NSFrame">{{65, 221}, {52, 39}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<bool key="NSEnabled">YES</bool>
+							<bool key="NSIsBordered">YES</bool>
+							<object class="NSColor" key="NSColor" id="397568282">
+								<int key="NSColorSpace">1</int>
+								<bytes key="NSRGB">MSAxIDEAA</bytes>
+							</object>
+						</object>
+						<object class="NSColorWell" id="674694118">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<set class="NSMutableSet" key="NSDragTypes">
+								<reference ref="240875376"/>
+							</set>
+							<string key="NSFrame">{{196, 221}, {52, 39}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<bool key="NSEnabled">YES</bool>
+							<bool key="NSIsBordered">YES</bool>
+							<reference key="NSColor" ref="397568282"/>
+						</object>
+						<object class="NSBox" id="72197989">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<array class="NSMutableArray" key="NSSubviews">
+								<object class="NSView" id="361183281">
+									<reference key="NSNextResponder" ref="72197989"/>
+									<int key="NSvFlags">256</int>
+									<array class="NSMutableArray" key="NSSubviews">
+										<object class="NSSlider" id="13575639">
+											<reference key="NSNextResponder" ref="361183281"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{14, 18}, {154, 21}}</string>
+											<reference key="NSSuperview" ref="361183281"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSSliderCell" key="NSCell" id="196382385">
+												<int key="NSCellFlags">67501824</int>
+												<int key="NSCellFlags2">0</int>
+												<object class="NSMutableString" key="NSContents" id="963319000">
+													<characters key="NS.bytes"/>
+												</object>
+												<reference key="NSSupport" ref="689751179"/>
+												<reference key="NSControlView" ref="13575639"/>
+												<double key="NSMaxValue">18</double>
+												<double key="NSMinValue">0.0</double>
+												<double key="NSValue">0.0</double>
+												<double key="NSAltIncValue">0.0</double>
+												<int key="NSNumberOfTickMarks">0</int>
+												<int key="NSTickMarkPosition">0</int>
+												<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+												<bool key="NSVertical">NO</bool>
+											</object>
+										</object>
+										<object class="NSTextField" id="329059466">
+											<reference key="NSNextResponder" ref="361183281"/>
+											<int key="NSvFlags">256</int>
+											<string key="NSFrame">{{176, 20}, {72, 21}}</string>
+											<reference key="NSSuperview" ref="361183281"/>
+											<bool key="NSEnabled">YES</bool>
+											<object class="NSTextFieldCell" key="NSCell" id="793532972">
+												<int key="NSCellFlags">-1804468672</int>
+												<int key="NSCellFlags2">4195328</int>
+												<reference key="NSSupport" ref="689751179"/>
+												<object class="NSNumberFormatter" key="NSFormatter" id="779220802">
+													<dictionary class="NSMutableDictionary" key="NS.attributes">
+														<boolean value="YES" key="allowsFloats"/>
+														<object class="NSAttributedString" key="attributedStringForNil" id="674763076">
+															<string key="NSString"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForNotANumber" id="882975213">
+															<string key="NSString">NaN</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<object class="NSAttributedString" key="attributedStringForZero" id="989956826">
+															<string key="NSString">0.00</string>
+															<reference key="NSAttributes" ref="899468899"/>
+														</object>
+														<string key="decimalSeparator">.</string>
+														<integer value="1000" key="formatterBehavior"/>
+														<string key="groupingSeparator">,</string>
+														<reference key="locale" ref="519826077"/>
+														<object class="NSDecimalNumberPlaceholder" key="maximum" id="497929915">
+															<int key="NS.exponent">0</int>
+															<int key="NS.length">1</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">YES</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">EgAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<object class="NSDecimalNumberPlaceholder" key="minimum" id="643221827">
+															<int key="NS.exponent">0</int>
+															<int key="NS.length">0</int>
+															<bool key="NS.negative">NO</bool>
+															<bool key="NS.compact">NO</bool>
+															<int key="NS.mantissa.bo">1</int>
+															<bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+														</object>
+														<string key="negativeFormat">-0.00</string>
+														<string key="positiveFormat">0.00</string>
+														<boolean value="NO" key="usesGroupingSeparator"/>
+													</dictionary>
+													<string key="NS.positiveformat">0.00</string>
+													<string key="NS.negativeformat">-0.00</string>
+													<nil key="NS.positiveattrs"/>
+													<nil key="NS.negativeattrs"/>
+													<reference key="NS.zero" ref="989956826"/>
+													<reference key="NS.nil" ref="674763076"/>
+													<reference key="NS.nan" ref="882975213"/>
+													<reference key="NS.min" ref="643221827"/>
+													<reference key="NS.max" ref="497929915"/>
+													<nil key="NS.rounding"/>
+													<string key="NS.decimal">.</string>
+													<string key="NS.thousand">,</string>
+													<bool key="NS.hasthousands">NO</bool>
+													<bool key="NS.localized">NO</bool>
+													<bool key="NS.allowsfloats">YES</bool>
+												</object>
+												<reference key="NSControlView" ref="329059466"/>
+												<bool key="NSDrawsBackground">YES</bool>
+												<reference key="NSBackgroundColor" ref="280921921"/>
+												<reference key="NSTextColor" ref="985722622"/>
+											</object>
+										</object>
+									</array>
+									<string key="NSFrame">{{2, 2}, {268, 61}}</string>
+									<reference key="NSSuperview" ref="72197989"/>
+								</object>
+							</array>
+							<string key="NSFrame">{{17, 132}, {272, 81}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<string key="NSOffsets">{0, 0}</string>
+							<object class="NSTextFieldCell" key="NSTitleCell">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Line Width</string>
+								<reference key="NSSupport" ref="689751179"/>
+								<reference key="NSBackgroundColor" ref="280921921"/>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+								</object>
+							</object>
+							<reference key="NSContentView" ref="361183281"/>
+							<int key="NSBorderType">3</int>
+							<int key="NSBoxType">0</int>
+							<int key="NSTitlePosition">2</int>
+							<bool key="NSTransparent">NO</bool>
+						</object>
+						<object class="NSButton" id="602024238">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{18, 231}, {41, 18}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="749822492">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<object class="NSMutableString" key="NSContents">
+									<characters key="NS.bytes">Fill</characters>
+								</object>
+								<reference key="NSSupport" ref="689751179"/>
+								<reference key="NSControlView" ref="602024238"/>
+								<int key="NSButtonFlags">-935570945</int>
+								<int key="NSButtonFlags2">0</int>
+								<object class="NSCustomResource" key="NSNormalImage" id="651300605">
+									<string key="NSClassName">NSImage</string>
+									<string key="NSResourceName">NSSwitch</string>
+								</object>
+								<object class="NSButtonImageSource" key="NSAlternateImage" id="476859034">
+									<string key="NSImageName">NSSwitch</string>
+								</object>
+								<reference key="NSAlternateContents" ref="963319000"/>
+								<reference key="NSKeyEquivalent" ref="963319000"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSButton" id="870893263">
+							<reference key="NSNextResponder" ref="843987841"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{142, 231}, {48, 18}}</string>
+							<reference key="NSSuperview" ref="843987841"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="1046592489">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Line</string>
+								<reference key="NSSupport" ref="689751179"/>
+								<reference key="NSControlView" ref="870893263"/>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">0</int>
+								<reference key="NSNormalImage" ref="651300605"/>
+								<reference key="NSAlternateImage" ref="476859034"/>
+								<string key="NSAlternateContents"/>
+								<reference key="NSKeyEquivalent" ref="963319000"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+					</array>
+					<string key="NSFrameSize">{306, 280}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
+				<string key="NSMinSize">{114.696, 21}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+			<object class="NSCustomObject" id="209195836">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="932219528"/>
+						<reference key="destination" ref="388837833"/>
+					</object>
+					<int key="connectionID">50</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="388837833"/>
+						<reference key="destination" ref="932219528"/>
+					</object>
+					<int key="connectionID">51</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">initialFirstResponder</string>
+						<reference key="source" ref="388837833"/>
+						<reference key="destination" ref="329059466"/>
+					</object>
+					<int key="connectionID">52</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="602024238"/>
+						<reference key="destination" ref="39880554"/>
+					</object>
+					<int key="connectionID">54</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="39880554"/>
+						<reference key="destination" ref="870893263"/>
+					</object>
+					<int key="connectionID">56</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="870893263"/>
+						<reference key="destination" ref="674694118"/>
+					</object>
+					<int key="connectionID">58</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="674694118"/>
+						<reference key="destination" ref="13575639"/>
+					</object>
+					<int key="connectionID">60</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="13575639"/>
+						<reference key="destination" ref="329059466"/>
+					</object>
+					<int key="connectionID">62</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="329059466"/>
+						<reference key="destination" ref="902318256"/>
+					</object>
+					<int key="connectionID">64</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="902318256"/>
+						<reference key="destination" ref="540627655"/>
+					</object>
+					<int key="connectionID">66</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="540627655"/>
+						<reference key="destination" ref="120308904"/>
+					</object>
+					<int key="connectionID">68</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="120308904"/>
+						<reference key="destination" ref="349710840"/>
+					</object>
+					<int key="connectionID">70</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">nextKeyView</string>
+						<reference key="source" ref="349710840"/>
+						<reference key="destination" ref="602024238"/>
+					</object>
+					<int key="connectionID">72</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.fillColor</string>
+						<reference key="source" ref="39880554"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="39880554"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.fillColor</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.fillColor</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">84</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.strokeColor</string>
+						<reference key="source" ref="674694118"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="674694118"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.strokeColor</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.strokeColor</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">86</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+						<reference key="source" ref="13575639"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="13575639"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">90</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+						<reference key="source" ref="329059466"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="329059466"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.strokeWidth</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">92</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.drawingFill</string>
+						<reference key="source" ref="602024238"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="602024238"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.drawingFill</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingFill</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">101</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.graphicsController.selection.drawingFill</string>
+						<reference key="source" ref="39880554"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="39880554"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.graphicsController.selection.drawingFill</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingFill</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">102</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+						<reference key="source" ref="870893263"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="870893263"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">103</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+						<reference key="source" ref="674694118"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="674694118"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">104</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+						<reference key="source" ref="13575639"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="13575639"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">105</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">editable: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+						<reference key="source" ref="329059466"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="329059466"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">editable: mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<string key="NSBinding">editable</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.drawingStroke</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">106</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.xPosition</string>
+						<reference key="source" ref="902318256"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="902318256"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.xPosition</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.xPosition</string>
+							<dictionary key="NSOptions">
+								<boolean value="NO" key="NSAllowsEditingMultipleValuesSelection"/>
+								<boolean value="YES" key="NSConditionallySetsEnabled"/>
+							</dictionary>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">111</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.width</string>
+						<reference key="source" ref="120308904"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="120308904"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.width</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.width</string>
+							<dictionary key="NSOptions">
+								<boolean value="NO" key="NSAllowsEditingMultipleValuesSelection"/>
+								<boolean value="YES" key="NSConditionallySetsEnabled"/>
+							</dictionary>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">112</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.yPosition</string>
+						<reference key="source" ref="540627655"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="540627655"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.yPosition</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.yPosition</string>
+							<dictionary key="NSOptions">
+								<boolean value="NO" key="NSAllowsEditingMultipleValuesSelection"/>
+								<boolean value="YES" key="NSConditionallySetsEnabled"/>
+							</dictionary>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">113</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: mainWindow.windowController.graphicsController.selection.height</string>
+						<reference key="source" ref="349710840"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="349710840"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">value: mainWindow.windowController.graphicsController.selection.height</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.height</string>
+							<dictionary key="NSOptions">
+								<boolean value="NO" key="NSAllowsEditingMultipleValuesSelection"/>
+								<boolean value="YES" key="NSConditionallySetsEnabled"/>
+							</dictionary>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">114</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.graphicsController.selection.canSetDrawingFill</string>
+						<reference key="source" ref="602024238"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="602024238"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.graphicsController.selection.canSetDrawingFill</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.canSetDrawingFill</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">115</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: mainWindow.windowController.graphicsController.selection.canSetDrawingStroke</string>
+						<reference key="source" ref="870893263"/>
+						<reference key="destination" ref="209195836"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="870893263"/>
+							<reference key="NSDestination" ref="209195836"/>
+							<string key="NSLabel">enabled: mainWindow.windowController.graphicsController.selection.canSetDrawingStroke</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">mainWindow.windowController.graphicsController.selection.canSetDrawingStroke</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">116</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="988772923"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="932219528"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="737654716"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="388837833"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="843987841"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Panel</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="843987841"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="72079224"/>
+							<reference ref="39880554"/>
+							<reference ref="674694118"/>
+							<reference ref="72197989"/>
+							<reference ref="602024238"/>
+							<reference ref="870893263"/>
+						</array>
+						<reference key="parent" ref="388837833"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="72079224"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="120308904"/>
+							<reference ref="917761835"/>
+							<reference ref="869400574"/>
+							<reference ref="902318256"/>
+							<reference ref="414156681"/>
+							<reference ref="540627655"/>
+							<reference ref="57820565"/>
+							<reference ref="349710840"/>
+						</array>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="39880554"/>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="674694118"/>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">15</int>
+						<reference key="object" ref="72197989"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="13575639"/>
+							<reference ref="329059466"/>
+						</array>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">38</int>
+						<reference key="object" ref="602024238"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="749822492"/>
+						</array>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">39</int>
+						<reference key="object" ref="870893263"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1046592489"/>
+						</array>
+						<reference key="parent" ref="843987841"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">78</int>
+						<reference key="object" ref="209195836"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Shared App</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">128</int>
+						<reference key="object" ref="749822492"/>
+						<reference key="parent" ref="602024238"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">129</int>
+						<reference key="object" ref="1046592489"/>
+						<reference key="parent" ref="870893263"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="570859332"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">28</int>
+						<reference key="object" ref="120308904"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="288784548"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">118</int>
+						<reference key="object" ref="288784548"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="92528146"/>
+						</array>
+						<reference key="parent" ref="120308904"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">75</int>
+						<reference key="object" ref="92528146"/>
+						<reference key="parent" ref="288784548"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="917761835"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="229791022"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">119</int>
+						<reference key="object" ref="229791022"/>
+						<reference key="parent" ref="917761835"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">32</int>
+						<reference key="object" ref="869400574"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="638494388"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">121</int>
+						<reference key="object" ref="638494388"/>
+						<reference key="parent" ref="869400574"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">33</int>
+						<reference key="object" ref="902318256"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="333402523"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">122</int>
+						<reference key="object" ref="333402523"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="627356307"/>
+						</array>
+						<reference key="parent" ref="902318256"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">74</int>
+						<reference key="object" ref="627356307"/>
+						<reference key="parent" ref="333402523"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">34</int>
+						<reference key="object" ref="414156681"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="710689379"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">123</int>
+						<reference key="object" ref="710689379"/>
+						<reference key="parent" ref="414156681"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">35</int>
+						<reference key="object" ref="540627655"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="694584804"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">124</int>
+						<reference key="object" ref="694584804"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="640930946"/>
+						</array>
+						<reference key="parent" ref="540627655"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">76</int>
+						<reference key="object" ref="640930946"/>
+						<reference key="parent" ref="694584804"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">36</int>
+						<reference key="object" ref="57820565"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="626904381"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">125</int>
+						<reference key="object" ref="626904381"/>
+						<reference key="parent" ref="57820565"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">31</int>
+						<reference key="object" ref="349710840"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="295604057"/>
+						</array>
+						<reference key="parent" ref="72079224"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">120</int>
+						<reference key="object" ref="295604057"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="450164334"/>
+						</array>
+						<reference key="parent" ref="349710840"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">77</int>
+						<reference key="object" ref="450164334"/>
+						<reference key="parent" ref="295604057"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="13575639"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="196382385"/>
+						</array>
+						<reference key="parent" ref="72197989"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">126</int>
+						<reference key="object" ref="196382385"/>
+						<reference key="parent" ref="13575639"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">37</int>
+						<reference key="object" ref="329059466"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="793532972"/>
+						</array>
+						<reference key="parent" ref="72197989"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">127</int>
+						<reference key="object" ref="793532972"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="779220802"/>
+						</array>
+						<reference key="parent" ref="329059466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">73</int>
+						<reference key="object" ref="779220802"/>
+						<reference key="parent" ref="793532972"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="11.ImportedFromIB2"/>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="12.ImportedFromIB2"/>
+				<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="13.ImportedFromIB2"/>
+				<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="15.ImportedFromIB2"/>
+				<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="28.ImportedFromIB2"/>
+				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="29.ImportedFromIB2"/>
+				<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="31.ImportedFromIB2"/>
+				<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="32.ImportedFromIB2"/>
+				<string key="33.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="33.ImportedFromIB2"/>
+				<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="34.ImportedFromIB2"/>
+				<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="35.ImportedFromIB2"/>
+				<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="36.ImportedFromIB2"/>
+				<string key="37.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="37.ImportedFromIB2"/>
+				<string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="38.ImportedFromIB2"/>
+				<string key="39.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="39.ImportedFromIB2"/>
+				<string key="5.IBEditorWindowLastContentRect">{{35, 848}, {306, 280}}</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="5.IBWindowTemplateEditedContentRect">{{35, 848}, {306, 280}}</string>
+				<boolean value="YES" key="5.ImportedFromIB2"/>
+				<boolean value="YES" key="5.windowTemplate.hasMinSize"/>
+				<string key="5.windowTemplate.minSize">{114.696, 5}</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="6.ImportedFromIB2"/>
+				<string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="73.ImportedFromIB2"/>
+				<string key="74.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="74.ImportedFromIB2"/>
+				<string key="75.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="75.ImportedFromIB2"/>
+				<string key="76.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="76.ImportedFromIB2"/>
+				<string key="77.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="77.ImportedFromIB2"/>
+				<boolean value="YES" key="78.ImportedFromIB2"/>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="8.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">129</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="798405623">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="683108150">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="576370242">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSBox</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSBox.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButton</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButtonCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSColorWell</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorWell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="375962405">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="86223361">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSNumberFormatter</string>
+					<string key="superclassName">NSFormatter</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSNumberFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="798405623"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="683108150"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="576370242"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="375962405"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="86223361"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="202094115">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSPanel</string>
+					<string key="superclassName">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSlider</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSlider.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSSliderCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSliderCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextField</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextFieldCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="202094115"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Inspector.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,957 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<integer value="25"/>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="494490083">
+			<object class="NSCustomObject" id="927302960">
+				<string key="NSClassName">NSWindowController</string>
+			</object>
+			<object class="NSCustomObject" id="477718749">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="472224144">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSUserDefaultsController" id="176621087">
+				<bool key="NSSharedInstance">YES</bool>
+			</object>
+			<object class="NSWindowTemplate" id="924558191">
+				<int key="NSWindowStyleMask">3</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{0, 1338}, {360, 240}}</string>
+				<int key="NSWTFlags">1886912512</int>
+				<string key="NSWindowTitle">Sketch Preferences</string>
+				<object class="NSMutableString" key="NSWindowClass">
+					<characters key="NS.bytes">NSPanel</characters>
+				</object>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{213, 107}</string>
+				<object class="NSView" key="NSWindowView" id="475060194">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<array class="NSMutableArray" key="NSSubviews">
+						<object class="NSButton" id="241973670">
+							<reference key="NSNextResponder" ref="475060194"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{18, 204}, {158, 18}}</string>
+							<reference key="NSSuperview" ref="475060194"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="944653417">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">0</int>
+								<string key="NSContents">Autosave documents</string>
+								<object class="NSFont" key="NSSupport" id="909131228">
+									<string key="NSName">LucidaGrande</string>
+									<double key="NSSize">13</double>
+									<int key="NSfFlags">1044</int>
+								</object>
+								<reference key="NSControlView" ref="241973670"/>
+								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags2">2</int>
+								<object class="NSCustomResource" key="NSNormalImage">
+									<string key="NSClassName">NSImage</string>
+									<string key="NSResourceName">NSSwitch</string>
+								</object>
+								<object class="NSButtonImageSource" key="NSAlternateImage">
+									<string key="NSImageName">NSSwitch</string>
+								</object>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
+						<object class="NSTextField" id="129853434">
+							<reference key="NSNextResponder" ref="475060194"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{79, 176}, {41, 22}}</string>
+							<reference key="NSSuperview" ref="475060194"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="674100135">
+								<int key="NSCellFlags">-1804468671</int>
+								<int key="NSCellFlags2">272630784</int>
+								<reference key="NSSupport" ref="909131228"/>
+								<object class="NSNumberFormatter" key="NSFormatter" id="398761935">
+									<dictionary class="NSMutableDictionary" key="NS.attributes">
+										<boolean value="YES" key="allowsFloats"/>
+										<object class="NSAttributedString" key="attributedStringForZero" id="684255031">
+											<string key="NSString">0</string>
+											<dictionary key="NSAttributes" id="157002770"/>
+										</object>
+										<string key="decimalSeparator">.</string>
+										<integer value="1000" key="formatterBehavior"/>
+										<string key="groupingSeparator">,</string>
+										<object class="NSDecimalNumberPlaceholder" key="maximum" id="360335698">
+											<int key="NS.exponent">2</int>
+											<int key="NS.length">1</int>
+											<bool key="NS.negative">NO</bool>
+											<bool key="NS.compact">YES</bool>
+											<int key="NS.mantissa.bo">1</int>
+											<bytes key="NS.mantissa">JAAAAAAAAAAAAAAAAAAAAA</bytes>
+										</object>
+										<object class="NSDecimalNumberPlaceholder" key="minimum" id="573042121">
+											<int key="NS.exponent">0</int>
+											<int key="NS.length">1</int>
+											<bool key="NS.negative">NO</bool>
+											<bool key="NS.compact">YES</bool>
+											<int key="NS.mantissa.bo">1</int>
+											<bytes key="NS.mantissa">AQAAAAAAAAAAAAAAAAAAAA</bytes>
+										</object>
+										<string key="negativeFormat">-0</string>
+										<string key="positiveFormat">0</string>
+										<boolean value="NO" key="usesGroupingSeparator"/>
+									</dictionary>
+									<string key="NS.positiveformat">0</string>
+									<string key="NS.negativeformat">-0</string>
+									<nil key="NS.positiveattrs"/>
+									<nil key="NS.negativeattrs"/>
+									<reference key="NS.zero" ref="684255031"/>
+									<object class="NSAttributedString" key="NS.nil">
+										<string key="NSString"/>
+									</object>
+									<object class="NSAttributedString" key="NS.nan">
+										<string key="NSString">NaN</string>
+										<reference key="NSAttributes" ref="157002770"/>
+									</object>
+									<reference key="NS.min" ref="573042121"/>
+									<reference key="NS.max" ref="360335698"/>
+									<nil key="NS.rounding"/>
+									<string key="NS.decimal">.</string>
+									<string key="NS.thousand">,</string>
+									<bool key="NS.hasthousands">NO</bool>
+									<bool key="NS.localized">YES</bool>
+									<bool key="NS.allowsfloats">YES</bool>
+								</object>
+								<reference key="NSControlView" ref="129853434"/>
+								<bool key="NSDrawsBackground">YES</bool>
+								<object class="NSColor" key="NSBackgroundColor">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">textBackgroundColor</string>
+									<object class="NSColor" key="NSColor">
+										<int key="NSColorSpace">3</int>
+										<bytes key="NSWhite">MQA</bytes>
+									</object>
+								</object>
+								<object class="NSColor" key="NSTextColor">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">textColor</string>
+									<object class="NSColor" key="NSColor" id="649119246">
+										<int key="NSColorSpace">3</int>
+										<bytes key="NSWhite">MAA</bytes>
+									</object>
+								</object>
+							</object>
+						</object>
+						<object class="NSTextField" id="70157630">
+							<reference key="NSNextResponder" ref="475060194"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{36, 178}, {38, 17}}</string>
+							<reference key="NSSuperview" ref="475060194"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="192013293">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">272629760</int>
+								<string key="NSContents">every</string>
+								<reference key="NSSupport" ref="909131228"/>
+								<reference key="NSControlView" ref="70157630"/>
+								<object class="NSColor" key="NSBackgroundColor" id="299947653">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">controlColor</string>
+									<object class="NSColor" key="NSColor">
+										<int key="NSColorSpace">3</int>
+										<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+									</object>
+								</object>
+								<object class="NSColor" key="NSTextColor" id="213869812">
+									<int key="NSColorSpace">6</int>
+									<string key="NSCatalogName">System</string>
+									<string key="NSColorName">controlTextColor</string>
+									<reference key="NSColor" ref="649119246"/>
+								</object>
+							</object>
+						</object>
+						<object class="NSTextField" id="222378583">
+							<reference key="NSNextResponder" ref="475060194"/>
+							<int key="NSvFlags">256</int>
+							<string key="NSFrame">{{125, 178}, {60, 17}}</string>
+							<reference key="NSSuperview" ref="475060194"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSTextFieldCell" key="NSCell" id="650130397">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">272629760</int>
+								<string key="NSContents">seconds</string>
+								<reference key="NSSupport" ref="909131228"/>
+								<reference key="NSControlView" ref="222378583"/>
+								<reference key="NSBackgroundColor" ref="299947653"/>
+								<reference key="NSTextColor" ref="213869812"/>
+							</object>
+						</object>
+					</array>
+					<string key="NSFrameSize">{360, 240}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string>
+				<string key="NSMinSize">{213, 129}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="927302960"/>
+						<reference key="destination" ref="924558191"/>
+					</object>
+					<int key="connectionID">32</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: values.autosaves</string>
+						<reference key="source" ref="241973670"/>
+						<reference key="destination" ref="176621087"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="241973670"/>
+							<reference key="NSDestination" ref="176621087"/>
+							<string key="NSLabel">value: values.autosaves</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">values.autosaves</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">44</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">value: values.autosavingDelay</string>
+						<reference key="source" ref="129853434"/>
+						<reference key="destination" ref="176621087"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="129853434"/>
+							<reference key="NSDestination" ref="176621087"/>
+							<string key="NSLabel">value: values.autosavingDelay</string>
+							<string key="NSBinding">value</string>
+							<string key="NSKeyPath">values.autosavingDelay</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">45</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: values.autosaves</string>
+						<reference key="source" ref="70157630"/>
+						<reference key="destination" ref="176621087"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="70157630"/>
+							<reference key="NSDestination" ref="176621087"/>
+							<string key="NSLabel">enabled: values.autosaves</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">values.autosaves</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">46</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: values.autosaves</string>
+						<reference key="source" ref="129853434"/>
+						<reference key="destination" ref="176621087"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="129853434"/>
+							<reference key="NSDestination" ref="176621087"/>
+							<string key="NSLabel">enabled: values.autosaves</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">values.autosaves</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">47</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">enabled: values.autosaves</string>
+						<reference key="source" ref="222378583"/>
+						<reference key="destination" ref="176621087"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="222378583"/>
+							<reference key="NSDestination" ref="176621087"/>
+							<string key="NSLabel">enabled: values.autosaves</string>
+							<string key="NSBinding">enabled</string>
+							<string key="NSKeyPath">values.autosaves</string>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">48</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="494490083"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="927302960"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="477718749"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="472224144"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="176621087"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Shared Defaults</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">25</int>
+						<reference key="object" ref="924558191"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="475060194"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Panel</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">26</int>
+						<reference key="object" ref="475060194"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="241973670"/>
+							<reference ref="129853434"/>
+							<reference ref="70157630"/>
+							<reference ref="222378583"/>
+						</array>
+						<reference key="parent" ref="924558191"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">27</int>
+						<reference key="object" ref="241973670"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="944653417"/>
+						</array>
+						<reference key="parent" ref="475060194"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">28</int>
+						<reference key="object" ref="129853434"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="674100135"/>
+						</array>
+						<reference key="parent" ref="475060194"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">30</int>
+						<reference key="object" ref="70157630"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="192013293"/>
+						</array>
+						<reference key="parent" ref="475060194"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">31</int>
+						<reference key="object" ref="222378583"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="650130397"/>
+						</array>
+						<reference key="parent" ref="475060194"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">50</int>
+						<reference key="object" ref="944653417"/>
+						<reference key="parent" ref="241973670"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">51</int>
+						<reference key="object" ref="674100135"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="398761935"/>
+						</array>
+						<reference key="parent" ref="129853434"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">52</int>
+						<reference key="object" ref="192013293"/>
+						<reference key="parent" ref="70157630"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">53</int>
+						<reference key="object" ref="650130397"/>
+						<reference key="parent" ref="222378583"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="398761935"/>
+						<reference key="parent" ref="674100135"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="-3.ImportedFromIB2"/>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="11.ImportedFromIB2"/>
+				<string key="25.IBEditorWindowLastContentRect">{{56, 859}, {360, 240}}</string>
+				<string key="25.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="25.IBWindowTemplateEditedContentRect">{{56, 859}, {360, 240}}</string>
+				<boolean value="YES" key="25.ImportedFromIB2"/>
+				<boolean value="YES" key="25.windowTemplate.hasMinSize"/>
+				<string key="25.windowTemplate.minSize">{213, 107}</string>
+				<string key="26.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="26.ImportedFromIB2"/>
+				<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="27.ImportedFromIB2"/>
+				<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="28.ImportedFromIB2"/>
+				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="29.ImportedFromIB2"/>
+				<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="30.ImportedFromIB2"/>
+				<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="31.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">53</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="875118445">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="152758814">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="774721343">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButton</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButton.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButtonCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="961340806">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSController</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="354851930">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSNumberFormatter</string>
+					<string key="superclassName">NSFormatter</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSNumberFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="875118445"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="152758814"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="774721343"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="961340806"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="354851930"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1009158453">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSPanel</string>
+					<string key="superclassName">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextField</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextField.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSTextFieldCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSUserDefaultsController</string>
+					<string key="superclassName">NSController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserDefaultsController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="1009158453"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Preferences.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/SKTError.strings
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/SKTError.strings
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/Sketch.scriptTerminology
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/Sketch.scriptTerminology	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/Sketch.scriptTerminology	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,93 @@
+// Sketch.scriptTerminology
+// Sketch Example
+//
+
+{
+    "Name" = "Sketch suite";
+    "Description" = "Sketch specific classes.";
+    
+    "Classes" = {
+        "NSApplication" = {
+            "Name" = "application";
+            "PluralName" = "applications";
+            "Description" = "Sketch's top level scripting object.";
+        };
+        "SKTGraphic" = {
+            "Name" = "graphic";
+            "PluralName" = "graphics";
+            "Description" = "A graphic.  This abstract class represents the individual shapes in a Sketch document.  There are subclasses for each specific type of graphic.";
+            "Attributes" = {
+                "xPosition" = {
+                    "Name" = "x position";
+                    "Description" = "The x coordinate of the graphic's bounding rectangle.";
+                };
+                "yPosition" = {
+                    "Name" = "y position";
+                    "Description" = "The y coordinate of the graphic's bounding rectangle.";
+                };
+                "width" = {
+                    "Name" = "width";
+                    "Description" = "The width of the graphic's bounding rectangle.";
+                };
+                "height" = {
+                    "Name" = "height";
+                    "Description" = "The height of the graphic's bounding rectangle.";
+                };
+                "scriptingStrokeColor" = {
+                    "Name" = "stroke color";
+                    "Description" = "The stroke color.";
+                };
+                "scriptingFillColor" = {
+                    "Name" = "fill color";
+                    "Description" = "The fill color.";
+                };
+		"scriptingStrokeWidth" = {
+                    "Name" = "stroke thickness";
+                    "Description" = "The thickness of the stroke.";
+		};
+            };
+	};
+        "SKTRectangle" = {
+            "Name" = "rectangle";
+            "PluralName" = "rectangles";
+            "Description" = "A rectangle graphic.";
+	};
+        "SKTCircle" = {
+            "Name" = "circle";
+            "PluralName" = "circles";
+            "Description" = "A circle graphic.";
+	};
+        "SKTLine" = {
+            "Name" = "line";
+            "PluralName" = "lines";
+            "Description" = "A line graphic.";
+	};
+        "SKTText" = {
+            "Name" = "text area";
+            "PluralName" = "text areas";
+            "Description" = "A text graphic.";
+	};
+        "SKTImage" = {
+            "Name" = "image";
+            "PluralName" = "images";
+            "Description" = "an image";
+            "Attributes" = {
+                "filePath" = {
+                    "Name" = "imagefile";
+                    "Description" = "The graphic file to use for the contents of the image.  This attribute should only be used for setting.";
+                };
+            };
+	};
+        "SKTDocument" = {
+            "Name" = "document";
+            "PluralName" = "documents";
+            "Description" = "A Sketch document.";
+	};
+    };
+    "Synonyms" = {
+        "tact" = {
+            "Name" = "text contents";
+            "Description" = "The textual contents of a text area graphic.";
+        };
+    };
+}

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/designable.nib
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/designable.nib	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/designable.nib	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,837 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">10D573</string>
+		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">740</string>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+			<integer value="9"/>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1011421698">
+			<object class="NSCustomObject" id="55877253">
+				<string key="NSClassName">SKTToolPaletteController</string>
+			</object>
+			<object class="NSCustomObject" id="388045246">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="591178541">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSWindowTemplate" id="614632977">
+				<int key="NSWindowStyleMask">19</int>
+				<int key="NSWindowBacking">2</int>
+				<string key="NSWindowRect">{{5, 771}, {42, 210}}</string>
+				<int key="NSWTFlags">-265814016</int>
+				<string key="NSWindowTitle"/>
+				<object class="NSMutableString" key="NSWindowClass">
+					<characters key="NS.bytes">NSPanel</characters>
+				</object>
+				<object class="NSMutableString" key="NSViewClass">
+					<characters key="NS.bytes">View</characters>
+				</object>
+				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
+				<string key="NSWindowContentMinSize">{59, 5}</string>
+				<object class="NSView" key="NSWindowView" id="1012703209">
+					<reference key="NSNextResponder"/>
+					<int key="NSvFlags">256</int>
+					<array class="NSMutableArray" key="NSSubviews">
+						<object class="NSMatrix" id="803976689">
+							<reference key="NSNextResponder" ref="1012703209"/>
+							<int key="NSvFlags">292</int>
+							<string key="NSFrameSize">{42, 210}</string>
+							<reference key="NSSuperview" ref="1012703209"/>
+							<bool key="NSEnabled">YES</bool>
+							<int key="NSNumRows">5</int>
+							<int key="NSNumCols">1</int>
+							<array class="NSMutableArray" key="NSCells">
+								<object class="NSButtonCell" id="830318516">
+									<int key="NSCellFlags">-2080244224</int>
+									<int key="NSCellFlags2">134217728</int>
+									<object class="NSMutableString" key="NSContents" id="877851879">
+										<characters key="NS.bytes">Button</characters>
+									</object>
+									<object class="NSFont" key="NSSupport" id="605660851">
+										<string key="NSName">LucidaGrande</string>
+										<double key="NSSize">14</double>
+										<int key="NSfFlags">16</int>
+									</object>
+									<reference key="NSControlView" ref="803976689"/>
+									<int key="NSButtonFlags">-1228652289</int>
+									<int key="NSButtonFlags2">2</int>
+									<object class="NSCustomResource" key="NSNormalImage" id="896179081">
+										<string key="NSClassName">NSImage</string>
+										<string key="NSResourceName">Arrow</string>
+									</object>
+									<object class="NSMutableString" key="NSAlternateContents" id="285721517">
+										<characters key="NS.bytes"/>
+									</object>
+									<reference key="NSKeyEquivalent" ref="285721517"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="641586820">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">134217728</int>
+									<reference key="NSContents" ref="877851879"/>
+									<reference key="NSSupport" ref="605660851"/>
+									<reference key="NSControlView" ref="803976689"/>
+									<int key="NSTag">1</int>
+									<int key="NSButtonFlags">-1228652289</int>
+									<int key="NSButtonFlags2">2</int>
+									<object class="NSCustomResource" key="NSNormalImage">
+										<string key="NSClassName">NSImage</string>
+										<string key="NSResourceName">Rectangle</string>
+									</object>
+									<reference key="NSAlternateContents" ref="285721517"/>
+									<reference key="NSKeyEquivalent" ref="285721517"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="325213769">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">134217728</int>
+									<reference key="NSContents" ref="877851879"/>
+									<reference key="NSSupport" ref="605660851"/>
+									<reference key="NSControlView" ref="803976689"/>
+									<int key="NSTag">2</int>
+									<int key="NSButtonFlags">-1228652289</int>
+									<int key="NSButtonFlags2">2</int>
+									<object class="NSCustomResource" key="NSNormalImage">
+										<string key="NSClassName">NSImage</string>
+										<string key="NSResourceName">Circle</string>
+									</object>
+									<reference key="NSAlternateContents" ref="285721517"/>
+									<reference key="NSKeyEquivalent" ref="285721517"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="320390269">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">134217728</int>
+									<reference key="NSContents" ref="877851879"/>
+									<reference key="NSSupport" ref="605660851"/>
+									<reference key="NSControlView" ref="803976689"/>
+									<int key="NSTag">3</int>
+									<int key="NSButtonFlags">-1228652289</int>
+									<int key="NSButtonFlags2">2</int>
+									<object class="NSCustomResource" key="NSNormalImage">
+										<string key="NSClassName">NSImage</string>
+										<string key="NSResourceName">Line</string>
+									</object>
+									<reference key="NSAlternateContents" ref="285721517"/>
+									<reference key="NSKeyEquivalent" ref="285721517"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+								<object class="NSButtonCell" id="67631086">
+									<int key="NSCellFlags">67239424</int>
+									<int key="NSCellFlags2">134217728</int>
+									<reference key="NSContents" ref="877851879"/>
+									<reference key="NSSupport" ref="605660851"/>
+									<reference key="NSControlView" ref="803976689"/>
+									<int key="NSTag">4</int>
+									<int key="NSButtonFlags">-1228652289</int>
+									<int key="NSButtonFlags2">2</int>
+									<object class="NSCustomResource" key="NSNormalImage">
+										<string key="NSClassName">NSImage</string>
+										<string key="NSResourceName">TextGraphic</string>
+									</object>
+									<reference key="NSAlternateContents" ref="285721517"/>
+									<reference key="NSKeyEquivalent" ref="285721517"/>
+									<int key="NSPeriodicDelay">200</int>
+									<int key="NSPeriodicInterval">25</int>
+								</object>
+							</array>
+							<string key="NSCellSize">{42, 42}</string>
+							<string key="NSIntercellSpacing">{0, 0}</string>
+							<int key="NSMatrixFlags">1140850688</int>
+							<string key="NSCellClass">NSActionCell</string>
+							<object class="NSButtonCell" key="NSProtoCell" id="227773981">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<reference key="NSContents" ref="877851879"/>
+								<reference key="NSSupport" ref="605660851"/>
+								<int key="NSTag">-1</int>
+								<int key="NSButtonFlags">-2033958657</int>
+								<int key="NSButtonFlags2">2</int>
+								<reference key="NSNormalImage" ref="896179081"/>
+								<reference key="NSAlternateContents" ref="285721517"/>
+								<reference key="NSKeyEquivalent" ref="285721517"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+							<reference key="NSSelectedCell" ref="830318516"/>
+							<object class="NSColor" key="NSBackgroundColor" id="641300309">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlColor</string>
+								<object class="NSColor" key="NSColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+								</object>
+							</object>
+							<reference key="NSCellBackgroundColor" ref="641300309"/>
+							<reference key="NSFont" ref="605660851"/>
+						</object>
+					</array>
+					<string key="NSFrameSize">{42, 210}</string>
+					<reference key="NSSuperview"/>
+				</object>
+				<string key="NSScreenRect">{{0, 0}, {1280, 1002}}</string>
+				<string key="NSMinSize">{59, 21}</string>
+				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">window</string>
+						<reference key="source" ref="55877253"/>
+						<reference key="destination" ref="614632977"/>
+					</object>
+					<int key="connectionID">7</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="614632977"/>
+						<reference key="destination" ref="55877253"/>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBOutletConnection" key="connection">
+						<string key="label">toolButtons</string>
+						<reference key="source" ref="55877253"/>
+						<reference key="destination" ref="803976689"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">selectToolAction:</string>
+						<reference key="source" ref="55877253"/>
+						<reference key="destination" ref="803976689"/>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1011421698"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="55877253"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="388045246"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">First Responder</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-3</int>
+						<reference key="object" ref="591178541"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Application</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="614632977"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="1012703209"/>
+						</array>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">Panel</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="1012703209"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="803976689"/>
+						</array>
+						<reference key="parent" ref="614632977"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="803976689"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="320390269"/>
+							<reference ref="830318516"/>
+							<reference ref="325213769"/>
+							<reference ref="641586820"/>
+							<reference ref="67631086"/>
+							<reference ref="227773981"/>
+						</array>
+						<reference key="parent" ref="1012703209"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="320390269"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="830318516"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="325213769"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="641586820"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">14</int>
+						<reference key="object" ref="67631086"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">18</int>
+						<reference key="object" ref="227773981"/>
+						<reference key="parent" ref="803976689"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="-3.ImportedFromIB2"/>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="10.ImportedFromIB2"/>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="11.ImportedFromIB2"/>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="12.ImportedFromIB2"/>
+				<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="13.ImportedFromIB2"/>
+				<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="14.ImportedFromIB2"/>
+				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="5.IBEditorWindowLastContentRect">{{24, 941}, {42, 210}}</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<string key="5.IBWindowTemplateEditedContentRect">{{24, 941}, {42, 210}}</string>
+				<boolean value="YES" key="5.ImportedFromIB2"/>
+				<boolean value="YES" key="5.windowTemplate.hasMinSize"/>
+				<string key="5.windowTemplate.minSize">{59, 5}</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="6.ImportedFromIB2"/>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="9.ImportedFromIB2"/>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">18</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">FirstResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTToolPaletteController</string>
+					<string key="superclassName">NSWindowController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">selectToolAction:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">toolButtons</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">SKTToolPaletteController.rb</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SKTToolPaletteController</string>
+					<string key="superclassName">NSWindowController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBUserSource</string>
+						<string key="minorKey"/>
+					</object>
+				</object>
+			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+				<object class="IBPartialClassDescription">
+					<string key="className">NSActionCell</string>
+					<string key="superclassName">NSCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="123653270">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="38509220">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="481227365">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSApplication</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSButtonCell</string>
+					<string key="superclassName">NSActionCell</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSCell</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSCell.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSControl</string>
+					<string key="superclassName">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="353763590">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSFormatter</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMatrix</string>
+					<string key="superclassName">NSControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSMenu</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="588526049">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="123653270"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="38509220"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="481227365"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="353763590"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<reference key="sourceIdentifier" ref="588526049"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="480483195">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSPanel</string>
+					<string key="superclassName">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSPanel.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSResponder</string>
+					<string key="superclassName">NSObject</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSView</string>
+					<string key="superclassName">NSResponder</string>
+					<reference key="sourceIdentifier" ref="480483195"/>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindow</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSWindowController</string>
+					<string key="superclassName">NSResponder</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">showWindow:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBFrameworkSource</string>
+						<string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1060" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+			<integer value="1050" key="NS.object.0"/>
+		</object>
+		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+			<integer value="3200" key="NS.object.0"/>
+		</object>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<string key="IBDocument.LastKnownRelativeProjectPath">../Ruby Sketch.xcodeproj</string>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+	</data>
+</archive>

Added: MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/keyedobjects.nib
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/English.lproj/ToolPalette.nib/keyedobjects.nib
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Info.plist
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/Info.plist	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/Info.plist	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>sketch2</string>
+			</array>
+			<key>CFBundleTypeIconFile</key>
+			<string>Draw2File</string>
+			<key>CFBundleTypeName</key>
+			<string>Apple Sketch document</string>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>com.apple.sketch2</string>
+			</array>
+			<key>NSDocumentClass</key>
+			<string>SKTDocument</string>
+			<key>NSExportableAs</key>
+			<array>
+				<string>NSPDFPboardType</string>
+				<string>NSTIFFPboardType</string>
+			</array>
+			<key>NSExportableTypes</key>
+			<array>
+				<string>com.adobe.pdf</string>
+				<string>public.tiff</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>pdf</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>NSPDFPboardType</string>
+			<key>CFBundleTypeRole</key>
+			<string>None</string>
+		</dict>
+		<dict>
+			<key>CFBundleTypeExtensions</key>
+			<array>
+				<string>tiff</string>
+				<string>tif</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>NSTIFFPboardType</string>
+			<key>CFBundleTypeRole</key>
+			<string>None</string>
+		</dict>
+	</array>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string>Draw2App</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.apple.CocoaExamples.Sketch</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>2.0.1</string>
+	<key>CFBundleSignature</key>
+	<string>sktc</string>
+	<key>CFBundleVersion</key>
+	<string>51</string>
+	<key>NSAppleScriptEnabled</key>
+	<string>YES</string>
+	<key>NSMainNibFile</key>
+	<string>Draw2</string>
+	<key>NSPrincipalClass</key>
+	<string>NSApplication</string>
+	<key>OSAScriptingDefinition</key>
+	<string>Sketch.sdef</string>
+	<key>UTExportedTypeDeclarations</key>
+	<array>
+		<dict>
+			<key>UTTypeDescription</key>
+			<string>Apple Sketch document</string>
+			<key>UTTypeConformsTo</key>
+			<array>
+				<string>public.data</string>
+			</array>
+			<key>UTTypeIconFile</key>
+			<string>Draw2File</string>
+			<key>UTTypeIdentifier</key>
+			<string>com.apple.sketch2</string>
+			<key>UTTypeTagSpecification</key>
+			<dict>
+				<key>public.filename-extension</key>
+				<array>
+					<string>sketch2</string>
+				</array>
+			</dict>
+		</dict>
+	</array>
+	<key>NSSupportsSuddenTermination</key>
+	<true/>
+</dict>
+</plist>

Added: MacRuby/trunk/sample-macruby/Sketch/InfoPlist.strings
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/InfoPlist.strings
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Line.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Line.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/README
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/README	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/README	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,14 @@
+
+This is a port of the Apple sample program "Sketch" to MacRuby.  It is based on the version of Sketch shipped as part to the developer tools for Snow Leopard.  
+
+The MacRuby version closely follows the Objective C version  with the following differences:
+
+1. Ruby idioms have been used where this made sense.
+
+2. Proxy objects have been used as observers.  The ObjC Sketch uses the objects directly and then uses the context parameter to select the appropriate response in a large switch statement.  Apart from being ugly the context parameters was set to the address of a static unique static string for the relevant classes and this doesn't translate nicely to Ruby.
+
+3. The script support has been stripped out.
+
+I am adding in no licensing, copying or use restrictions.  This is unsupported code and you use at your own risk.  Apple's licensing restrictions still apply.
+
+Dave Baldwin.

Added: MacRuby/trunk/sample-macruby/Sketch/ReadMe.rtf
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/ReadMe.rtf	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/ReadMe.rtf	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,133 @@
+{\rtf1\ansi\ansicpg1252\cocoartf912\cocoasubrtf100
+{\fonttbl\f0\froman\fcharset0 Times-Roman;}
+{\colortbl;\red255\green255\blue255;}
+\deftab720
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li3282\fi-3282\ql\qnatural
+
+\f0\b\fs48 \cf0 Sketch (Objective-C)\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0\fs28 \cf0 version 1.0\
+7 January 1999\
+\
+This example replaces the original Draw application as an example.\
+\
+We are shipping Sketch in two mostly equivalent implementations:  one in Java and one in Objective-C.  This is the Objective-C implementation.  For those interested in the difference between Objective-C and Java coding of Cocoa applications, a side-by-side comparison of the two versions of Sketch can be educational.  Every attempt has been made to keep the two implementations exactly parallel as much as possible.\
+\
+Sketch has been rewritten from scratch to be a much better client of the AppKit.  It uses new AppKit features and classes where ever it is appropriate and it has a much better Model-View-Controller (MVC) separation than the original Draw example.\
+\
+Sketch is not a commercial graphics application.  There are some things about the architecture that are intentionally simpler than they would be if it were a commercial application.  For instance, there is no architecture for dynamically loading graphic types, drawing effects, or custom inspectors. \
+\
+Among other things, some of the main AppKit features that are showcased in Sketch include:  the new document architecture, AppleScript support, NSUndoManager, and NSBezierPath.  In addition, and perhaps more importantly, Sketch is a good example of the Model-View-Controller pattern which many of the new features of the AppKit are designed to work best with.  While it is possible to use the new features such as NSDocument, NSUndoManager, and scripting support without an underlying MVC design, it is much easier (and better in our opinion) if your application does make an effort to use the MVC pattern.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li2461\fi-2461\ql\qnatural
+
+\b\fs36 \cf0 Things of note\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0\fs28 \cf0 \
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 Recent renaming\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+If you have looked at Sketch in previous releases you may notice that all of Sketch's classes are now prefixed with SKT.  This is because as Cocoa begins to depend on more of Carbon, the global namespace for Cocoa apps is changing by the release.  In order to avoid naming conflicts now and in the future, it is wise for all global symbols in a Cocoa app to be prefixed with some project-specific prefix.  For Sketch, I have chosen SKT.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 Model-View-Controller Design\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+The Model layer of Sketch is mainly the SKTGraphic class and its subclasses.  A Sketch Document is made up of a list of SKTGraphics.  SKTGraphics are mainly data-bearing classes.  Each graphic keeps all the information required to represent whatever kind of graphic it is.  The SKTGraphic class defines a set of primitive methods for modifying a graphic and some of the subclasses add new primitives of their own.  The SKTGraphic class also defines some extended methods for modifying a graphic which are implemented in terms of the primitives.\
+\
+The SKTGraphic class defines a set of methods that allow it to draw itself.  While this may not strictly seem like it should be part of the model, keep in mind that what we are modelling is a collection of visual objects.  Even though a SKTGraphic knows how to render itself within a view, it is not a view itself.\
+\
+The Controller layer consists of the Model-Controller class SKTDocument and the View-Controller class SKTWindowController as well as other NSWindowController subclasses which control the app's auxiliary panels.  The notion of splitting the control layer into two tiers is sometimes useful when considering the new document architecture.  The NSDocument class is most closely tied to the model.  It "owns" the model and is intimately concerned with controlling the model's persistence.  The NSWindowController class is most closely tied to the view.  It "owns" the UI and controls it.  NSDocument and NSWindowController cooperate together to bridge the gap between the model and the view of an application.\
+\
+The View layer consists mainly of the SKTGraphicView class.  (Technically, it also includes the window, and all the app's panels and menus, but these are almost entirely made up of standard AppKit classes.)  SKTGraphicView manages the presentation of the SKTGraphics in a document to the user and allows the user to manipulate those graphics directly and through menu commands and auxiliary panels.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 AppKit Document Architecture\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+Sketch uses the AppKit's new document architecture which is comprised mainly of the three classes NSDocument, NSDocumentController, and NSWindowController.  SKTDocument is a subclass of NSDocument.  SKTWindowController is a subclass of NSWindowController.\
+\
+Sketch merely implements the subclass responsibilities and inherits almost all of the standard behavior of a multi-document app.\
+\
+SKTDocument adds storage and management of the list of SKTGraphics that makes up a document.  It also implements the methods for saving and loading the graphics.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 AppleScript Support\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+Sketch is scriptable.  It contains a scriptSuite and scriptTerminology that define its scripting terminology (building on the Core suite and Text suite defined by the scripting frameworks).  It also contains code in the SKTDocument and SKTGraphic classes to support scripting.\
+\
+Most of the code is pretty simple stuff that defines keys for scripting, but Sketch does have some examples of more advanced Scripting support.  \
+\
+In particular the SKTDocument class defines several keys (circles, rectangles, lines, images, textAreas) that are really just subsets of the graphics key.  It includes special NSScriptObjectSpecifier evaluation code to allow scripts to refer to things like "the rectangle after the first circle" or "the graphics from circle 1 to line 5".  These types of specifiers are not directly evaluatable by the default scripting machinery, but they make sense, so Sketch handles them specially.\
+\
+Another area of interest is the SKTGraphic class' objectSpecifier() implementation.  This method allows a SKTGraphic object to construct an NSScriptObjectSpecifier that identifies it.  When a script command's result cannot  be translated into a native AppleScript type, the result will be sent back to ScriptEditor as an object specifier if the object can provide one.  SKTGraphic's implementation of objectSpecifier() allows this to work for SKTGraphic objects.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 AppKit Undo\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+Sketch uses the NSUndoManager to implement full Undo.  It is interesting to note that there is really very little Undo-related code.\
+\
+Basically, all the primitives in SKTGraphic (and its subclasses) which alter the graphic are in charge of registering undo invocations for the changes they perform.  SKTDocument is in charge of registering undo invocations for changes such as the addition, removal, and reordering of SKTGraphics.  This is the bulk of the undo support and it is the only essential part.\
+\
+SKTGraphicView (and some of the panel controllers) also do a little undo-related stuff.  They register reasonable names for undo groups.  Because SKTGraphicView and the panel controllers are the entry points for user actions, they know the semantic details of what's happening.  They are in a position to name undo groups in ways that make sense.\
+\
+Finally, because SKTGraphicView keeps track of the selection, and changes in selection should be undone along with actual changes to the document, SKTGraphicView adds some extra undo support to register undo invocations for selection changes.  These are purely cosmetic undo invocations since they have no effect on the persistent state of the document, but they make the experience of undoing stuff much more visually sensible.\
+\
+All in all, there are about 20 lines of code that actually reigster undo invocations and about 35 lines that register an action name.\
+\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1914\fi-1914\ql\qnatural
+
+\b \cf0 NSBezierPath\
+\pard\tx2188\tx4376\tx6564\tx8752\tx10940\tx13128\tx15316\tx17505\tx19693\tx21881\tx24069\tx26257\tx28445\tx30633\tx32821\tx35010\tx37198\tx39386\tx41574\tx43762\tx45950\tx48138\tx50326\tx52515\tx54703\tx56891\tx59079\tx61267\tx63455\tx65643\tx67831\tx70020\tx72208\tx74396\tx76584\tx78772\tx80960\tx83148\tx85336\tx87525\tx89713\tx91901\tx94089\tx96277\tx98465\tx100653\tx102841\tx105030\tx107218\tx109406\tx111594\tx113782\tx115970\tx118158\tx120346\tx122535\tx124723\tx126911\tx129099\tx131287\tx133475\tx135663\tx137851\tx140040\tx142228\tx144416\tx146604\tx148792\tx150980\tx153168\tx155356\tx157545\tx159733\tx161921\tx164109\tx166297\tx168485\tx170673\tx172861\tx175050\tx177238\tx179426\tx181614\tx183802\tx185990\tx188178\tx190366\tx192555\tx194743\tx196931\tx199119\tx201307\tx203495\tx205683
+\tx207871\tx210060\tx212248\tx214436\tx216624\tx218812\pardeftab720\li1894\fi-1894\ql\qnatural
+
+\b0 \cf0 \
+Sketch uses NSBezierPath to draw most of its simple graphic types.  There is no use of postscript wraps at all.\
+\
+NSBezierPath is a higher level drawing abstraction than using the postscript directly.  It insulates you from the underlying drawing model and makes the code more portable in the long run.\
+\
+The base SKTGraphic class defines a method which returns a NSBezierPath.  If a subclass overrides this to return a path, then the SKTGraphic base class can handle all the drawing itself.  Some more complex subclasses such as SKTText and SKTImage do not use the bezierPath API.  They override drawInView:isSelected: instead to do their own drawing.\
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\li1894\fi-1894\ql\qnatural
+\cf0 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\ql\qnatural
+
+\b \cf0 Use of NSWindowController for panels\
+
+\b0 \
+The NSWindowController class was added mainly to support the new document architecture, but it is actually quite useful on its own.  An NSWindowController owns and manages a nib file.  Among other things, it will assume ownership and responsibility for releasing all the top-level objects in a nib file (something that was fairly tedious before).\
+\
+NSWindowController is therefore quite useful as a controller for the non-document panels in your application as well as for the document windows.  All the panels in Sketch have an NSWindowController subclass to manage them.\
+\
+Mike Ferris\
+Cocoa Application Frameworks\
+}
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/Rectangle.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Rectangle.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/project.pbxproj
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/project.pbxproj	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/project.pbxproj	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,467 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 44;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		4DE339F70D74FCDD00ADB6EE /* rb_main.rb in Resources */ = {isa = PBXBuildFile; fileRef = 4DE339F60D74FCDD00ADB6EE /* rb_main.rb */; };
+		4DE3BE140D8651D900ECA448 /* MacRuby.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DE3BE130D8651D900ECA448 /* MacRuby.framework */; };
+		5504367B11D233AA003EC0DA /* SKTText.rb in Resources */ = {isa = PBXBuildFile; fileRef = 5504367A11D233AA003EC0DA /* SKTText.rb */; };
+		5514D34D1185BCCB00BBB9EF /* SKTToolPaletteController.rb in Resources */ = {isa = PBXBuildFile; fileRef = 5514D34C1185BCCB00BBB9EF /* SKTToolPaletteController.rb */; };
+		55412903118A04C4001C1E5E /* SKTWindowController.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55412902118A04C4001C1E5E /* SKTWindowController.rb */; };
+		554D661F118200EC00BBBEFB /* Circle.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 554D661B118200EC00BBBEFB /* Circle.tiff */; };
+		554D6620118200EC00BBBEFB /* Cross.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 554D661C118200EC00BBBEFB /* Cross.tiff */; };
+		554D6621118200EC00BBBEFB /* Draw2App.icns in Resources */ = {isa = PBXBuildFile; fileRef = 554D661D118200EC00BBBEFB /* Draw2App.icns */; };
+		554D6622118200EC00BBBEFB /* Draw2File.icns in Resources */ = {isa = PBXBuildFile; fileRef = 554D661E118200EC00BBBEFB /* Draw2File.icns */; };
+		554D66341182010C00BBBEFB /* Draw2.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D66241182010C00BBBEFB /* Draw2.nib */; };
+		554D66351182010C00BBBEFB /* DrawWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D66261182010C00BBBEFB /* DrawWindow.nib */; };
+		554D66361182010C00BBBEFB /* GridPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D66281182010C00BBBEFB /* GridPanel.nib */; };
+		554D66371182010C00BBBEFB /* Inspector.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D662A1182010C00BBBEFB /* Inspector.nib */; };
+		554D66381182010C00BBBEFB /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D662C1182010C00BBBEFB /* Preferences.nib */; };
+		554D66391182010C00BBBEFB /* Sketch.scriptTerminology in Resources */ = {isa = PBXBuildFile; fileRef = 554D662E1182010C00BBBEFB /* Sketch.scriptTerminology */; };
+		554D663A1182010C00BBBEFB /* SKTError.strings in Resources */ = {isa = PBXBuildFile; fileRef = 554D66301182010C00BBBEFB /* SKTError.strings */; };
+		554D663B1182010C00BBBEFB /* ToolPalette.nib in Resources */ = {isa = PBXBuildFile; fileRef = 554D66321182010C00BBBEFB /* ToolPalette.nib */; };
+		554D66411182014100BBBEFB /* Line.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 554D663C1182014100BBBEFB /* Line.tiff */; };
+		554D66421182014100BBBEFB /* Rectangle.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 554D663D1182014100BBBEFB /* Rectangle.tiff */; };
+		554D66431182014100BBBEFB /* Sketch.scriptSuite in Resources */ = {isa = PBXBuildFile; fileRef = 554D663E1182014100BBBEFB /* Sketch.scriptSuite */; };
+		554D66441182014100BBBEFB /* Sketch.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 554D663F1182014100BBBEFB /* Sketch.sdef */; };
+		554D66451182014100BBBEFB /* TextGraphic.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 554D66401182014100BBBEFB /* TextGraphic.tiff */; };
+		554D66471182015B00BBBEFB /* SKTAppDelegate.rb in Resources */ = {isa = PBXBuildFile; fileRef = 554D66461182015B00BBBEFB /* SKTAppDelegate.rb */; };
+		5554110511A41768003C3522 /* SKTGraphic.rb in Resources */ = {isa = PBXBuildFile; fileRef = 5554110411A41768003C3522 /* SKTGraphic.rb */; };
+		5563DD6311DB6D820092133C /* SKTError.rb in Resources */ = {isa = PBXBuildFile; fileRef = 5563DD6211DB6D820092133C /* SKTError.rb */; };
+		556E63B0119C27C400FF5E3B /* SKTGraphicView.rb in Resources */ = {isa = PBXBuildFile; fileRef = 556E63AF119C27C400FF5E3B /* SKTGraphicView.rb */; };
+		5591F5511189D7FE005CABBA /* SKTDocument.rb in Resources */ = {isa = PBXBuildFile; fileRef = 5591F5501189D7FE005CABBA /* SKTDocument.rb */; };
+		55952D5E11EB402600160E4B /* SKTImage.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55952D5D11EB402600160E4B /* SKTImage.rb */; };
+		55A1F62411870833001BC249 /* Arrow.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 55A1F62311870833001BC249 /* Arrow.tiff */; };
+		55AF330D11B554E000229331 /* SKTCircle.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55AF330C11B554E000229331 /* SKTCircle.rb */; };
+		55AF330F11B554EA00229331 /* SKTLine.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55AF330E11B554EA00229331 /* SKTLine.rb */; };
+		55AF331111B554F700229331 /* SKTRectangle.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55AF331011B554F700229331 /* SKTRectangle.rb */; };
+		55C3FABA118AFBA2001F3718 /* SKTGrid.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55C3FAB9118AFBA2001F3718 /* SKTGrid.rb */; };
+		55C3FB2C118B7863001F3718 /* SKTZoomingScrollView.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55C3FB2B118B7863001F3718 /* SKTZoomingScrollView.rb */; };
+		55C6611B11DA7334005DEDD2 /* SKTRenderingView.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55C6611A11DA7334005DEDD2 /* SKTRenderingView.rb */; };
+		55D8F72C1182025C007F6DEF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55D8F72B1182025C007F6DEF /* InfoPlist.strings */; };
+		55E8F90111AFF41600DCE47E /* SKTObserver.rb in Resources */ = {isa = PBXBuildFile; fileRef = 55E8F90011AFF41600DCE47E /* SKTObserver.rb */; };
+		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
+		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
+		29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		4DE339F60D74FCDD00ADB6EE /* rb_main.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = rb_main.rb; sourceTree = "<group>"; };
+		4DE3BE130D8651D900ECA448 /* MacRuby.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MacRuby.framework; path = /Library/Frameworks/MacRuby.framework; sourceTree = "<absolute>"; };
+		5504367A11D233AA003EC0DA /* SKTText.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTText.rb; sourceTree = "<group>"; };
+		5514D34C1185BCCB00BBB9EF /* SKTToolPaletteController.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTToolPaletteController.rb; sourceTree = "<group>"; };
+		55412902118A04C4001C1E5E /* SKTWindowController.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTWindowController.rb; sourceTree = "<group>"; };
+		554D661B118200EC00BBBEFB /* Circle.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Circle.tiff; sourceTree = "<group>"; };
+		554D661C118200EC00BBBEFB /* Cross.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Cross.tiff; sourceTree = "<group>"; };
+		554D661D118200EC00BBBEFB /* Draw2App.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Draw2App.icns; sourceTree = "<group>"; };
+		554D661E118200EC00BBBEFB /* Draw2File.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Draw2File.icns; sourceTree = "<group>"; };
+		554D66251182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = Draw2.nib; sourceTree = "<group>"; };
+		554D66271182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = DrawWindow.nib; sourceTree = "<group>"; };
+		554D66291182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = GridPanel.nib; sourceTree = "<group>"; };
+		554D662B1182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = Inspector.nib; sourceTree = "<group>"; };
+		554D662D1182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = Preferences.nib; sourceTree = "<group>"; };
+		554D662F1182010C00BBBEFB /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.scriptTerminology; name = English; path = Sketch.scriptTerminology; sourceTree = "<group>"; };
+		554D66311182010C00BBBEFB /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = SKTError.strings; sourceTree = "<group>"; };
+		554D66331182010C00BBBEFB /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = ToolPalette.nib; sourceTree = "<group>"; };
+		554D663C1182014100BBBEFB /* Line.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Line.tiff; sourceTree = SOURCE_ROOT; };
+		554D663D1182014100BBBEFB /* Rectangle.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Rectangle.tiff; sourceTree = SOURCE_ROOT; };
+		554D663E1182014100BBBEFB /* Sketch.scriptSuite */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.scriptSuite; path = Sketch.scriptSuite; sourceTree = SOURCE_ROOT; };
+		554D663F1182014100BBBEFB /* Sketch.sdef */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.sdef; path = Sketch.sdef; sourceTree = SOURCE_ROOT; };
+		554D66401182014100BBBEFB /* TextGraphic.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = TextGraphic.tiff; sourceTree = SOURCE_ROOT; };
+		554D66461182015B00BBBEFB /* SKTAppDelegate.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTAppDelegate.rb; sourceTree = "<group>"; };
+		554D664A118201B200BBBEFB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		5554110411A41768003C3522 /* SKTGraphic.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTGraphic.rb; sourceTree = "<group>"; };
+		5563DD6211DB6D820092133C /* SKTError.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTError.rb; sourceTree = "<group>"; };
+		556E63AF119C27C400FF5E3B /* SKTGraphicView.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTGraphicView.rb; sourceTree = "<group>"; };
+		5591F5501189D7FE005CABBA /* SKTDocument.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTDocument.rb; sourceTree = "<group>"; };
+		55952D5D11EB402600160E4B /* SKTImage.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTImage.rb; sourceTree = "<group>"; };
+		55A1F62311870833001BC249 /* Arrow.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Arrow.tiff; sourceTree = "<group>"; };
+		55AF330C11B554E000229331 /* SKTCircle.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTCircle.rb; sourceTree = "<group>"; };
+		55AF330E11B554EA00229331 /* SKTLine.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTLine.rb; sourceTree = "<group>"; };
+		55AF331011B554F700229331 /* SKTRectangle.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTRectangle.rb; sourceTree = "<group>"; };
+		55C3FAB9118AFBA2001F3718 /* SKTGrid.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTGrid.rb; sourceTree = "<group>"; };
+		55C3FB2B118B7863001F3718 /* SKTZoomingScrollView.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTZoomingScrollView.rb; sourceTree = "<group>"; };
+		55C6611A11DA7334005DEDD2 /* SKTRenderingView.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTRenderingView.rb; sourceTree = "<group>"; };
+		55D8F72B1182025C007F6DEF /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; sourceTree = "<group>"; };
+		55E8F90011AFF41600DCE47E /* SKTObserver.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = SKTObserver.rb; sourceTree = "<group>"; };
+		8D1107320486CEB800E47090 /* Ruby Sketch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ruby Sketch.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D11072E0486CEB800E47090 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+				4DE3BE140D8651D900ECA448 /* MacRuby.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		080E96DDFE201D6D7F000001 /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				554D66461182015B00BBBEFB /* SKTAppDelegate.rb */,
+				55AF330C11B554E000229331 /* SKTCircle.rb */,
+				5591F5501189D7FE005CABBA /* SKTDocument.rb */,
+				5563DD6211DB6D820092133C /* SKTError.rb */,
+				55C3FAB9118AFBA2001F3718 /* SKTGrid.rb */,
+				55AF330E11B554EA00229331 /* SKTLine.rb */,
+				5554110411A41768003C3522 /* SKTGraphic.rb */,
+				556E63AF119C27C400FF5E3B /* SKTGraphicView.rb */,
+				55952D5D11EB402600160E4B /* SKTImage.rb */,
+				55E8F90011AFF41600DCE47E /* SKTObserver.rb */,
+				55AF331011B554F700229331 /* SKTRectangle.rb */,
+				55C6611A11DA7334005DEDD2 /* SKTRenderingView.rb */,
+				5504367A11D233AA003EC0DA /* SKTText.rb */,
+				5514D34C1185BCCB00BBB9EF /* SKTToolPaletteController.rb */,
+				55412902118A04C4001C1E5E /* SKTWindowController.rb */,
+				55C3FB2B118B7863001F3718 /* SKTZoomingScrollView.rb */,
+			);
+			name = Classes;
+			sourceTree = "<group>";
+		};
+		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				4DE3BE130D8651D900ECA448 /* MacRuby.framework */,
+				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+			);
+			name = "Linked Frameworks";
+			sourceTree = "<group>";
+		};
+		1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+				13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
+				29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D1107320486CEB800E47090 /* Ruby Sketch.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		29B97314FDCFA39411CA2CEA /* Ruby Sketch */ = {
+			isa = PBXGroup;
+			children = (
+				080E96DDFE201D6D7F000001 /* Classes */,
+				29B97315FDCFA39411CA2CEA /* Other Sources */,
+				554D664A118201B200BBBEFB /* Info.plist */,
+				29B97317FDCFA39411CA2CEA /* Resources */,
+				29B97323FDCFA39411CA2CEA /* Frameworks */,
+				19C28FACFE9D520D11CA2CBB /* Products */,
+			);
+			name = "Ruby Sketch";
+			sourceTree = "<group>";
+		};
+		29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+			isa = PBXGroup;
+			children = (
+				4DE339F60D74FCDD00ADB6EE /* rb_main.rb */,
+				29B97316FDCFA39411CA2CEA /* main.m */,
+			);
+			name = "Other Sources";
+			sourceTree = "<group>";
+		};
+		29B97317FDCFA39411CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				55A1F62311870833001BC249 /* Arrow.tiff */,
+				554D661B118200EC00BBBEFB /* Circle.tiff */,
+				554D66231182010C00BBBEFB /* English.lproj */,
+				554D661C118200EC00BBBEFB /* Cross.tiff */,
+				55D8F72B1182025C007F6DEF /* InfoPlist.strings */,
+				554D661D118200EC00BBBEFB /* Draw2App.icns */,
+				554D661E118200EC00BBBEFB /* Draw2File.icns */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+				1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		554D66231182010C00BBBEFB /* English.lproj */ = {
+			isa = PBXGroup;
+			children = (
+				554D66241182010C00BBBEFB /* Draw2.nib */,
+				554D663C1182014100BBBEFB /* Line.tiff */,
+				554D663D1182014100BBBEFB /* Rectangle.tiff */,
+				554D663E1182014100BBBEFB /* Sketch.scriptSuite */,
+				554D663F1182014100BBBEFB /* Sketch.sdef */,
+				554D66401182014100BBBEFB /* TextGraphic.tiff */,
+				554D66261182010C00BBBEFB /* DrawWindow.nib */,
+				554D66281182010C00BBBEFB /* GridPanel.nib */,
+				554D662A1182010C00BBBEFB /* Inspector.nib */,
+				554D662C1182010C00BBBEFB /* Preferences.nib */,
+				554D662E1182010C00BBBEFB /* Sketch.scriptTerminology */,
+				554D66301182010C00BBBEFB /* SKTError.strings */,
+				554D66321182010C00BBBEFB /* ToolPalette.nib */,
+			);
+			path = English.lproj;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D1107260486CEB800E47090 /* Ruby Sketch */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Ruby Sketch" */;
+			buildPhases = (
+				8D1107290486CEB800E47090 /* Resources */,
+				8D11072C0486CEB800E47090 /* Sources */,
+				8D11072E0486CEB800E47090 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Ruby Sketch";
+			productInstallPath = "$(HOME)/Applications";
+			productName = "Ruby Sketch";
+			productReference = 8D1107320486CEB800E47090 /* Ruby Sketch.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Ruby Sketch" */;
+			compatibilityVersion = "Xcode 3.0";
+			hasScannedForEncodings = 1;
+			mainGroup = 29B97314FDCFA39411CA2CEA /* Ruby Sketch */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8D1107260486CEB800E47090 /* Ruby Sketch */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D1107290486CEB800E47090 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				4DE339F70D74FCDD00ADB6EE /* rb_main.rb in Resources */,
+				554D661F118200EC00BBBEFB /* Circle.tiff in Resources */,
+				554D6620118200EC00BBBEFB /* Cross.tiff in Resources */,
+				554D6621118200EC00BBBEFB /* Draw2App.icns in Resources */,
+				554D6622118200EC00BBBEFB /* Draw2File.icns in Resources */,
+				554D66341182010C00BBBEFB /* Draw2.nib in Resources */,
+				554D66351182010C00BBBEFB /* DrawWindow.nib in Resources */,
+				554D66361182010C00BBBEFB /* GridPanel.nib in Resources */,
+				554D66371182010C00BBBEFB /* Inspector.nib in Resources */,
+				554D66381182010C00BBBEFB /* Preferences.nib in Resources */,
+				554D66391182010C00BBBEFB /* Sketch.scriptTerminology in Resources */,
+				554D663A1182010C00BBBEFB /* SKTError.strings in Resources */,
+				554D663B1182010C00BBBEFB /* ToolPalette.nib in Resources */,
+				554D66411182014100BBBEFB /* Line.tiff in Resources */,
+				554D66421182014100BBBEFB /* Rectangle.tiff in Resources */,
+				554D66431182014100BBBEFB /* Sketch.scriptSuite in Resources */,
+				554D66441182014100BBBEFB /* Sketch.sdef in Resources */,
+				554D66451182014100BBBEFB /* TextGraphic.tiff in Resources */,
+				554D66471182015B00BBBEFB /* SKTAppDelegate.rb in Resources */,
+				55D8F72C1182025C007F6DEF /* InfoPlist.strings in Resources */,
+				5514D34D1185BCCB00BBB9EF /* SKTToolPaletteController.rb in Resources */,
+				55A1F62411870833001BC249 /* Arrow.tiff in Resources */,
+				5591F5511189D7FE005CABBA /* SKTDocument.rb in Resources */,
+				55412903118A04C4001C1E5E /* SKTWindowController.rb in Resources */,
+				55C3FABA118AFBA2001F3718 /* SKTGrid.rb in Resources */,
+				55C3FB2C118B7863001F3718 /* SKTZoomingScrollView.rb in Resources */,
+				556E63B0119C27C400FF5E3B /* SKTGraphicView.rb in Resources */,
+				5554110511A41768003C3522 /* SKTGraphic.rb in Resources */,
+				55E8F90111AFF41600DCE47E /* SKTObserver.rb in Resources */,
+				55AF330D11B554E000229331 /* SKTCircle.rb in Resources */,
+				55AF330F11B554EA00229331 /* SKTLine.rb in Resources */,
+				55AF331111B554F700229331 /* SKTRectangle.rb in Resources */,
+				5504367B11D233AA003EC0DA /* SKTText.rb in Resources */,
+				55C6611B11DA7334005DEDD2 /* SKTRenderingView.rb in Resources */,
+				5563DD6311DB6D820092133C /* SKTError.rb in Resources */,
+				55952D5E11EB402600160E4B /* SKTImage.rb in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D11072C0486CEB800E47090 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				8D11072D0486CEB800E47090 /* main.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		554D66241182010C00BBBEFB /* Draw2.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D66251182010C00BBBEFB /* English */,
+			);
+			name = Draw2.nib;
+			sourceTree = "<group>";
+		};
+		554D66261182010C00BBBEFB /* DrawWindow.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D66271182010C00BBBEFB /* English */,
+			);
+			name = DrawWindow.nib;
+			sourceTree = "<group>";
+		};
+		554D66281182010C00BBBEFB /* GridPanel.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D66291182010C00BBBEFB /* English */,
+			);
+			name = GridPanel.nib;
+			sourceTree = "<group>";
+		};
+		554D662A1182010C00BBBEFB /* Inspector.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D662B1182010C00BBBEFB /* English */,
+			);
+			name = Inspector.nib;
+			sourceTree = "<group>";
+		};
+		554D662C1182010C00BBBEFB /* Preferences.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D662D1182010C00BBBEFB /* English */,
+			);
+			name = Preferences.nib;
+			sourceTree = "<group>";
+		};
+		554D662E1182010C00BBBEFB /* Sketch.scriptTerminology */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D662F1182010C00BBBEFB /* English */,
+			);
+			name = Sketch.scriptTerminology;
+			sourceTree = "<group>";
+		};
+		554D66301182010C00BBBEFB /* SKTError.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D66311182010C00BBBEFB /* English */,
+			);
+			name = SKTError.strings;
+			sourceTree = "<group>";
+		};
+		554D66321182010C00BBBEFB /* ToolPalette.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				554D66331182010C00BBBEFB /* English */,
+			);
+			name = ToolPalette.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		C01FCF4B08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PRODUCT_NAME = "Ruby Sketch";
+				WRAPPER_EXTENSION = app;
+				ZERO_LINK = YES;
+			};
+			name = Debug;
+		};
+		C01FCF4C08A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_MODEL_TUNING = G5;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				INFOPLIST_FILE = Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PRODUCT_NAME = "Ruby Sketch";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+		C01FCF4F08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
+				GCC_ENABLE_OBJC_GC = required;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+			};
+			name = Debug;
+		};
+		C01FCF5008A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
+				GCC_ENABLE_OBJC_GC = required;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+				SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Ruby Sketch" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4B08A954540054247B /* Debug */,
+				C01FCF4C08A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Ruby Sketch" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4F08A954540054247B /* Debug */,
+				C01FCF5008A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}


Property changes on: MacRuby/trunk/sample-macruby/Sketch/Ruby Sketch.xcodeproj/project.pbxproj
___________________________________________________________________
Added: svn:executable
   + *

Added: MacRuby/trunk/sample-macruby/Sketch/SKTAppDelegate.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTAppDelegate.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTAppDelegate.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,184 @@
+# Keys that are used in Sketch's user defaults.
+SKTAppAutosavesPreferenceKey 		= "autosaves"
+SKTAppAutosavingDelayPreferenceKey 	= "autosavingDelay"
+
+
+# Replace the original C macro
+def NSLocalizedStringFromTable (key, value, table)
+	NSBundle.mainBundle.localizedStringForKey(key, value: value, table: table)
+	
+	return key		## FIX - localisation errors in menu
+end
+
+class NSWindowController
+	def isWindowShown ()
+		window && window.isVisible
+	end
+
+	def showOrHideWindow ()
+		isWindowShown ? window.orderOut(self) : showWindow(self)
+	end
+end
+
+
+class SKTAppDelegate
+	def applicationDidFinishLaunching (notification)
+		# The tool palette should always show up right away.
+		showOrHideToolPalette(self)
+
+		# We always show the same inspector panel. Its controller doesn't get
+		# deallocated when the user closes it. Make the panel appear in the same 
+		# place when the user quits and relaunches the application.
+		@graphicsInspectorController = NSWindowController.alloc.initWithWindowNibName("Inspector")
+		@graphicsInspectorController.shouldCascadeWindows = false
+		@graphicsInspectorController.windowFrameAutosaveName = "Inspector"
+
+		# We always show the same grid panel. Its controller doesn't get
+		# deallocated when the user closes it.  Make the panel appear in the same
+		# place when the user quits and relaunches the application.
+		@gridInspectorController = NSWindowController.alloc.initWithWindowNibName("GridPanel")
+		@gridInspectorController.shouldCascadeWindows = false
+		@gridInspectorController.windowFrameAutosaveName = "Grid"
+	end
+
+	def applicationWillFinishLaunching (notification)
+		# Set up the default values of our autosaving preferences very early,
+		# before there's any chance of a binding using them. The default is for
+		# autosaving to be off, but 60 seconds if the user turns it on.
+		userDefaultsController = NSUserDefaultsController.sharedUserDefaultsController
+		userDefaultsController.setInitialValues(SKTAppAutosavesPreferenceKey => false, SKTAppAutosavingDelayPreferenceKey => 60.0)
+
+
+		# Bind this object's "autosaves" and "autosavingDelay" properties to the
+		# user defaults of the same name. We don't bother with ivars for these
+		# values. This is just the quick way to get our -setAutosaves: and
+		# -setAutosavingDelay: methods invoked.
+=begin
+	[self bind:SKTAppAutosavesPreferenceKey toObject:userDefaultsController withKeyPath:[@"values." stringByAppendingString:SKTAppAutosavesPreferenceKey] options:nil];
+	[self bind:SKTAppAutosavingDelayPreferenceKey toObject:userDefaultsController withKeyPath:[@"values." stringByAppendingString:SKTAppAutosavingDelayPreferenceKey] options:nil];
+=end	
+	end
+
+	def setAutosaves (autosaves)	
+		# The user has toggled the "autosave documents" checkbox in the preferences panel.
+		if autosaves
+			# Get the autosaving delay and set it in the NSDocumentController.
+			NSDocumentController.sharedDocumentController.autosavingDelay = @autosavingDelay
+		else
+			# Set a zero autosaving delay in the NSDocumentController. This tells it to turn off autosaving.
+			NSDocumentController.sharedDocumentController.autosavingDelay = 0.0
+		end
+	
+		@autosaves = autosaves
+	end
+
+
+	def autosavingDelay= (autosaveDelay)
+		# Is autosaving even turned on right now?
+		if @autosaves
+			# Set the new autosaving delay in the document controller, but only if
+			# autosaving is being done right now.
+			NSDocumentController.sharedDocumentController.autosavingDelay = autosaveDelay
+		end
+
+		@autosavingDelay = autosaveDelay;
+	end
+
+	# IBActions
+	
+	def showPreferencesPanel (sender)
+		#	We always show the same preferences panel. Its controller doesn't get
+		#	deallocated when the user closes it.
+		if !@preferencesPanelController
+			@preferencesPanelController = NSWindowController.alloc.initWithWindowNibName("Preferences")
+
+	 		# Make the panel appear in a good default location.
+			@preferencesPanelController.window.center
+		end
+	
+		@preferencesPanelController.showWindow(sender)
+	end
+
+	def showOrHideGraphicsInspector (sender)
+		@graphicsInspectorController.showOrHideWindow
+	end
+
+	def showOrHideGridInspector (sender)
+		@gridInspectorController.showOrHideWindow
+	end
+
+	def showOrHideToolPalette (sender)
+		# We always show the same tool palette panel. Its controller doesn't get
+		# deallocated when the user closes it.
+		SKTToolPaletteController.sharedToolPaletteController.showOrHideWindow
+	end
+
+	def chooseSelectionTool (sender)
+		SKTToolPaletteController.sharedToolPaletteController.selectArrowTool
+	end
+
+	# Conformance to the NSObject(NSMenuValidation) informal protocol.
+	def validateMenuItem (menuItem)
+		# A few menu item's names change between starting with "Show" and "Hide."
+		toolPaletteController = SKTToolPaletteController.sharedToolPaletteController
+		
+		str = case menuItem.action
+			when :'showOrHideGraphicsInspector:'
+				@graphicsInspectorController.isWindowShown ? "Hide Inspector" : "Show Inspector"
+			when :'showOrHideGridInspector:'
+				@gridInspectorController.isWindowShown 	   ? "Hide Grid Options" : "Show Grid Options"
+			when :'showOrHideToolPalette:'
+				toolPaletteController.isWindowShown		   ? "Hide Tools" : "Show Tools"
+		end
+
+		menuItem.title = NSLocalizedStringFromTable(str, "SKTAppDelegate", "A main menu item title.") if str
+		return true
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTCircle.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTCircle.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTCircle.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,61 @@
+require 'SKTGraphic'
+
+class SKTCircle < SKTGraphic
+	def bezierPathForDrawing ()
+    	path = NSBezierPath.bezierPathWithOvalInRect(bounds)
+    	path.setLineWidth(strokeWidth)
+    	return path;
+    end
+
+	def isContentsUnderPoint (point)
+    	# Just check to see if the point is in the path.
+    	return bezierPathForDrawing.containsPoint(point)	
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTDocument.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTDocument.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTDocument.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,592 @@
+
+SKTDocumentCanvasSizeKey = "canvasSize"
+SKTDocumentGraphicsKey = "graphics"
+
+# The document type names that must also be used in the application's
+# Info.plist file. We'll take out all uses of SKTDocumentOldTypeName and
+# SKTDocumentOldVersion1TypeName (and NSPDFPboardType and NSTIFFPboardType)
+# someday when we drop 10.4 compatibility and we can just use UTIs everywhere.
+SKTDocumentOldTypeName		   = "Apple Sketch document"
+SKTDocumentNewTypeName		   = "com.apple.sketch2"
+SKTDocumentOldVersion1TypeName = "Apple Sketch 1 document"
+SKTDocumentNewVersion1TypeName = "com.apple.sketch1"
+
+# More keys, and a version number, which are just used in Sketch's
+# property-list-based file format.
+SKTDocumentVersionKey	  = "version"
+SKTDocumentPrintInfoKey	  = "printInfo"
+SKTDocumentCurrentVersion = 2
+
+
+class SKTDocument < NSDocument
+	attr_reader :graphics
+		
+	# An override of the superclass' designated initializer, which means it should always be invoked.
+	def init ()
+		@graphics = []
+		@documentUndoKeysObserver = SKTObserver.new(self, :documentUndoKeysDidChange)
+		@documentUndoObserver = SKTObserver.new(self, :documentUndoDidChange)
+		super
+
+		# Before anything undoable happens, register for a notification we need.
+		NSNotificationCenter.defaultCenter.addObserver(self, 
+					selector: 'observeUndoManagerCheckpoint:',
+						name: NSUndoManagerCheckpointNotification,
+					  object: undoManager)
+		self
+	end
+
+	# Private KVC-Compliance for Public Properties ***
+	def insertGraphics (graphics, atIndexes: indexes)
+		@graphics ||= []
+	    @graphics.insertObjects(graphics, atIndexes: indexes)
+
+		# For the purposes of scripting, every graphic has to point back to the document that contains it.
+		# Not supporting scripting at present.
+		# graphics.makeObjectsPerformSelector(:setScriptingContainer, withObject: self)
+
+		# Register an action that will undo the insertion.
+		undoManager.registerUndoWithTarget(self, selector: 'removeGraphicsAtIndexes:', object: indexes)
+
+		# Record the inserted graphics so we can filter out observer notifications
+		# from them. This way we don't waste memory registering undo operations for
+		# changes that wouldn't have any effect because the graphics are going to be
+		# removed anyway. In Sketch this makes a difference when you create a graphic
+		# and then drag the mouse to set its initial size right away. Why don't we do
+		# this if undo registration is disabled? Because we don't want to add to this
+		# set during document reading. (See what -readFromData:ofType:error: does with
+		# the undo manager.) That would ruin the undoability of the first graphic
+		# editing you do after reading a document.
+		if undoManager.isUndoRegistrationEnabled
+			@undoGroupInsertedGraphics ||= {}
+			graphics.each {|g| @undoGroupInsertedGraphics[g] = true}
+		end
+
+		# Start observing the just-inserted graphics so that, when they're changed, we can record undo operations.
+		startObservingGraphics(graphics)
+	end
+
+	def removeGraphicsAtIndexes (indexes)
+		# Find out what graphics are being removed. 
+		graphics = @graphics.objectsAtIndexes(indexes)
+
+		# Stop observing the just-removed graphics to balance what was done in -insertGraphics:atIndexes:.
+		stopObservingGraphics(graphics)
+
+		# Register an action that will undo the removal. Do this before the
+		# actual removal so we don't have to worry about the releasing of the
+		# graphics that will be done.
+		undoManager.prepareWithInvocationTarget(self).insertGraphics(graphics, atIndexes: indexes)
+	
+		# For the purposes of scripting, every graphic had to point back to the
+		# document that contains it. Now they should stop that.
+		# scripting not supported at present
+		# graphics.makeObjectsPerformSelector(:setScriptingContainer, withObject: nil)
+
+		# Do the actual removal.
+		@graphics.removeObjectsAtIndexes(indexes)
+	end
+
+	 # There's no need for a -setGraphics: method right now, because
+	 # [thisDocument mutableArrayValueForKey:@"graphics"] will happily return a
+	 # mutable collection proxy that invokes our insertion and removal methods
+	 # when necessary. A pitfall to watch out for is that -setValue:forKey: is
+	 # _not_ bright enough to invoke our insertion and removal methods when you
+	 # would think it should. If we ever catch anyone sending this object
+	 # -setValue:forKey: messages for "graphics" then we have to add
+	 # -setGraphics:. When we do, there's another pitfall to watch out for: if
+	 # -setGraphics: is implemented in terms of -insertGraphics:atIndexes: and
+	 # -removeGraphicsAtIndexes:, or vice versa, then KVO autonotification will
+	 # cause observers to get redundant, incorrect, notifications (because all
+	 # of the methods involved have KVC-compliant names).
+
+
+	# Simple Property Getting
+	def canvasSize ()
+		# A Sketch's canvas size is the size of the piece of paper that the user
+		# selects in the Page Setup panel for it, minus the document margins
+		# that are set.
+		canvasSize = printInfo.paperSize
+		canvasSize.width  -= printInfo.leftMargin + printInfo.rightMargin
+		canvasSize.height -= printInfo.topMargin + printInfo.bottomMargin
+		canvasSize
+	end
+
+	# Overrides of NSDocument Methods ***
+
+	# This method will only be invoked on Mac 10.6 and later. It's ignored on
+	# Mac OS 10.5.x which just means that documents are opened serially.
+	def self.canConcurrentlyReadDocumentsOfType (typeName)
+		# There's nothing in Sketch that would cause multithreading trouble when
+		# documents are opened in parallel in separate NSOperations.
+		true
+	end
+
+	def readFromData (data, ofType: typeName, error: outError)
+		# This application's Info.plist only declares two document types, which go
+		# by the names SKTDocumentOldTypeName/SKTDocumentOldVersion1TypeName (on
+		# Mac OS 10.4) or SKTDocumentNewTypeName/SKTDocumentNewVersion1TypeName
+		# (on 10.5), for which it can play the "editor" role, and none for which
+		# it can play the "viewer" role, so the type better match one of those.
+		# Notice that we don't compare uniform type identifiers (UTIs) with
+		# -isEqualToString:. We use -[NSWorkspace type:conformsToType:] (new in
+		# 10.5), which is nearly always the correct thing to do with UTIs.
+		# MacRuby only works on 10.5 or greater so can ignore this.
+		workspace = NSWorkspace.sharedWorkspace
+		if workspace.type(typeName, conformsToType: SKTDocumentNewTypeName) || typeName == SKTDocumentOldTypeName
+			# The file uses Sketch 2's new format. Read in the property list.
+			# properties = NSPropertyListSerialization.propertyListFromData(data, mutabilityOption: NSPropertyListImmutable,
+			# 						format: nil, errorDescription: nil)
+			properties = NSPropertyListSerialization.propertyListWithData(data, options: 0,  format: nil, error: nil)
+
+			if properties
+				# Get the graphics. Strictly speaking the property list of an empty
+				# document should have an empty graphics array, not no graphics array,
+				# but we cope easily with either. Don't trust the type of something
+				# you get out of a property list unless you know your process created
+				# it or it was read from your application or framework's resources.
+				graphicPropertiesArray = properties[SKTDocumentGraphicsKey]
+				graphicsList = graphicPropertiesArray.kind_of?(NSArray) ? 
+								SKTGraphic.graphicsWithProperties(graphicPropertiesArray) :
+								[]
+				# Get the page setup. There's no point in considering the opening of
+				# the document to have failed if we can't get print info. A more
+				# finished app might present a panel warning the user that something's
+				# fishy though.
+				printInfoData = properties[SKTDocumentPrintInfoKey]
+				printInfo = printInfoData.kind_of?(NSData) ?
+								NSUnarchiver.unarchiveObjectWithData(printInfoData) : 
+								NSPrintInfo.new
+			else
+				# If property list parsing fails we have no choice but to admit that we
+				# don't know what went wrong. The error description returned by
+				# +[NSPropertyListSerialization
+				# propertyListFromData:mutabilityOption:format:errorDescription:] would be
+				# pretty technical, and not the sort of thing that we should show to a
+				# user.
+				outError[0] = SKTErrorWithCode(SKTUnknownFileReadError) if outError
+			end
+	
+			readSuccessfully = properties
+		else
+			# The file uses Sketch's old format. Sketch is still a work in progress.
+			graphicsList = []
+			printInfo = NSPrintInfo.new
+			readSuccessfully = true;
+		end
+
+		# Did the reading work? In this method we ought to either do nothing and
+		# return an error or overwrite every property of the document. Don't leave
+		# the document in a half-baked state.
+		if readSuccessfully
+			# Update the document's list of graphics by going through KVC-compliant
+			# mutation methods. KVO notifications will be automatically sent to
+			# observers (which does matter, because this might be happening at some time
+			# other than document opening; reverting, for instance). Update its page
+			# setup the regular way. Don't let undo actions get registered while doing
+			# any of this. The fact that we have to explicitly protect against useless
+			# undo actions is considered an NSDocument bug nowadays, and will someday be
+			# fixed.
+			undoManager.disableUndoRegistration
+			removeGraphicsAtIndexes(NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, @graphics.count)))
+			insertGraphics(graphicsList, atIndexes: NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, graphicsList.count)))
+			printInfo = printInfo
+			undoManager.enableUndoRegistration
+		else
+			# it was the responsibility of something in the previous paragraph to set *outError.
+			return readSuccessfully;
+		end
+	end
+
+
+	def dataOfType (typeName, error: outError)
+		# This method must be prepared for typeName to be any value that might be
+		# in the array returned by any invocation of
+		# -writableTypesForSaveOperation:. Because this class:
+		# doesn't - override -writableTypesForSaveOperation:, and
+		# doesn't - override +writableTypes or +isNativeType: (which the default implementation of 
+		# -writableTypesForSaveOperation: invokes), and because:
+		# - Sketch has a "Save a Copy As..." file menu item that results in NSSaveToOperations,
+		# we know that that the type names we have to handle here include:
+		# - SKTDocumentOldTypeName (on Mac OS 10.4) or SKTDocumentNewTypeName (on 10.5), because
+		# this application's Info.plist file declares that instances of this class can play the "editor" role for it, and
+		# - NSPDFPboardType (on 10.4) or kUTTypePDF (on 10.5) and NSTIFFPboardType (on 10.4)
+		# or kUTTypeTIFF (on 10.5), because according to the Info.plist a Sketch document is exportable as them.
+		# We use -[NSWorkspace type:conformsToType:] (new in 10.5), which is
+		# nearly always the correct thing to do with UTIs, but the arguments are
+		# reversed here compared to what's typical. Think about it: this method
+		# doesn't know how to write any particular subtype of the supported
+		# types, so it should assert if it's asked to. It does however
+		# effectively know how to write all of the super types of the supported
+		# types (like public.data), and there's no reason for it to refuse to do
+		# so. Not particularly useful in the context of an app like Sketch, but
+		# correct.
+		# If we had reason to believe that +[SKTRenderingView
+		# pdfDataWithGraphics:] or +[SKTGraphic propertiesWithGraphics:] could
+		# return nil we would have to arrange for *outError to be set to a real
+		# value when that happens. If you signal failure in a method that takes an
+		# error: parameter and outError!=NULL you must set *outError to something
+		# decent.
+		workspace = NSWorkspace.sharedWorkspace
+		if workspace.type(SKTDocumentNewTypeName, conformsToType: typeName) || typeName == SKTDocumentOldTypeName
+			# Convert the contents of the document to a property list and then
+			# flatten the property list.
+			properties = {	SKTDocumentVersionKey	=> SKTDocumentCurrentVersion,
+							SKTDocumentGraphicsKey	=> SKTGraphic.propertiesWithGraphics(graphics),
+							SKTDocumentPrintInfoKey => NSArchiver.archivedDataWithRootObject(printInfo)
+						 }
+
+			# data = NSPropertyListSerialization.dataFromPropertyList(properties, format: NSPropertyListBinaryFormat_v1_0, 
+																		# errorDescription: nil)
+																				
+			data = NSPropertyListSerialization.dataWithPropertyList(properties, format: NSPropertyListXMLFormat_v1_0, options: 0, error: nil)
+
+		elsif workspace.type(kUTTypePDF, conformsToType: typeName) || typeName == NSPDFPboardType
+			data = SKTRenderingView.pdfDataWithGraphics(graphics)
+		else
+			data = SKTRenderingView.tiffDataWithGraphics(graphics, error: outError)
+		end
+	
+		return data;
+	end
+
+	def printInfo= printInfo
+		# Do the regular Cocoa thing, but also be KVO-compliant for canvasSize, which is derived from the print info.
+		willChangeValueForKey(SKTDocumentCanvasSizeKey)
+		super
+		didChangeValueForKey(SKTDocumentCanvasSizeKey)
+	end
+
+	def printOperationWithSettings (printSettings, error: outError)
+		# Figure out a title for the print job. It will be used with the .pdf file
+		# name extension in a save panel if the user chooses Save As PDF... in the
+		# print panel, or in a similar way if the user hits the Preview button in
+		# the print panel, or for any number of other uses the printing system might
+		# put it to. We don't want the user to see file names like "My Great
+		# Sketch.sketch2.pdf", so we can't just use [self displayName], because the
+		# document's file name extension might not be hidden. Instead, because we
+		# know that all valid Sketch documents have file name extensions, get the
+		# last path component of the file URL and strip off its file name extension,
+		# and use what's left.	If this document doesn't have a file associated with it. Just use
+		# -displayName after all. It will be "Untitled" or "Untitled 2" or
+		# something, which is fine.
+		printJobTitle = fileURL ? File.basename(fileURL.path, ".*") :  displayName
+
+		# Create a view that will be used just for printing.
+		documentSize = canvasSize
+		rect = NSMakeRect(0.0, 0.0, documentSize.width, documentSize.height)
+		renderingView = SKTRenderingView.alloc.initWithFrame(rect, graphics: graphics, printJobTitle: printJobTitle)
+	
+		# Create a print operation.
+		printOperation = NSPrintOperation.printOperationWithView(renderingView,	 printInfo: printInfo)
+	
+		# Specify that the print operation can run in a separate thread. This will
+		# cause the print progress panel to appear as a sheet on the document
+		# window.
+		printOperation.canSpawnSeparateThread = true
+	
+		# Set any print settings that might have been specified in a Print Document
+		# Apple event. We do it this way because we shouldn't be mutating the result
+		# of printInfo here, and using the result of printOperation.printInfo,
+		# a copy of the original print info, means we don't have to make
+		# yet another temporary copy of printInfo.
+		printOperation.printInfo.dictionary.addEntriesFromDictionary(printSettings)
+	
+	   # Nothing in this method can fail, so we never return nil, so we don't have to worry about setting *outError.
+		return printOperation;
+	end
+
+	def makeWindowControllers
+		# Start off with one document window.
+		addWindowController(SKTWindowController.new)
+	end
+
+	# Undo
+	def setGraphicProperties (propertiesPerGraphic)
+		# The passed-in dictionary is keyed by graphic with values that are
+		# dictionaries of properties, keyed by key-value coding key.
+
+		# Use a relatively unpopular method. Here we're effectively "casting" a key
+		# path to a key (see how these dictionaries get built in
+		# -observeValueForKeyPath:ofObject:change:context:). It had better really be
+		# a key or things will get confused. For example, this is one of the things
+		# that would need updating if -[SKTGraphic keysForValuesToObserveForUndo]
+		# someday becomes -[SKTGraphic keyPathsForValuesToObserveForUndo].
+		propertiesPerGraphic.each do |graphic, graphicProperties|
+			graphic.setValuesForKeysWithDictionary(graphicProperties)
+		end
+	end
+
+	def observeUndoManagerCheckpoint (notification)
+		# Start the coalescing of graphic property changes over.
+		@undoGroupHasChangesToMultipleProperties = false
+		@undoGroupPresentablePropertyName = nil
+		@undoGroupOldPropertiesPerGraphic = nil
+		@undoGroupInsertedGraphics = nil
+	end
+
+	def startObservingGraphics (graphics)
+		# Each graphic can have a different set of properties that need to be observed.
+		graphics.each do |graphic|
+			keys = graphic.keysForValuesToObserveForUndo
+			keys.allObjects.each do |key|
+				# We use NSKeyValueObservingOptionOld because when something changes we
+				# want to record the old value, which is what has to be set in the undo
+				# operation. We use NSKeyValueObservingOptionNew because we compare the
+				# new value against the old value in an attempt to ignore changes that
+				# aren't really changes.
+				graphic.addObserver(@documentUndoObserver, forKeyPath: key, 
+											options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld),			
+											context: nil)
+			end
+
+			# The set of properties to be observed can itself change.
+			graphic.addObserver(@documentUndoKeysObserver, forKeyPath: SKTGraphicKeysForValuesToObserveForUndoKey, 
+									options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld),					
+									context: nil)
+		end
+	end
+
+	def stopObservingGraphics (graphics)
+		# Do the opposite of what's done in -startObservingGraphics:.
+		graphics.each do |graphic|
+			keys = graphic.keysForValuesToObserveForUndo
+			keys.allObjects.each {|key| graphic.removeObserver(@documentUndoObserver, forKeyPath: key)}
+		end
+	end
+	
+	def documentUndoKeysDidChange (keyPath, observedObject, change)
+		# The set of properties that we should be observing has changed for some graphic. Stop or start observing.
+		oldKeys = change[NSKeyValueChangeOldKey].allObjects
+		newKeys = change[NSKeyValueChangeNewKey].allObjects
+		
+		oldKeys.each do |key|
+			observedObject.removeObserver(@documentUndoObserver, forKeyPath: key) if !newKeys.find_index(key)
+		end
+		
+		newKeys.each do |key|
+			 if !oldKeys.find_index(key)
+				observedObject.addObserver(@documentUndoObserver, forKeyPath: key, 
+											options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld),
+											context: nil)
+			end
+		end	
+	end
+	
+	def documentUndoDidChange (keyPath, observedObject, change)
+		# The value of some graphic's property has changed. Don't waste memory by
+		# recording undo operations affecting graphics that would be removed during
+		# undo anyway. In Sketch this check matters when you use a creation tool to
+		# create a new graphic and then drag the mouse to resize it; there's no
+		# reason to record a change of "bounds" in that situation.
+		graphic = observedObject
+		if !(@undoGroupInsertedGraphics && @undoGroupInsertedGraphics[graphic])
+			# Ignore changes that aren't really changes. Now that Sketch's inspector
+			# panel allows you to change a property of all selected graphics at once
+			# (it didn't always, as recently as the version that appears in Mac OS
+			# 10.4's /Developer/Examples/AppKit), it's easy for the user to cause a
+			# big batch of SKTGraphics to be sent -setValue:forKeyPath: messages that
+			# don't do anything useful. Try this simple example: create 10 circles,
+			# and set all but one to be filled. Select them all. In the inspector
+			# panel the Fill checkbox will show the mixed state indicator (a dash).
+			# Click on it. Cocoa's bindings machinery sends [theCircle
+			# setValue:[NSNumber numberWithBOOL:YES]
+			# forKeyPath:SKTGraphicDrawingFillKey] to each selected circle. KVO
+			# faithfully notifies this SKTDocument, which is observing all of its
+			# graphics, for each circle object, even though the old value of the
+			# SKTGraphicDrawingFillKey property for 9 out of the 10 circles was
+			# already YES. If we didn't actively filter out useless notifications like
+			# these we would be wasting memory by recording undo operations that don't
+			# actually do anything. How much processor time does this memory
+			# optimization cost? We don't know, because we haven't measured it. The
+			# use of NSKeyValueObservingOptionNew in -startObservingGraphics:, which
+			# makes NSKeyValueChangeNewKey entries appear in change dictionaries,
+			# definitely costs something when KVO notifications are sent (it costs
+			# virtually nothing at observer registration time). Regardless, it's
+			# probably a good idea to do simple memory optimizations like this as
+			# they're discovered and debug just enough to confirm that they're saving
+			# the expected memory (and not introducing bugs). Later on it will be
+			# easier to test for good responsiveness and sample to hunt down processor
+			# time problems than it will be to figure out where all the darn memory
+			# went when your app turns out to be notably RAM-hungry (and therefore
+			# slowing down _other_ apps on your user's computers too, if the problem
+			# is bad enough to cause paging).
+			# Is this a premature optimization? No. Leaving out this very simple
+			# check, because we're worried about the processor time cost of using
+			# NSKeyValueChangeNewKey, would be a premature optimization.
+			newValue = change[NSKeyValueChangeNewKey]
+			oldValue = change[NSKeyValueChangeOldKey]
+			if newValue != oldValue
+				# Is this the first observed graphic change in the current undo group?
+				if !@undoGroupOldPropertiesPerGraphic
+					# We haven't recorded changes for any graphics at all since the
+					# last undo manager checkpoint. Get ready to start collecting
+					# them.
+					@undoGroupOldPropertiesPerGraphic = {}
+
+					# Register an undo operation for any graphic property changes
+					# that are going to be coalesced between now and the next
+					# invocation of -observeUndoManagerCheckpoint:. The fact that
+					# the object: argument here must really be an object is why
+					# _undoGroupOldPropertiesPerGraphic is an SKTMapTableOwner
+					# instead of just an NSMapTable.
+					undoManager.registerUndoWithTarget(self,  selector: 'setGraphicProperties:',
+					 									object: @undoGroupOldPropertiesPerGraphic)
+				end
+				
+				# Find the dictionary in which we're recording the old values of
+				# properties for the changed graphic.
+				oldGraphicProperties = @undoGroupOldPropertiesPerGraphic[graphic]
+				if !oldGraphicProperties
+					# We have to create a dictionary to hold old values for the
+					# changed graphic. -[NSMutableDictionary setObject:forKey:] always
+					# makes a copy of the key object, but we don't want to make copies
+					# of SKTGraphics here, so we can't use NSMutableDictionary. That's
+					# why _undoGroupOldPropertiesPerGraphic uses NSMapTable despite
+					# the hassle of having to wrap it in SKTMapTableOwner.
+					oldGraphicProperties = {}
+					@undoGroupOldPropertiesPerGraphic[graphic] = oldGraphicProperties
+				end
+
+				# Record the old value for the changed property, unless an older
+				# value has already been recorded for the current undo group. Here
+				# we're "casting" a KVC key path to a dictionary key, but that
+				# should be OK. -[NSMutableDictionary setObject:forKey:] doesn't
+				# know the difference.
+				oldGraphicProperties[keyPath] = oldValue if !oldGraphicProperties[keyPath]
+				
+				# Don't set the undo action name during undoing and redoing. In
+				# Sketch, SKTGraphicView sometimes overwrites whatever action name we
+				# set up here with something more specific (as in, "Move" or "Resize"
+				# instead of "Change of Bounds"), but only during the building of the
+				# original undo action. During undoing and redoing SKTGraphicView
+				# doesn't get a chance to do that desirable overwriting again. Just
+				# leave the action name alone during undoing and redoing and the
+				# action name from the original undo group will continue to be used.
+				if !undoManager.undoing? && !undoManager.redoing?
+					# What's the human-readable name of the property that's just been
+					# changed? Here we're effectively "casting" a key path to a key. It
+					# had better really be a key or things will get confused. For
+					# example, this is one of the things that would need updating if
+					# -[SKTGraphic keysForValuesToObserveForUndo] someday becomes
+					# -[SKTGraphic keyPathsForValuesToObserveForUndo].
+					graphicClass = graphic.class
+					presentablePropertyName = graphicClass.presentablePropertyNameForKey(keyPath)
+					if !presentablePropertyName
+						# Someone overrode -[SKTGraphic keysForValuesToObserveForUndo] but
+						# didn't override +[SKTGraphic presentablePropertyNameForKey:] to
+						# match. Help debug a little. Hopefully the SKTGraphic public
+						# interface makes it so that you only have to test a little bit to
+						# find bugs like this.
+						graphicClassName = graphicClass.inspect
+						raise "Internal Inconsistency"
+						# [NSException raise:NSInternalInconsistencyException format:@"[[%@ class] keysForValuesToObserveForUndo] returns a set that includes @\"%@\", but [[%@ class] presentablePropertyNameForKey:@\"%@\"] returns nil.", graphicClassName, keyPath, graphicClassName, keyPath];
+					end
+
+					# Have we set an action name for the current undo group yet?
+					if @undoGroupPresentablePropertyName || @undoGroupHasChangesToMultipleProperties
+						# Yes. Have we already determined that we have to use a generic
+						# undo action name, and set it? If so, there's nothing to do.
+						if !@undoGroupHasChangesToMultipleProperties
+							# So far we've set an action name for the current undo group
+							# that mentions a specific property. Is the property that's just
+							# been changed the same one mentioned in that action name
+							# (regardless of which graphic has been changed)? If so, there's
+							# nothing to do.
+							if @undoGroupPresentablePropertyName != presentablePropertyName
+								# The undo action is going to restore the old values of
+								# different properties. Set a generic undo action name and
+								# record the fact that we've done so.
+								undoManager.actionName = NSLocalizedStringFromTable("Change of Multiple Graphic Properties", 
+																						"UndoStrings",
+																						"Generic action name for complex graphic property changes.")
+								@undoGroupHasChangesToMultipleProperties = true
+
+								# This is useless now.
+								@undoGroupPresentablePropertyName = nil
+								@undoGroupPresentablePropertyName = nil
+							end
+						end
+					else
+						# So far the action of the current undo group is going to be the
+						# restoration of the value of one property. Set a specific undo
+						# action name and record the fact that we've done so.
+						undoManager.actionName = NSLocalizedStringFromTable("Change of #{presentablePropertyName}", "UndoStrings", "Specific action name for simple graphic property changes. The argument is the name of a property.")
+						@undoGroupPresentablePropertyName = presentablePropertyName
+					end
+				end
+			end
+		end		
+	end
+
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+State that's used by the undo machinery. It all gets cleared out each time the undo manager sends a checkpoint notification.
+_undoGroupInsertedGraphics is the set of graphics that have been inserted, if any have been inserted.
+_undoGroupOldPropertiesPerGraphic is a dictionary whose keys are graphics and whose values are other dictionaries, each of which
+contains old values of graphic properties, if graphic properties have changed. It uses an NSMapTable instead of an
+NSMutableDictionary so we can set it up not to copy the graphics that are used as keys, something not possible with
+NSMutableDictionary. And then because NSMapTables were not objects in Mac OS 10.4 and earlier we have to wrap them in NSObjects
+that can be reference-counted by NSUndoManager, hence SKTMapTableOwner.   In MacRuby a hash is used instead of an NSMapTable - I am not sure what the problem NSMapTable is trying to solve (weak references?) but one of the nice things about Ruby is just to let the memory take care of itself.
+
+_undoGroupPresentablePropertyName is the result of invoking +[SKTGraphic presentablePropertyNameForKey:] for changed graphics,
+if the result of each invocation has been the same so far, nil otherwise. _undoGroupHasChangesToMultipleProperties is YES if
+changes have been made to more than one property, as determined by comparing the results of invoking +[SKTGraphic
+presentablePropertyNameForKey:] for changed graphics, NO otherwise.
+
+NSMutableSet *_undoGroupInsertedGraphics; 
+SKTMapTableOwner *_undoGroupOldPropertiesPerGraphic; 
+NSString *_undoGroupPresentablePropertyName; 
+BOOL _undoGroupHasChangesToMultipleProperties;.
+
+This class is KVC and KVO compliant for these keys:
+
+"canvasSize" (an NSSize-containing NSValue; read-only) - The size of the document's canvas. This is derived from the currently selected paper size and document margins.
+
+"graphics" (an NSArray of SKTGraphics; read-write) - the graphics of the document.
+
+In Sketch the graphics property of each SKTGraphicView is bound to the graphics property of the document whose contents its presented. 
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTError.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTError.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTError.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,80 @@
+SKTUnknownFileReadError       = 1
+SKTUnknownPasteboardReadError = 2
+SKTWriteCouldntMakeTIFFError  = 3
+
+SKTErrorDomain = "SketchErrorDomain"
+
+def SKTErrorWithCode (code)
+	# An NSError has a bunch of parameters that determine how it's presented
+	# to the user. We specify two of them here. They're localized strings that
+	# we look up in SKTError.strings, whose keys are derived from the error
+	# code and an indicator of which kind of localized string we're looking
+	# up. The value: strings are specified so that at least something is shown
+	# if there's a problem with the strings file, but really they should never
+	# ever be shown to the user. When testing an app like Sketch you really
+	# have to make sure that you've seen every call of SKTErrorWithCode()
+	# executed since the last time you did things like change the set of
+	# available error codes or edit the strings files.
+	mainBundle = NSBundle.mainBundle
+	localizedDescription = mainBundle.localizedStringForKey(NSString.stringWithFormat("description%ld", code), 
+			value: "Sketch could not complete the operation because an unknown error occurred.", 
+			table: "SKTError")
+	localizedFailureReason = mainBundle.localizedStringForKey(NSString.stringWithFormat("failureReason%ld", code),
+	 		value: "An unknown error occurred.",
+	 		table: "SKTError")
+	errorUserInfo = {NSLocalizedDescriptionKey => localizedDescription, 
+						NSLocalizedFailureReasonErrorKey => localizedFailureReason}
+	
+	# In Sketch we know that no one's going to be paying attention to the domain
+	# and code that we use here, but still we don't specify junk values.
+	# Certainly we don't just use NSCocoaErrorDomain and some random error code.
+	return NSError.errorWithDomain(SKTErrorDomain, code: code, userInfo: errorUserInfo)
+end
+
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTGraphic.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTGraphic.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTGraphic.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,690 @@
+# String constants declared in the header. A lot of them aren't used by any
+# other class in the project, but it's a good idea to provide and use them, if
+# only to help prevent typos in source code. 
+SKTGraphicCanSetDrawingFillKey = "canSetDrawingFill"
+SKTGraphicCanSetDrawingStrokeKey = "canSetDrawingStroke"
+SKTGraphicDrawingFillKey = "drawingFill"
+SKTGraphicFillColorKey = "fillColor"
+SKTGraphicDrawingStrokeKey = "drawingStroke"
+SKTGraphicStrokeColorKey = "strokeColor"
+SKTGraphicStrokeWidthKey = "strokeWidth"
+SKTGraphicXPositionKey = "xPosition"
+SKTGraphicYPositionKey = "yPosition"
+SKTGraphicWidthKey = "width"
+SKTGraphicHeightKey = "height"
+SKTGraphicBoundsKey = "bounds"
+SKTGraphicDrawingBoundsKey = "drawingBounds"
+SKTGraphicDrawingContentsKey = "drawingContents"
+SKTGraphicKeysForValuesToObserveForUndoKey = "keysForValuesToObserveForUndo"
+
+# Another constant that's declared in the header.
+SKTGraphicNoHandle = 0
+
+# A key that's used in Sketch's property-list-based file and pasteboard formats.
+SKTGraphicClassKey = "className"
+
+# The values that might be returned by -[SKTGraphic creationSizingHandle] and
+# -[SKTGraphic handleUnderPoint:], and that are understood by -[SKTGraphic
+# resizeByMovingHandle:toPoint:]. We provide specific indexes in this
+# enumeration so make sure none of them are zero (that's SKTGraphicNoHandle)
+# and to make sure the flipping arrays in -[SKTGraphic
+# resizeByMovingHandle:toPoint:] work.
+SKTGraphicUpperLeftHandle   = 1
+SKTGraphicUpperMiddleHandle = 2
+SKTGraphicUpperRightHandle  = 3
+SKTGraphicMiddleLeftHandle  = 4
+SKTGraphicMiddleRightHandle = 5
+SKTGraphicLowerLeftHandle   = 6
+SKTGraphicLowerMiddleHandle = 7
+SKTGraphicLowerRightHandle  = 8
+
+
+# The handles that graphics draw on themselves are 6 point by 6 point rectangles.
+SKTGraphicHandleWidth = 6.0
+SKTGraphicHandleHalfWidth = 6.0 / 2.0
+
+class SKTGraphic
+
+	# Make available for KVO otherwise will not be found.
+	attr_accessor	:drawingFill, :fillColor, :drawingStroke, :strokeColor, :strokeWidth
+	attr_reader		:bounds
+	
+	# An override of the superclass' designated initializer.
+	def init ()
+		super
+
+		# Set up decent defaults for a new graphic.
+		@bounds = NSZeroRect
+		@drawingFill = false
+		@fillColor = NSColor.whiteColor
+		@drawingStroke = true
+		@strokeColor = NSColor.blackColor
+		@strokeWidth = 1.0
+		return self;
+	end
+
+	# *** Private KVC-Compliance for Public Properties ***
+
+	# An override of the NSObject(NSKeyValueObservingCustomization) method.
+	def self.automaticallyNotifiesObserversForKey (key)
+		# We don't want KVO autonotification for these properties. Because the
+		# setters for all of them invoke -setBounds:, and this class is
+		# KVO-compliant for "bounds," and we declared that the values of these
+		# properties depend on "bounds," we would up end up with double
+		# notifications for them. That would probably be unnoticable, but it's a
+		# little wasteful. Something you have to think about with codependent
+		# mutable properties like these (regardless of what notification mechanism
+		# you're using).
+		[SKTGraphicXPositionKey, SKTGraphicYPositionKey, SKTGraphicWidthKey, SKTGraphicHeightKey].index(key) || super
+	end
+
+	# In Mac OS 10.5 and newer KVO's dependency mechanism invokes class methods
+	# to find out what properties affect properties being observed, like these.
+	def self.keyPathsForValuesAffectingXPosition ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+
+	def self.keyPathsForValuesAffectingYPosition ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+	
+	def self.keyPathsForValuesAffectingWidth ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+	
+	def self.keyPathsForValuesAffectingHeight ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+	
+	def xPosition
+		bounds.origin.x
+	end
+	
+	def yPosition
+		bounds.origin.y
+	end
+	
+	def width 
+		bounds.size.width
+	end
+	
+	def height
+		bounds.size.height
+	end
+	
+	# We cannot just set the bounds component directly as this will not trigger
+	# KVO of bounds.	Also must also edit a new version of the bounds otherwise
+	# undo will not have old and new versions.
+	def setXPosition (xPosition)
+		b = bounds.dup
+		b.origin.x = xPosition
+		setBounds(b)
+	end
+	
+	def setYPosition (yPosition)
+		b = bounds.dup
+		b.origin.y = yPosition
+		setBounds(b)
+	end
+
+	def setWidth (width)
+		b = bounds.dup
+		b.size.width = width
+		setBounds(b)
+	end
+	
+	def setHeight (height)
+		b = bounds.dup
+		b.size.height = height
+		setBounds(b)
+	end
+
+	# *** Convenience ***
+
+	def self.boundsOfGraphics (graphics)
+		# The bounds of an array of graphics is the union of all of their bounds.
+		b = NSZeroRect;
+		graphics.each {|g| b = NSUnionRect(b, g.bounds)}
+		b
+	end
+
+	def self.drawingBoundsOfGraphics (graphics)
+		# The drawing bounds of an array of graphics is the union of all of their drawing bounds.
+		b = NSZeroRect;
+		graphics.each {|g| b = NSUnionRect(b, g.drawingBounds)}
+		b
+	end
+
+	def self.translateGraphics(graphics, byX: deltaX, y: deltaY)
+		graphics.each {|g| g.setBounds(NSOffsetRect(g.bounds, deltaX, deltaY))}
+	end
+
+
+	# *** Persistence ***
+	def self.graphicsWithPasteboardData (data, error: outError)
+		# Because this data may have come from outside this process, don't assume
+		# that any property list object we get back is the right type.
+		graphics = nil;
+		propertiesArray = NSPropertyListSerialization.propertyListWithData(data, options: 0,  format: nil, error: nil)
+		propertiesArray = nil if !propertiesArray.kind_of? NSArray
+		if propertiesArray
+			# Convert the array of graphic property dictionaries into an array of graphics.
+			graphics = graphicsWithProperties(propertiesArray)
+		elsif outError
+			# If property list parsing fails we have no choice but to admit that we
+			# don't know what went wrong. The error description returned by
+			# +[NSPropertyListSerialization
+			# propertyListFromData:mutabilityOption:format:errorDescription:] would be
+			# pretty technical, and not the sort of thing that we should show to a
+			# user.
+			outError[0] = SKTErrorWithCode(SKTUnknownPasteboardReadError)
+		end
+		return graphics;
+	end
+
+
+	def self.graphicsWithProperties (propertiesArray)
+		# Convert the array of graphic property dictionaries into an array of
+		# graphics. Again, don't assume that property list objects are the right
+		# type.
+		graphics = []
+		propertiesArray.each do |properties|
+			if properties.kind_of? Hash
+				# Figure out the class of graphic to instantiate. The value of the
+				# SKTGraphicClassKey entry must be an Objective-C class name. Don't
+				# trust the type of something you get out of a property list unless you
+				# know your process created it or it was read from your application or
+				# framework's resources.
+				className = properties[SKTGraphicClassKey]
+				klass = NSClassFromString(className)
+				if klass
+					# Create a new graphic. If it doesn't work then just do nothing. We
+					# could return an NSError, but doing things this way 1) means that a
+					# user might be able to rescue graphics from a partially corrupted
+					# document, and 2) is easier.
+					graphics << klass.alloc.initWithProperties(properties)
+				end
+			end
+		end
+		return graphics
+	end
+
+
+	# NSPropertyListBinaryFormat_v1_0
+	def self.pasteboardDataWithGraphics (graphics)
+		# Convert the contents of the document to a property list and then flatten
+		# the property list.
+		NSPropertyListSerialization.dataWithPropertyList(propertiesWithGraphics(graphics), format: NSPropertyListXMLFormat_v1_0, options: 0, error: nil)
+	end
+
+	def self.propertiesWithGraphics (graphics)
+		# Convert the array of graphics dictionaries into an array of graphic
+		# property dictionaries.
+		graphics.map do |graphic|
+			# Get the properties of the graphic, add the class name that can be used
+			# by +graphicsWithProperties: to it, and add the properties to the array
+			# we're building.
+			# In Ruby just use the class constant and not the name string.
+			properties = graphic.properties
+			properties[SKTGraphicClassKey] = NSStringFromClass(graphic.class).sub(/NSKVONotifying_/, '')
+			properties
+		end
+	end
+
+
+	def initWithProperties (properties)
+		init
+
+		# The dictionary entries are all instances of the classes that can be
+		# written in property lists. Don't trust the type of something you get out
+		# of a property list unless you know your process created it or it was
+		# read from your application or framework's resources. We don't have to
+		# worry about KVO-compliance in initializers like this by the way; no one
+		# should be observing an unitialized object.
+		boundsString = properties[SKTGraphicBoundsKey]
+		@bounds = NSRectFromString(boundsString) if boundsString.kind_of? NSString
+			
+		fill = properties[SKTGraphicDrawingFillKey]
+		@drawingFill = fill if fill.kind_of?(TrueClass) || fill.kind_of?(FalseClass)
+		
+		fillColorData = properties[SKTGraphicFillColorKey]
+		@fillColor = NSUnarchiver.unarchiveObjectWithData(fillColorData) if fillColorData.kind_of? NSData
+		
+		stroke = properties[SKTGraphicDrawingStrokeKey]
+		@drawingStroke = stroke if stroke.kind_of?(TrueClass) || stroke.kind_of?(FalseClass)
+
+		strokeColorData = properties[SKTGraphicStrokeColorKey]
+		@strokeColor = NSUnarchiver.unarchiveObjectWithData(strokeColorData) if strokeColorData.kind_of? NSData
+
+		strokeWidthNumber = properties[SKTGraphicStrokeWidthKey]
+		@strokeWidth = strokeWidthNumber.doubleValue
+		self
+	end
+
+	def properties
+		# Return a dictionary that contains nothing but values that can be written
+		# in property lists.
+		properties = {}
+		properties[SKTGraphicBoundsKey] = NSStringFromRect(bounds)
+		properties[SKTGraphicDrawingFillKey] = NSNumber.numberWithBool(drawingFill)
+		properties[SKTGraphicFillColorKey] = NSArchiver.archivedDataWithRootObject(fillColor) if fillColor
+		properties[SKTGraphicDrawingStrokeKey] = NSNumber.numberWithBool(drawingStroke)
+		properties[SKTGraphicStrokeColorKey] = NSArchiver.archivedDataWithRootObject(strokeColor) if strokeColor
+		properties[SKTGraphicStrokeWidthKey] = NSNumber.numberWithDouble(strokeWidth)
+		properties
+	end
+
+
+	# *** Drawing ***
+
+	def self.keyPathsForValuesAffectingDrawingBounds ()
+		# The only properties managed by SKTGraphic that affect the drawing bounds
+		# are the bounds and the the stroke width.
+		NSSet.setWithArray([SKTGraphicBoundsKey, SKTGraphicStrokeWidthKey])
+	end
+
+
+	def self.keyPathsForValuesAffectingDrawingContents ()
+		# The only properties managed by SKTGraphic that affect drawing but not
+		# the drawing bounds are the fill and stroke parameters.
+		NSSet.setWithArray([SKTGraphicDrawingFillKey, SKTGraphicFillColorKey, SKTGraphicDrawingStrokeKey, SKTGraphicStrokeColorKey])
+	end
+
+	def drawingBounds ()
+		# Assume that -[SKTGraphic drawContentsInView:] and -[SKTGraphic
+		# drawHandlesInView:] will be doing the drawing. Start with the plain
+		# bounds of the graphic, then take drawing of handles at the corners of
+		# the bounds into account, then optional stroke drawing.
+		outset = SKTGraphicHandleHalfWidth
+		if drawingStroke
+			strokeOutset = strokeWidth / 2.0
+			if strokeOutset > outset
+			 	outset = strokeOutset
+			end
+		end
+		
+		inset = 0.0 - outset
+		drawBounds = NSInsetRect(bounds, inset, inset)
+	
+		# -drawHandleInView:atPoint: draws a one-unit drop shadow too.
+		drawBounds.size.width += 1.0
+		drawBounds.size.height += 1.0
+		return drawBounds
+	end
+
+	def drawContentsInView (view, isBeingCreateOrEdited: isBeingCreatedOrEditing)
+		# If the graphic is so so simple that it can be boiled down to a bezier
+		# path then just draw a bezier path. It's -bezierPathForDrawing's
+		# responsibility to return a path with the current stroke width.
+		path = bezierPathForDrawing
+		if path
+			if drawingFill
+				fillColor.set
+				path.fill
+			end
+			if drawingStroke
+				strokeColor.set
+				path.stroke
+			end
+		end
+	end
+
+	def bezierPathForDrawing ()
+		# Live to be overriden.
+		raise "Neither -drawContentsInView: nor -bezierPathForDrawing has been overridden."
+	end
+
+
+	def drawHandlesInView (view)
+		# Draw handles at the corners and on the sides.
+		drawHandleInView(view, atPoint: NSMakePoint(NSMinX(bounds), NSMinY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMidX(bounds), NSMinY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMaxX(bounds), NSMinY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMinX(bounds), NSMidY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMaxX(bounds), NSMidY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMinX(bounds), NSMaxY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMidX(bounds), NSMaxY(bounds)))
+		drawHandleInView(view, atPoint: NSMakePoint(NSMaxX(bounds), NSMaxY(bounds)))
+	end
+
+	def drawHandleInView (view, atPoint: point)
+		# Figure out a rectangle that's centered on the point but lined up with device pixels.
+		handleBounds= NSRect.new
+		handleBounds.origin.x = point.x - SKTGraphicHandleHalfWidth
+		handleBounds.origin.y = point.y - SKTGraphicHandleHalfWidth
+		handleBounds.size.width = SKTGraphicHandleWidth
+		handleBounds.size.height = SKTGraphicHandleWidth
+		handleBounds = view.centerScanRect(handleBounds)
+	
+		# Draw the shadow of the handle.
+		handleShadowBounds = NSOffsetRect(handleBounds, 1.0, 1.0)
+		NSColor.controlDarkShadowColor.set
+		NSRectFill(handleShadowBounds)
+
+		# Draw the handle itself.
+		NSColor.knobColor.set
+		NSRectFill(handleBounds)
+	end
+
+	# *** Editing ***
+	@@crosshairsCursor = nil
+	def self.creationCursor ()
+		# By default we use the crosshairs cursor.
+		if !@@crosshairsCursor
+			crosshairsImage = NSImage.imageNamed("Cross")
+			crosshairsImageSize = crosshairsImage.size
+			@@crosshairsCursor = NSCursor.alloc.initWithImage(crosshairsImage,  	
+											hotSpot: NSMakePoint((crosshairsImageSize.width / 2.0), (crosshairsImageSize.height / 2.0)))
+		end
+		@@crosshairsCursor
+	end
+
+	def self.creationSizingHandle ()
+		# Return the number of the handle for the lower-right corner. If the user
+		# drags it so that it's no longer in the lower-right,
+		# -resizeByMovingHandle:toPoint: will deal with it.
+		SKTGraphicLowerRightHandle
+	end
+
+	def canSetDrawingFill ()
+		# The default implementation of -drawContentsInView: can draw fills.
+		return true
+	end
+
+	def canSetDrawingStroke ()
+		# The default implementation of -drawContentsInView: can draw strokes.
+		return true
+	end
+
+	def canMakeNaturalSize ()
+		# Only return YES if -makeNaturalSize would actually do something.
+		return bounds.size.width != bounds.size.height
+	end
+
+	def isContentsUnderPoint (point)
+		# Just check against the graphic's bounds.
+		return NSPointInRect(point, bounds)
+	end
+
+	def handleUnderPoint (point)
+		# Check handles at the corners and on the sides.
+		if isHandleAtPoint(NSMakePoint(NSMinX(bounds), NSMinY(bounds)), underPoint: point)
+			return SKTGraphicUpperLeftHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMidX(bounds), NSMinY(bounds)), underPoint: point)
+			return SKTGraphicUpperMiddleHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMaxX(bounds), NSMinY(bounds)), underPoint: point)
+			return SKTGraphicUpperRightHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMinX(bounds), NSMidY(bounds)), underPoint: point)
+			return SKTGraphicMiddleLeftHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMaxX(bounds), NSMidY(bounds)), underPoint: point)
+			return SKTGraphicMiddleRightHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMinX(bounds), NSMaxY(bounds)), underPoint: point)
+			return SKTGraphicLowerLeftHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMidX(bounds), NSMaxY(bounds)), underPoint: point)
+			return SKTGraphicLowerMiddleHandle
+		elsif isHandleAtPoint(NSMakePoint(NSMaxX(bounds), NSMaxY(bounds)), underPoint: point)
+			return SKTGraphicLowerRightHandle
+		else
+			return SKTGraphicNoHandle
+		end
+	end
+
+	def isHandleAtPoint (handlePoint, underPoint: point)
+		# Check a handle-sized rectangle that's centered on the handle point.
+		handleBounds = NSRect.new
+		handleBounds.origin.x = handlePoint.x - SKTGraphicHandleHalfWidth
+		handleBounds.origin.y = handlePoint.y - SKTGraphicHandleHalfWidth
+		handleBounds.size.width = SKTGraphicHandleWidth
+		handleBounds.size.height = SKTGraphicHandleWidth
+		return NSPointInRect(point, handleBounds)
+	end
+
+
+	@@horizFlipings = []
+	@@horizFlipings[SKTGraphicUpperLeftHandle]   = SKTGraphicUpperRightHandle
+	@@horizFlipings[SKTGraphicUpperMiddleHandle] = SKTGraphicUpperMiddleHandle
+	@@horizFlipings[SKTGraphicUpperRightHandle]  = SKTGraphicUpperLeftHandle
+	@@horizFlipings[SKTGraphicMiddleLeftHandle]  = SKTGraphicMiddleRightHandle
+	@@horizFlipings[SKTGraphicMiddleRightHandle] = SKTGraphicMiddleLeftHandle
+	@@horizFlipings[SKTGraphicLowerLeftHandle]   = SKTGraphicLowerRightHandle
+	@@horizFlipings[SKTGraphicLowerMiddleHandle] = SKTGraphicLowerMiddleHandle
+	@@horizFlipings[SKTGraphicLowerRightHandle]  = SKTGraphicLowerLeftHandle
+
+	@@vertFlipings = []
+	@@vertFlipings[SKTGraphicUpperLeftHandle]   = SKTGraphicLowerLeftHandle
+	@@vertFlipings[SKTGraphicUpperMiddleHandle] = SKTGraphicLowerMiddleHandle
+	@@vertFlipings[SKTGraphicUpperRightHandle]  = SKTGraphicLowerRightHandle
+	@@vertFlipings[SKTGraphicMiddleLeftHandle]  = SKTGraphicMiddleLeftHandle
+	@@vertFlipings[SKTGraphicMiddleRightHandle] = SKTGraphicMiddleRightHandle
+	@@vertFlipings[SKTGraphicLowerLeftHandle]   = SKTGraphicUpperLeftHandle
+	@@vertFlipings[SKTGraphicLowerMiddleHandle] = SKTGraphicUpperMiddleHandle
+	@@vertFlipings[SKTGraphicLowerRightHandle]  = SKTGraphicUpperRightHandle
+	
+	def resizeByMovingHandle (handle, toPoint: point)
+		# Is the user changing the width of the graphic?
+		b = bounds.dup	# need own copy as undo needs old and new versions
+		case handle
+			when SKTGraphicUpperLeftHandle, SKTGraphicMiddleLeftHandle, SKTGraphicLowerLeftHandle
+				# Change the left edge of the graphic.
+				b.size.width = NSMaxX(b) - point.x;
+				b.origin.x = point.x;
+			when SKTGraphicUpperRightHandle, SKTGraphicMiddleRightHandle, SKTGraphicLowerRightHandle
+				# Change the right edge of the graphic.
+				b.size.width = point.x - b.origin.x;
+		end
+
+		# Did the user actually flip the graphic over?
+		if b.size.width < 0.0
+			# The handle is now playing a different role relative to the graphic.
+			handle = @@horizFlipings[handle]
+
+			# Make the graphic's width positive again.
+			b.size.width = 0.0 - b.size.width
+			b.origin.x -= b.size.width
+
+			# Tell interested subclass code what just happened.
+			flipHorizontally
+		end
+	
+		# Is the user changing the height of the graphic?
+		case handle
+			when SKTGraphicUpperLeftHandle, SKTGraphicUpperMiddleHandle, SKTGraphicUpperRightHandle
+				# Change the top edge of the graphic.
+				b.size.height = NSMaxY(b) - point.y;
+				b.origin.y = point.y;
+			when SKTGraphicLowerLeftHandle, SKTGraphicLowerMiddleHandle, SKTGraphicLowerRightHandle
+				# Change the bottom edge of the graphic.
+				b.size.height = point.y - b.origin.y;
+		end
+
+		# Did the user actually flip the graphic upside down?
+		if b.size.height < 0.0
+
+			# The handle is now playing a different role relative to the graphic.
+			handle = @@vertFlipings[handle]
+	
+			# Make the graphic's height positive again.
+			b.size.height = 0.0 - b.size.height;
+			b.origin.y -= b.size.height;
+
+			# Tell interested subclass code what just happened.
+			flipVertically
+		end
+		
+		# Changing the individual members of bounds will not have told the
+		# observers so set bounds to itself to notify them.
+		setBounds(b)
+		return handle
+	end
+
+	def flipHorizontally ()
+		# Live to be overridden.
+	end
+
+
+	def flipVertically ()
+		# Live to be overridden.
+	end
+
+
+	def makeNaturalSize ()
+		b = bounds.dup	# need own copy as undo needs old and new versions
+		# Just make the graphic square.
+		if b.size.width < b.size.height
+			b.size.height = b.size.width
+			setBounds(b)
+		elsif b.size.width > b.size.height
+			b.size.width = b.size.height
+			setBounds(b)
+		end	
+	end
+
+	def setBounds (b)
+		@bounds = b
+	end
+
+	def setColor (color)
+		# This method demonstrates something interesting: we haven't bothered to
+		# provide setter methods for the properties we want to change, but we can
+		# still change them using KVC. KVO autonotification will make sure
+		# observers hear about the change (it works with -setValue:forKey: as well
+		# as -set<Key>:). Of course, if we found ourselvings doing this a little
+		# more often we would go ahead and just add the setter methods. The point
+		# is that KVC direct instance variable access very often makes boilerplate
+		# accessors unnecessary but if you want to just put them in right away,
+		# eh, go ahead.
+		# Can we fill the graphic?
+		if canSetDrawingFill
+			# Are we filling it? If not, start, using the new color.
+			setValue(NSNumber.numberWithBool(true), forKey: SKTGraphicDrawingFillKey) if drawingFill
+			setValue(color, forKey: SKTGraphicFillColorKey)
+		end
+	end
+
+	def newEditingViewWithSuperviewBounds(superviewBounds)
+		# Live to be overridden.
+		return nil
+	end
+
+	def finalizeEditingView (editingView)
+		# Live to be overridden.
+	end
+
+	# *** Undo ***
+
+	def keysForValuesToObserveForUndo
+		# Of the properties managed by SKTGraphic, "drawingingBounds,"
+		# "drawingContents," "canSetDrawingFill," and "canSetDrawingStroke" aren't
+		# anything that the user changes, so changes of their values aren't
+		# registered undo operations. "xPosition," "yPosition," "width," and
+		# "height" are all derived from "bounds," so we don't need to register
+		# those either. Changes of any other property are undoable.
+		NSSet.setWithArray([SKTGraphicDrawingFillKey, SKTGraphicFillColorKey, SKTGraphicDrawingStrokeKey, SKTGraphicStrokeColorKey, SKTGraphicStrokeWidthKey, SKTGraphicBoundsKey])
+	end
+
+	@@presentablePropertyNameForKey = {
+	SKTGraphicDrawingFillKey => NSLocalizedStringFromTable("Filling", "UndoStrings", "Action name part for SKTGraphicDrawingFillKey."),
+		SKTGraphicFillColorKey => NSLocalizedStringFromTable("Fill Color", "UndoStrings","Action name part for SKTGraphicFillColorKey."),
+		SKTGraphicDrawingStrokeKey => NSLocalizedStringFromTable("Stroking", "UndoStrings", "Action name part for SKTGraphicDrawingStrokeKey."),
+		SKTGraphicStrokeColorKey => NSLocalizedStringFromTable("Stroke Color", "UndoStrings", "Action name part for SKTGraphicStrokeColorKey."),
+		SKTGraphicStrokeWidthKey => NSLocalizedStringFromTable("Stroke Width", "UndoStrings", "Action name part for SKTGraphicStrokeWidthKey."),
+		SKTGraphicBoundsKey => NSLocalizedStringFromTable("Bounds", "UndoStrings", "Action name part for SKTGraphicBoundsKey.")
+	}
+	
+	def self.presentablePropertyNameForKey (key)
+		# Pretty simple. Don't be surprised if you never see "Bounds" appear in an
+		# undo action name in Sketch. SKTGraphicView invokes -[NSUndoManager
+		# setActionName:] for things like moving, resizing, and aligning, thereby
+		# overwriting whatever SKTDocument sets with something more specific.
+		@@presentablePropertyNameForKey[key]
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+The values underlying some of the key-value coding (KVC) and observing (KVO) compliance described below. Any corresponding
+getter or setter methods are there for invocation by code in subclasses, not for KVC or KVO compliance. KVC's direct instance
+variable access, KVO's autonotifying, and KVO's property dependency mechanism makes them unnecessary for the latter purpose. If
+you look closely, you'll notice that SKTGraphic itself never touches these instance variables directly except in initializers,
+-copyWithZone:, and public accessors. SKTGraphic is following a good rule: if a class publishes getters and setters it should
+itself invoke them, because people who override methods to customize behavior are right to expect their overrides to actually be
+invoked.
+
+NSRect _bounds;
+BOOL _isDrawingFill;
+NSColor *_fillColor;
+BOOL _isDrawingStroke;
+NSColor *_strokeColor;
+CGFloat _strokeWidth;
+
+This class is KVC (except for "drawingContents") and KVO (except for the scripting-only properties) compliant for these keys:
+
+"canSetDrawingFill" and "canSetDrawingStroke" (boolean NSNumbers; read-only) - Whether or not it even makes sense to try to change the value of the "drawingFill" or "drawingStroke" property.
+
+"drawingFill" (a boolean NSNumber; read-write) - Whether or not the user wants this graphic to be filled with the "fillColor" when it's drawn.
+
+"fillColor" (an NSColor; read-write) - The color that will be used to fill this graphic when it's drawn. The value of this property is ignored when the value of "drawingFill" is NO.
+
+"drawingStroke" (a boolean NSNumber; read-write) - Whether or not the user wants this graphic to be stroked with a path that is "strokeWidth" units wide, using the "strokeColor," when it's drawn.
+
+"strokeColor" (an NSColor; read-write) - The color that will be used to stroke this graphic when it's drawn. The value of this property is ignored when the value of "drawingStroke" is NO.
+
+"strokeWidth" (a floating point NSNumber; read-write) - The width of the stroke that will be used when this graphic is drawn. The value of this property is ignored when the value of "drawingStroke" is NO.
+
+"xPosition" and "yPosition" (floating point NSNumbers; read-write) - The coordinate of the upper-left corner of the graphic.
+
+"width" and "height" (floating point NSNumbers; read-write) - The size of the graphic.
+
+"bounds" (an NSRect-containing NSValue; read-only) - The basic shape of the graphic. For instance, this doesn't include the width of any strokes that are drawn (so "bounds" is really a bit of a misnomer). Being KVO-compliant for bounds contributes to the automatic KVO compliance for drawingBounds via the use of KVO's dependency mechanism. See +[SKTGraphic keyPathsForValuesAffectingDrawingBounds].
+
+"drawingBounds" (an NSRect-containing NSValue; read-only) - The bounding box of anything the graphic might draw when sent a -drawContentsInView: or -drawHandlesInView: message.
+
+"drawingContents" (no value; not readable or writable) - A virtual property for which KVO change notifications are sent whenever any of the properties that affect the drawing of the graphic without affecting its bounds change. We use KVO for this instead of more traditional methods so that we don't have to write any code other than an invocation of KVO's +setKeys:triggerChangeNotificationsForDependentKey:. (To use NSNotificationCenter for instance we would have to write -set...: methods for all of this object's settable properties. That's pretty easy, but it's nice to avoid such boilerplate when possible.) There is no value for this property, because it would not be useful, so this class isn't actually KVC-compliant for "drawingContents." This property is not called "needsDrawing" or some such thing because instances of this class do not know how many views are using it, and potentially there will moments when it "needs drawing" in some views but not others.
+
+"keysForValuesToObserveForUndo" (an NSSet of NSStrings; read-only) - See the comment for -keysForValuesToObserveForUndo below.
+
+In Sketch various properties of the controls of the grid inspector are bound to the properties of the selection of the graphics controller belonging to the window controller of the main window. Each SKTGraphicView observes the "drawingBounds" and "drawingContents" properties of every graphic that it's displaying so it knows when they need redrawing. Each SKTDocument observes many properties of every of one of its graphics so it can register undo actions when they change; for each graphic the exact set of such properties is determined by the current value of the "keysForValuesToObserveForUndo" property. Also, many of these properties are scriptable.
+
+*/
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTGraphicView.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTGraphicView.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTGraphicView.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,1673 @@
+# The names of the bindings supported by this class, in addition to the ones
+# whose support is inherited from NSView.
+SKTGraphicViewGraphicsBindingName = "graphics"
+SKTGraphicViewSelectionIndexesBindingName = "selectionIndexes"
+SKTGraphicViewGridBindingName = "grid"
+
+# The type name that this class uses when putting flattened graphics on the
+# pasteboard during cut, copy, and paste operations. The format that's
+# identified by it is not the exact same thing as the native document format
+# used by SKTDocument, because SKTDocuments store NSPrintInfos (and maybe
+# other stuff too in the future). We could easily use the exact same format
+# for pasteboard data and document files if we decide it's worth it, but so
+# far we haven't.
+SKTGraphicViewPasteboardType = "Apple Sketch 2 pasteboard type"
+
+# The default value by which repetitively pasted sets of graphics are offset
+# from each other, so the user can paste repeatedly and not end up with a pile
+# of graphics that overlay each other so perfectly only the top set can be
+# selected with the mouse.
+SKTGraphicViewDefaultPasteCascadeDelta = 10.0
+
+
+# # Some methods that are invoked by methods above them in this file.
+# @interface SKTGraphicView(SKTForwardDeclarations)
+# - (NSArray *)graphics;
+# - (void)stopEditing;
+# - (void)stopObservingGraphics:(NSArray *)graphics;
+# @end
+# 
+# 
+# # Some methods that really should be declared in AppKit's NSWindow.h, but are not. You can consider them public. (In general though Cocoa methods that are not declared in header files are not public, and you run a bad risk of your application breaking on future versions of Mac OS X if you invoke or override them.) See their uses down below in SKTGraphicView's own implementations of -undo: and -redo:.
+# @interface NSWindow(SKTWellTheyrePublicNow)
+# def undo:(id)sender;
+# def redo:(id)sender;
+# @end
+
+GraphicInfo = Struct.new(:graphic, :index, :isSelected, :handle) 
+
+class SKTGraphicView < NSView
+
+	attr_reader	:grid		# for KVO to work
+	
+	# An override of the superclass' designated initializer.
+	def initWithFrame (frame)
+		super
+
+		# Create the proxy objects used during observing
+		@gridObserver = SKTObserver.new(self, :gridAnyDidChange)
+		@graphicsBoundsObserver = SKTObserver.new(self, :graphicsBoundDidChange)
+		@graphicsContentObserver = SKTObserver.new(self, :graphicsContentDidChange)
+		@graphicsSelectionIndexesObserver = SKTObserver.new(self, :graphicsSelectionIndicesDidChange)
+		@graphicsContainerObserver = SKTObserver.new(self, :graphicsContainerDidChange)
+
+	    @marqueeSelectionBounds = NSZeroRect
+
+		# Specify what kind of pasteboard types this view can handle being dropped
+		# on it.
+		registerForDraggedTypes([NSColorPboardType, NSFilenamesPboardType] + NSImage.imagePasteboardTypes)
+
+		# Initalize the cascading of pasted graphics.
+		@pasteboardChangeCount = -1
+		@pasteCascadeNumber = 0
+		@pasteCascadeDelta = NSMakePoint(SKTGraphicViewDefaultPasteCascadeDelta, SKTGraphicViewDefaultPasteCascadeDelta)
+		return self;
+	end
+
+
+	# - (void)dealloc {
+	# 
+	#	  # If we've set a timer to show handles invalidate it so it doesn't send a message to this object's zombie.
+	#	  [_handleShowingTimer invalidate];
+	# 
+	#	  # Make sure any outstanding editing view doesn't cause leaks.
+	#	  [self stopEditing];
+	# 
+	#	  # Stop observing grid changes.
+	#	  [_grid removeObserver:self forKeyPath:SKTGridAnyKey];
+	# 
+	#	  # Stop observing objects for the bindings whose support isn't implemented using NSObject's default implementations.
+	#	  [self unbind:SKTGraphicViewGraphicsBindingName];
+	#	  [self unbind:SKTGraphicViewSelectionIndexesBindingName];
+	# 
+	#	  # Do the regular Cocoa thing.
+	#	  [_grid release];
+	#	  [super dealloc];
+	# 
+	# }
+
+
+	# *** Bindings ***
+
+	def graphics ()
+		# A graphic view doesn't hold onto an array of the graphics it's
+		# presenting. That would be a cache that hasn't been justified by
+		# performance measurement (not yet anyway). Get the array of graphics
+		# from the bound-to object (an array controller, in Sketch's case).
+		# It's poor practice for a method that returns a collection to return
+		# nil, so never return nil.
+	    @graphicsContainer.valueForKeyPath(@graphicsKeyPath) || []
+	end
+
+	def mutableGraphics ()
+		# Get a mutable array of graphics from the bound-to object (an array
+		# controller, in Sketch's case). The bound-to object is responsible for
+		# being KVO-compliant enough that all observers of the bound-to property
+		# get notified of whatever mutation we perform on the returned array.
+		# Trying to mutate the graphics of a graphic view whose graphics aren't
+		# bound to anything is a programming error.
+	    @graphicsContainer.mutableArrayValueForKeyPath(@graphicsKeyPath)
+	end
+
+	def selectionIndexes
+		# A graphic view doesn't hold onto the selection indexes. That would be a
+		# cache that hasn't been justified by performance measurement (not yet
+		# anyway). Get the selection indexes from the bound-to object (an array
+		# controller, in Sketch's case). It's poor practice for a method that
+		# returns a collection (and an index set is a collection) to return nil,
+		# so never return nil.
+	    @selectionIndexesContainer.valueForKeyPath(@selectionIndexesKeyPath) || NSIndexSet.indexSet
+	end
+
+	# Why isn't this method called -setSelectionIndexes:? Mostly to encourage a
+	# naming convention that's useful for a few reasons: NSObject's default
+	# implementation of key-value binding (KVB) uses key-value coding (KVC) to
+	# invoke methods like -set<BindingName>: on the bound object when the bound-to
+	# property changes, to make it simple to support binding in the simple case of
+	# a view property that affects the way a view is drawn but whose value isn't
+	# directly manipulated by the user. If NSObject's default implementation of
+	# KVB were good enough to use for this "selectionIndexes" property maybe we
+	# _would_ implement a -setSelectionIndexes: method instead of stuffing so much
+	# code in -observeValueForKeyPath:ofObject:change:context: down below (but
+	# it's not, because it doesn't provide a way to get at the old and new
+	# selection indexes when they change). So, this method isn't here to take
+	# advantage of NSObject's default implementation of KVB. It's here to
+	# centralize the bindings work that must be done when the user changes the
+	# selection (check out all of the places it's invoked down below). Hopefully
+	# the different verb in this method name is a good reminder of the
+	# distinction.
+
+	# A person who assumes that a -set... method always succeeds, and always sets
+	# the exact value that was passed in (or throws an exception for invalid
+	# values to signal the need for some debugging), isn't assuming anything
+	# unreasonable. Setters that invalidate that assumption make a class'
+	# interface unnecessarily unpredictable and hard to program against. Sometimes
+	# they require people to write code that sets a value and then gets it right
+	# back again to keep multiple copies of the value synchronized, in case the
+	# setting didn't "take." So, avoid that. When validation is appropriate don't
+	# put it in your setter. Instead, implement a separate validation method.
+	# Follow the naming pattern established by KVC's -validateValue:forKey:error:
+	# when applicable. Now, _this_ method can't guarantee that, when it's invoked,
+	# an immediately subsequent invocation of -selectionIndexes will return the
+	# passed-in value. It's supposed to set the value of a property in the
+	# bound-to object using KVC, but only after asking the bound-to object to
+	# validate the value. So, again, -setSelectionIndexes: wouldn't be a very good
+	# name for it.
+
+	def changeSelectionIndexes (indexes)
+		# After all of that talk, this method isn't invoking
+		# -validateValue:forKeyPath:error:. It will, once we come up with an
+		# example of invalid selection indexes for this case. It will also someday
+		# take any value transformer specified as a binding option into account,
+		# so you have an example of how to do that.
+		# Set the selection index set in the bound-to object (an array controller,
+		# in Sketch's case). The bound-to object is responsible for being
+		# KVO-compliant enough that all observers of the bound-to property get
+		# notified of the setting. Trying to set the selection indexes of a
+		# graphic view whose selection indexes aren't bound to anything is a
+		# programming error.
+		raise "An SKTGraphicView's 'selectionIndexes' property is not bound to anything." if !(@selectionIndexesContainer && @selectionIndexesKeyPath)
+		@selectionIndexesContainer.setValue(indexes,  forKeyPath: @selectionIndexesKeyPath)
+	end
+
+	def setGrid (grid)
+		# Weed out redundant invocations.
+		if grid != @grid
+			# Stop observing changes in the old grid.
+
+			@grid.removeObserver(@gridObserver, forKeyPath: SKTGridAnyKey) if @grid
+			@grid = grid
+
+			# Start observing changes in the new grid so we know when to redraw it.
+			@grid.addObserver(@gridObserver, forKeyPath: SKTGridAnyKey, options: 0, context: nil)
+		end
+	end
+
+	def startObservingGraphics (graphics)
+		# Start observing "drawingBounds" in each of the graphics. Use KVO's
+		# options for getting the old and new values in change notifications so we
+		# can invalidate just the old and new drawing bounds of changed graphics
+		# when they move or change size, instead of the whole view. (The new
+		# drawing bounds is easy to otherwise get using regular KVC, but the old
+		# one would otherwise have been forgotten by the time we get the
+		# notification.) Instances of SKTGraphic must therefore be KVC- and
+		# KVO-compliant for drawingBounds. SKTGraphics's use of KVO's dependency
+		# mechanism means that being KVO-compliant for drawingBounds when
+		# subclassing is as easy as overriding -drawingBounds (to compute an
+		# accurate value) and +keyPathsForValuesAffectingDrawingBounds (to trigger
+		# KVO's dependency mechanism) though.
+		allGraphicIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, graphics.count))
+		
+		graphics.addObserver(@graphicsBoundsObserver, toObjectsAtIndexes: allGraphicIndexes, 
+									forKeyPath: SKTGraphicDrawingBoundsKey, 		
+									options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld, 
+									context: nil)
+
+		# Start observing "drawingContents" in each of the graphics. Don't bother
+		# using KVO's options for getting the old and new values because there is
+		# no value for drawingContents. It's just something that depends on all of
+		# the properties that affect drawing of a graphic but don't affect the
+		# drawing bounds of the graphic. Similar to what we do for drawingBounds,
+		# SKTGraphics' use of KVO's dependency mechanism means that being
+		# KVO-compliant for drawingContents when subclassing is as easy as
+		# overriding +keyPathsForValuesAffectingDrawingContents (there is no
+		# -drawingContents method to override).
+		graphics.addObserver(@graphicsContentObserver, toObjectsAtIndexes: allGraphicIndexes, 
+								forKeyPath: SKTGraphicDrawingContentsKey,
+								options: 0, context: nil)
+	end
+
+	def stopObservingGraphics (graphics)
+		# Undo what we do in -startObservingGraphics:.
+		allGraphicIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, graphics.count))
+		graphics.removeObserver(@graphicsContentObserver, fromObjectsAtIndexes: allGraphicIndexes, 
+									forKeyPath: SKTGraphicDrawingContentsKey)
+		graphics.removeObserver(@graphicsBoundsObserver, fromObjectsAtIndexes: allGraphicIndexes, 
+									forKeyPath: SKTGraphicDrawingBoundsKey)
+	end
+
+	# An override of the NSObject(NSKeyValueBindingCreation) method.
+	def bind (bindingName, toObject: observableObject, withKeyPath: observableKeyPath, options: options)
+		# SKTGraphicView supports several different bindings.
+		if bindingName == SKTGraphicViewGraphicsBindingName
+			# We don't have any options to support for our custom "graphics" binding.
+			raise "SKTGraphicView doesn't support any options for the 'graphics' binding." if options && options.count == 0
+
+			# Rebinding is just as valid as resetting.
+			unbind(SKTGraphicViewGraphicsBindingName) if @graphicsContainer || @graphicsKeyPath
+
+			# Record the information about the binding.
+			@graphicsContainer = observableObject
+			@graphicsKeyPath = observableKeyPath
+
+			# Start observing changes to the array of graphics to which we're bound,
+			# and also start observing properties of the graphics themselves that
+			# might require redrawing.
+			@graphicsContainer.addObserver(@graphicsContainerObserver, forKeyPath: @graphicsKeyPath, 
+															options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld, 
+															context: nil)
+			startObservingGraphics(@graphicsContainer.valueForKeyPath(@graphicsKeyPath))
+
+			# Redraw the whole view to make the binding take immediate visual
+			# effect. We could be much cleverer about this and just redraw the part
+			# of the view that needs it, but in typical usage the view isn't even
+			# visible yet, so that would probably be a waste of time (the
+			# programmer's and the computer's). If this view ever gets reused in
+			# some wildly dynamic situation where the bindings come and go we can
+			# reconsider optimization decisions like this then.
+			setNeedsDisplay(true)
+		elsif bindingName == SKTGraphicViewSelectionIndexesBindingName
+			# We don't have any options to support for our custom "selectionIndexes"
+			# binding either. Maybe in the future someone will imagine a use for a
+			# value transformer on this, and we'll add support for it then.
+			raise "SKTGraphicView doesn't support any options for the 'selectionIndexes' binding." if options && options.count == 0
+
+			# Rebinding is just as valid as resetting.
+			unbind(SKTGraphicViewSelectionIndexesBindingName) if @selectionIndexesContainer || @selectionIndexesKeyPath
+
+			# Record the information about the binding.
+			@selectionIndexesContainer = observableObject
+			@selectionIndexesKeyPath = observableKeyPath
+
+			# Start observing changes to the selection indexes to which we're bound.
+			@selectionIndexesContainer.addObserver(@graphicsSelectionIndexesObserver, forKeyPath: @selectionIndexesKeyPath,
+			 											options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld, 
+														context: nil)
+
+			# Same comment as above.
+			setNeedsDisplay(true)
+		else
+			# For every binding except "graphics" and "selectionIndexes" just use
+			# NSObject's default implementation. It will start observing the
+			# bound-to property. When a KVO notification is sent for the bound-to
+			# property, this object will be sent a [self setValue:theNewValue
+			# forKey:theBindingName] message, so this class just has to be
+			# KVC-compliant for a key that is the same as the binding name, like
+			# "grid." That's why this class has a -setGrid: method. Also, NSView
+			# supports a few simple bindings of its own, and there's no reason to
+			# get in the way of those.
+			super
+		end
+	end
+
+	# An override of the NSObject(NSKeyValueBindingCreation) method.
+	def unbind (bindingName)
+		# SKTGraphicView supports several different bindings. For the ones that
+		# don't use NSObject's default implementation of key-value binding, undo
+		# what we do in -bind:toObject:withKeyPath:options:, and then redraw the
+		# whole view to make the unbinding take immediate visual effect.
+		if bindingName == SKTGraphicViewGraphicsBindingName
+			stopObservingGraphics(graphics)
+			@graphicsContainer.removeObserver(@graphicsContainerObserver, forKeyPath: @graphicsKeyPath) if @graphicsContainer
+			@graphicsContainer = nil
+			@graphicsKeyPath = nil
+			setNeedsDisplay(true)
+		elsif bindingName == SKTGraphicViewSelectionIndexesBindingName
+			@selectionIndexesContainer.removeObserver(@graphicsSelectionIndexesObserver, forKeyPath: @selectionIndexesKeyPath)
+			@selectionIndexesContainer = nil
+			@selectionIndexesKeyPath = nil
+			setNeedsDisplay(true)
+		else
+			# For every binding except "graphics" and "selectionIndexes" just use
+			# NSObject's default implementation. Also, NSView supports a few simple
+			# bindings of its own, and there's no reason to get in the way of those.
+			super
+		end
+	end
+
+	def graphicsContainerDidChange (keyPath, observedObject, change)
+		# The "old value" or "new value" in a change dictionary will be NSNull,
+		# instead of just not existing, if the corresponding option was
+		# specified at KVO registration time and the value for some key in the
+		# key path is nil. In Sketch's case there are times in an
+		# SKTGraphicView's life cycle when it's bound to the graphics of a
+		# window controller's document, and the window controller's document is
+		# nil. Don't redraw the graphic view when we get notifications about
+		# that.
+
+		# Have graphics been removed from the bound-to container?
+		oldGraphics = change[NSKeyValueChangeOldKey]
+		if oldGraphics
+			# Yes. Stop observing them because we don't want to leave dangling observations.
+			stopObservingGraphics(oldGraphics)
+
+			# Redraw just the parts of the view that they used to occupy.
+			oldGraphics.each {|g| setNeedsDisplayInRect(g.drawingBounds)}
+
+			# If a graphic is being edited right now, and the graphic is being
+			# removed, stop the editing. This way we don't strand an editing view
+			# whose graphic has been pulled out from under it. This situation can
+			# arise from undoing and scripting.
+			stopEditing if @editingGraphic && oldGraphics.index(@editingGraphic)
+		end
+
+		# Have graphics been added to the bound-to container?
+		newGraphics = change[NSKeyValueChangeNewKey]
+		if newGraphics
+			# Yes. Start observing them so we know when we need to redraw the
+			# parts of the view where they sit.
+			startObservingGraphics(newGraphics)
+
+			# Redraw just the parts of the view that they now occupy.
+			newGraphics.each {|g| setNeedsDisplayInRect(g.drawingBounds)}
+
+			# If undoing or redoing is being done we have to select the graphics
+			# that are being added. For NSKeyValueChangeSetting the change
+			# dictionary has no NSKeyValueChangeIndexesKey entry, so we have to
+			# figure out the indexes ourselves, which is easy. For
+			# NSKeyValueChangeRemoval the indexes are not the indexes of anything
+			# being added. You might notice that this is only place in this entire
+			# method that we check the value of the NSKeyValueChangeKindKey entry.
+			# In general, doing so should be pretty uncommon in overrides of
+			# -observeValueForKeyPath:ofObject:change:context:, because the values
+			# of the other entries are usually all you need, and handling all of
+			# the possible NSKeyValueChange values requires care. In Sketch we'll
+			# never see NSKeyValueChangeSetting or NSKeyValueChangeReplacement but
+			# we want to demonstrate a reusable class so we handle them anyway.
+			additionalUndoSelectionIndexes = nil;
+			changeKind = change[NSKeyValueChangeKindKey].to_i
+			if changeKind == NSKeyValueChangeSetting
+				additionalUndoSelectionIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, newGraphics.count))
+			elsif changeKind != NSKeyValueChangeRemoval
+				additionalUndoSelectionIndexes = change[NSKeyValueChangeIndexesKey]
+			end
+			
+			if additionalUndoSelectionIndexes && @undoSelectionIndexes
+				# Use -[NSIndexSet addIndexes:] instead of just replacing the value
+				# of _undoSelectionIndexes because we don't know that a single undo
+				# action won't include more than one addition of graphics.
+				@undoSelectionIndexes.addIndexes(additionalUndoSelectionIndexes) 
+			end
+		end
+	end
+	
+	def gridAnyDidChange (keyPath, observedObject, change)
+		# Either a new grid is to be used (this only happens once in Sketch) or
+		# one of the properties of the grid has changed. Regardless, redraw
+		# everything.
+		setNeedsDisplay(true)
+	end
+		
+		
+	def graphicsBoundDidChange (keyPath, observedObject, change)
+		# Redraw the part of the view that the graphic used to occupy, and the
+		# part that it now occupies.
+		setNeedsDisplay(change[NSKeyValueChangeOldKey])
+		setNeedsDisplayInRect(change[NSKeyValueChangeNewKey])
+
+		# If undoing or redoing is being done add this graphic to the set that
+		# will be selected at the end of the undo action. -[NSArray
+		# indexOfObject:] is a dangerous method from a performance standpoint.
+		# Maybe an undo action that affects many graphics at once will be slow.
+		# Maybe something else in this very simple-looking bit of code will be a
+		# problem. We just don't yet know whether there will be a performance
+		# problem that the user can notice here. We'll check when we do real
+		# performance measurement on Sketch someday. At least we've limited the
+		# potential problem to undoing and redoing by checking
+		# _undoSelectionIndexes!=nil. One thing we do know right now is that we're
+		# not using memory to record selection changes on the undo/redo stacks,
+		# and that's a good thing.
+		if @undoSelectionIndexes
+			graphicIndex = graphics.index(observedObject)
+			if graphicIndex
+				@undoSelectionIndexes.addIndex(graphicIndex)
+			end
+		end
+	end
+	
+	def graphicsContentDidChange (keyPath, observedObject, change)
+		# The graphic's drawing bounds hasn't changed, so just redraw the part
+		# of the view that it occupies right now.
+			setNeedsDisplayInRect(observedObject.drawingBounds)
+
+		# If undoing or redoing is being done add this graphic to the set that
+		# will be selected at the end of the undo action. -[NSArray
+		# indexOfObject:] is a dangerous method from a performance standpoint.
+		# Maybe an undo action that affects many graphics at once will be slow.
+		# Maybe something else in this very simple-looking bit of code will be a
+		# problem. We just don't yet know whether there will be a performance
+		# problem that the user can notice here. We'll check when we do real
+		# performance measurement on Sketch someday. At least we've limited the
+		# potential problem to undoing and redoing by checking
+		# _undoSelectionIndexes!=nil. One thing we do know right now is that we're
+		# not using memory to record selection changes on the undo/redo stacks,
+		# and that's a good thing.
+		if @undoSelectionIndexes
+			graphicIndex = graphics.index(observedObject)
+			if graphicIndex
+				@undoSelectionIndexes.addIndex(graphicIndex)
+			end
+		end
+	end
+	
+	def graphicsSelectionIndicesDidChange (keyPath, observedObject, change)
+		# Some selection indexes might have been removed, some might have been
+		# added. Redraw the selection handles for any graphic whose selectedness
+		# has changed, unless the binding is changing completely (signalled by
+		# null old or new value), in which case just redraw the whole view.
+		oldSelectionIndexes = change[NSKeyValueChangeOldKey]
+		newSelectionIndexes = change[NSKeyValueChangeNewKey]
+		if oldSelectionIndexes && newSelectionIndexes
+			oldSelectionIndex = oldSelectionIndexes.firstIndex
+			while oldSelectionIndex != NSNotFound
+				if !newSelectionIndexes.containsIndex(oldSelectionIndex)
+					deselectedGraphic = graphics[oldSelectionIndex]
+					setNeedsDisplayInRect(deselectedGraphic.drawingBounds)
+				end
+				oldSelectionIndex = oldSelectionIndexes.indexGreaterThanIndex(oldSelectionIndex)
+			end
+
+			newSelectionIndex = newSelectionIndexes.firstIndex
+			while newSelectionIndex != NSNotFound
+				if !oldSelectionIndexes.containsIndex(newSelectionIndex)
+					selectedGraphic = graphics[newSelectionIndex]
+					setNeedsDisplayInRect(selectedGraphic.drawingBounds)
+				end
+				newSelectionIndex = newSelectionIndexes.indexGreaterThanIndex(newSelectionIndex)
+			end
+		else
+			setNeedsDisplay(true)
+		end	
+	end
+
+	# This doesn't contribute to any KVC or KVO compliance. It's just a convenience method that's invoked down below.
+	def selectedGraphics ()
+		# Simple, because we made sure -graphics and -selectionIndexes never return nil.
+		graphics.objectsAtIndexes(selectionIndexes)
+	end
+
+	# *** Drawing ***
+
+	# An override of the NSView method.
+	def drawRect (rect)
+		# Draw the background background.
+		NSColor.whiteColor.set
+		NSRectFill(rect)
+
+		# Draw the grid.
+		@grid.drawRect(rect, inView: self)
+
+		# Draw every graphic that intersects the rectangle to be drawn. In Sketch
+		# the frontmost graphics have the lowest indexes.
+		currentContext = NSGraphicsContext.currentContext
+		(graphics.count - 1).downto(0) do |index|
+			graphic = graphics[index]
+			graphicDrawingBounds = graphic.drawingBounds
+
+			if NSIntersectsRect(rect, graphicDrawingBounds)
+				# Figure out whether or not to draw selection handles on the graphic.
+				# Selection handles are drawn for all selected objects except:
+				# - While the selected objects are being moved. - For the object
+				# actually being created or edited, if there is one.
+				drawSelectionHandles = false
+				if !@isHidingHandles && graphic != @creatingGraphic && graphic != @editingGraphic
+					drawSelectionHandles = selectionIndexes.containsIndex(index)
+				end
+
+				# Draw the graphic, possibly with selection handles.
+				currentContext.saveGraphicsState
+				NSBezierPath.clipRect(graphicDrawingBounds)
+				graphic.drawContentsInView(self, isBeingCreateOrEdited: graphic == @creatingGraphic || graphic == @editingGraphic)
+				graphic.drawHandlesInView(self) if drawSelectionHandles
+				currentContext.restoreGraphicsState
+			end
+		end
+
+		# If the user is in the middle of selecting draw the selection rectangle.
+		if !NSEqualRects(@marqueeSelectionBounds, NSZeroRect)
+			NSColor.knobColor.set
+			NSFrameRect(@marqueeSelectionBounds)
+		end
+	end
+
+	def beginEchoingMoveToRulers (echoRect)
+		horizontalRuler = enclosingScrollView.horizontalRulerView
+		verticalRuler = enclosingScrollView.verticalRulerView
+	
+		newHorizontalRect = convertRect(echoRect, toView: horizontalRuler)
+		newVerticalRect = convertRect(echoRect, toView: verticalRuler)
+	
+		horizontalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMinX(newHorizontalRect))
+		horizontalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMidX(newHorizontalRect))
+		horizontalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMaxX(newHorizontalRect))
+	
+		verticalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMinY(newVerticalRect))
+		verticalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMidY(newVerticalRect))
+		verticalRuler.moveRulerlineFromLocation(-1.0, toLocation: NSMaxY(newVerticalRect))
+	
+		@rulerEchoedBounds = echoRect.dup
+	end
+
+
+	def continueEchoingMoveToRulers (echoRect)
+		horizontalRuler = enclosingScrollView.horizontalRulerView
+		verticalRuler = enclosingScrollView.verticalRulerView
+
+		oldHorizontalRect = convertRect(@rulerEchoedBounds, toView: horizontalRuler)
+		oldVerticalRect = convertRect(@rulerEchoedBounds, toView: verticalRuler)	
+
+		newHorizontalRect = convertRect(echoRect, toView: horizontalRuler)
+		newVerticalRect = convertRect(echoRect, toView: verticalRuler)
+
+		horizontalRuler.moveRulerlineFromLocation(NSMinX(oldHorizontalRect), toLocation: NSMinX(newHorizontalRect))
+		horizontalRuler.moveRulerlineFromLocation(NSMidX(oldHorizontalRect), toLocation: NSMidX(newHorizontalRect))
+		horizontalRuler.moveRulerlineFromLocation(NSMaxX(oldHorizontalRect), toLocation: NSMaxX(newHorizontalRect))
+	
+		verticalRuler.moveRulerlineFromLocation(NSMinY(oldVerticalRect), toLocation: NSMinY(newVerticalRect))
+		verticalRuler.moveRulerlineFromLocation(NSMidY(oldVerticalRect), toLocation: NSMidY(newVerticalRect))
+		verticalRuler.moveRulerlineFromLocation(NSMaxY(oldVerticalRect), toLocation: NSMaxY(newVerticalRect))
+	
+		# Need to store actual extent rather than reference of bounds object with may be being updated.
+		@rulerEchoedBounds = echoRect.dup	
+	end
+
+	def stopEchoingMoveToRulers ()
+		horizontalRuler = enclosingScrollView.horizontalRulerView
+		verticalRuler = enclosingScrollView.verticalRulerView
+	
+		oldHorizontalRect = convertRect(@rulerEchoedBounds, toView:horizontalRuler)
+		oldVerticalRect = convertRect(@rulerEchoedBounds, toView:verticalRuler)	
+	
+		horizontalRuler.moveRulerlineFromLocation(NSMinX(oldHorizontalRect), toLocation: -1.0);
+		horizontalRuler.moveRulerlineFromLocation(NSMidX(oldHorizontalRect), toLocation: -1.0);
+		horizontalRuler.moveRulerlineFromLocation(NSMaxX(oldHorizontalRect), toLocation: -1.0);
+	
+		verticalRuler.moveRulerlineFromLocation(NSMinY(oldVerticalRect), toLocation: -1.0);
+		verticalRuler.moveRulerlineFromLocation(NSMidY(oldVerticalRect), toLocation: -1.0);
+		verticalRuler.moveRulerlineFromLocation(NSMaxY(oldVerticalRect), toLocation: -1.0);
+	
+		@rulerEchoedBounds = NSZeroRect
+	end
+
+
+	# *** Editing Subviews ***
+	def setNeedsDisplayForEditingViewFrameChangeNotification (viewFrameDidChangeNotification)
+		# If the editing view got smaller we have to redraw where it was or cruft
+		# will be left on the screen. If the editing view got larger we might be
+		# doing some redundant invalidation (not a big deal), but we're not doing
+		# any redundant drawing (which might be a big deal). If the editing view
+		# actually moved then we might be doing substantial redundant drawing, but
+		# so far that wouldn't happen in Sketch.
+		# In Sketch this prevents cruft being left on the screen when the user 1)
+		# creates a great big text area and fills it up with text, 2) sizes the text
+		# area so not all of the text fits, 3) starts editing the text area but
+		# doesn't actually change it, so the text area hasn't been automatically
+		# resized and the text editing view is actually bigger than the text area,
+		# and 4) deletes so much text in one motion (Select All, then Cut) that the
+		# text editing view suddenly becomes smaller than the text area. In every
+		# other text editing situation the text editing view's invalidation or the
+		# fact that the SKTText's "drawingBounds" changes is enough to cause the
+		# proper redrawing.
+		newEditingViewFrame = viewFrameDidChangeNotification.object.frame
+		setNeedsDisplayInRect(NSUnionRect(@editingViewFrame, newEditingViewFrame))
+		@editingViewFrame = newEditingViewFrame
+	end
+
+	def startEditingGraphic (graphic)
+		# It's the responsibility of invokers to not invoke this method when
+		# editing has already been started.
+		raise "#{SKTGraphicView.startEditingGraphic} is being mis-invoked." if !(!@editingGraphic && !@editingView)
+
+		# Can the graphic even provide an editing view?
+		@editingView = graphic.newEditingViewWithSuperviewBounds(bounds)
+		if @editingView
+			# Keep a pointer to the graphic around so we can ask it to draw its
+			# "being edited" look, and eventually send it a -finalizeEditingView:
+			# message.
+			@editingGraphic = graphic
+
+			# If the editing view adds a ruler accessory view we're going to remove
+			# it when editing is done, so we have to remember the old reserved
+			# accessory view thickness so we can restore it. Otherwise there will be
+			# a big blank space in the ruler.
+			@oldReservedThicknessForRulerAccessoryView = enclosingScrollView.horizontalRulerView.reservedThicknessForAccessoryView
+
+			# Make the editing view a subview of this one. It was the graphic's job
+			# to make sure that it was created with the right frame and bounds.
+			addSubview(@editingView)
+
+			# Make the editing view the first responder so it takes key events and
+			# relevant menu item commands.
+			window.makeFirstResponder(@editingView)
+
+			# Get notified if the editing view's frame gets smaller, because we may
+			# have to force redrawing when that happens. Record the view's frame
+			# because it won't be available when we get the notification.
+			NSNotificationCenter.defaultCenter.addObserver(self, 
+											selector: 'setNeedsDisplayForEditingViewFrameChangeNotification:', 	
+											name: NSViewFrameDidChangeNotification, object: @editingView)
+			@editingViewFrame = @editingView.frame
+
+			# Give the graphic being edited a chance to draw one more time. In Sketch, SKTText draws a focus ring.
+			setNeedsDisplayInRect(@editingGraphic.drawingBounds)
+		end
+	end
+
+	def stopEditing ()
+		# Make it harmless to invoke this method unnecessarily.
+		if @editingView
+			# Undo what we did in -startEditingGraphic:.
+			NSNotificationCenter.defaultCenter.removeObserver(self, name: NSViewFrameDidChangeNotification, object: @editingView)
+
+			# Pull the editing view out of this one. When editing is being stopped
+			# because the user has clicked in this view, outside of the editing
+			# view, NSWindow will have already made this view the window's first
+			# responder, and that's good. However, when editing is being stopped
+			# because the edited graphic is being removed (by undoing or scripting,
+			# for example), the invocation of -[NSView removeFromSuperview] we do
+			# here will leave the window as its own first responder, and that would
+			# be bad, so also fix the window's first responder if appropriate. It
+			# wouldn't be appropriate to steal first-respondership from sibling
+			# views here.
+			makeSelfFirstResponder = window.firstResponder == @editingView ? true : false
+			@editingView.removeFromSuperview
+			window.makeFirstResponder(self) if makeSelfFirstResponder
+			
+			# If the editing view added a ruler accessory view then remove it
+			# because it's not applicable anymore, and get rid of the blank space in
+			# the ruler that would otherwise result. In Sketch the NSTextViews
+			# created by SKTTexts leave horizontal ruler accessory views.
+			horizontalRulerView = enclosingScrollView.horizontalRulerView
+			horizontalRulerView.accessoryView = nil
+			horizontalRulerView.reservedThicknessForAccessoryView = @oldReservedThicknessForRulerAccessoryView
+		
+			# Give the graphic that created the editing view a chance to tear down their relationships and then forget about them both.
+			@editingGraphic.finalizeEditingView(@editingView)
+			@editingGraphic = nil
+			@editingView = nil
+		end
+	end
+
+	# *** Mouse Event Handling ***
+	def graphicUnderPoint (point)
+		# Search through all of the graphics, front to back, looking for one that
+		# claims that the point is on a selection handle (if it's selected) or in
+		# the contents of the graphic itself.
+		gi = GraphicInfo.new
+		graphics.each_with_index do |graphic, index|
+			# Do a quick check to weed out graphics that aren't even in the neighborhood.
+			if NSPointInRect(point, graphic.drawingBounds)
+				# Check the graphic's selection handles first, because they take
+				# precedence when they overlap the graphic's contents.
+				graphicIsSelected = selectionIndexes.containsIndex(index)
+				if graphicIsSelected
+					handle = graphic.handleUnderPoint(point)
+					if handle != SKTGraphicNoHandle
+						# The user clicked on a handle of a selected graphic.
+						gi.graphic = graphic
+						gi.handle = handle
+					end
+				end
+
+				if !gi.graphic
+					clickedOnGraphicContents = graphic.isContentsUnderPoint(point)
+					if clickedOnGraphicContents
+						# The user clicked on the contents of a graphic.
+						gi.graphic = graphic
+						gi.handle = SKTGraphicNoHandle
+					end
+				end
+
+				if gi.graphic
+					# Return values and stop looking.
+					gi.index = index
+					gi.isSelected = graphicIsSelected
+					break;
+				end
+			end
+		end
+		return gi
+	end
+
+	def moveSelectedGraphicsWithEvent (event)
+		selGraphics = selectedGraphics
+		didMove = false
+		isMoving = false
+		echoToRulers = enclosingScrollView.rulersVisible
+		selBounds = SKTGraphic.boundsOfGraphics(selGraphics)
+	
+		c = selGraphics.count
+	
+		lastPoint = convertPoint(event.locationInWindow, fromView: nil)
+		selOriginOffset = NSMakePoint((lastPoint.x - selBounds.origin.x), (lastPoint.y - selBounds.origin.y))
+		beginEchoingMoveToRulers(selBounds) if echoToRulers
+	
+		while event.type != NSLeftMouseUp
+			event = window.nextEventMatchingMask(NSLeftMouseDraggedMask | NSLeftMouseUpMask)
+			autoscroll(event)
+			curPoint = convertPoint(event.locationInWindow, fromView: nil)
+			if !isMoving && ((curPoint.x - lastPoint.x).abs >= 2.0) || ((curPoint.y - lastPoint.y).abs >= 2.0)
+				isMoving = true;
+				@isHidingHandles = true
+			end
+		
+			if isMoving
+				if @grid
+					boundsOrigin = NSPoint.new(curPoint.x - selOriginOffset.x, curPoint.y - selOriginOffset.y)
+					boundsOrigin  = @grid.constrainedPoint(boundsOrigin)
+					curPoint.x = boundsOrigin.x + selOriginOffset.x
+					curPoint.y = boundsOrigin.y + selOriginOffset.y
+				end
+				if !NSEqualPoints(lastPoint, curPoint)
+					SKTGraphic.translateGraphics(selGraphics, byX: (curPoint.x - lastPoint.x), y: (curPoint.y - lastPoint.y))
+					didMove = true
+					if echoToRulers
+						continueEchoingMoveToRulers(NSMakeRect(curPoint.x - selOriginOffset.x, curPoint.y - selOriginOffset.y,
+						 								NSWidth(selBounds), NSHeight(selBounds)))
+					end
+					# Adjust the delta that is used for cascading pastes.	Pasting and
+					# then moving the pasted graphic is the way you determine the
+					# cascade delta for subsequent pastes.
+					@pasteCascadeDelta.x += (curPoint.x - lastPoint.x)
+					@pasteCascadeDelta.y += (curPoint.y - lastPoint.y)
+				end
+				lastPoint = curPoint
+			end
+		end
+
+		stopEchoingMoveToRulers if echoToRulers
+		
+		if isMoving
+			@isHidingHandles = false
+			setNeedsDisplayInRect(SKTGraphic.drawingBoundsOfGraphics(selGraphics))
+			if didMove
+				# Only if we really moved.
+				undoManager.setActionName(NSLocalizedStringFromTable("Move", "UndoStrings", "Action name for moves."))
+			end
+		end
+	end
+
+	def resizeGraphic (graphic, usingHandle: handle,  withEvent: event)
+		echoToRulers = enclosingScrollView.rulersVisible
+		beginEchoingMoveToRulers(graphic.bounds) if echoToRulers
+		while event.type != NSLeftMouseUp
+			event = window.nextEventMatchingMask(NSLeftMouseDraggedMask | NSLeftMouseUpMask)
+			autoscroll(event)
+			handleLocation = convertPoint(event.locationInWindow, fromView: nil)
+			handleLocation = @grid.constrainedPoint(handleLocation) if @grid
+			handle = graphic.resizeByMovingHandle(handle, toPoint: handleLocation)
+			continueEchoingMoveToRulers(graphic.bounds) if echoToRulers	
+		end
+
+		stopEchoingMoveToRulers if echoToRulers
+		undoManager.setActionName(NSLocalizedStringFromTable("Resize", "UndoStrings", "Action name for resizes."))
+	end
+
+
+	def indexesOfGraphicsIntersectingRect (rect)
+		indexSetToReturn = NSMutableIndexSet.indexSet
+		graphics.each_with_index do |graphic, index|
+			indexSetToReturn.addIndex(index) if NSIntersectsRect(rect, graphic.drawingBounds)
+		end
+		return indexSetToReturn
+	end
+
+	def createGraphicOfClass (graphicClass, withEvent: event)
+		# Before we invoke -[NSUndoManager beginUndoGrouping] turn off automatic
+		# per-event-loop group creation. If we don't turn it off now,
+		# -beginUndoGrouping will actually create _two_ undo groups: the top-level
+		# automatically-created one and then the nested one that we're explicitly
+		# creating. When we invoke -undoNestedGroup down below, the
+		# automatically-created undo group will be left on the undo stack. It will
+		# be ended automatically at the end of the event loop, which is good, and
+		# it will be empty, which is expected, but it will be left on the undo
+		# stack so the user will see a useless undo action in the Edit menu, which
+		# is bad. Is this a bug in NSUndoManager? Well it's certainly surprising
+		# that NSUndoManager isn't bright enough to ignore empty undo groups,
+		# especially ones that it itself created automatically, so NSUndoManager
+		# could definitely use a little improvement here.
+		undoManagerWasGroupingByEvent = undoManager.groupsByEvent
+		undoManager.groupsByEvent = false
+	
+		# We will want to undo the creation of the graphic if the user sizes it to
+		# nothing, so create a new group for everything undoable that's going to
+		# happen during graphic creation. 
+		undoManager.beginUndoGrouping
+	
+		# Clear the selection.
+		changeSelectionIndexes(NSIndexSet.indexSet)
+
+		# Where is the mouse pointer as graphic creation is starting? Should the
+		# location be constrained to the grid?
+		graphicOrigin = convertPoint(event.locationInWindow, fromView: nil)
+		graphicOrigin = @grid.constrainedPoint(graphicOrigin) if @grid
+
+		# Create the new graphic and set what little we know of its location.
+		@creatingGraphic = graphicClass.alloc.init
+		@creatingGraphic.setBounds(NSMakeRect(graphicOrigin.x, graphicOrigin.y, 0.0, 0.0))
+
+		# Add it to the set of graphics right away so that it will show up in
+		# other views of the same array of graphics as the user sizes it.
+		mutableGraphics.insertObject(@creatingGraphic, atIndex: 0)
+
+		# Let the user size the new graphic until they let go of the mouse.
+		# Because different kinds of graphics have different kinds of handles,
+		# first ask the graphic class what handle the user is dragging during this
+		# initial sizing.
+		resizeGraphic(@creatingGraphic, usingHandle: graphicClass.creationSizingHandle, withEvent: event)
+
+		# Why don't we do [undoManager endUndoGrouping] here, once, instead of
+		# twice in the following paragraphs? Because of the [undoManager
+		# setGroupsByEvent:NO] game we're playing. If we invoke -[NSUndoManager
+		# setActionName:] down below after invoking [undoManager endUndoGrouping]
+		# there won't be any open undo group, and NSUndoManager will raise an
+		# exception. If we weren't playing the [undoManager setGroupsByEvent:NO]
+		# game then it would be OK to invoke -[NSUndoManager setActionName:] after
+		# invoking [undoManager endUndoGrouping] because the action name would
+		# apply to the top-level automatically-created undo group, which is fine.
+
+		# Did we really create a graphic? Don't check with
+		# !NSIsEmptyRect(createdGraphicBounds) because the bounds of a perfectly
+		# horizontal or vertical line is "empty" but of course we want to let
+		# people create those.
+		createdGraphicBounds = @creatingGraphic.bounds
+		if NSWidth(createdGraphicBounds) != 0.0 || NSHeight(createdGraphicBounds) != 0.0
+			# Select it.
+			changeSelectionIndexes(NSIndexSet.indexSetWithIndex(0))
+	
+			# The graphic wasn't sized to nothing during mouse tracking. Present its
+			# editing interface it if it's that kind of graphic (like Sketch's
+			# SKTTexts). Invokers of the method we're in right now should have
+			# already cleared out _editingView.
+			startEditingGraphic(@creatingGraphic)
+
+			# Overwrite whatever undo action name was registered during all of that with a more specific one.
+			cn = NSBundle.mainBundle.localizedStringForKey(graphicClass.to_s, value: "", table: "GraphicClassNames")
+
+			undoManager.setActionName(NSLocalizedStringFromTable("Create #{cn}", "UndoStrings", "Action name for newly created graphics. Class name is inserted at the substitution."))
+
+			# Balance the invocation of -[NSUndoManager beginUndoGrouping] that we did up above.
+			undoManager.endUndoGrouping
+		else
+			# Balance the invocation of -[NSUndoManager beginUndoGrouping] that we did up above.
+			undoManager.endUndoGrouping
+
+			# The graphic was sized to nothing during mouse tracking. Undo
+			# everything that was just done. Disable undo registration while undoing
+			# so that we don't create a spurious redo action.
+			undoManager.disableUndoRegistration
+			undoManager.undoNestedGroup
+			undoManager.enableUndoRegistration
+		end
+
+		# Balance the invocation of -[NSUndoManager setGroupsByEvent:] that we did
+		# up above. We're careful to restore the old value instead of merely
+		# invoking -setGroupsByEvent:YES because we don't know that the method
+		# we're in right now won't in the future be invoked by some other method
+		# that plays its own NSUndoManager games.
+		undoManager.groupsByEvent = undoManagerWasGroupingByEvent
+
+		# Done.
+		@creatingGraphic = nil
+	end
+
+	def marqueeSelectWithEvent (event)
+		# Dequeue and handle mouse events until the user lets go of the mouse button.
+		oldSelectionIndexes = selectionIndexes
+		originalMouseLocation = convertPoint(event.locationInWindow, fromView: nil)
+		while event.type != NSLeftMouseUp
+			event = window.nextEventMatchingMask(NSLeftMouseDraggedMask | NSLeftMouseUpMask)
+			autoscroll(event)
+			currentMouseLocation = convertPoint(event.locationInWindow, fromView: nil)
+
+			# Figure out a new a selection rectangle based on the mouse location.
+			newMarqueeSelectionBounds = NSMakeRect([originalMouseLocation.x, currentMouseLocation.x].min, 
+													[originalMouseLocation.y, currentMouseLocation.y].min, 
+													(currentMouseLocation.x - originalMouseLocation.x).abs,
+												    (currentMouseLocation.y - originalMouseLocation.y).abs)
+			if !NSEqualRects(newMarqueeSelectionBounds, @marqueeSelectionBounds)
+				# Erase the old selection rectangle and draw the new one.
+				setNeedsDisplayInRect(@marqueeSelectionBounds)
+				@marqueeSelectionBounds = newMarqueeSelectionBounds
+				setNeedsDisplayInRect(@marqueeSelectionBounds)
+
+				# Either select or deselect all of the graphics that intersect the
+				# selection rectangle.
+				indexesOfGraphicsInRubberBand = indexesOfGraphicsIntersectingRect(@marqueeSelectionBounds)
+				newSelectionIndexes = oldSelectionIndexes.mutableCopy
+				
+				# TODO extend NSIndexSet with an each method
+				index = indexesOfGraphicsInRubberBand.firstIndex
+				while index != NSNotFound
+					if newSelectionIndexes.containsIndex(index)
+						newSelectionIndexes.removeIndex(index)
+					else
+						newSelectionIndexes.addIndex(index)
+					end
+					index = indexesOfGraphicsInRubberBand.indexGreaterThanIndex(index)
+				end
+				changeSelectionIndexes(newSelectionIndexes)
+			end
+		end
+
+		# Schedule the drawing of the place wherew the rubber band isn't anymore.
+		setNeedsDisplayInRect(@marqueeSelectionBounds)
+
+		# Make it not there.
+		@marqueeSelectionBounds = NSZeroRect
+	end
+
+	def selectAndTrackMouseWithEvent (event)
+		# Are we changing the existing selection instead of setting a new one?
+		modifyingExistingSelection = (event.modifierFlags & NSShiftKeyMask) == NSShiftKeyMask
+		# Has the user clicked on a graphic?
+		mouseLocation = convertPoint(event.locationInWindow, fromView: nil)
+		clickedGraphic = graphicUnderPoint(mouseLocation)
+		if clickedGraphic.graphic
+			# Clicking on a graphic knob takes precedence.
+			if clickedGraphic.handle != SKTGraphicNoHandle
+					# The user clicked on a graphic's handle. Let the user drag it around.
+					resizeGraphic(clickedGraphic.graphic, usingHandle: clickedGraphic.handle, withEvent: event)
+			else
+				# The user clicked on a graphic's contents. Update the selection.
+				if modifyingExistingSelection
+					if clickedGraphic.isSelected
+						# Remove the graphic from the selection.
+						newSelectionIndexes = selectionIndexes.mutableCopy
+						newSelectionIndexes.removeIndex(clickedGraphic.index)
+						changeSelectionIndexes(newSelectionIndexes)
+						clickedGraphic.isSelected = false
+					else
+						# Add the graphic to the selection.
+						newSelectionIndexes = selectionIndexes.mutableCopy
+						newSelectionIndexes.addIndex(clickedGraphic.index)
+						changeSelectionIndexes(newSelectionIndexes)
+						clickedGraphic.isSelected = true
+					end
+				else
+					# If the graphic wasn't selected before then it is now, and none of the rest are.
+					if !clickedGraphic.isSelected
+						changeSelectionIndexes(NSIndexSet.indexSetWithIndex(clickedGraphic.index))
+						clickedGraphic.isSelected = true
+					end
+				end
+		
+				# Is the graphic that the user has clicked on now selected?
+				if clickedGraphic.isSelected
+					# Yes. Let the user move all of the selected objects.
+					moveSelectedGraphicsWithEvent(event)
+				else
+					# No. Just swallow mouse events until the user lets go of the mouse
+					# button. We don't even bother autoscrolling here.
+					while event.type != NSLeftMouseUp
+						event = window.nextEventMatchingMask(NSLeftMouseDraggedMask | NSLeftMouseUpMask)
+					end
+				end
+			end
+		else
+			# The user clicked somewhere other than on a graphic. Clear the selection,
+			# unless the user is holding down the shift key.
+			changeSelectionIndexes(NSIndexSet.indexSet) if !modifyingExistingSelection
+	
+			# The user clicked on a point where there is no graphic. Select and
+			# deselect graphics until the user lets go of the mouse button.
+			marqueeSelectWithEvent(event)
+		end
+	end
+
+
+	# An override of the NSView method.
+	def acceptsFirstMouse (event)
+		# In general we don't want to make people click once to activate the
+		# window then again to actually do something, but we do want to help users
+		# not accidentally throw away the current selection, if there is one.
+		selectionIndexes.count == 0
+	end
+
+	# An override of the NSResponder method.
+	def mouseDown (event)
+		# If a graphic has been being edited (in Sketch SKTTexts are the only ones
+		# that are "editable" in this sense) then end editing.
+		stopEditing
+
+		# Is a tool other than the Selection tool selected?
+		graphicClassToInstantiate = SKTToolPaletteController.sharedToolPaletteController.currentGraphicClass
+		if graphicClassToInstantiate
+			# Create a new graphic and then track to size it.
+			createGraphicOfClass(graphicClassToInstantiate, withEvent: event)
+		else
+			# Double-clicking with the selection tool always means "start editing,"
+			# or "do nothing" if no editable graphic is double-clicked on.
+			doubleClickedGraphic = nil
+			if event.clickCount > 1
+				mouseLocation = convertPoint(event.locationInWindow, fromView: nil)
+				doubleClickedGraphic = graphicUnderPoint(mouseLocation).graphic
+				startEditingGraphic(doubleClickedGraphic) if doubleClickedGraphic
+			end
+			if !doubleClickedGraphic
+				# Update the selection and/or move graphics or resize graphics.
+				selectAndTrackMouseWithEvent(event)
+			end
+		end
+	end
+	
+	# *** Keyboard Event Handling ***
+
+	# An override of the NSResponder method. NSResponder's implementation
+	# would just forward the message to the next responder (an NSClipView, in
+	# Sketch's case) and our overrides like -delete: would never be invoked.
+	def keyDown (event)
+		# Ask the key binding manager to interpret the event for us.
+		interpretKeyEvents([event])
+	end
+
+	def delete (sender)
+		mutableGraphics.removeObjectsAtIndexes(selectionIndexes)
+		undoManager.setActionName(NSLocalizedStringFromTable("Delete", "UndoStrings", "Action name for deletions."))
+	end
+
+	# Overrides of the NSResponder(NSStandardKeyBindingMethods) methods.
+	def deleteBackward (sender)
+		delete(sender)
+	end
+	
+	def deleteForward (sender)
+		delete(sender)
+	end
+
+	def invalidateHandlesOfGraphics (graphics)
+		graphics.each {|g| setNeedsDisplayInRect(g.drawingBounds)}
+	end
+	
+	def unhideHandlesForTimer (timer)
+		@isHidingHandles = false
+		@handleShowingTimer = nil
+		setNeedsDisplayInRect(SKTGraphic.drawingBoundsOfGraphics(selectedGraphics))
+	end
+
+	def hideHandlesMomentarily ()
+		@handleShowingTimer.invalidate if @handleShowingTimer
+		@handleShowingTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: 'unhideHandlesForTimer:',
+		 						userInfo: nil, repeats: false)
+		@isHidingHandles = true
+		setNeedsDisplayInRect(SKTGraphic.drawingBoundsOfGraphics(selectedGraphics))
+	end
+
+
+	def moveSelectedGraphicsByX (x, y: y)
+		# Don't do anything if there's nothing to do.
+		if selectedGraphics.count > 0
+			# Don't draw and redraw the selection rectangles while the user holds
+			# an arrow key to autorepeat.
+			hideHandlesMomentarily
+
+			# Move the selected graphics.
+			SKTGraphic.translateGraphics(selectedGraphics, byX: x, y: y)
+
+			# Overwrite whatever undo action name was registered during all of
+			# that with a more specific one.
+			undoManager.setActionName(NSLocalizedStringFromTable("Nudge", "UndoStrings", "Action name for nudge keyboard commands."))
+		end
+	end
+
+	# Overrides of the NSResponder(NSStandardKeyBindingMethods) methods.
+	def moveLeft (sender)
+		moveSelectedGraphicsByX(-1.0, y: 0.0)
+	end
+
+	def moveRight (sender)
+		moveSelectedGraphicsByX(1.0, y: 0.0)
+	end
+
+	def moveUp (sender)
+		moveSelectedGraphicsByX(0.0, y: -1.0)
+	end
+
+	def moveDown (sender)
+		moveSelectedGraphicsByX(0.0, y: 1.0)
+	end
+
+	# *** Copy and Paste ***
+	def makeNewImageFromContentsOfFile(filename, atPoint: point)
+		extension = filename.pathExtension
+		if NSImage.imageFileTypes.index(extension)
+			contents = NSImage.alloc.initWithContentsOfFile(filename)
+			if contents
+				newImage = SKTImage.alloc.initWithPosition(point, contents: contents)
+				mutableGraphics.insertObject(newImage, atIndex: 0)
+				changeSelectionIndexes(NSIndexSet.indexSetWithIndex(0))
+				return true
+			end
+		end
+		return false
+	end
+
+	def makeNewImageFromPasteboard (pboard, atPoint: point)
+		type = pboard.availableTypeFromArray(NSImage.imagePasteboardTypes)
+		if type
+			contents = NSImage.alloc.initWithPasteboard(pboard)
+			if contents
+				imageOrigin = NSMakePoint(point.x, (point.y - contents.size.height))
+				newImage = SKTImage.alloc.initWithPosition(imageOrigin, contents: contents)
+				mutableGraphics.insertObject(newImage, atIndex: 0)
+				changeSelectionIndexes(NSIndexSet.indexSetWithIndex(0))
+				return true
+			end
+		end
+		return false
+	end
+
+	def copy (sender)
+		pasteboard = NSPasteboard.generalPasteboard
+		pasteboard.declareTypes([SKTGraphicViewPasteboardType, NSPDFPboardType, NSTIFFPboardType], owner: nil)
+		pasteboard.setData(SKTGraphic.pasteboardDataWithGraphics(selectedGraphics), forType: SKTGraphicViewPasteboardType)
+		pasteboard.setData(SKTRenderingView.pdfDataWithGraphics(selectedGraphics), forType: NSPDFPboardType)
+		pasteboard.setData(SKTRenderingView.tiffDataWithGraphics(selectedGraphics, error: nil), forType: NSTIFFPboardType)
+		@pasteboardChangeCount = pasteboard.changeCount
+		@pasteCascadeNumber = 1;
+		@pasteCascadeDelta = NSMakePoint(SKTGraphicViewDefaultPasteCascadeDelta, SKTGraphicViewDefaultPasteCascadeDelta);
+	end
+
+	def cut (sender)
+		copy(sender)
+		delete(sender)
+		undoManager.setActionName(NSLocalizedStringFromTable("Cut", "UndoStrings", "Action name for cut."))
+	end
+
+	def paste (sender)
+		# We let the user paste graphics, image files, and image data.
+		pasteboard = NSPasteboard.generalPasteboard
+		typeName = pasteboard.availableTypeFromArray([SKTGraphicViewPasteboardType, NSFilenamesPboardType])
+		if typeName == SKTGraphicViewPasteboardType
+			# You can't trust anything that might have been put on the pasteboard by
+			# another application, so be ready for +[SKTGraphic
+			# graphicsWithPasteboardData:error:] to fail and return nil.
+			error = Pointer.new_with_type('@')
+			graphics = SKTGraphic.graphicsWithPasteboardData(pasteboard.dataForType(typeName), error: error)
+			if graphics
+				# Should we reset the cascading of pasted graphics?
+				pasteboardChangeCount = pasteboard.changeCount
+				if @pasteboardChangeCount != pasteboardChangeCount
+					@pasteboardChangeCount = pasteboardChangeCount
+					@pasteCascadeNumber = 0;
+					@pasteCascadeDelta = NSMakePoint(SKTGraphicViewDefaultPasteCascadeDelta, SKTGraphicViewDefaultPasteCascadeDelta)
+				end
+				# An empty array doesn't signal an error, but it's still not useful to
+				# paste it.
+				graphicCount = graphics.count
+				if graphicCount > 0
+					# If this is a repetitive paste, or a paste of something that was just
+					# copied from this same view, then offset the graphics by a little
+					# bit.
+					if @pasteCascadeNumber > 0
+						SKTGraphic.translateGraphics(graphics, byX: (@pasteCascadeNumber * @pasteCascadeDelta.x), y: (@pasteCascadeNumber * @pasteCascadeDelta.y))
+					end
+					@pasteCascadeNumber += 1;
+
+					# Add the pasted graphics in front of all others and select them.
+					insertionIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, graphicCount))
+					mutableGraphics.insertObjects(graphics, atIndexes: insertionIndexes)
+					changeSelectionIndexes(insertionIndexes)
+
+					# Override any undo action name that might have been set with one that
+					# is more specific to this operation.
+					undoManager.setActionName(NSLocalizedStringFromTable("Paste", "UndoStrings", "Action name for paste."))
+				end
+			else
+				# Something went wrong? Present the error to the user in a sheet. It was
+				# entirely +[SKTGraphic graphicsWithPasteboardData:error:]'s
+				# responsibility to set the error to something when it returned nil. It
+				# was also entirely responsible for not crashing if we had passed in
+				# error:NULL.
+				presentError(error[0], modalForWindow: window, delegate: nil, didPresentSelector: nil, contextInfo: nil)
+			end
+		elsif typeName == NSFilenamesPboardType
+			filenames = pasteboard.propertyListForType(NSFilenamesPboardType)
+			if filenames.count == 1
+				filename = filenames[0]
+				if makeNewImageFromContentsOfFile(filename, atPoint: NSMakePoint(50, 50))
+					undoManager.setActionName(NSLocalizedStringFromTable("Paste", "UndoStrings", "Action name for paste."))
+				end
+			end
+		elsif makeNewImageFromPasteboard(pasteboard, atPoint: NSMakePoint(50, 50))
+			undoManager.setActionName(NSLocalizedStringFromTable("Paste", "UndoStrings", "Action name for paste."))
+		end
+	end
+
+
+	# *** Drag and Drop ***
+	def dragOperationForDraggingInfo (sender)
+		pboard = sender.draggingPasteboard
+		type = pboard.availableTypeFromArray([NSColorPboardType, NSFilenamesPboardType])
+		if type
+			if type == NSColorPboardType
+				point = convertPoint(sender.draggingLocation, fromView: nil)
+				return NSDragOperationGeneric if graphicUnderPoint(point).graphic
+			end
+			return NSDragOperationCopy if type == NSFilenamesPboardType
+		end
+	
+		return NSDragOperationCopy if pboard.availableTypeFromArray(NSImage.imagePasteboardTypes)
+		return NSDragOperationNone
+	end
+
+	# Conformance to the NSObject(NSDraggingDestination) informal protocol.
+	def draggingEntered (sender)
+		dragOperationForDraggingInfo(sender)
+	end
+
+	def draggingUpdated (sender)
+		dragOperationForDraggingInfo(sender)
+	end
+	
+	def draggingExited (sender)
+	end
+
+	def prepareForDragOperation (sender)
+		true
+	end
+	
+	def performDragOperation (sender)
+		true
+	end
+	
+	def concludeDragOperation (sender)
+		pboard = sender.draggingPasteboard
+		type = pboard.availableTypeFromArray([NSColorPboardType, NSFilenamesPboardType])
+		point = convertPoint(sender.draggingLocation, fromView: nil)
+		draggedImageLocation = convertPoint(sender.draggedImageLocation, fromView: nil)
+		if type
+			if type == NSColorPboardType
+				hitGraphic = graphicUnderPoint(point).graphic
+				if hitGraphic
+					color = NSColor.colorFromPasteboard(pboard, colorWithAlphaComponent: 1.0)
+					hitGraphic.color = color
+				end
+			elsif type == NSFilenamesPboardType
+				filenames = pboard.propertyListForType(NSFilenamesPboardType)
+				# Handle multiple files (cascade them?)
+				if filenames.count == 1
+					makeNewImageFromContentsOfFile(filenames[0], atPoint: point)
+				end
+			end
+			return
+		end
+	
+		makeNewImageFromPasteboard(pboard, atPoint: draggedImageLocation)
+	end
+
+	# *** Other View Customization ***
+	# An override of the NSResponder method.
+	def acceptsFirstResponder ()
+		# This view can of course handle lots of action messages.
+		return true
+	end
+
+	# An override of the NSView method.
+	def isFlipped ()
+		# Put (0, 0) at the top-left of the view.
+		return true
+	end
+
+	# An override of the NSView method.
+	def isOpaque ()
+		# Our override of -drawRect: always draws a background.
+		return true
+	end
+
+	# Conformance to the NSObject(NSMenuValidation) informal protocol.
+	def validateMenuItem (item)
+		case item.action
+			when :'makeNaturalSize:'
+				# Return YES if we have at least one selected graphic that has a natural size.
+				return selectedGraphics.any? {|g| g.canMakeNaturalSize}
+			when :'alignWithGrid:'
+				return false if !@grid.canAlign
+				# Only apply if there is a selection
+				return selectedGraphics.count > 0
+				
+			when :'delete:', :'bringToFront:', :'sendToBack:', :'cut:', :'copy:'
+				# These only apply if there is a selection
+				return selectedGraphics.count > 0
+	 		when :'alignLeftEdges:', :'alignRightEdges:', :'alignTopEdges:',  :'alignBottomEdges:',  :'alignHorizontalCenters:', 
+				:'alignVerticalCenters:', :'makeSameWidth:', :'makeSameHeight:'
+				# These only apply to multiple selection
+				return selectedGraphics.count > 1
+			when :'undo:', :'redo:'
+				# Because we implement -undo: and redo: action methods we must
+				# validate the actions too. Messaging the window directly like this is
+				# not strictly correct, because there may be other responders in the
+				# chain between this view and the window (superviews maybe?) that want
+				# control over undoing and redoing, but there's no AppKit method we
+				# can invoke to simply find the next responder that responds to -undo:
+				# and -redo:.
+				return window.validateMenuItem(item)
+			when :'showOrHideRulers:'
+				# The Show/Hide Ruler menu item is always enabled, but we have to set
+				# its title.
+				title = enclosingScrollView.rulersVisible ? 'Hide Ruler' : 'Show Ruler'
+				item.setTitle(NSLocalizedStringFromTable(title, "SKTGraphicView", "A main menu item title.")) 
+				return true
+			else
+				return true
+		end
+	end
+
+	# An action method that isn't declared in any AppKit header, despite the
+	# fact that NSWindow implements it. Because this is here we have to handle
+	# the action in our override of -validateMenuItem:, and we do.
+	def undo (sender)
+		# Applications are supposed to update the selection during undo and redo
+		# operations. Start keeping track of which graphics are added or changed
+		# during this operation so we can select them afterward. We don't do have
+		# to do anything when graphics are removed because the bound-to array
+		# controller keeps the selection indexes consistent when that happens.
+		# (This is the one place where SKTGraphicView assumes anything about the
+		# class of an object to which its bound, and it's not really assuming that
+		# it's bound to an array controller. It's just assuming that the bound-to
+		# object is somehow keeping the bound-to indexes property consistent with
+		# the bound-to graphics.)
+		@undoSelectionIndexes = NSMutableIndexSet.alloc.init
+
+		# Do the regular Cocoa thing. Unfortunately, before you saw this there was
+		# no easy way for you know what "the regular Cocoa thing" is, but now you
+		# know: NSWindow has -undo: and -redo: methods, and is usually the object
+		# in the responder chain that performs these actions when the user chooses
+		# the corresponding items in the Edit menu. It would be more correct to
+		# write this as [[self nextResponder] tryToPerform:_cmd with:sender],
+		# because perhaps someday this class will be reused in a situation where
+		# the superview has opinions of its own about what should be done during
+		# undoing. We message the window directly just to be consistent with what
+		# we do in our implementation of -validateMenuItem:, where we have no
+		# choice.
+		window.undo(sender)
+
+		# Were graphics added or changed by undoing?
+		if @undoSelectionIndexes.count > 0
+			# Yes, so replace the current selection with them.
+			changeSelectionIndexes(@undoSelectionIndexes)
+		end
+		# else apparently nothing happening while undoing except maybe the removal
+		# of graphics, so we leave the selection alone.
+
+		# Don't leak, and don't let -observeValueForKeyPath:ofObject:change:context: message a zombie.
+		@undoSelectionIndexes = nil
+
+		# We overrode this method to find out when undoing is done, instead of
+		# observing NSUndoManagerWillUndoChangeNotification and
+		# NSUndoManagerDidUndoChangeNotification, because we only want to do what
+		# we do here when the user is focused on this view, and those
+		# notifications won't tell us the focused view. In Sketch this matters
+		# when the user has more than one window open for a document, but the
+		# concept applies whenever there are multiple views of the same data. Most
+		# of the time actions taken by the user in a view shouldn't affect the
+		# selection used in other views of the same data, with the obvious
+		# exception that removed items can no longer be selected in any view.
+	end
+
+	# The same as above, but for redoing instead of undoing. It doesn't look like so much work when you leave out the comments!
+	def redo (sender)
+		@undoSelectionIndexes = NSMutableIndexSet.alloc.init
+		window.redo(sender)
+		changeSelectionIndexes(@undoSelectionIndexes) if @undoSelectionIndexes.count > 0
+		@undoSelectionIndexes = nil
+	end
+
+
+	# *** Other Actions ***
+	def alignLeftEdges (sender)
+		leftX = selectedGraphics[0].bounds.origin.x
+		# would be easier to just to selectedGraphics.each {|g| g.bounds.origin.x = leftX}
+		# but don't know if supported and might dirty state unnecessary 
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if curBounds.origin.x != leftX
+				curBounds.origin.x = leftX
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Left Edges", "UndoStrings", "Action name for align left edges."))
+	end
+
+	def alignRightEdges (sender)
+		rightX = NSMaxX(selectedGraphics[0].bounds)
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if NSMaxX(curBounds) != rightX
+				curBounds.origin.x = rightX - curBounds.size.width
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Right Edges", "UndoStrings", "Action name for align right edges."))
+	end
+
+	def alignTopEdges (sender)
+		topY = selectedGraphics[0].bounds.origin.y
+		# would be easier to just to selectedGraphics.each {|g| g.bounds.origin.x = leftX}
+		# but don't know if supported and might dirty state unnecessary 
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if curBounds.origin.y != topY
+				curBounds.origin.y = topY
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Top Edges", "UndoStrings", "Action name for align top edges."))
+	end
+
+	def alignBottomEdges (sender)
+		bottomY = NSMaxY(selectedGraphics[0].bounds)
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if NSMaxY(curBounds) != bottomY
+				curBounds.origin.y = bottomY - curBounds.size.height
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Bottom Edges", "UndoStrings", "Action name for bottom edges."))
+	end
+
+
+	def alignHorizontalCenters (sender)
+		hCenter = NSMidX(selectedGraphics[0].bounds)
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if NSMidX(curBounds) != hCenter
+				curBounds.origin.x = hCenter - (curBounds.size.width / 2.0)
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Horizontal Centers", "UndoStrings", "Action name for align horizontal centers."))
+	end
+
+	def alignVerticalCenters (sender)
+		vCenter = NSMidY(selectedGraphics[0].bounds)
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if NSMidX(curBounds) != vCenter
+				curBounds.origin.y = vCenter - (curBounds.size.height / 2.0)
+				g.setBounds(curBounds)
+			end
+		end
+		undoManager.setActionName(NSLocalizedStringFromTable("Align Vertical Centers", "UndoStrings", "Action name for align vertical centers."))
+	end
+
+	def alignWithGrid (sender)
+		selectedGraphics.each {|g| g.setBounds(@grid.alignedRect(g.bounds.dup))}
+		undoManager.setActionName(NSLocalizedStringFromTable("Grid Selected Graphics", "UndoStrings", "Action name for grid selected graphics."))
+	end
+
+	def bringToFront (sender)
+		selectedObjects = selectedGraphics.dup
+		if selectionIndexes.count > 0
+			mutableGraphics.removeObjectsAtIndexes(selectionIndexes)
+			insertionIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, selectedObjects.count))
+			mutableGraphics.insertObjects(selectedObjects, atIndexes: insertionIndexes)
+			changeSelectionIndexes(insertionIndexes)
+			undoManager.setActionName(NSLocalizedStringFromTable("Bring To Front", "UndoStrings", "Action name for bring to front."))
+		end
+	end
+
+
+	def sendToBack (sender)
+		selectedObjects = selectedGraphics.dup
+		if selectionIndexes.count > 0
+			mutableGraphics.removeObjectsAtIndexes(selectionIndexes)
+			insertionIndexes = NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(mutableGraphics.count, selectedObjects.count))
+			mutableGraphics.insertObjects(selectedObjects, atIndexes: insertionIndexes)
+			changeSelectionIndexes(insertionIndexes)
+			undoManager.setActionName(NSLocalizedStringFromTable("Send To Back", "UndoStrings", "Action name for send to back."))
+		end
+	end
+
+	# Conformance to the NSObject(NSColorPanelResponderMethod) informal protocol.
+	def changeColor (sender)
+		# Change the color of every selected graphic.
+		selectedGraphics.makeObjectsPerformSelector('setColor:', withObject: sender.color)
+	end
+
+
+	def makeSameWidth (sender)
+		width = selectedGraphics[0].bounds.size.width
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if curBounds.size.width != width
+				curBounds.size.width = width
+				g.setBounds(curBounds)
+			end
+		end
+
+		undoManager.setActionName(NSLocalizedStringFromTable("Make Same Width", "UndoStrings", "Action name for make same width."))
+	end
+
+	def makeSameHeight (sender)
+		height = selectedGraphics[0].bounds.size.height
+		selectedGraphics.each do |g|
+			curBounds = g.bounds.dup
+			if curBounds.size.height != height
+				curBounds.size.height = height
+				g.setBounds(curBounds)
+			end
+		end
+
+		undoManager.setActionName(NSLocalizedStringFromTable("Make Same Height", "UndoStrings", "Action name for make same height."))
+	end
+	
+	def makeNaturalSize (sender)
+		if selectedGraphics.count > 0
+			selectedGraphics.makeObjectsPerformSelector('makeNaturalSize')
+			undoManager.setActionName(NSLocalizedStringFromTable("Make Natural Size", "UndoStrings", "Action name for natural size."))
+		end
+	end
+
+
+	# An override of an NSResponder(NSStandardKeyBindingMethods) method and a
+	# matching method of our own.
+	def selectAll (sender)
+		changeSelectionIndexes(NSIndexSet.indexSetWithIndexesInRange(NSMakeRange(0, graphics.count)))
+	end
+	
+	def deselectAll (sender)
+		changeSelectionIndexes(NSIndexSet.indexSet)
+	end
+
+	# See the comment in the header about why we're not using -toggleRuler:.
+	def showOrHideRulers (sender)
+		enclosingScrollView.rulersVisible = !enclosingScrollView.rulersVisible
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+Information that is recorded when the "graphics" and "selectionIndexes" bindings are established. Notice that we don't keep around copies of the actual graphics array and selection indexes. Those would just be unnecessary (as far as we know, so far, without having ever done any relevant performance measurement) caches of values that really live in the bound-to objects.
+
+    NSObject *_graphicsContainer;
+    NSString *_graphicsKeyPath;
+    NSObject *_selectionIndexesContainer;
+    NSString *_selectionIndexesKeyPath;
+
+The grid that is drawn in the view and used to constrain graphics as they're created and moved. In Sketch this is just a cache of a value that canonically lives in the SKTWindowController to which this view's grid property is bound (see SKTWindowController's comments for an explanation of why the grid lives there).
+
+    SKTGrid *_grid;
+
+The bounds of moved objects that is echoed in the ruler, if objects are being moved right now.
+    NSRect _rulerEchoedBounds;
+
+The graphic that is being created right now, if a graphic is being created right now (not explicitly retained, because it's always allocated and forgotten about in the same method).
+    SKTGraphic *_creatingGraphic;
+
+The graphic that is being edited right now, the view that it gave us to present its editing interface, and the last known frame of that view, if a graphic is being edited right now. We have to record the editing view frame because when it changes we need its old value, and the old value isn't available when this view gets the NSViewFrameDidChangeNotification. Also, the reserved thickness for the horizontal ruler accessory view before editing began, so we can restore it after editing is done. (We could do the same for the vertical ruler, but so far in Sketch there are no vertical ruler accessory views.)
+    SKTGraphic *_editingGraphic;
+    NSView *_editingView;
+    NSRect _editingViewFrame;
+    CGFloat _oldReservedThicknessForRulerAccessoryView;
+
+The bounds of the marquee selection, if marquee selection is being done right now, NSZeroRect otherwise.
+    NSRect _marqueeSelectionBounds;
+
+Whether or not selection handles are being hidden while the user moves graphics.
+    BOOL _isHidingHandles;
+
+Sometimes we temporarily hide the selection handles when the user moves graphics using the keyboard. When we do that this is the timer to start showing them again.
+    NSTimer *_handleShowingTimer;
+
+    // The state of the cascading of graphics that we do during repeated pastes.
+    NSInteger _pasteboardChangeCount;
+    NSInteger _pasteCascadeNumber;
+    NSPoint _pasteCascadeDelta;
+
+Applications are supposed to update the selection during undo and redo operations. These are the indexes of the graphics that are going to be selected at the end of an undo or redo operation.
+    NSMutableIndexSet *_undoSelectionIndexes;
+
+Action methods that are unique to SKTGraphicView, or at least are not declared by NSResponder. SKTGraphicView implements other action methods, but they're all declared by NSResponder and there's not much reason to redeclare them here. We use -showOrHideRulers: instead of -toggleRuler: because we don't want to cause accidental invocation of -[NSTextView toggleRuler:], which doesn't quite work when the text view has been added to a view that already has rulers shown in it, a situation that can arise in Sketch.
+- (IBAction)alignBottomEdges:(id)sender;
+- (IBAction)alignHorizontalCenters:(id)sender;
+- (IBAction)alignLeftEdges:(id)sender;
+- (IBAction)alignRightEdges:(id)sender;
+- (IBAction)alignTopEdges:(id)sender;
+- (IBAction)alignVerticalCenters:(id)sender;
+- (IBAction)alignWithGrid:(id)sender;
+- (IBAction)bringToFront:(id)sender;
+- (IBAction)copy:(id)sender;
+- (IBAction)cut:(id)sender;
+- (IBAction)delete:(id)sender;
+- (IBAction)deselectAll:(id)sender;
+- (IBAction)makeNaturalSize:(id)sender;
+- (IBAction)makeSameHeight:(id)sender;
+- (IBAction)makeSameWidth:(id)sender;
+- (IBAction)paste:(id)sender;
+- (IBAction)sendToBack:(id)sender;
+- (IBAction)showOrHideRulers:(id)sender;
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTGrid.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTGrid.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTGrid.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,266 @@
+# A string constant declared in the header. We haven't bother declaring string
+# constants for the other keys mentioned in the header yet because no one
+# would be using them. Those keys are all typed directly into Interface
+# Builder's bindings inspector.
+SKTGridAnyKey = "any"
+
+# The number of seconds that we wait after temporarily showing the grid before
+# we hide it again. This number has never been reviewed by an actual user
+# interface designer, but it seems nice to at least one engineer at Apple. 
+SKTGridTemporaryShowingTime = 1.0
+
+class SKTGrid < NSObject
+	attr_reader		:isAlwaysShown, :isConstraining
+    attr_accessor	:color, :spacing
+
+	# An override of the superclass' designated initializer.
+	def init ()
+		super
+
+		# Establish reasonable defaults. 9 points is an eighth of an inch, which
+		# is a reasonable default.
+		@color = NSColor.lightGrayColor
+		@spacing = 9.0
+
+		return self
+	end
+
+# - (void)dealloc {
+# 
+#	  # If we've set a timer to hide the grid invalidate it so it doesn't send a message to this object's zombie.
+#	  [_hidingTimer invalidate]
+# }
+
+
+	#*** Private KVC and KVO-Compliance for Public Properties ***
+
+	def self.keyPathsForValuesAffectingAny ()
+		# Specify that a KVO-compliant change for any of this class' non-derived
+		# properties should result in a KVO change notification for the "any"
+		# virtual property. Views that want to use this grid can observe "any"
+		# for notification of the need to redraw the grid.
+	    NSSet.setWithArray(%w{color spacing alwaysShown constraining})
+	end
+
+	def stopShowingGridForTimer (timer)
+		# The timer is now invalid and will be releasing itself.
+		@hidingTimer = nil
+	
+		# Tell observing views to redraw. By the way, it is virtually always a
+		# mistake to put willChange/didChange invocations together with nothing in
+		# between. Doing so can result in bugs that are hard to track down. You
+		# should always invoke -willChangeValueForKey:theKey before the result of
+		# -valueForKey:theKey would change, and then invoke
+		# -didChangeValueForKey:theKey after the result of -valueForKey:theKey
+		# would have changed. We can get away with this here because there is no
+		# value for the "any" key.
+		willChangeValueForKey(SKTGridAnyKey)
+		didChangeValueForKey(SKTGridAnyKey)
+	end
+
+	def setSpacing (spacing)
+		# Weed out redundant invocations.
+		if spacing != @spacing
+			@spacing = spacing
+			
+			# If the grid is drawable, make sure the user gets visual feedback of the
+			# change. We don't have to do anything special if the grid is being shown
+			# right now.	Observers of "any" will get notified of this change because
+			# of what we did in +initialize. They're expected to invoke
+			# -drawRect:inView:. 
+			if @spacing > 0 && !@isAlwaysShown
+				# Are we already showing the grid temporarily?
+				if @hidingTimer
+					# Yes, and now the user's changed the grid spacing again, so put off
+					# the hiding of the grid.
+					@hidingTimer.setFireDate(NSDate.dateWithTimeIntervalSinceNow(SKTGridTemporaryShowingTime))
+			 	else
+					# No, so show it the next time -drawRect:inView: is invoked, and
+					# then hide it again in one second.
+					@hidingTimer = NSTimer.scheduledTimerWithTimeInterval(SKTGridTemporaryShowingTime, target: self, 
+											selector: 'stopShowingGridForTimer:', userInfo: nil, repeats: false)
+		
+					# Don't bother with a separate _showsGridTemporarily instance
+					# variable. -drawRect: can just check to see if _hidingTimer is
+					# non-nil.
+				end
+			end
+		end
+	end
+
+	def self.keyPathsForValuesAffectingCanSetColor ()
+	    NSSet.setWithArray(%w{alwaysShown usable})
+	end
+	
+	def canSetColor ()
+		# Don't let the user change the color of the grid when that would be useless.
+		@isAlwaysShown && isUsable
+	end
+
+	def self.keyPathsForValuesAffectingCanSetSpacing ()
+	    NSSet.setWithArray(%w{alwaysShown constraining})
+	end
+	
+	def canSetSpacing ()
+		# Don't let the user change the spacing of the grid when that would be useless.
+		@isAlwaysShown || @isConstraining
+	end
+
+ 	# *** Public Methods ***
+
+	def setConstraining (isConstraining)
+		@isConstraining = isConstraining
+	end
+
+	def self.keyPathsForValuesAffectingUsable ()
+	    NSSet.setWithArray(%w{spacing})
+	end
+	
+	def isUsable ()
+		# The grid isn't usable if the spacing is set to zero. The header comments
+		# explain why we don't validate away zero spacing.
+		@spacing > 0
+	end
+
+	def setAlwaysShown (shown)
+		# Weed out redundant invocations.
+		if shown != @isAlwaysShown
+			@isAlwaysShown = shown
+
+			# If we're temporarily showing the grid then there's a timer that's
+			# going to hide it. If we're supposed to show the grid right now then we
+			# don't want the timer to undo that. If we're supposed to hide the grid
+			# right now then the hiding that the timer would do is redundant.
+			if @hidingTimer
+				@hidingTimer.invalidate
+				@hidingTimer = nil
+			end
+		end
+	end
+
+ 	def constrainedPoint (point)
+		# The grid might not be usable right now, or constraining might be turned
+		# off.
+		if isUsable && @isConstraining
+			point.x = (point.x / @spacing + 0.5).floor * @spacing
+			point.y = (point.y / @spacing + 0.5).floor * @spacing
+		end
+		point
+	end
+	
+	def canAlign ()
+		# You can invoke alignedRect: any time the spacing is valid.
+		isUsable
+	end
+
+	def alignedRect (rect)
+		# Aligning is done even when constraining is not.
+		upperRight = NSMakePoint(NSMaxX(rect), NSMaxY(rect))
+		rect.origin.x = ((rect.origin.x / @spacing) + 0.5).floor * @spacing
+		rect.origin.y = ((rect.origin.y / @spacing) + 0.5).floor * @spacing
+		upperRight.x  = ((upperRight.x  / @spacing) + 0.5).floor * @spacing
+		upperRight.y  = ((upperRight.y  / @spacing) + 0.5).floor * @spacing
+		rect.size.width = upperRight.x - rect.origin.x
+		rect.size.height = upperRight.y - rect.origin.y
+		rect
+	end
+
+	def drawRect (rect, inView: view)
+		# The grid might not be usable right now. It might be shown, but only temporarily.
+		if isUsable && (isAlwaysShown || @hidingTimer)
+			# Figure out a big bezier path that corresponds to the entire grid. It
+			# will consist of the vertical lines and then the horizontal lines.
+			gridPath = NSBezierPath.bezierPath
+			lastVerticalLineNumber = (NSMaxX(rect) / @spacing).floor
+			(NSMinX(rect) / @spacing).ceil.upto(lastVerticalLineNumber) do |lineNumber|
+				gridPath.moveToPoint(NSMakePoint(lineNumber * @spacing, NSMinY(rect)))
+				gridPath.lineToPoint(NSMakePoint(lineNumber * @spacing, NSMaxY(rect)))
+			end
+		
+			lastHorizontalLineNumber = (NSMaxY(rect) / @spacing).floor
+			(NSMinY(rect) / @spacing).ceil.upto(lastHorizontalLineNumber) do |lineNumber|
+				gridPath.moveToPoint(NSMakePoint(NSMinX(rect), lineNumber * @spacing))
+				gridPath.lineToPoint(NSMakePoint(NSMaxX(rect), lineNumber * @spacing))
+			end
+	
+			# Draw the grid as one-pixel-wide lines of a specific color.
+			@color.set
+			gridPath.lineWidth = 0.0
+			gridPath.stroke
+		end
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+The values underlying the key-value coding (KVC) and observing (KVO) compliance described below. There isn't a full complement of corresponding getter or setter methods. KVC's direct instance variable access, KVO's autonotifying, and KVO's property dependency mechanism make them unnecessary. If in the future we decide that we need to do more complicated things when these values are gotten or set we can add getter and setter methods then, and no bound object will know the difference (so don't let me hear any more guff about direct ivar access "breaking encapsulation").
+    NSColor *_color;
+    CGFloat _spacing;
+    BOOL _isAlwaysShown;
+    BOOL _isConstraining;
+
+Sometimes we temporarily show the grid to provide feedback for user changes to the grid spacing. When we do that we use a timer to turn it off again.
+    NSTimer *_hidingTimer;
+    
+This class is KVC and KVO compliant for these keys:
+
+"color" (an NSColor; read-write) - The color that will be used when the grid is shown.
+    
+"spacing" (a floating point NSNumber; read-write) - The distance (in user space units) between the grid lines used when showing the grid or constraining points to it.
+
+"alwaysShown" (a boolean NSNumber; read-write) - Whether or not the user wants the grid to always be visible. -drawRect:inView: may draw a visible grid even when the value of this property is NO, if it's animating itself to provide good user feedback about a change to one of its properties.
+
+"constraining" (a boolean NSNumber; read-write) - Whether or not the user wants graphics to be constrained to this grid. Graphic views should not need to access this property. They should invoke -constrainedPoint: instead.
+
+"usable" (a boolean NSNumber; read-only) - Whether or not grid parameters are currently set to values that are valid enough that grid showing and constraining of graphics to the grid can be done. This wouldn't be necessary if we didn't allow zero to be a valid value for grid spacing, but we do, even though we don't want to draw zero-space grids, because there's no other reasonable number to use as the miminum value for the grid spacing slider in the grid panel. Why not use "one-point-oh" you ask? What's so special about that value I ask back. Grid spacing isn't in terms of pixel widths. It's in terms of user space units. Why not implement a validation method for the "gridSpacing" property to catch the user trying to set it to zero? Because the best thing that could come of that would be an alert that's presented to the user whenever they drag the spacing slider all the way to the left, or maybe just a beep, and either would be obnoxious. [User interface advice given in the comments of Sketch sample code is strictly the opinion of the engineer who's rewriting Sketch, and hasn't been reviewed by Apple's actual user interface designers, but, really.] By the way, an alternative to binding to this property would be binding directly to the "spacing" property using a very simple SKTIsGreaterThanZero value transformer of our own making. That would be putting a little to much logic into the nibs though, and a couple of nibs would require updating if we someday had to change the rules about when the grid is useful. This way we would just have to update this class' -isUsable method.
+
+"canSetColor" (a boolean NSNumber; read-only) - Whether or not grid parameters are currently set to values that are valid enough that setting the grid color would do something useful, from the user's point of view.
+
+"canSetSpacing" (a boolean NSNumber; read-only) - Whether or not grid parameters are currently set to values that are valid enough that setting grid spacing would do something useful, from the user's point of view. This wouldn't be necessary if we just forbade the user from changing the grid spacing when the grid wasn't shown, because then we could just bind the "editable" property of controls that set the grid spacing to to "alwaysShown" instead, but that would be a little weak. The grid spacing is useful for constraining graphics to the grid even when the grid isn't shown. Now, whenever we let the user change the grid spacing we have to provide good immediate feedback to the user about it, and Sketch does. See -setSpacing for our solution to that problem.
+
+"any" (no value; not readable or writable) - A virtual property for which KVO change notifications are sent whenever any of the properties that affect the drawing of the grid have changed. We use KVO for this instead of more traditional methods so that we don't have to write any code other than an invocation of KVO's +setKeys:triggerChangeNotificationsForDependentKey:. (To use NSNotificationCenter for instance we would have to write -set...: methods for all of this object's settable properties. That's pretty easy, but it's nice to avoid such boilerplate when possible.) There is no value for this property, because it would not be useful, and this class isn't KVC-compliant for "any." This property is not called "needsDrawing" or some such thing because instances of this class do not know how many views are using it, and potentially there will be moments when it "needs drawing" in some views but not others.
+
+In Sketch various properties of the controls of the grid inspector are bound to the properties (all except for the "any" property) of the grid belonging to the window controller of the main window. Each SKTGraphicView observes the "any" property of the grid to which its bound so it knows when the grid needs drawing.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTImage.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTImage.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTImage.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,270 @@
+# String constants declared in the header. They may not be used by any other
+# class in the project, but it's a good idea to provide and use them, if only
+# to help prevent typos in source code.
+SKTImageIsFlippedHorizontallyKey = "flippedHorizontally"
+SKTImageIsFlippedVerticallyKey = "flippedVertically"
+SKTImageFilePathKey = "filePath"
+
+# Another key, which is just used in persistent property dictionaries.
+SKTImageContentsKey = "contents"
+
+class SKTImage < SKTGraphic
+
+
+	# - (id)copyWithZone:(NSZone *)zone {
+	# 
+	#	  # Do the regular Cocoa thing.
+	#	  SKTImage *copy = [super copyWithZone:zone];
+	#	  copy->_contents = [_contents copy];
+	#	  return copy;
+	# 
+	# }
+
+
+
+	# *** Private KVC-Compliance for Public Properties ***
+
+
+	def setFlippedHorizontally (isFlippedHorizontally)
+		# Record the value and flush the transformed contents cache.
+		@isFlippedHorizontally = isFlippedHorizontally
+	end
+
+	def setFlippedVertically (isFlippedVertically)
+		# Record the value and flush the transformed contents cache.
+		@isFlippedVertically = isFlippedVertically;
+	end
+
+	def setFilePath (filePath)
+		# If there's a transformed version of the contents being held as a cache,
+		# it's invalid now.
+		@contents = NSImage.alloc.initWithContentsOfFile(filePath.stringByStandardizingPath)
+	end
+
+	# *** Public Methods ***
+
+	def initWithPosition (position, contents: contents)
+		init
+		@contents = contents
+
+		# Leave the image centered on the mouse pointer.
+		contentsSize = @contents.size
+		setBounds(NSMakeRect((position.x - (contentsSize.width / 2.0)), (position.y - (contentsSize.height / 2.0)), contentsSize.width, contentsSize.height))
+
+		self
+	end
+
+	# *** Overrides of SKTGraphic Methods ***
+
+	def initWithProperties (properties)
+		# Let SKTGraphic do its job and then handle the additional properties
+		# defined by this subclass.
+		super
+
+		# The dictionary entries are all instances of the classes that can be
+		# written in property lists. Don't trust the type of something you get out
+		# of a property list unless you know your process created it or it was
+		# read from your application or framework's resources. We don't have to
+		# worry about KVO-compliance in initializers like this by the way; no one
+		# should be observing an unitialized object.
+		contentsData = properties[SKTImageContentsKey]
+		if contentsData.kind_of? NSData
+			contents = NSUnarchiver.unarchiveObjectWithData(contentsData)
+			@contents = contents if contents.kind_of? NSImage
+		end
+
+		if properties[SKTImageIsFlippedHorizontallyKey].kind_of? NSNumber
+			@isFlippedHorizontally = properties[SKTImageIsFlippedHorizontallyKey].boolValue
+		end
+
+		if properties[SKTImageIsFlippedVerticallyKey].kind_of? NSNumber
+			@isFlippedVertically = properties[SKTImageIsFlippedVerticallyKey].boolValue
+		end
+		
+		self
+	end
+
+
+	def properties ()
+		# Let SKTGraphic do its job and then handle the one additional property
+		# defined by this subclass. The dictionary must contain nothing but values
+		# that can be written in old-style property lists.
+		props = super
+		props[SKTImageContentsKey] = NSArchiver.archivedDataWithRootObject(@contents)
+		props[SKTImageIsFlippedHorizontallyKey] = NSNumber.numberWithBool(@isFlippedHorizontally)
+		props[SKTImageIsFlippedVerticallyKey] = NSNumber.numberWithBool(@isFlippedVertically)
+		props
+	end
+
+	def isDrawingFill ()
+		# We never fill an image with color.
+		false
+	end
+
+
+	def isDrawingStroke ()
+		# We never draw a stroke on an image.
+		false
+	end
+
+
+	def self.keyPathsForValuesAffectingDrawingContents ()
+		# Flipping affects drawing but not the drawing bounds. So of course do the
+		# properties managed by the superclass.
+		keys = super.mutableCopy
+		keys.addObject(SKTImageIsFlippedHorizontallyKey)
+		keys.addObject(SKTImageIsFlippedVerticallyKey)
+		keys
+	end
+
+
+	def drawContentsInView (view, isBeingCreateOrEdited: isBeingCreatedOrEditing)
+		# Fill the background with the fill color. Maybe it will show, if the image has an alpha channel.
+		if isDrawingFill
+			fillColor.set
+			NSRectFill(bounds);
+		end
+
+		# Surprisingly, NSImage's -draw... methods don't take into account whether
+		# or not the view is flipped. In Sketch, SKTGraphicViews are flipped (and
+		# this model class is not supposed to have dependencies on the oddities of
+		# any particular view class anyway). So, just do our own transformation
+		# matrix manipulation.
+		transform = NSAffineTransform.transform
+
+		# Translating to actually place the image (as opposed to translating as
+		# part of flipping).
+		transform.translateXBy(bounds.origin.x, yBy: bounds.origin.y)
+
+		# Flipping according to the user's wishes.
+		transform.translateXBy(@isFlippedHorizontally ? bounds.size.width : 0.0, yBy: @isFlippedVertically ? bounds.size.height : 0.0)
+		transform.scaleXBy(@isFlippedHorizontally ? -1.0 : 1.0, yBy:@isFlippedVertically ? -1.0 : 1.0)
+
+		# Scaling to actually size the image (as opposed to scaling as part of flipping).
+		contentsSize = @contents.size
+		transform.scaleXBy(bounds.size.width / contentsSize.width, yBy: bounds.size.height / contentsSize.height)
+
+		# Flipping to accomodate -[NSImage
+		# drawAtPoint:fromRect:operation:fraction:]'s odd behavior.
+		if view && view.isFlipped
+			transform.translateXBy(0.0, yBy: contentsSize.height)
+			transform.scaleXBy(1.0, yBy: -1.0)
+		end
+
+		# Do the actual drawing, saving and restoring the graphics state so as not
+		# to interfere with the drawing of selection handles or anything else in
+		# the same view.
+		NSGraphicsContext.currentContext.saveGraphicsState
+		transform.concat
+		@contents.drawAtPoint(NSZeroPoint, fromRect: NSMakeRect(0.0, 0.0, contentsSize.width, contentsSize.height), operation: NSCompositeSourceOver, fraction: 1.0)
+		NSGraphicsContext.currentContext.restoreGraphicsState
+	end
+
+
+	def canSetDrawingFill ()
+		# Don't let the user think we would even try to fill an image with color.
+		return false
+	end
+
+
+	def canSetDrawingStroke ()
+		# Don't let the user think we would even try to draw a stroke on image.
+		return false
+	end
+
+	def flipHorizontally ()
+		setFlippedHorizontally(@isFlippedHorizontally ? false : true)
+	end
+
+	def flipVertically ()
+		setFlippedVertically(@isFlippedVertically ? false : true)
+	end
+
+	def makeNaturalSize ()
+		# Return the image to its natural size and stop flipping it.
+		b = bounds
+		b.size = @contents.size
+		setBounds(b)
+		setFlippedHorizontally(false)
+		setFlippedVertically(false)
+	end
+
+	def setBounds (bounds)
+		# Flush the transformed contents cache and then do the regular SKTGraphic
+		# thing.
+		super
+	end
+
+	def keysForValuesToObserveForUndo ()
+		# This class defines a few properties for which changes are undoable, in
+		# addition to the ones inherited from SKTGraphic.
+		keys = super.mutableCopy
+		keys.addObject(SKTImageIsFlippedHorizontallyKey)
+		keys.addObject(SKTImageIsFlippedVerticallyKey)
+		keys
+	end
+
+	@@presentablePropertyNamesByKey = {
+		SKTImageIsFlippedHorizontallyKey => NSLocalizedStringFromTable("Horizontal Flipping", "UndoStrings", "Action name part for SKTImageIsFlippedHorizontallyKey."),
+		SKTImageIsFlippedVerticallyKey => NSLocalizedStringFromTable("Vertical Flipping", "UndoStrings", "Action name part for SKTImageIsFlippedVerticallyKey.")
+		
+	}
+	
+	def self.presentablePropertyNameForKey (key)
+		@@presentablePropertyNamesByKey[key] || super
+	end
+end
+
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+This class is KVC and KVO compliant for these keys:
+
+"flippedHorizontally" and "flippedVertically" (boolean NSNumbers; read-only) - Whether or not the image is flipped relative to its natural orientation.
+
+"filePath" (an NSString containing a path to an image file; write-only) - the scriptable property that can specified as an alias in the record passed as the "with properties" parameter of a "make" command, so you can create images via AppleScript.
+
+In Sketch "flippedHorizontally" and "flippedVertically" are two more of the properties that SKTDocument observes so it can register undo actions when they change. Also, "imageFilePath" is scriptable.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTLine.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTLine.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTLine.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,314 @@
+require 'SKTGraphic'
+
+
+# String constants declared in the header. They may not be used by any other
+# class in the project, but it's a good idea to provide and use them, if only
+# to help prevent typos in source code.
+SKTLineBeginPointKey = "beginPoint"
+SKTLineEndPointKey = "endPoint"
+
+# SKTGraphic's default selection handle machinery draws more handles than we
+# need, so this class implements its own.
+SKTLineBeginHandle = 1
+SKTLineEndHandle = 2
+
+
+class SKTLine < SKTGraphic
+
+	# *** Private KVC and KVO-Compliance for Public Properties ***
+
+	# The only reason we have to have this many methods for simple KVC and KVO
+	# compliance for "beginPoint" and "endPoint" is because reusing SKTGraphic's
+	# "bounds" property is so complicated (see the instance variable comments in
+	# the header). If we just had _beginPoint and _endPoint we wouldn't need any
+	# of these methods because KVC's direct instance variable access and KVO's
+	# autonotification would just take care of everything for us (though maybe
+	# then we'd have to override -setBounds: and -bounds to fulfill the KVC and
+	# KVO compliance obligation for "bounds" that this class inherits from its
+	# superclass).
+
+
+	def self.keyPathsForValuesAffectingBeginPoint ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+
+	def beginPoint ()
+		# Convert from our odd storage format to something natural.
+		NSPoint.new(@pointsRight ? NSMinX(bounds) : NSMaxX(bounds),
+					@pointsDown ? NSMinY(bounds) : NSMaxY(bounds))
+	end
+
+	def self.keyPathsForValuesAffectingEndPoint ()
+		NSSet.setWithObject(SKTGraphicBoundsKey)
+	end
+	
+	def endPoint ()
+		# Convert from our odd storage format to something natural.
+	 	NSPoint.new(@pointsRight ? NSMaxX(bounds) : NSMinX(bounds),
+					@pointsDown ? NSMaxY(bounds) : NSMinY(bounds))
+	end
+
+	def boundsWithBeginPoint (bPoint, endPoint: ePoint)
+		# Convert the begin and end points of the line to its bounds and flags
+		# specifying the direction in which it points.
+		@pointsRight = bPoint.x < ePoint.x
+		@pointsDown = bPoint.y < ePoint.y
+		xPosition = @pointsRight ? bPoint.x : ePoint.x
+		yPosition = @pointsDown ? bPoint.y : ePoint.y
+		width = (ePoint.x - bPoint.x).abs
+		height = (ePoint.y - bPoint.y).abs
+
+		NSMakeRect(xPosition, yPosition, width, height);
+	end
+
+	def setBeginPoint (bPoint)
+		# It's easiest to compute the results of setting these points together.
+		setBounds(boundsWithBeginPoint(bPoint, endPoint: endPoint))
+	end
+
+	def setEndPoint (ePoint)
+		# It's easiest to compute the results of setting these points together.
+		setBounds(boundsWithBeginPoint(beginPoint, endPoint: ePoint))
+	end
+
+	# *** Overrides of SKTGraphic Methods ***
+
+	def initWithProperties (properties)
+		# Let SKTGraphic do its job and then handle the additional properties
+		# defined by this subclass.
+		super
+
+		# This object still doesn't have a bounds (because of what we do in our
+		# override of -properties), so set one and record the other information we
+		# need to place the begin and end points. The dictionary entries are all
+		# instances of the classes that can be written in property lists. Don't
+		# trust the type of something you get out of a property list unless you know
+		# your process created it or it was read from your application or
+		# framework's resources. We don't have to worry about KVO-compliance in
+		# initializers like this by the way; no one should be observing an
+		# unitialized object.
+		beginPointString = properties[SKTLineBeginPointKey]
+		beginPoint = beginPointString.kind_of?(String) ? NSPointFromString(beginPointString) : NSZeroPoint
+		endPointString = properties[SKTLineEndPointKey]
+		endPoint = endPointString.kind_of?(String) ? NSPointFromString(endPointString) : NSZeroPoint
+		setBounds(boundsWithBeginPoint(beginPoint, endPoint: endPoint))
+		return self;
+	end
+
+	def properties ()
+		# Let SKTGraphic do its job but throw out the bounds entry in the dictionary
+		# it returned and add begin and end point entries insteads. We do this
+		# instead of simply recording the currnet value of _pointsRight and
+		# _pointsDown because bounds+pointsRight+pointsDown is just too unnatural to
+		# immortalize in a file format. The dictionary must contain nothing but
+		# values that can be written in old-style property lists.
+		props = super
+		props.delete(SKTGraphicBoundsKey)
+		props[SKTLineBeginPointKey] = NSStringFromPoint(beginPoint)
+		props[SKTLineEndPointKey] = NSStringFromPoint(endPoint)
+		return props
+	end
+
+
+	# We don't bother overriding +[SKTGraphic
+	# keyPathsForValuesAffectingDrawingBounds] because we don't need to take
+	# advantage of the KVO dependency mechanism enabled by that method. We fulfill
+	# our KVO compliance obligations (inherited from SKTGraphic) for
+	# SKTGraphicDrawingBoundsKey by just always invoking -setBounds: in
+	# -setBeginPoint: and -setEndPoint:. "bounds" is always in the set returned by
+	# +[SKTGraphic keyPathsForValuesAffectingDrawingBounds]. Now, there's nothing
+	# in SKTGraphic.h that actually guarantees that, so we're taking advantage of
+	# "undefined" behavior. If we didn't have the source to SKTGraphic right next
+	# to the source for this class it would probably be prudent to override
+	# +keyPathsForValuesAffectingDrawingBounds, and make sure.
+
+	# We don't bother overriding +[SKTGraphic
+	# keyPathsForValuesAffectingDrawingContents] because this class doesn't define
+	# any properties that affect drawing without affecting the bounds.
+
+
+	def drawingFill ()
+		# You can't fill a line.
+		false
+	end
+
+	def drawingStroke
+		# You can't not stroke a line.
+		true
+	end
+
+	def bezierPathForDrawing ()
+		path = NSBezierPath.bezierPath
+		path.moveToPoint(beginPoint)
+		path.lineToPoint(endPoint)
+		path.setLineWidth(strokeWidth)
+		path
+	end
+
+	def drawHandlesInView (view)
+		# A line only has two handles.
+		drawHandleInView(view, atPoint: beginPoint)
+		drawHandleInView(view, atPoint: endPoint)
+	end
+
+	def self.creationSizingHandle ()
+		# When the user creates a line and is dragging around a handle to size it
+		# they're dragging the end of the line.
+		return SKTLineEndHandle
+	end
+
+
+	def canSetDrawingFill ()
+		# Don't let the user think we can fill a line.
+		false
+	end
+
+	def canSetDrawingStroke ()
+		# Don't let the user think can ever not stroke a line.
+		false
+	end
+
+	def canMakeNaturalSize
+		# What would the "natural size" of a line be?
+		false
+	end
+
+
+	def isContentsUnderPoint (point)
+		# Do a gross check against the bounds.
+ 		isContentsUnderPoint = false
+		if NSPointInRect(point, bounds)
+			# Let the user click within the stroke width plus some slop.
+			acceptableDistance = (strokeWidth * 0.5) + 2.0
+
+			# Before doing anything avoid a divide by zero error.
+			xDelta = endPoint.x - beginPoint.x
+			if xDelta == 0.0 && fabs(point.x - beginPoint.x).abs <= acceptableDistance
+				isContentsUnderPoint = true
+			else
+				# Do a weak approximation of distance to the line segment.
+				slope = (endPoint.y - beginPoint.y) / xDelta
+				if (((point.x - beginPoint.x) * slope) - (point.y - beginPoint.y)).abs <= acceptableDistance
+					isContentsUnderPoint = true
+				end
+			end
+		end
+		return isContentsUnderPoint;
+	end
+
+
+	def handleUnderPoint (point)
+		# A line just has handles at its ends.
+		if isHandleAtPoint(beginPoint, underPoint: point)
+			return SKTLineBeginHandle
+		elsif isHandleAtPoint(endPoint, underPoint:point) 
+			return SKTLineEndHandle
+		end
+		return SKTGraphicNoHandle
+	end
+
+
+	def resizeByMovingHandle (handle, toPoint: point)
+		# A line just has handles at its ends.
+		if handle == SKTLineBeginHandle
+			setBeginPoint(point)
+		elsif handle == SKTLineEndHandle
+			setEndPoint(point)
+		end
+		# We don't have to do the kind of handle flipping that SKTGraphic does.
+		return handle;
+	end
+
+
+	def setColor (color)
+		# Because lines aren't filled we'll consider the stroke's color to be the one.
+		setValue(color, forKey: SKTGraphicStrokeColorKey)
+	end
+
+
+	def keysForValuesToObserveForUndo ()
+		# When the user drags one of the handles of a line we don't want to just
+		# have changes to "bounds" registered in the undo group. That would be:
+		# 1) Insufficient. We would also have to register changes of "pointsRight"
+		# and "pointsDown," but we already decided to keep those properties private
+		# (see the comments in the header). 2) Not very user-friendly. We don't want
+		# the user to see an "Undo Change of Bounds" item in the Edit menu. We want
+		# them to see "Undo Change of Endpoint."
+		# So, tell the observer of undoable properties (SKTDocument, in Sketch) to
+		# observe "beginPoint" and "endPoint" instead of "bounds."
+		keys = super.mutableCopy
+		keys.removeObject(SKTGraphicBoundsKey)
+		keys.addObject(SKTLineBeginPointKey)
+		keys.addObject(SKTLineEndPointKey)
+		keys
+	end
+
+	@@presentablePropertyNamesByKey = {
+		SKTLineBeginPointKey => NSLocalizedStringFromTable("Beginpoint", "UndoStrings", "Action name part for SKTLineBeginPointKey."),
+		SKTLineEndPointKey => NSLocalizedStringFromTable("Endpoint", "UndoStrings", "Action name part for SKTLineEndPointKey.")
+	}
+	
+	def self.presentablePropertyNameForKey (key)
+		# As is usually the case when a key is passed into a method like this, we
+		# have to invoke super if we don't recognize the key. As far as the user
+		# is concerned both points that define a line are "endpoints."
+		@@presentablePropertyNamesByKey[key] || super
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+YES if the line's ending is to the right or below, respectively, it's beginning, NO otherwise. Because we reuse SKTGraphic's "bounds" property, we have to keep track of the corners of the bounds at which the line begins and ends. A more natural thing to do would be to just record two points, but then we'd be wasting an NSRect's worth of ivar space per instance, and have to override more SKTGraphic methods to boot. This of course raises the question of why SKTGraphic has a bounds property when it's not readily applicable to every conceivable subclass. Perhaps in the future it won't, but right now in Sketch it's the handy thing to do for four out of five subclasses.
+    BOOL _pointsRight;
+    BOOL _pointsDown;
+
+This class is KVC and KVO compliant for these keys:
+
+"beginPoint" and "endPoint" (NSPoint-containing NSValues; read-only) - The two points that define the line segment.
+
+In Sketch "beginPoint" and "endPoint" are two more of the properties that SKTDocument observes so it can register undo actions when they change.
+
+Notice that we don't guarantee KVC or KVO compliance for "pointsRight" and "pointsDown." Those aren't just private instance variables, they're private properties, concepts that no code outside of SKTLine should care about.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTObserver.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTObserver.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTObserver.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,27 @@
+# This is a small helper class to help manage observers.	The original Sketch
+# used the context parameter to identify what was being observed and had large
+# switch statements to choose the correct code to inform.	This looks ugly and
+# also requires a unique context void* pointer to be generated, taking into
+# account potential sub classing.	This was done by using a constant assigned
+# to a static string describing the context.	Generating this pointer to be
+# compatible with MacRuby (Pointer.new(:char))has been problematic as it
+# doesn't bet passed back intact for some reason - not debugged as using a
+# helper object is much tidier.
+
+# Usage is:
+# @varObserver = SKTObserver.new(self, :someMethod)
+# var.addObserver(@varObserver, forKeyPath: kp, options: opt, context: nil)
+# var.removeObserver(@varObserver, forKeyPath: kp)
+
+class SKTObserver
+	def initialize (target, method)
+		@target = target
+		@method = method
+	end
+	
+	def observeValueForKeyPath (keyPath, ofObject: observedObject, change: change, context: context)
+# puts "In observer, invoking #{@method} on #{@target} for keyPath #{keyPath} with object #{observedObject} for changes #{change}"
+		@target.send(@method, keyPath, observedObject, change)
+	end
+end
+

Added: MacRuby/trunk/sample-macruby/Sketch/SKTRectangle.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTRectangle.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTRectangle.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,59 @@
+require 'SKTGraphic'
+
+
+class SKTRectangle < SKTGraphic
+
+ 	def bezierPathForDrawing ()
+		path = NSBezierPath.bezierPathWithRect(bounds)
+    	path.setLineWidth(strokeWidth)
+    	return path;
+	end
+end
+
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTRenderingView.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTRenderingView.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTRenderingView.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,146 @@
+class SKTRenderingView < NSView
+
+	attr_reader	:printJobTitle
+	
+	def self.pdfDataWithGraphics (graphics)
+		# Create a view that will be used just for making PDF.
+		bounds = SKTGraphic.drawingBoundsOfGraphics(graphics)
+		view = SKTRenderingView.alloc.initWithFrame(bounds, graphics: graphics, printJobTitle: nil)
+		pdfData = view.dataWithPDFInsideRect(bounds)
+		return pdfData;
+	end
+
+	def self.tiffDataWithGraphics (graphics, error: outError)
+		# How big a of a TIFF are we going to make? Regardless of what NSImage
+		# supports, Sketch doesn't support the creation of TIFFs that are 0 by 0
+		# pixels. (We have to demonstrate a custom saving error somewhere, and
+		# this is an easy place to do it...)
+		tiffData = nil;
+		bounds = SKTGraphic.drawingBoundsOfGraphics(graphics)
+		if !NSIsEmptyRect(bounds)
+			# Create a new image and prepare to draw in it. Get the graphics context
+			# for it after we lock focus, not before.
+			image = NSImage.alloc.initWithSize(bounds.size)
+			image.setFlipped(true)
+			image.lockFocus
+			currentContext = NSGraphicsContext.currentContext
+	
+			# We're not drawing a page image here, just the rectangle that contains
+			# the graphics being drawn, so make sure they get drawn in the right
+			# place.
+			transform = NSAffineTransform.transform
+			transform.translateXBy((0.0 - bounds.origin.x), yBy: (0.0 - bounds.origin.y))
+			transform.concat
+	
+			# Draw the graphics back to front.
+			(graphics.count - 1).downto(0) do |graphicIndex|
+				graphic = graphics[graphicIndex]
+				currentContext.saveGraphicsState
+				NSBezierPath.clipRect(graphic.drawingBounds)
+				graphic.drawContentsInView(nil, isBeingCreateOrEdited: false)
+				currentContext.restoreGraphicsState
+			end
+	
+			# We're done drawing.
+			image.unlockFocus
+			tiffData = image.TIFFRepresentation
+	
+		elsif outError
+			# In Sketch there are lots of places to catch this situation earlier. For
+			# example, we could have overridden -writableTypesForSaveOperation: and
+			# made it not return NSTIFFPboardType, but then the user would have no
+			# idea why TIFF isn't showing up in the save panel's File Format popup.
+			# This way we can present a nice descriptive errror message.
+			outError[0] = SKTErrorWithCode(SKTWriteCouldntMakeTIFFError)
+		end
+		return tiffData;
+	end
+
+	def initWithFrame (frame, graphics: graphics, printJobTitle: printJobTitle)
+		super
+		@graphics = graphics.copy
+		@printJobTitle = printJobTitle.copy
+		return self
+	end
+
+	# An override of the NSView method.
+	def drawRect (rect)
+		# Draw the background background.
+		NSColor.whiteColor.set
+		NSRectFill(rect)
+	
+		# Draw every graphic that intersects the rectangle to be drawn. In Sketch
+		# the frontmost graphics have the lowest indexes.
+		currentContext = NSGraphicsContext.currentContext
+		(@graphics.count - 1).downto(0) do |index|
+			graphic = @graphics[index]
+			graphicDrawingBounds = graphic.drawingBounds
+			if NSIntersectsRect(rect, graphicDrawingBounds)
+				# Draw the graphic.
+				currentContext.saveGraphicsState
+				NSBezierPath.clipRect(graphicDrawingBounds)
+				graphic.drawContentsInView(self, isBeingCreateOrEdited: false)
+				currentContext.restoreGraphicsState
+			end
+		end
+	end
+
+	# An override of the NSView method.
+	def isFlipped ()
+		# Put (0, 0) at the top-left of the view.
+		return true
+	end
+
+	# An override of the NSView method.
+	def isOpaque ()
+		# Our override of -drawRect: always draws a background.
+		return true
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTText.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTText.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTText.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,338 @@
+# String constants declared in the header. They may not be used by any other
+# class in the project, but it's a good idea to provide and use them, if only
+# to help prevent typos in source code.
+SKTTextScriptingContentsKey = "scriptingContents"
+SKTTextUndoContentsKey = "undoContents"
+
+# A key that's used in Sketch's property-list-based file and pasteboard formats.
+SKTTextContentsKey = "contents"
+
+
+class SKTText < SKTGraphic
+
+	def contents ()
+		# Never return nil.
+		if !@contents
+			@contents = NSTextStorage.alloc.init
+
+			# We need to be notified whenever the text storage changes.
+			@contents.setDelegate(self)
+		end
+		@contents
+	end
+
+
+	# *** Text Layout ***
+	@@layoutManager = nil
+	
+	# This is a class method to ensure that it doesn't need to access the state
+	# of any particular SKTText.
+	def self.sharedLayoutManager ()
+		# Return a layout manager that can be used for any drawing.
+		if !@@layoutManager
+			textContainer = NSTextContainer.alloc.initWithContainerSize(NSMakeSize(1.0e7, 1.0e7))
+			@@layoutManager = NSLayoutManager.alloc.init
+			textContainer.setWidthTracksTextView(false)
+			textContainer.setHeightTracksTextView(false)
+			@@layoutManager.addTextContainer(textContainer)
+		end
+		@@layoutManager
+	end
+
+	def naturalSize ()
+		# Figure out how big this graphic would have to be to show all of its
+		# contents. -glyphRangeForTextContainer: forces layout.
+		layoutManager = SKTText.sharedLayoutManager
+		textContainer = layoutManager.textContainers[0]
+		textContainer.setContainerSize(NSMakeSize(bounds.size.width, 1.0e7))
+		contents.addLayoutManager(layoutManager)
+		layoutManager.glyphRangeForTextContainer(textContainer)
+		naturalSize = layoutManager.usedRectForTextContainer(textContainer).size;
+		contents.removeLayoutManager(layoutManager)
+		return naturalSize
+	end
+
+	def setHeightToMatchContents ()
+		# Update the bounds of this graphic to match the height of the text. Make
+		# sure that doesn't result in the registration of a spurious undo action.
+		# There might be a noticeable performance win to be had during editing by
+		# making this object a delegate of the text views it creates, implementing
+		# -[NSObject(NSTextDelegate) textDidChange:], and using information that's
+		# already calculated by the editing text view instead of invoking
+		# -makeNaturalSize like this.
+		willChangeValueForKey(SKTGraphicKeysForValuesToObserveForUndoKey)
+		@boundsBeingChangedToMatchContents = true
+		didChangeValueForKey(SKTGraphicKeysForValuesToObserveForUndoKey)
+		setBounds(NSMakeRect(bounds.origin.x, bounds.origin.y, bounds.size.width, naturalSize.height))
+		willChangeValueForKey(SKTGraphicKeysForValuesToObserveForUndoKey)
+		@boundsBeingChangedToMatchContents = false
+		didChangeValueForKey(SKTGraphicKeysForValuesToObserveForUndoKey)
+	end
+
+	# Conformance to the NSTextStorageDelegate protocol.
+	def textStorageDidProcessEditing (notification)
+
+		# The work we're going to do here involves sending
+		# -glyphRangeForTextContainer: to a layout manager, but you can't send
+		# that message to a layout manager attached to a text storage that's still
+		# responding to -endEditing, so defer the work to a point where
+		# -endEditing has returned.
+		performSelector('setHeightToMatchContents', withObject: nil, afterDelay: 0.0)
+	end
+
+#pragma mark *** Private KVC-Compliance for Public Properties ***
+
+	def undoContents ()
+		# Never return an object whose value will change after it's been returned.
+		# This is generally good behavior for any getter method that returns the
+		# value of an attribute or a to-many relationship. (For to-one
+		# relationships just returning the related object is the right thing to
+		# do, as in this class' -contents method.) However, this particular
+		# implementation of this good behavior might not be fast enough for all
+		# situations. If the copying here causes a performance problem, an
+		# alternative might be to return [[contents retain] autorelease], set a
+		# bit that indicates that the contents should be lazily replaced with a
+		# copy before any mutation, and then heed that bit in other methods of
+		# this class.
+		contents.copy
+	end
+
+
+#pragma mark *** Overrides of SKTGraphic Methods ***
+
+	def initWithProperties (props)
+		# Let SKTGraphic do its job and then handle the one additional property
+		# defined by this subclass.
+		super
+	
+		# The dictionary entries are all instances of the classes that can be
+		# written in property lists. Don't trust the type of something you get out
+		# of a property list unless you know your process created it or it was read
+		# from your application or framework's resources. We don't have to worry
+		# about KVO-compliance in initializers like this by the way; no one should
+		# be observing an unitialized object.
+		contentsData = props[SKTTextContentsKey]
+		if contentsData.kind_of? NSData
+			contents = NSUnarchiver.unarchiveObjectWithData(contentsData)
+			if contents.kind_of? NSTextStorage
+				@contents = contents
+
+				# We need to be notified whenever the text storage changes.
+				@contents.setDelegate(self)
+			end
+		end
+		return self;
+	end
+
+	def properties
+		# Let SKTGraphic do its job and then handle the one additional property
+		# defined by this subclass. The dictionary must contain nothing but values
+		# that can be written in old-style property lists.
+		props = super
+		props[SKTTextContentsKey] = NSArchiver.archivedDataWithRootObject(contents)
+		return props
+	end
+
+	def drawingStroke ()
+		# We never draw a stroke on this kind of graphic.
+		return false
+	end
+
+	def drawingBounds ()
+		# The drawing bounds must take into account the focus ring that might be
+		# drawn by this class' override of
+		# -drawContentsInView:isBeingCreatedOrEdited:. It can't forget to take
+		# into account drawing done by -drawHandleInView:atPoint: though. Because
+		# this class doesn't override -drawHandleInView:atPoint:, it should invoke
+		# super to let SKTGraphic take care of that, and then alter the results.
+		NSUnionRect(super, NSInsetRect(bounds, -1.0, -1.0))
+	end
+
+	def drawContentsInView (view, isBeingCreateOrEdited: isBeingCreatedOrEditing)
+		# Draw the fill color if appropriate.
+		if drawingFill
+			fillColor.set
+			NSRectFill(bounds)
+		end
+
+		# If this graphic is being created it has no text. If it is being edited
+		# then the editor returned by -newEditingViewWithSuperviewBounds: will
+		# draw the text.
+		if isBeingCreatedOrEditing
+			# Just draw a focus ring.
+			NSColor.knobColor.set
+			NSFrameRect(NSInsetRect(bounds, -1.0, -1.0))
+		else
+			# Don't bother doing anything if there isn't actually any text.
+			if contents.length > 0
+				# Get a layout manager, size its text container, and use it to draw
+				# text. -glyphRangeForTextContainer: forces layout and tells us how
+				# much of text fits in the container.
+				layoutManager = SKTText.sharedLayoutManager
+				textContainer = layoutManager.textContainers[0]
+				textContainer.setContainerSize(bounds.size)
+				contents.addLayoutManager(layoutManager)
+				glyphRange = layoutManager.glyphRangeForTextContainer(textContainer)
+				if glyphRange.length > 0
+					layoutManager.drawBackgroundForGlyphRange(glyphRange, atPoint: bounds.origin)
+					layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: bounds.origin)
+				end
+				contents.removeLayoutManager(layoutManager)
+			end
+		end
+	end
+
+
+	def canSetDrawingStroke ()
+		# Don't let the user think we would even try to draw a stroke on this kind of graphic.
+		return false
+	end
+
+
+	def makeNaturalSize ()
+		# The real work is done in code shared with -setHeightToMatchContents:.
+		setBounds(NSMakeRect(bounds.origin.x, bounds.origin.y, naturalSize.width, naturalSize.height))
+	end
+
+	def setBounds (bound)
+		# In Sketch the user can change the bounds of a text area while it's being
+		# edited using the graphics inspector, scripting, or undo. When that
+		# happens we have to update the editing views (there might be more than
+		# one, in different windows) to keep things consistent. We don't need to
+		# do this when the bounds is being changed to keep up with changes to the
+		# contents, because the text views we set up take care of that themselves.
+		super
+		if !@boundsBeingChangedToMatchContents
+			# We didn't set up any multiple-text-view layout managers in
+			# -newEditingViewWithSuperviewBounds:, so we're not expecting to have to
+			# deal with any here.
+			layoutManagers = contents.layoutManagers.each {|lm| lm.firstTextView.setFrame(bound)}
+		end
+	end
+
+	def newEditingViewWithSuperviewBounds (superviewBounds)
+		# Create a text view that has the same frame as this graphic. We use
+		# -[NSTextView initWithFrame:textContainer:] instead of -[NSTextView
+		# initWithFrame:] because the latter method creates the entire collection
+		# of objects associated with an NSTextView - its NSTextContainer,
+		# NSLayoutManager, and NSTextStorage - and we already have an
+		# NSTextStorage. The text container should be the width of this graphic
+		# but very high to accomodate whatever text is typed into it.
+		textContainer = NSTextContainer.alloc.initWithContainerSize(NSMakeSize(bounds.size.width, 1.0e7))
+		textView = NSTextView.alloc.initWithFrame(bounds, textContainer: textContainer)
+
+		# Create a layout manager that will manage the communication between our
+		# text storage and the text container, and hook it up.
+		layoutManager = NSLayoutManager.alloc.init
+		layoutManager.addTextContainer(textContainer)
+		contents.addLayoutManager(layoutManager)
+
+		# Of course text editing should be as undoable as anything else.
+		textView.setAllowsUndo(true)
+
+		# This kind of graphic shouldn't appear opaque just because it's being edited.
+		textView.setDrawsBackground(false)
+
+		# This is has been handy for debugging text editing view size problems though.
+		# textView.setBackgroundColor(NSColor.greenColor)
+		# textView.setDrawsBackground(true)
+
+		# Start off with the all of the text selected.
+		textView.setSelectedRange(NSMakeRange(0, contents.length))
+
+		# Specify that the text view should grow and shrink to fit the text as
+		# text is added and removed, but only in the vertical direction. With
+		# these settings the NSTextView will always be large enough to show an
+		# extra line fragment but never so large that the user won't be able to
+		# see just-typed text on the screen. Sending -setVerticallyResizable:YES
+		# to the text view without also sending -setMinSize: or -setMaxSize: would
+		# be useless by the way; the default minimum and maximum sizes of a text
+		# view are the size of the frame that is specified at initialization time.
+		textView.setMinSize(NSMakeSize(bounds.size.width, 0.0))
+		textView.setMaxSize(NSMakeSize(bounds.size.width, superviewBounds.size.height - bounds.origin.y))
+		textView.setVerticallyResizable(true)
+		# The invoker doesn't have to release this object.
+		return textView
+	end
+
+	def finalizeEditingView (editingView)
+		# Tell our text storage that it doesn't have to talk to the editing view's
+		# layout manager anymore.
+		contents.removeLayoutManager(editingView.layoutManager)
+	end
+
+	def keysForValuesToObserveForUndo ()
+		# Observation of "undoContents," and the observer's resulting registration
+		# of changes with the undo manager, is only valid when changes are made to
+		# text contents via scripting. When changes are made directly by the user
+		# in a text view the text view will register better, more specific, undo
+		# actions. Also, we don't want some changes of bounds to result in undo
+		# actions.
+		keysToReturn = super
+		if @contentsBeingChangedByScripting || @boundsBeingChangedToMatchContents
+			keys = keysToReturn.mutableCopy
+			keys.addObject(SKTTextUndoContentsKey) if @contentsBeingChangedByScripting
+			keys.removeObject(SKTGraphicBoundsKey) if @boundsBeingChangedToMatchContents
+			keysToReturn = keys
+		end
+		return keysToReturn
+	end
+
+	@@presentablePropertyNameForTextKey = {
+		SKTTextUndoContentsKey => NSLocalizedStringFromTable("Text", "UndoStrings", "Action name part for SKTTextUndoContentsKey.")
+	}
+	
+	def self.presentablePropertyNameForKey (key)
+		@@presentablePropertyNameForTextKey[key] || super
+	end
+end
+
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+This class is KVC and KVO (kind of) compliant for this key:
+
+"undoContents" (an NSAttributedString; read-write) - Also the text being presented by this object. This is an attribute, and no one should be surprised if each invocation of -valueForKey:@"undoContents" returns a different object. One _should_ be surprised if the object returned by an invocation of -valueForKey:@"undoContents" changes after it's returned. (In an ideal world, this is true of pretty much all getting of attribute values and to-many relationships, regardless of whether the getting is done via KVC or via a directly-invoked accessor method). This class is only KVO-compliant for this key while -keysForValuesToObserveForUndo would return a set containing the key. That (and, in Sketch, SKTDocument's observing of "keysForValuesToObserveForUndo") are all the KVO-compliance that's necessary to make scripted changes of the contents undoable. More complete KVO-compliance is very difficult to implement because NSTextView's undo mechanism changes NSTextStorages directly, and listening in on that conversation is a lot of work.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTToolPaletteController.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTToolPaletteController.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTToolPaletteController.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,90 @@
+SKTSelectedToolDidChangeNotification = "SKTSelectedToolDidChange"
+
+
+class SKTToolPaletteController < NSWindowController
+
+	attr_accessor	:toolButtons
+	
+	@@sharedToolPaletteController = nil
+	def self.sharedToolPaletteController ()
+        @@sharedToolPaletteController ||= SKTToolPaletteController.alloc.init
+	end
+	
+	def init
+    	initWithWindowNibName("ToolPalette")
+    	windowFrameAutosaveName = "ToolPalette"
+    	self
+	end
+
+	def windowDidLoad
+    	cells = @toolButtons.cells
+    	super
+
+		cells.each {|c| c.refusesFirstResponder = true}
+		window.becomesKeyOnlyIfNeeded = true
+	end
+
+	def selectToolAction (sender)
+    	NSNotificationCenter.defaultCenter.postNotificationName(SKTSelectedToolDidChangeNotification, object: self)
+	end
+
+	def currentGraphicClass
+		return nil if !@toolButtons
+
+		# Order the tools are - the first one is the arrow tool (shown as nil)
+		[nil, SKTRectangle, SKTCircle, SKTLine, SKTText][@toolButtons.selectedRow]
+	end
+
+	SKTArrowToolRow = 0
+	def selectArrowTool
+    	@toolButtons.selectCellAtRow(SKTArrowToolRow, column: 0)
+    	NSNotificationCenter.defaultCenter.postNotificationName(SKTSelectedToolDidChangeNotification, object: self)
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+None.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTWindowController.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTWindowController.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTWindowController.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,241 @@
+
+class SKTWindowController < NSWindowController
+	attr_accessor :graphicsController, :graphicView, :zoomingScrollView, :grid, :zoomFactor
+
+	def init ()
+		# Do the regular Cocoa thing, specifying a particular nib.
+		super.initWithWindowNibName ("DrawWindow")
+
+		# Create a grid for use by graphic views whose "grid" property is bound to
+		# this object's "grid" property.
+		@grid = SKTGrid.alloc.init
+
+		# Set the zoom factor to a reasonable default (100%).
+		@zoomFactor = 1.0
+		
+		self
+	end
+
+	# Observing
+	def canvasSizeDidChange (keyPath, observedObject, change)
+		# The "new value" in the change dictionary will be NSNull, instead of
+		# just not existing, if the value for some key in the key path is nil.
+		# In this case there are times in an NSWindowController's life cycle
+		# when its document is nil. Don't update the graphic view's size when we
+		# get notifications about that.
+		documentCanvasSizeValue = change[NSKeyValueChangeNewKey]
+		observeDocumentCanvasSize (documentCanvasSize) if documentCanvasSizeValue
+	end
+	
+	def observeDocumentCanvasSize (documentCanvasSize)
+		# The document's canvas size changed. Invoking -setNeedsDisplay: twice
+		# like this makes sure everything gets redrawn if the view gets smaller
+		# in one direction or the other.
+		@graphicView.setNeedsDisplay(true)
+		@graphicView.frameSize = documentCanvasSize
+		@graphicView.setNeedsDisplay(true)
+	end
+
+	def selectedToolDidChange (notification)
+		# Just set the correct cursor
+		theClass = SKTToolPaletteController.sharedToolPaletteController.currentGraphicClass
+		theCursor = theClass.creationCursor if theClass
+		theCursor ||= NSCursor.arrowCursor
+		graphicView.enclosingScrollView.setDocumentCursor(theCursor)
+	end
+
+	# Overrides of NSWindowController Methods
+
+	def setDocument (document)
+		
+		# Cocoa Bindings makes many things easier. Unfortunately, one of the
+		# things it makes easier is creation of reference counting cycles. In
+		# Mac OS 10.4 and later NSWindowController has a feature that keeps
+		# bindings to File's Owner, when File's Owner is a window controller,
+		# from retaining the window controller in a way that would prevent its
+		# deallocation. We're setting up bindings programmatically in
+		# -windowDidLoad though, so that feature doesn't kick in, and we have to
+		# explicitly unbind to make sure this window controller and everything
+		# in the nib it owns get deallocated. We do this here instead of in an
+		# override of -[NSWindowController close] because window controllers
+		# aren't sent -close messages for every kind of window closing.
+		# Fortunately, window controllers are sent -setDocument:nil messages
+		# during window closing.
+		if !document
+			@zoomingScrollView.unbind(SKTZoomingScrollViewFactor)
+			@graphicView.unbind(SKTGraphicViewGridBindingName)
+			@graphicView.unbind(SKTGraphicViewGraphicsBindingName)
+		end
+
+		# Redo the observing of the document's canvas size when the document
+		# changes. You would think we would just be able to observe self's
+		# "document.canvasSize" in -windowDidLoad or maybe even -init, but KVO
+		# wasn't really designed with observing of self in mind so things get a
+		# little squirrelly.
+	    document.removeObserver(@canvasSizeObserver, forKeyPath: SKTDocumentCanvasSizeKey) if document && @canvasSizeObserver
+		super
+
+		@canvasSizeObserver ||= SKTObserver.new(self, :canvasSizeDidChange)
+
+		if document
+			document.addObserver(@canvasSizeObserver, forKeyPath: SKTDocumentCanvasSizeKey, 
+									options: NSKeyValueObservingOptionNew,
+									context: nil)
+		end
+	end
+
+	def windowDidLoad ()
+		super
+
+		# Set up the graphic view and its enclosing scroll view.
+		enclosingScrollView = @graphicView.enclosingScrollView
+		enclosingScrollView.hasHorizontalRuler = true
+		enclosingScrollView.hasVerticalRuler = true
+
+		# We're already observing the document's canvas size in case it changes,
+		# but we haven't been able to size the graphic view to match until now.
+		observeDocumentCanvasSize(document.canvasSize)
+
+		# Bind the graphic view's selection indexes to the controller's
+		# selection indexes. The graphics controller's content array is bound to
+		# the document's graphics in the nib, so it knows when graphics are
+		# added and remove, so it can keep the selection indexes consistent.
+		@graphicView.bind(SKTGraphicViewSelectionIndexesBindingName, toObject: @graphicsController,  
+								withKeyPath: "selectionIndexes", options: nil)
+
+		# Bind the graphic view's graphics to the document's graphics. We do
+		# this instead of binding to the graphics controller because
+		# NSArrayController is not KVC-compliant enough for "arrangedObjects" to
+		# work properly when the graphic view sends its bound-to object a
+		# -mutableArrayValueForKeyPath: message. The binding to self's
+		# "document.graphics" is 1) easy and 2) appropriate for a window
+		# controller that may someday be able to show one of several documents
+		# in its window. If we instead bound the graphic view to [self document]
+		# then we would have to redo the binding in -setDocument:.
+		@graphicView.bind (SKTGraphicViewGraphicsBindingName, toObject: self, 
+								withKeyPath: "document.#{SKTDocumentGraphicsKey}", options: nil)
+
+		# Bind the graphic view's grid to this window controller's grid.
+		@graphicView.bind(SKTGraphicViewGridBindingName, toObject: self, withKeyPath: "grid",  options: nil)
+
+		# Bind the zooming scroll view's factor to this window's controller's
+		# zoom factor.
+		zoomingScrollView.bind(SKTZoomingScrollViewFactor, toObject: self, withKeyPath: "zoomFactor", options: nil)
+
+		# Start observing the tool palette.
+		selectedToolDidChange(nil)
+		NSNotificationCenter.defaultCenter.addObserver(self, selector: 'selectedToolDidChange:', 
+						name: SKTSelectedToolDidChangeNotification, object: SKTToolPaletteController.sharedToolPaletteController)
+	end
+
+
+		# *** Actions ***
+
+ 	# Conformance to the NSObject(NSMenuValidation) informal protocol.
+	def validateMenuItem (menuItem)
+		# Which menu item?
+		action = menuItem.action
+		if action == :'newDocumentWindow:'
+			# Give the menu item that creates new sibling windows for this
+			# document a reasonably descriptive title. It's important to use the
+			# document's "display name" in places like this; it takes things like
+			# file name extension hiding into account. We could do a better job
+			# with the punctuation!
+			menuItem.title = NSLocalizedStringFromTable("New window for '#{document.displayName}'", "MenuItems", "Formatter string for the new document window menu item. Argument is a the display name of the document.")
+			enabled = true
+		elsif action == :'toggleGridConstraining:' || action == :'toggleGridShowing:'
+			# The Snap to Grid and Show Grid menu items are toggles.
+			menuItemIsOn = action == :'toggleGridConstraining:' ? @grid.isConstraining : @grid.isAlwaysShown
+			menuItem.state = menuItemIsOn ? NSOnState : NSOffState
+			# The grid can be in an unusable state, in which case the menu items that control it are disabled.
+			@grid.isUsable
+		else
+			super
+		end
+	end
+
+	def newDocumentWindow (sender)
+		# Do the same thing that a typical override of -[NSDocument
+		# makeWindowControllers] would do, but then also show the window. This is
+		# here instead of in SKTDocument, though it would work there too, with one
+		# small alteration, because it's really view-layer code.
+		windowController = SKTWindowController.alloc.init
+		document.addWindowController(windowController)
+		windowController.showWindow(self)
+	end
+
+	def toggleGridConstraining (sender)
+		@grid.setConstraining(!@grid.isConstraining)
+	end
+
+	def toggleGridShowing (sender)
+		@grid.setAlwaysShown(!@grid.isAlwaysShown)
+	end
+end
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+This class is KVC and KVO compliant for this key:
+
+"graphicsController" (an NSArrayController; read-only) - The controller that manages the selection for the graphic view in the controlled window.
+
+"grid" (an SKTGrid; read-only) - An instance of SKTGrid.
+
+"zoomFactor" (a floating point NSNumber; read-write) - The zoom factor for the graphic view, following the meaning established by SKTZoomingScrollView's bindable "factor" property.
+
+In Sketch:
+
+Each SKTGraphicView's graphics and selection indexes properties are bound to the arranged objects and selection indexes properties of the containing SKTWindowController's graphics controller.
+
+Each SKTGraphicView's grid property is bound to the grid property of the SKTWindowController that contains it.
+
+Each SKTZoomingScrollView's factor property is bound to the zoom factor property of the SKTWindowController that contains it.
+
+Various properties of the controls of the graphics inspector are bound to properties of the selection of the graphics controller of the main window's SKTWindowController.
+
+Various properties of the controls of the grid inspector are bound to properties of the grid of the main window's SKTWindowController.
+
+Grids and zoom factors are owned by window controllers instead of the views that use them; in the future we may want to make the same grid and zoom factor apply to multiple views, or make the grid parameters and zoom factor into stored per-document preferences.
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/SKTZoomingScrollView.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/SKTZoomingScrollView.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/SKTZoomingScrollView.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,168 @@
+# The name of the binding supported by this class, in addition to the ones
+# whose support is inherited from NSView.
+SKTZoomingScrollViewFactor = "factor"
+
+# Default labels and values for the menu items that will be in the popup
+# button that we build.
+SKTZoomingScrollViewFactors = [0.1, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 4.0, 8.0, 16.0]
+
+# /* We're going to be passing SKTZoomingScrollViewLabels elements into NSLocalizedStringFromTable, but genstrings won't understand that. List the menu item labels in a way it will understand.
+# NSLocalizedStringFromTable(@"10%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"25%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"50%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"75%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"100%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"125%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"150%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"200%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"400%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"800%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# NSLocalizedStringFromTable(@"1600%", @"SKTZoomingScrollView", @"A level of zooming in a view.")
+# */
+# 
+
+class SKTZoomingScrollView < NSScrollView
+	attr_accessor	:factor
+	
+	def validateFactorPopUpButton ()
+		# Ignore redundant invocations.
+		if !@factorPopUpButton
+
+			# Create the popup button and configure its appearance. The initial size doesn't matter.
+			@factorPopUpButton = NSPopUpButton.alloc.initWithFrame(NSZeroRect, pullsDown: false)
+			factorPopUpButtonCell = @factorPopUpButton.cell
+			factorPopUpButtonCell.setArrowPosition(NSPopUpArrowAtBottom)
+			factorPopUpButtonCell.setBezelStyle(NSShadowlessSquareBezelStyle)
+			@factorPopUpButton.setFont(NSFont.systemFontOfSize(NSFont.smallSystemFontSize))
+
+			# Populate it and size it to fit the just-added menu item cells.
+			# Derive the labels from the zoom factors and don't bother trying to translate 10%, for example
+			SKTZoomingScrollViewFactors.each_with_index do |factor, i|
+				@factorPopUpButton.addItemWithTitle("#{(factor * 100).to_i}%")
+			   	@factorPopUpButton.itemAtIndex(i).setRepresentedObject(factor)
+			end
+
+			@factorPopUpButton.sizeToFit
+
+			# Make it appear
+			addSubview(@factorPopUpButton)
+		end
+	end
+
+	# *** Bindings ***
+	def setFactor (factor)
+		# The default implementation of key-value binding is informing this object
+		# that the value to which our "factor" property is bound has changed.
+		# Record the value, and apply the zoom factor by fooling with the bounds
+		# of the clip view that every scroll view has. (We leave its frame alone.)
+		@factor = factor;
+		clipView = documentView.superview
+		clipViewFrameSize = clipView.frame.size
+		clipView.setBoundsSize(NSMakeSize((clipViewFrameSize.width / factor), (clipViewFrameSize.height / factor)))
+	end
+
+	# An override of the NSObject(NSKeyValueBindingCreation) method.
+	def bind (bindingName, toObject: observableObject, withKeyPath: observableKeyPath, options: options)
+		# For the one binding that this class recognizes, automatically bind the zoom factor popup button's value to the same object...
+		if bindingName == SKTZoomingScrollViewFactor
+			validateFactorPopUpButton
+			@factorPopUpButton.bind(NSSelectedObjectBinding, toObject: observableObject, withKeyPath: observableKeyPath, options: options)
+		end
+
+		# ...but still use NSObject's default implementation, which will send
+		# _this_ object -setFactor: messages (via key-value coding) whenever the
+		# bound-to value changes, for whatever reason, including the user changing
+		# it with the zoom factor popup button. Also, NSView supports a few simple
+		# bindings of its own, and there's no reason to get in the way of those.
+		super
+	end
+
+	# An override of the NSObject(NSKeyValueBindingCreation) method.
+	def unbind (bindingName)
+		# Undo what we did in our override of -bind:toObject:withKeyPath:options:.
+		super
+		@factorPopUpButton.unbind(NSSelectedObjectBinding) if bindingName == SKTZoomingScrollViewFactor
+	end
+
+
+	# *** View Customization ***
+	# An override of the NSScrollView method.
+	def tile ()
+		# This class lives to put a popup button next to a horizontal scroll bar.
+		raise "SKTZoomingScrollView doesn't support use without a horizontal scroll bar." if !hasHorizontalScroller
+
+		# Do NSScrollView's regular tiling, and find out where it left the horizontal scroller.
+		super
+		horizontalScrollerFrame = horizontalScroller.frame
+
+		# Place the zoom factor popup button to the left of where the horizontal
+		# scroller will go, creating it first if necessary, and leaving its width
+		# alone.
+		validateFactorPopUpButton
+		factorPopUpButtonFrame = @factorPopUpButton.frame
+		factorPopUpButtonFrame.origin.x = horizontalScrollerFrame.origin.x
+		factorPopUpButtonFrame.origin.y = horizontalScrollerFrame.origin.y
+		factorPopUpButtonFrame.size.height = horizontalScrollerFrame.size.height
+		@factorPopUpButton.frame = factorPopUpButtonFrame
+
+		# Adjust the scroller's frame to make room for the zoom factor popup button next to it.
+		horizontalScrollerFrame.origin.x += factorPopUpButtonFrame.size.width
+		horizontalScrollerFrame.size.width -= factorPopUpButtonFrame.size.width
+		horizontalScroller.frame = horizontalScrollerFrame
+	end
+end
+
+
+=begin
+
+Derived from Apple's sample code for Sketch and converted to MacRuby by Dave Baldwin.
+
+Additional comments from corresponding header file:
+
+The name of the binding supported by this class, in addition to the ones whose support is inherited from NSScrollView.
+extern NSString *SKTZoomingScrollViewFactor;
+
+Every instance of this class creates a popup button with zoom factors in it and places it next to the horizontal scroll bar.
+    NSPopUpButton *_factorPopUpButton;
+
+The current zoom factor. This instance variable isn't actually read by any SKTZoomingScrollView code and wouldn't be necessary if it weren't for an oddity in the default implementation of key-value binding (KVB): -[NSObject(NSKeyValueBindingCreation) bind:toObject:withKeyPath:options:] sends the receiver a -valueForKeyPath: message, even though the returned value is typically not interesting. With this here key-value coding (KVC) direct instance variable access makes -valueForKeyPath: happy.
+    CGFloat _factor;
+
+
+---------------------------------------------------------------------------------------------
+Apple's original notice:
+
+/*
+IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
+consideration of your agreement to the following terms, and your use, installation,
+modification or redistribution of this Apple software constitutes acceptance of these
+terms.  If you do not agree with these terms, please do not use, install, modify or
+redistribute this Apple software.
+
+In consideration of your agreement to abide by the following terms, and subject to these
+terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in
+this original Apple software (the "Apple Software"), to use, reproduce, modify and
+redistribute the Apple Software, with or without modifications, in source and/or binary
+forms; provided that if you redistribute the Apple Software in its entirety and without
+modifications, you must retain this notice and the following text and disclaimers in all
+such redistributions of the Apple Software.  Neither the name, trademarks, service marks
+or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
+the Apple Software without specific prior written permission from Apple. Except as expressly
+stated in this notice, no other rights or licenses, express or implied, are granted by Apple
+herein, including but not limited to any patent rights that may be infringed by your
+derivative works or by other works in which the Apple Software may be incorporated.
+
+The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
+USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
+REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
+WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
+OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+=end
\ No newline at end of file

Added: MacRuby/trunk/sample-macruby/Sketch/Sketch.scriptSuite
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/Sketch.scriptSuite	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/Sketch.scriptSuite	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,120 @@
+// Sketch.scriptSuite
+// Sketch Example
+//
+
+{
+    "Name" = "Sketch";
+    "AppleEventCode" = "sktc";
+    
+    "Classes" = {
+        "NSApplication" = {
+            "Superclass" = "NSCoreSuite.NSApplication";
+            "ToManyRelationships" = {
+                "orderedDocuments" = {
+                    "Type" = "SKTDocument";
+                    "AppleEventCode" = "docu";
+                };
+            };
+            "AppleEventCode" = "capp";
+        };
+        "SKTGraphic" = {
+            "Superclass" = "NSCoreSuite.AbstractObject";
+            "AppleEventCode" = "grph";
+            "Attributes" = {
+                "xPosition" = {
+                    "Type" = "NSNumber";
+                    "AppleEventCode" = "xpos";
+                };
+                "yPosition" = {
+                    "Type" = "NSNumber";
+                    "AppleEventCode" = "ypos";
+                };
+                "width" = {
+                    "Type" = "NSNumber";
+                    "AppleEventCode" = "widt";
+                };
+                "height" = {
+                    "Type" = "NSNumber";
+                    "AppleEventCode" = "heig";
+                };
+                "scriptingStrokeColor" = {
+                    "Type" = "NSColor";
+                    "AppleEventCode" = "sclr";
+                };
+                "scriptingFillColor" = {
+                    "Type" = "NSColor";
+                    "AppleEventCode" = "fclr";
+                };
+		"scriptingStrokeWidth" = {
+                    "Type" = "NSNumber";
+                    "AppleEventCode" = "slwd";
+		};
+            };
+	};
+        "SKTRectangle" = {
+            "Superclass" = "SKTGraphic";
+            "AppleEventCode" = "d2rc";
+	};
+        "SKTCircle" = {
+            "Superclass" = "SKTGraphic";
+            "AppleEventCode" = "d2cr";
+	};
+        "SKTLine" = {
+            "Superclass" = "SKTGraphic";
+            "AppleEventCode" = "d2ln";
+	};
+        "SKTText" = {
+            "Superclass" = "SKTGraphic";
+            "AppleEventCode" = "d2ta";
+            "ToOneRelationships" = {
+                "scriptingContents" = {
+                    "Type" = "NSTextStorage";
+                    "AppleEventCode" = "tact";
+                };
+            };
+	};
+        "SKTImage" = {
+            "Superclass" = "SKTGraphic";
+            "AppleEventCode" = "d2im";
+            "Attributes" = {
+                "filePath" = {
+                    "Type" = "NSString";
+                    "AppleEventCode" = "imgf";
+                };
+            };
+	};
+        "SKTDocument" = {
+            "Superclass" = "NSCoreSuite.NSDocument";
+            "AppleEventCode" = "docu";
+            "ToManyRelationships" = {
+                "graphics" = {
+                    "Type" = "SKTGraphic";
+                    "AppleEventCode" = "grph";
+                };
+                "rectangles" = {
+                    "Type" = "SKTRectangle";
+                    "AppleEventCode" = "d2rc";
+                };
+                "circles" = {
+                    "Type" = "SKTCircle";
+                    "AppleEventCode" = "d2cr";
+                };
+                "lines" = {
+                    "Type" = "SKTLine";
+                    "AppleEventCode" = "d2ln";
+                };
+                "textAreas" = {
+                    "Type" = "SKTText";
+                    "AppleEventCode" = "d2ta";
+                };
+                "images" = {
+                    "Type" = "SKTImage";
+                    "AppleEventCode" = "d2im";
+                };
+            };
+	};
+    };
+    "Synonyms" = {
+        "tact" = "NSTextSuite.NSTextStorage";
+    };
+}

Added: MacRuby/trunk/sample-macruby/Sketch/Sketch.sdef
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/Sketch.sdef	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/Sketch.sdef	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
+
+<dictionary title="Sketch Terminology">
+
+	<suite name="Standard Suite" code="????" description="Common classes and commands for all applications.">
+
+		<command name="open" code="aevtodoc" description="Open a document.">
+			<direct-parameter description="The file(s) to be opened.">
+				<type type="file" list="yes"/>
+			</direct-parameter>
+		</command>
+
+		<enumeration name="save options" code="savo">
+			<enumerator name="yes" code="yes " description="Save the file."/>
+			<enumerator name="no" code="no  " description="Do not save the file."/>
+			<enumerator name="ask" code="ask " description="Ask the user whether or not to save the file."/>
+		</enumeration>
+
+		<command name="close" code="coreclos" description="Close a document.">
+			<cocoa class="NSCloseCommand"/>
+			<direct-parameter type="specifier" description="the document(s) or window(s) to close."/>
+			<parameter name="saving" code="savo" type="save options" optional="yes" description="Should changes be saved before closing?">
+				<cocoa key="SaveOptions"/>
+			</parameter>
+			<parameter name="saving in" code="kfil" type="file" optional="yes" description="The file in which to save the document, if so.">
+				<cocoa key="File"/>
+			</parameter>
+		</command>
+
+		<command name="save" code="coresave" description="Save a document.">
+			<direct-parameter type="specifier" description="The document(s) or window(s) to save."/>
+			<parameter name="in" code="kfil" type="file" optional="yes" description="The file in which to save the document.">
+				<cocoa key="File"/>
+			</parameter>
+			<parameter name="as" code="fltp" type="saveable file format" optional="yes" description="The file format to use.">
+				<cocoa key="FileType"/>
+			</parameter>
+		</command>
+
+		<enumeration name="printing error handling" code="enum">
+			<enumerator name="standard" code="lwst" description="Standard PostScript error handling">
+				<cocoa boolean-value="NO"/>
+			</enumerator>
+			<enumerator name="detailed" code="lwdt" description="print a detailed report of PostScript errors">
+				<cocoa boolean-value="YES"/>
+			</enumerator>
+		</enumeration>
+
+		<record-type name="print settings" code="pset">
+			<property name="copies" code="lwcp" type="integer" description="the number of copies of a document to be printed">
+				<cocoa key="NSCopies"/>
+			</property>
+			<property name="collating" code="lwcl" type="boolean" description="Should printed copies be collated?">
+				<cocoa key="NSMustCollate"/>
+			</property>
+			<property name="starting page" code="lwfp" type="integer" description="the first page of the document to be printed">
+				<cocoa key="NSFirstPage"/>
+			</property>
+			<property name="ending page" code="lwlp" type="integer" description="the last page of the document to be printed">
+				<cocoa key="NSLastPage"/>
+			</property>
+			<property name="pages across" code="lwla" type="integer" description="number of logical pages laid across a physical page">
+				<cocoa key="NSPagesAcross"/>
+			</property>
+			<property name="pages down" code="lwld" type="integer" description="number of logical pages laid out down a physical page">
+				<cocoa key="NSPagesDown"/>
+			</property>
+			<property name="requested print time" code="lwqt" type="date" description="the time at which the desktop printer should print the document">
+				<cocoa key="NSPrintTime"/>
+			</property>
+			<property name="error handling" code="lweh" type="printing error handling" description="how errors are handled">
+				<cocoa key="NSDetailedErrorReporting"/>
+			</property>
+			<property name="fax number" code="faxn" type="text" description="for fax number">
+				<cocoa key="NSFaxNumber"/>
+			</property>
+			<property name="target printer" code="trpr" type="text" description="for target printer">
+				<cocoa key="NSPrinterName"/>
+			</property>
+		</record-type>
+
+		<command name="print" code="aevtpdoc" description="Print a document.">
+			<direct-parameter description="The file(s), document(s), or window(s) to be printed.">
+				<type type="file" list="yes"/>
+				<type type="specifier"/>
+			</direct-parameter>
+			<parameter name="with properties" code="prdt" type="print settings" optional="yes" description="The print settings to use.">
+				<cocoa key="PrintSettings"/>
+			</parameter>
+			<parameter name="print dialog" code="pdlg" type="boolean" optional="yes" description="Should the application show the print dialog?">
+				<cocoa key="ShowPrintDialog"/>
+			</parameter>
+		</command>
+
+		<command name="quit" code="aevtquit" description="Quit the application.">
+			<cocoa class="NSQuitCommand"/>
+			<parameter name="saving" code="savo" type="save options" optional="yes" description="Should changes be saved before quitting?">
+				<cocoa key="SaveOptions"/>
+			</parameter>
+		</command>
+
+		<command name="count" code="corecnte" description="Return the number of elements of a particular class within an object.">
+			<cocoa class="NSCountCommand"/>
+			<direct-parameter type="specifier" description="The objects to be counted."/>
+			<parameter name="each" code="kocl" type="type" optional="yes" description="The class of objects to be counted." hidden="yes">
+				<cocoa key="ObjectClass"/>
+			</parameter>
+			<result type="integer" description="The count."/>
+		</command>
+
+		<command name="delete" code="coredelo" description="Delete an object.">
+			<cocoa class="NSDeleteCommand"/>
+			<direct-parameter type="specifier" description="The object(s) to delete."/>
+		</command>
+
+		<command name="duplicate" code="coreclon" description="Copy an object.">
+			<cocoa class="NSCloneCommand"/>
+			<direct-parameter type="specifier" description="The object(s) to copy."/>
+			<parameter name="to" code="insh" type="location specifier" description="The location for the new copy or copies." optional="yes">
+				<cocoa key="ToLocation"/>
+			</parameter>
+			<parameter name="with properties" code="prdt" type="record" description="Properties to set in the new copy or copies right away." optional="yes">
+				<cocoa key="WithProperties"/>
+			</parameter>
+		</command>
+
+		<command name="exists" code="coredoex" description="Verify that an object exists.">
+			<cocoa class="NSExistsCommand"/>
+			<direct-parameter type="any" description="The object(s) to check."/>
+			<result type="boolean" description="Did the object(s) exist?"/>
+		</command>
+
+		<command name="make" code="corecrel" description="Create a new object.">
+			<cocoa class="NSCreateCommand"/>
+			<parameter name="new" code="kocl" type="type" description="The class of the new object.">
+				<cocoa key="ObjectClass"/>
+			</parameter>
+			<parameter name="at" code="insh" type="location specifier" optional="yes" description="The location at which to insert the object.">
+				<cocoa key="Location"/>
+			</parameter>
+			<parameter name="with data" code="data" type="any" optional="yes" description="The initial contents of the object.">
+				<cocoa key="ObjectData"/>
+			</parameter>
+			<parameter name="with properties" code="prdt" type="record" optional="yes" description="The initial values for properties of the object.">
+				<cocoa key="KeyDictionary"/>
+			</parameter>
+			<result type="specifier" description="The new object."/>
+		</command>
+
+		<command name="move" code="coremove" description="Move an object to a new location.">
+			<cocoa class="NSMoveCommand"/>
+			<direct-parameter type="specifier" description="The object(s) to move."/>
+			<parameter name="to" code="insh" type="location specifier" description="The new location for the object(s).">
+				<cocoa key="ToLocation"/>
+			</parameter>
+		</command>
+
+		<class name="application" code="capp" description="The application's top-level scripting object.">
+			<cocoa class="NSApplication"/>
+			<property name="name" code="pnam" type="text" access="r" description="The name of the application."/>
+			<property name="frontmost" code="pisf" type="boolean" access="r" description="Is this the active application?">
+				<cocoa key="isActive"/>
+			</property>
+			<property name="version" code="vers" type="text" access="r" description="The version number of the application."/>
+			<element type="document">
+				<cocoa key="orderedDocuments"/>
+			</element>
+			<element type="window" access="r">
+				<cocoa key="orderedWindows"/>
+			</element>
+			<responds-to name="open">
+				<cocoa method="handleOpenScriptCommand:"/>
+			</responds-to>
+			<responds-to name="print">
+				<cocoa method="handlePrintScriptCommand:"/>
+			</responds-to>
+			<responds-to name="quit">
+				<cocoa method="handleQuitScriptCommand:"/>
+			</responds-to>
+		</class>
+
+		<class name="window" code="cwin" description="A window.">
+			<cocoa class="NSWindow"/>
+			<property name="name" code="pnam" type="text" access="r" description="The title of the window.">
+				<cocoa key="title"/>
+			</property>
+			<property name="id" code="ID  " type="integer" access="r" description="The unique identifier of the window.">
+				<cocoa key="uniqueID"/>
+			</property>
+			<property name="index" code="pidx" type="integer" description="The index of the window, ordered front to back.">
+				<cocoa key="orderedIndex"/>
+			</property>
+			<property name="bounds" code="pbnd" type="rectangle" description="The bounding rectangle of the window.">
+				<cocoa key="boundsAsQDRect"/>
+			</property>
+			<property name="closeable" code="hclb" type="boolean" access="r" description="Does the window have a close button?">
+				<cocoa key="hasCloseBox"/>
+			</property>
+			<property name="miniaturizable" code="ismn" type="boolean" access="r" description="Does the window have a minimize button?">
+				<cocoa key="isMiniaturizable"/>
+			</property>
+			<property name="miniaturized" code="pmnd" type="boolean" description="Is the window minimized right now?">
+				<cocoa key="isMiniaturized"/>
+			</property>
+			<property name="resizable" code="prsz" type="boolean" access="r" description="Can the window be resized?">
+				<cocoa key="isResizable"/>
+			</property>
+			<property name="visible" code="pvis" type="boolean" description="Is the window visible right now?">
+				<cocoa key="isVisible"/>
+			</property>
+			<property name="zoomable" code="iszm" type="boolean" access="r" description="Does the window have a zoom button?">
+				<cocoa key="isZoomable"/>
+			</property>
+			<property name="zoomed" code="pzum" type="boolean" description="Is the window zoomed right now?">
+				<cocoa key="isZoomed"/>
+			</property>
+
+			<property name="document" code="docu" type="document" access="r" description="The document whose contents are displayed in the window."/>
+
+			<responds-to name="close">
+				<cocoa method="handleCloseScriptCommand:"/>
+			</responds-to>
+			<responds-to name="print">
+				<cocoa method="handlePrintScriptCommand:"/>
+			</responds-to>
+			<responds-to name="save">
+				<cocoa method="handleSaveScriptCommand:"/>
+			</responds-to>
+		</class>
+
+	</suite>
+
+	<suite name="Text Suite" code="????" description="Common text classes for all applications.">
+	
+		<value-type name="RGB color" code="cRGB">
+			<cocoa class="NSColor"/>
+		</value-type>
+
+		<class name="rich text" plural="rich text" code="ctxt" description="Rich (styled) text.">
+			<cocoa class="NSTextStorage"/>
+			<type type="text"/>
+			<property name="color" code="colr" type="RGB color" description="The color of the text's first character.">
+				<cocoa key="foregroundColor"/>
+			</property>
+			<property name="font" code="font" type="text" description="The name of the font of the text's first character.">
+				<cocoa key="fontName"/>
+			</property>
+			<property name="size" code="ptsz" type="integer" description="The size in points of the text's first character.">
+				<cocoa key="fontSize"/>
+			</property>
+			<element type="character"/>
+			<element type="paragraph"/>
+			<element type="word"/>
+			<element type="attribute run"/>
+			<element type="attachment"/>
+		</class>
+
+		<class name="character" code="cha " description="One of some text's characters.">
+			<cocoa class="NSTextStorage"/>
+			<type type="text"/>
+			<property name="color" code="colr" type="RGB color" description="Its color.">
+				<cocoa key="foregroundColor"/>
+			</property>
+			<property name="font" code="font" type="text" description="The name of its font.">
+				<cocoa key="fontName"/>
+			</property>
+			<property name="size" code="ptsz" type="integer" description="Its size, in points.">
+				<cocoa key="fontSize"/>
+			</property>
+			<element type="character"/>
+			<element type="paragraph"/>
+			<element type="word"/>
+			<element type="attribute run"/>
+			<element type="attachment"/>
+		</class>
+
+		<class name="paragraph" code="cpar" description="One of some text's paragraphs.">
+			<cocoa class="NSTextStorage"/>
+			<type type="text"/>
+			<property name="color" code="colr" type="RGB color" description="The color of the paragraph's first character.">
+				<cocoa key="foregroundColor"/>
+			</property>
+			<property name="font" code="font" type="text" description="The name of the font of the paragraph's first character.">
+				<cocoa key="fontName"/>
+			</property>
+			<property name="size" code="ptsz" type="integer" description="The size in points of the paragraph's first character.">
+				<cocoa key="fontSize"/>
+			</property>
+			<element type="character"/>
+			<element type="paragraph"/>
+			<element type="word"/>
+			<element type="attribute run"/>
+			<element type="attachment"/>
+		</class>
+
+		<class name="word" code="cwor" description="One of some text's words.">
+			<cocoa class="NSTextStorage"/>
+			<type type="text"/>
+			<property name="color" code="colr" type="RGB color" description="The color of the word's first character.">
+				<cocoa key="foregroundColor"/>
+			</property>
+			<property name="font" code="font" type="text" description="The name of the font of the word's first character.">
+				<cocoa key="fontName"/>
+			</property>
+			<property name="size" code="ptsz" type="integer" description="The size in points of the word's first character.">
+				<cocoa key="fontSize"/>
+			</property>
+			<element type="character"/>
+			<element type="paragraph"/>
+			<element type="word"/>
+			<element type="attribute run"/>
+			<element type="attachment"/>
+		</class>
+
+		<class name="attribute run" code="catr" description="A chunk of text that all has the same attributes.">
+			<cocoa class="NSTextStorage"/>
+			<type type="text"/>
+			<property name="color" code="colr" type="RGB color" description="Its color.">
+				<cocoa key="foregroundColor"/>
+			</property>
+			<property name="font" code="font" type="text" description="The name of its font.">
+				<cocoa key="fontName"/>
+			</property>
+			<property name="size" code="ptsz" type="integer" description="Its size, in points.">
+				<cocoa key="fontSize"/>
+			</property>
+			<element type="character"/>
+			<element type="paragraph"/>
+			<element type="word"/>
+			<element type="attribute run"/>
+			<element type="attachment"/>
+		</class>
+
+		<class name="attachment" code="atts" inherits="rich text" description="A file embedded in text. This is just for use when embedding a file using the make command.">
+			<cocoa class="NSAttachmentTextStorage"/>
+			<property name="file name" code="atfn" type="text" description="The path to the embedded file.">
+				<cocoa key="filename"/>
+			</property>
+		</class>
+
+	</suite>
+
+	<suite name="Sketch Suite" code="sktc" description="Classes just for the Sketch application.">
+
+		<enumeration name="saveable file format" code="savf">
+			<enumerator name="Sketch" code="sktc" description="The native Sketch 2 file format">
+				<cocoa string-value="com.apple.sketch2"/>
+			</enumerator>
+			<enumerator name="PDF" code="PDF " description="Portable Document Format">
+				<cocoa string-value="com.adobe.pdf"/>
+			</enumerator>
+			<enumerator name="TIFF" code="TIFF" description="Tagged Image File Format">
+				<cocoa string-value="public.tiff"/>
+			</enumerator>
+		</enumeration>
+
+		<class name="document" code="docu" description="A Sketch document.">
+			<cocoa class="SKTDocument"/>
+			<property name="name" code="pnam" type="text" access="r" description="Its name.">
+				<cocoa key="displayName"/>
+			</property>
+			<property name="modified" code="imod" type="boolean" access="r" description="Has it been modified since the last save?">
+				<cocoa key="isDocumentEdited"/>
+			</property>
+			<property name="file" code="file" type="file" access="r" description="Its location on disk, if it has one.">
+				<cocoa key="fileURL"/>
+			</property>
+
+			<!-- This is just here for compatibility with old scripts. New scripts should use the more user-friendly file property. -->
+			<property name="path" code="ppth" type="text" access="r" description="Its location on disk, if it has one, as a POSIX path string." hidden="yes">
+				<cocoa key="fileName"/>
+			</property>
+
+			<element type="graphic">
+				<cocoa insert-at-beginning="yes"/>
+			</element>
+			<element type="box">
+				<cocoa insert-at-beginning="yes" key="rectangles"/>
+			</element>
+			<element type="circle">
+				<cocoa insert-at-beginning="yes"/>
+			</element>
+			<element type="image">
+				<cocoa insert-at-beginning="yes"/>
+			</element>
+			<element type="line">
+				<cocoa insert-at-beginning="yes"/>
+			</element>
+			<element type="text area">
+				<cocoa insert-at-beginning="yes"/>
+			</element>
+			<responds-to name="close">
+				<cocoa method="handleCloseScriptCommand:"/>
+			</responds-to>
+			<responds-to name="print">
+				<cocoa method="handlePrintScriptCommand:"/>
+			</responds-to>
+			<responds-to name="save">
+				<cocoa method="handleSaveScriptCommand:"/>
+			</responds-to>
+		</class>
+
+		<class name="graphic" code="grph" description="An object in a Sketch document. There are subclasses for each kind of graphic.">
+			<cocoa class="SKTGraphic"/>
+			<property name="x position" code="xpos" type="real"/>
+			<property name="y position" code="ypos" type="real"/>
+			<property name="width" code="widt" type="real"/>
+			<property name="height" code="heig" type="real"/>
+			<property name="fill color" code="fclr">
+				<type type="RGB color"/>
+				<type type="missing value"/>
+				<cocoa key="scriptingFillColor"/>
+			</property>
+			<property name="stroke color" code="sclr">
+				<type type="RGB color"/>
+				<type type="missing value"/>
+				<cocoa key="scriptingStrokeColor"/>
+			</property>
+			<property name="stroke thickness" code="slwd">
+				<type type="real"/>
+				<type type="missing value"/>
+				<cocoa key="scriptingStrokeWidth"/>
+			</property>
+		</class>
+
+		<class name="box" plural="boxes" code="d2rc" inherits="graphic" description="A rectangular graphic.">
+			<cocoa class="SKTRectangle"/>
+		</class>
+
+		<class name="circle" code="d2cr" inherits="graphic" description="an ellipsoidal graphic, actually.">
+			<cocoa class="SKTCircle"/>
+		</class>
+
+		<class name="image" code="d2im" inherits="graphic" description="A placed image.">
+			<cocoa class="SKTImage"/>
+			<property name="imagefile" code="imgf" type="text" access="w" description="The path to the file containing the image. This is just for use when creating a new placed image using the make command.">
+				<cocoa key="filePath"/>
+			</property>
+		</class>
+
+		<class name="line" code="d2ln" inherits="graphic" description="A line graphic.">
+			<cocoa class="SKTLine"/>
+		</class>
+
+		<class name="text area" code="d2ta" inherits="graphic" description="A text graphic.">
+			<cocoa class="SKTText"/>
+			<contents name="text contents" code="tact" type="rich text" description="Its contents.">
+				<cocoa key="scriptingContents"/>
+			</contents>
+		</class>
+
+	</suite>
+
+</dictionary>

Added: MacRuby/trunk/sample-macruby/Sketch/TextGraphic.tiff
===================================================================
(Binary files differ)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/TextGraphic.tiff
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: MacRuby/trunk/sample-macruby/Sketch/main.m
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/main.m	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/main.m	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,14 @@
+//
+//  main.m
+//  Ruby Sketch
+//
+//  Created by David Baldwin on 23/04/2010.
+//  Copyright __MyCompanyName__ 2010. All rights reserved.
+//
+
+#import <MacRuby/MacRuby.h>
+
+int main(int argc, char *argv[])
+{
+	return macruby_main("rb_main.rb", argc, argv);
+}


Property changes on: MacRuby/trunk/sample-macruby/Sketch/main.m
___________________________________________________________________
Added: svn:executable
   + *

Added: MacRuby/trunk/sample-macruby/Sketch/rb_main.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Sketch/rb_main.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/Sketch/rb_main.rb	2010-08-02 21:04:50 UTC (rev 4397)
@@ -0,0 +1,23 @@
+#
+# rb_main.rb
+# Ruby Sketch
+#
+# Created by David Baldwin on 23/04/2010.
+# Copyright __MyCompanyName__ 2010. All rights reserved.
+#
+
+# Loading the Cocoa framework. If you need to load more frameworks, you can
+# do that here too.
+framework 'Cocoa'
+
+# Loading all the Ruby project files.
+main = File.basename(__FILE__, File.extname(__FILE__))
+dir_path = NSBundle.mainBundle.resourcePath.fileSystemRepresentation
+Dir.glob(File.join(dir_path, '*.{rb,rbo}')).map { |x| File.basename(x, File.extname(x)) }.uniq.each do |path|
+  if path != main
+   require(path)
+  end
+end
+
+# Starting the Cocoa main loop.
+NSApplicationMain(0, nil)


Property changes on: MacRuby/trunk/sample-macruby/Sketch/rb_main.rb
___________________________________________________________________
Added: svn:executable
   + *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100802/c1dbac18/attachment-0001.html>


More information about the macruby-changes mailing list