[dasher] Get MacOS Dasher building and working in 64-bit (#171)



commit 05fca24de5d75a5d31af8186311cc74c3c906c4c
Author: sebwills <sw sebwills com>
Date:   Thu Apr 9 21:07:18 2020 +0100

    Get MacOS Dasher building and working in 64-bit (#171)
    
    * Update to 64-bit macOS build. Changes sponsored and supplied by Jorge Tendeiro
    
    * Add Debug xcode scheme
    
    * Fix crash when opening Preferences for 2nd time by using strong reference to panel. Remove unused 
instance variable.
    
    * Fix incorrect permissions when first creating user's training file
    
    * Fix string scoping bug which prevented user's training text being read on startup. Removed unused 
method.
    
    * Revert DasherIntefaceBase::m_FileUtils to private and set it in the expected way through the constructor
    
    * Whitespace
    
    * Replace tab indents with spaces
    
    * Whitespace to match original, so there are no diffs outside MacOSX folder
    
    * Set ApplicationCategory metadata to the most appropriate of the limited options available
    
    * Update README, add INSTALL.macOS
    
    * Update gitignore

 .gitignore                                         |    3 +
 INSTALL.macOS                                      |   20 +
 README.md                                          |   28 +-
 Src/MacOSX/AppWatcher.h                            |    4 +-
 Src/MacOSX/AppWatcher.m                            |   15 +-
 Src/MacOSX/Base.lproj/MainMenu.nib/designable.nib  |  597 +++
 .../Base.lproj/MainMenu.nib/keyedobjects.nib       |  Bin 0 -> 36258 bytes
 .../Base.lproj/Preferences.nib/designable.nib      |  843 ++++
 .../Base.lproj/Preferences.nib/keyedobjects.nib    |  Bin 0 -> 50913 bytes
 Src/MacOSX/COSXDasherControl.h                     |    6 +-
 Src/MacOSX/COSXDasherControl.mm                    |   43 +-
 .../project.xcworkspace/contents.xcworkspacedata   |    4 +
 Src/MacOSX/Dasher.xcodeproj/project.pbxproj        |  120 +-
 .../xcshareddata/xcschemes/Dasher.xcscheme         |   78 +
 .../xcshareddata/xcschemes/Debug.xcscheme          |   78 +
 Src/MacOSX/DasherViewOpenGL.mm                     |    2 +-
 .../English.lproj/MainMenu.nib/designable.nib      | 3067 ------------
 .../English.lproj/MainMenu.nib/keyedobjects.nib    |  Bin 27930 -> 0 bytes
 .../English.lproj/Preferences.nib/designable.nib   | 5288 --------------------
 .../English.lproj/Preferences.nib/keyedobjects.nib |  Bin 52212 -> 0 bytes
 Src/MacOSX/Info-Dasher.plist                       |    6 +-
 Src/MacOSX/LowLevelKeyboardHandling.c              |    2 +-
 Src/MacOSX/PreferencesController.h                 |    9 +-
 Src/MacOSX/PreferencesController.mm                |    8 +-
 .../{English.lproj => en.lproj}/InfoPlist.strings  |  Bin 534 -> 526 bytes
 25 files changed, 1798 insertions(+), 8423 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 9fd0e026..b37ba259 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,3 +60,6 @@ Src/DasherCore/Alphabet/.dirstamp
 
 .gradle/
 .idea
+
+# Visual Studio Code
+.ionide/
diff --git a/INSTALL.macOS b/INSTALL.macOS
new file mode 100644
index 00000000..eb029b35
--- /dev/null
+++ b/INSTALL.macOS
@@ -0,0 +1,20 @@
+Building Dasher for macOS
+=========================
+
+1. Open Src/MacOSX/Dasher.xcodeproj in Xcode
+2. Select 'Dasher' (release build) or 'Debug' (debug build) scheme
+3. Click the build/run button
+
+Building from the command line
+==============================\
+
+Ensure you have xcode command line tools installed.
+
+In a shell, execute:
+
+cd Src/MacOSX
+xcodebuild -scheme Dasher build
+
+Or, to output the built app to a custom location:
+
+xcodebuild -scheme Dasher SYMROOT="/tmp/dest" build
\ No newline at end of file
diff --git a/README.md b/README.md
index 255f6ef9..8dd1f3a4 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-Dasher Version 4.11
+Dasher Version 5
 -------------------
 ## Build Status:
 
@@ -11,7 +11,7 @@ Linux:
 Java:
 [![CircleCI Build 
Status](https://circleci.com/gh/dasher-project/dasher.svg?style=shield)](https://circleci.com/gh/dasher-project/dasher)
 
-## Dasher Version 4.11
+## Description
 
 Dasher is a zooming predictive text entry system, designed for situations
 where keyboard input is impractical (for instance, accessibility or PDAs). It
@@ -48,10 +48,11 @@ MS Windows CE:
 
 ## Platform Specific Notes
 
-* Solaris: Dasher has been tested on Solaris 10. You will need to
-  upgrade to gnome-doc-utils 0.3.2 to install the documentation, which
-  in turn will require libxml 2.6.12 and libxslt 1.1.8. These packages
-  are not required to run dasher once it is built.
+### Solaris
+
+Dasher has been tested on Solaris 10. You will need to upgrade to gnome-doc-utils 0.3.2 to install the 
documentation, which
+in turn will require libxml 2.6.12 and libxslt 1.1.8. These packages
+are not required to run dasher once it is built.
 
 There have been some issues with the gthread-2.0 pkgconfig file
 including compiler flags which are not understood by the compiler. You
@@ -60,13 +61,14 @@ removed.
 
 GNU make (gmake) must be used if building gnome documentation.
 
-* Darwin / OS-X: The native UI in the macos directory is badly out of
-  date and will almost definitely require considerable effort to
-  build. We do not currently have the resources to maintain this port,
-  but if you are interested in contributing then let us know
-  (dasher inf phy cam ac uk). The GTK2 front end should build on Darwin
-  with minimal changes, and with a recent enough version of GTK will not
-  require the X11 server.
+### macOS
+
+The native UI in the MacOSX directory builds in Xcode 11.3
+and has been tested on macOS 10.14.
+
+The GTK2 front end should
+build on Darwin with minimal changes, and with a recent enough version of GTK will not
+require the X11 server.
 
 ## Installation Instructions
 
diff --git a/Src/MacOSX/AppWatcher.h b/Src/MacOSX/AppWatcher.h
index 8e509501..70baaacd 100755
--- a/Src/MacOSX/AppWatcher.h
+++ b/Src/MacOSX/AppWatcher.h
@@ -20,8 +20,8 @@
 - (id)init;
 - (void)awakeFromNib;
 - (void)fillApps;
-- (unsigned int)indexOfAppWithApplicationName:(NSString *)aName;
-- (unsigned int)indexOfAppWithInfo:(NSDictionary *)anAppInfo;
+- (unsigned long)indexOfAppWithApplicationName:(NSString *)aName;
+- (unsigned long)indexOfAppWithInfo:(NSDictionary *)anAppInfo;
 - (void)seeAppLaunch:(NSNotification *)note;
 - (NSString *)applicationName;
 - (BOOL)addAppInfo:(NSDictionary *)anAppInfo;
diff --git a/Src/MacOSX/AppWatcher.m b/Src/MacOSX/AppWatcher.m
index d1d98c92..90aad6dc 100755
--- a/Src/MacOSX/AppWatcher.m
+++ b/Src/MacOSX/AppWatcher.m
@@ -45,9 +45,9 @@
   }
 }
 
-- (unsigned int)indexOfAppWithApplicationName:(NSString *)aName {
-  unsigned int len = [[self apps] count];
-  unsigned int i;
+- (unsigned long)indexOfAppWithApplicationName:(NSString *)aName {
+  unsigned long len = [[self apps] count];
+  unsigned long i;
   for (i = 0; i < len; i++) {
     NSDictionary *d = [[self apps] objectAtIndex:i];
     if ([[d objectForKey:@"NSApplicationName"] isEqualToString:aName]) {
@@ -62,9 +62,9 @@
   return ([[appInfo1 objectForKey:@"NSApplicationProcessSerialNumberHigh"] isEqual: [appInfo2 
objectForKey:@"NSApplicationProcessSerialNumberHigh"]] && [[appInfo1 
objectForKey:@"NSApplicationProcessSerialNumberLow"] isEqual: [appInfo2 
objectForKey:@"NSApplicationProcessSerialNumberLow"]]);
 }
 
-- (unsigned int)indexOfAppWithInfo:(NSDictionary *)anAppInfo {
-  unsigned int len = [[self apps] count];
-  unsigned int i;
+- (unsigned long)indexOfAppWithInfo:(NSDictionary *)anAppInfo {
+  unsigned long len = [[self apps] count];
+  unsigned long i;
   for (i = 0; i < len; i++) {
     NSDictionary *d = [[self apps] objectAtIndex:i];
     if ([self psnOfAppInfo:d isEqualToPsnOfAppInfo:anAppInfo]) {
@@ -83,6 +83,7 @@
 }
 
 - (NSString *)applicationName {
+       
   return [[NSProcessInfo processInfo] processName];
 }
 
@@ -100,7 +101,7 @@
 
 - (void)seeAppDie:(NSNotification *)note {
   NSDictionary *d = [note userInfo];
-  unsigned int i = [self indexOfAppWithInfo:d];
+  unsigned long i = [self indexOfAppWithInfo:d];
   if (i != NSNotFound) {
     [[self apps] removeObjectAtIndex:i];
     [appsController rearrangeObjects];
diff --git a/Src/MacOSX/Base.lproj/MainMenu.nib/designable.nib 
b/Src/MacOSX/Base.lproj/MainMenu.nib/designable.nib
new file mode 100644
index 00000000..8f9bdd0e
--- /dev/null
+++ b/Src/MacOSX/Base.lproj/MainMenu.nib/designable.nib
@@ -0,0 +1,597 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" 
targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
+            <connections>
+                <outlet property="delegate" destination="226" id="227"/>
+                <outlet property="dockMenu" destination="526" id="530"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Dasher" autorecalculatesKeyViewLoop="NO" frameAutosaveName="DasherMain" 
animationBehavior="default" id="21" userLabel="Window">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" 
resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" 
bottomStrut="YES"/>
+            <rect key="contentRect" x="503" y="367" width="398" height="357"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
+            <value key="minSize" type="size" width="112" height="50"/>
+            <view key="contentView" id="2">
+                <rect key="frame" x="0.0" y="0.0" width="398" height="357"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <popUpButton verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="493">
+                        <rect key="frame" x="17" y="320" width="135" height="26"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <popUpButtonCell key="cell" type="push" title="Item1" bezelStyle="rounded" 
alignment="left" lineBreakMode="clipping" state="on" borderStyle="borderAndBezel" inset="2" 
arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="497" id="534">
+                            <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="menu"/>
+                            <menu key="menu" title="OtherViews" id="496">
+                                <items>
+                                    <menuItem title="Item1" state="on" id="497"/>
+                                    <menuItem title="Item2" id="495"/>
+                                    <menuItem title="Item3" id="494"/>
+                                </items>
+                            </menu>
+                        </popUpButtonCell>
+                        <connections>
+                            <binding destination="503" name="content" keyPath="arrangedObjects" id="515">
+                                <dictionary key="options">
+                                    <integer key="NSInsertsNullPlaceholder" value="1"/>
+                                </dictionary>
+                            </binding>
+                            <binding destination="503" name="contentValues" 
keyPath="arrangedObjects.NSApplicationName" previousBinding="515" id="518">
+                                <dictionary key="options">
+                                    <integer key="NSInsertsNullPlaceholder" value="1"/>
+                                    <string key="NSNullPlaceholder">NONE</string>
+                                </dictionary>
+                            </binding>
+                            <binding destination="226" name="hidden" keyPath="directMode" id="559">
+                                <dictionary key="options">
+                                    <string key="NSValueTransformerName">NSNegateBoolean</string>
+                                </dictionary>
+                            </binding>
+                            <binding destination="500" name="selectedObject" 
keyPath="selection.targetAppInfo" previousBinding="518" id="519"/>
+                        </connections>
+                    </popUpButton>
+                    <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="521" 
customClass="DasherViewOpenGL">
+                        <rect key="frame" x="0.0" y="0.0" width="398" height="304"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <connections>
+                            <outlet property="dasherApp" destination="226" id="522"/>
+                        </connections>
+                    </customView>
+                    <scrollView fixedFrame="YES" horizontalLineScroll="10" horizontalPageScroll="10" 
verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" 
translatesAutoresizingMaskIntoConstraints="NO" id="578">
+                        <rect key="frame" x="0.0" y="304" width="399" height="54"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" 
flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <clipView key="contentView" ambiguous="YES" id="EDU-XW-Ea0">
+                            <rect key="frame" x="1" y="1" width="382" height="52"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textView ambiguous="YES" importsGraphics="NO" richText="NO" 
verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" usesRuler="YES" 
allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="581" 
customClass="DasherTextView">
+                                    <rect key="frame" x="0.0" y="0.0" width="382" height="52"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                    <color key="textColor" name="textColor" catalog="System" 
colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" 
colorSpace="catalog"/>
+                                    <size key="minSize" width="382" height="52"/>
+                                    <size key="maxSize" width="463" height="10000000"/>
+                                    <color key="insertionPointColor" name="textColor" catalog="System" 
colorSpace="catalog"/>
+                                    <connections>
+                                        <outlet property="dasherApp" destination="226" id="979"/>
+                                    </connections>
+                                </textView>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        </clipView>
+                        <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" 
doubleValue="1" horizontal="YES" id="580">
+                            <rect key="frame" x="-100" y="-100" width="87" height="18"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" 
horizontal="NO" id="579">
+                            <rect key="frame" x="383" y="1" width="15" height="52"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <connections>
+                            <binding destination="226" name="hidden" keyPath="directMode" id="582"/>
+                        </connections>
+                    </scrollView>
+                </subviews>
+            </view>
+            <connections>
+                <binding destination="226" name="displayPatternTitle1" keyPath="filename" id="1018">
+                    <dictionary key="options">
+                        <string key="NSDisplayPattern">%{title1}@ - Dasher</string>
+                        <string key="NSValueTransformerName">NilToUntitled</string>
+                    </dictionary>
+                </binding>
+                <binding destination="226" name="documentEdited" keyPath="modified" id="1020"/>
+                <outlet property="delegate" destination="226" id="492"/>
+            </connections>
+            <point key="canvasLocation" x="140" y="148"/>
+        </window>
+        <menu title="MainMenu" systemMenu="main" id="29" userLabel="MainMenu">
+            <items>
+                <menuItem title="Dasher" id="56">
+                    <menu key="submenu" title="Dasher" systemMenu="apple" id="57">
+                        <items>
+                            <menuItem title="About Dasher" id="58">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="196">
+                                <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+                            </menuItem>
+                            <menuItem title="Preferences..." keyEquivalent="," id="129">
+                                <connections>
+                                    <action selector="showPreferences:" target="226" id="390"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Direct Mode" keyEquivalent="d" id="536">
+                                <connections>
+                                    <binding destination="226" name="value" keyPath="directMode" id="566">
+                                        <dictionary key="options">
+                                            <integer key="NSAllowsEditingMultipleValuesSelection" value="0"/>
+                                            <integer key="NSConditionallySetsEnabled" value="0"/>
+                                            <integer key="NSValidatesImmediately" value="1"/>
+                                        </dictionary>
+                                    </binding>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Game Mode" keyEquivalent="g" id="564">
+                                <connections>
+                                    <binding destination="226" name="value" keyPath="gameModeOn" id="565">
+                                        <dictionary key="options">
+                                            <integer key="NSAllowsEditingMultipleValuesSelection" value="0"/>
+                                            <integer key="NSConditionallySetsEnabled" value="0"/>
+                                            <integer key="NSValidatesImmediately" value="1"/>
+                                        </dictionary>
+                                    </binding>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Import Training Text..." id="763">
+                                <connections>
+                                    <action selector="importTrainingText:" target="226" id="764"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="143">
+                                <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+                            </menuItem>
+                            <menuItem title="Services" id="131">
+                                <menu key="submenu" title="Services" systemMenu="services" id="130"/>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="144">
+                                <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+                            </menuItem>
+                            <menuItem title="Hide Dasher" keyEquivalent="h" id="134">
+                                <connections>
+                                    <action selector="hide:" target="-2" id="152"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Hide Others" keyEquivalent="h" id="145">
+                                <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="hideOtherApplications:" target="-2" id="146"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Show All" id="150">
+                                <connections>
+                                    <action selector="unhideAllApplications:" target="-2" id="153"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="149">
+                                <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+                            </menuItem>
+                            <menuItem title="Quit Dasher" keyEquivalent="q" id="136">
+                                <connections>
+                                    <action selector="terminate:" target="-2" id="139"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="File" id="980">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="File" id="981">
+                        <items>
+                            <menuItem title="New" keyEquivalent="n" id="982">
+                                <connections>
+                                    <action selector="newDoc:" target="226" id="1006"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Open…" keyEquivalent="o" id="983">
+                                <connections>
+                                    <action selector="openDoc:" target="226" id="1007"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="985"/>
+                            <menuItem title="Save" keyEquivalent="s" id="987">
+                                <connections>
+                                    <action selector="saveDoc:" target="226" id="1008"/>
+                                    <binding destination="226" name="enabled" keyPath="filename" id="1012">
+                                        <dictionary key="options">
+                                            <string key="NSValueTransformerName">NSIsNotNil</string>
+                                        </dictionary>
+                                    </binding>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Save As…" keyEquivalent="S" id="988">
+                                <connections>
+                                    <action selector="saveDocAs:" target="226" id="1009"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Revert to Saved" id="989">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="revertToSaved:" target="226" id="1010"/>
+                                    <binding destination="226" name="enabled" keyPath="filename" id="1024">
+                                        <dictionary key="options">
+                                            <string key="NSValueTransformerName">NSIsNotNil</string>
+                                        </dictionary>
+                                    </binding>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                    <connections>
+                        <binding destination="226" name="enabled" keyPath="directMode" id="1028">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSNegateBoolean</string>
+                            </dictionary>
+                        </binding>
+                    </connections>
+                </menuItem>
+                <menuItem title="Edit" id="903">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Edit" id="904">
+                        <items>
+                            <menuItem title="Cut" keyEquivalent="x" id="908">
+                                <connections>
+                                    <action selector="cut:" target="-1" id="951"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Copy" keyEquivalent="c" id="909">
+                                <connections>
+                                    <action selector="copy:" target="-1" id="950"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Paste" keyEquivalent="v" id="910">
+                                <connections>
+                                    <action selector="paste:" target="-1" id="956"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Select All" keyEquivalent="a" id="913">
+                                <connections>
+                                    <action selector="selectAll:" target="-1" id="969"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="View" id="767">
+                    <menu key="submenu" title="View" id="768">
+                        <items>
+                            <menuItem title="Font" id="814">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Font" systemMenu="font" id="815">
+                                    <items>
+                                        <menuItem title="Show Fonts" keyEquivalent="t" id="816">
+                                            <connections>
+                                                <action selector="orderFrontFontPanel:" target="438" 
id="850"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Bold" tag="2" keyEquivalent="b" id="817">
+                                            <connections>
+                                                <action selector="addFontTrait:" target="438" id="851"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Italic" tag="1" keyEquivalent="i" id="818">
+                                            <connections>
+                                                <action selector="addFontTrait:" target="438" id="848"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Underline" keyEquivalent="u" id="819">
+                                            <connections>
+                                                <action selector="underline:" target="-1" id="855"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" id="820"/>
+                                        <menuItem title="Bigger" tag="3" keyEquivalent="+" id="821">
+                                            <connections>
+                                                <action selector="modifyFont:" target="438" id="847"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Smaller" tag="4" keyEquivalent="-" id="822">
+                                            <connections>
+                                                <action selector="modifyFont:" target="438" id="849"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" id="823"/>
+                                        <menuItem title="Kern" id="824">
+                                            <modifierMask key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Kern" id="842">
+                                                <items>
+                                                    <menuItem title="Use Default" id="843">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="useStandardKerning:" 
target="-1" id="864"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use None" id="844">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="turnOffKerning:" target="-1" 
id="867"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Tighten" id="845">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="tightenKerning:" target="-1" 
id="861"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Loosen" id="846">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="loosenKerning:" target="-1" 
id="852"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem title="Ligature" id="825">
+                                            <modifierMask key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Ligature" id="838">
+                                                <items>
+                                                    <menuItem title="Use Default" id="839">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="useStandardLigatures:" 
target="-1" id="865"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use None" id="840">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="turnOffLigatures:" target="-1" 
id="866"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use All" id="841">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="useAllLigatures:" target="-1" 
id="862"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem title="Baseline" id="826">
+                                            <modifierMask key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Baseline" id="832">
+                                                <items>
+                                                    <menuItem title="Use Default" id="833">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="unscript:" target="-1" 
id="863"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Superscript" id="834">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="superscript:" target="-1" 
id="858"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Subscript" id="835">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="subscript:" target="-1" 
id="860"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Raise" id="836">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="raiseBaseline:" target="-1" 
id="854"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Lower" id="837">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action selector="lowerBaseline:" target="-1" 
id="857"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" id="827"/>
+                                        <menuItem title="Show Colors" keyEquivalent="C" id="828">
+                                            <connections>
+                                                <action selector="orderFrontColorPanel:" target="-1" 
id="853"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" id="829"/>
+                                        <menuItem title="Copy Style" keyEquivalent="c" id="830">
+                                            <modifierMask key="keyEquivalentModifierMask" option="YES" 
command="YES"/>
+                                            <connections>
+                                                <action selector="copyFont:" target="-1" id="856"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Paste Style" keyEquivalent="v" id="831">
+                                            <modifierMask key="keyEquivalentModifierMask" option="YES" 
command="YES"/>
+                                            <connections>
+                                                <action selector="pasteFont:" target="-1" id="859"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Text" id="868">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Text" id="869">
+                                    <items>
+                                        <menuItem title="Align Left" keyEquivalent="{" id="870">
+                                            <connections>
+                                                <action selector="alignLeft:" target="-1" id="896"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Center" keyEquivalent="|" id="871">
+                                            <connections>
+                                                <action selector="alignCenter:" target="-1" id="890"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Justify" id="872">
+                                            <modifierMask key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action selector="alignJustified:" target="-1" id="891"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Align Right" keyEquivalent="}" id="873">
+                                            <connections>
+                                                <action selector="alignRight:" target="-1" id="894"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" id="874"/>
+                                        <menuItem title="Writing Direction" id="875">
+                                            <modifierMask key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Writing Direction" id="880">
+                                                <items>
+                                                    <menuItem title="Paragraph" enabled="NO" id="881">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                    </menuItem>
+                                                    <menuItem id="882">
+                                                        <string key="title">   Default</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionNatural:" target="-1" id="897"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="883">
+                                                        <string key="title">   Left to Right</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="898"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="884">
+                                                        <string key="title">   Right to Left</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="899"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem isSeparatorItem="YES" id="885"/>
+                                                    <menuItem title="Selection" enabled="NO" id="886">
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                    </menuItem>
+                                                    <menuItem id="887">
+                                                        <string key="title">   Default</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionNatural:" target="-1" id="900"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="888">
+                                                        <string key="title">   Left to Right</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionLeftToRight:" target="-1" id="901"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="889">
+                                                        <string key="title">   Right to Left</string>
+                                                        <modifierMask key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionRightToLeft:" target="-1" id="902"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Help" id="103">
+                    <menu key="submenu" title="Help" id="106">
+                        <items>
+                            <menuItem title="Dasher Help" keyEquivalent="?" id="111">
+                                <connections>
+                                    <action selector="showHelp:" target="-1" id="122"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+            </items>
+            <point key="canvasLocation" x="140" y="417"/>
+        </menu>
+        <customObject id="226" userLabel="DasherApp" customClass="DasherApp">
+            <connections>
+                <outlet property="appWatcher" destination="499" id="514"/>
+                <outlet property="dasherPanelUI" destination="21" id="480"/>
+                <outlet property="textView" destination="581" id="583"/>
+            </connections>
+        </customObject>
+        <customObject id="438" userLabel="Font Manager" customClass="NSFontManager"/>
+        <customObject id="499" userLabel="AppWatcher" customClass="AppWatcher">
+            <connections>
+                <outlet property="appsController" destination="503" id="504"/>
+            </connections>
+        </customObject>
+        <objectController id="500" userLabel="Object Controller">
+            <declaredKeys>
+                <string>apps.items</string>
+                <string>targetAppInfo</string>
+                <string>lockTargetApp</string>
+                <string>apps</string>
+            </declaredKeys>
+            <connections>
+                <outlet property="content" destination="499" id="502"/>
+            </connections>
+        </objectController>
+        <arrayController clearsFilterPredicateOnInsertion="NO" id="503" userLabel="Array Controller">
+            <declaredKeys>
+                <string>NSApplicationName</string>
+            </declaredKeys>
+            <connections>
+                <binding destination="500" name="contentArray" keyPath="selection.apps" id="520"/>
+            </connections>
+        </arrayController>
+        <menu id="526" userLabel="Menu">
+            <items>
+                <menuItem title="Preferences..." id="527">
+                    <connections>
+                        <action selector="showPreferences:" target="226" id="531"/>
+                    </connections>
+                </menuItem>
+                <menuItem title="Direct Mode" keyEquivalent="d" id="567">
+                    <connections>
+                        <binding destination="226" name="value" keyPath="directMode" id="568">
+                            <dictionary key="options">
+                                <integer key="NSAllowsEditingMultipleValuesSelection" value="0"/>
+                                <integer key="NSConditionallySetsEnabled" value="0"/>
+                                <integer key="NSValidatesImmediately" value="1"/>
+                            </dictionary>
+                        </binding>
+                    </connections>
+                </menuItem>
+                <menuItem title="Game Mode" keyEquivalent="g" id="546">
+                    <connections>
+                        <binding destination="226" name="value" keyPath="gameModeOn" id="554">
+                            <dictionary key="options">
+                                <integer key="NSAllowsEditingMultipleValuesSelection" value="0"/>
+                                <integer key="NSConditionallySetsEnabled" value="0"/>
+                                <integer key="NSValidatesImmediately" value="1"/>
+                            </dictionary>
+                        </binding>
+                    </connections>
+                </menuItem>
+            </items>
+        </menu>
+        <userDefaultsController representsSharedInstance="YES" id="540"/>
+    </objects>
+</document>
diff --git a/Src/MacOSX/Base.lproj/MainMenu.nib/keyedobjects.nib 
b/Src/MacOSX/Base.lproj/MainMenu.nib/keyedobjects.nib
new file mode 100644
index 00000000..f4b01515
Binary files /dev/null and b/Src/MacOSX/Base.lproj/MainMenu.nib/keyedobjects.nib differ
diff --git a/Src/MacOSX/Base.lproj/Preferences.nib/designable.nib 
b/Src/MacOSX/Base.lproj/Preferences.nib/designable.nib
new file mode 100644
index 00000000..827ac316
--- /dev/null
+++ b/Src/MacOSX/Base.lproj/Preferences.nib/designable.nib
@@ -0,0 +1,843 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" 
targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="PreferencesController">
+            <connections>
+                <outlet property="panel" destination="14" id="83"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Dasher Preferences" allowsToolTipsWhenApplicationIsInactive="NO" 
autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" 
frameAutosaveName="DasherPreferences" animationBehavior="default" id="14" userLabel="Panel" 
customClass="NSPanel">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" utility="YES" 
nonactivatingPanel="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" 
bottomStrut="YES"/>
+            <rect key="contentRect" x="454" y="51" width="631" height="446"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
+            <value key="minSize" type="size" width="213" height="113"/>
+            <view key="contentView" id="51">
+                <rect key="frame" x="0.0" y="0.0" width="631" height="446"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <tabView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="25">
+                        <rect key="frame" x="13" y="16" width="585" height="424"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <font key="font" metaFont="system"/>
+                        <tabViewItems>
+                            <tabViewItem label="Language" identifier="" id="50">
+                                <view key="view" id="36">
+                                    <rect key="frame" x="10" y="33" width="565" height="378"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                    <subviews>
+                                        <box fixedFrame="YES" title="Prediction" 
translatesAutoresizingMaskIntoConstraints="NO" id="631">
+                                            <rect key="frame" x="258" y="162" width="305" height="216"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="iE7-eE-2OP">
+                                                <rect key="frame" x="3" y="3" width="299" height="198"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="621">
+                                                        <rect key="frame" x="14" y="140" width="253" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Language 
model adapts as you write" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" 
id="710">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="677" name="value" 
keyPath="values.LMAdaptive" id="684"/>
+                                                        </connections>
+                                                    </button>
+                                                    <slider verticalHuggingPriority="750" fixedFrame="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="622">
+                                                        <rect key="frame" x="14" y="17" width="273" 
height="21"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <sliderCell key="cell" continuous="YES" 
alignment="left" maxValue="1000" tickMarkPosition="above" sliderType="linear" id="711">
+                                                            <font key="font" metaFont="user"/>
+                                                        </sliderCell>
+                                                        <connections>
+                                                            <binding destination="677" name="value" 
keyPath="values.UniformTimes1000" id="685"/>
+                                                        </connections>
+                                                    </slider>
+                                                    <textField verticalHuggingPriority="750" 
horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="125" 
translatesAutoresizingMaskIntoConstraints="NO" id="633">
+                                                        <rect key="frame" x="13" y="94" width="129" 
height="14"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" title="Smoothing" id="712">
+                                                            <font key="font" metaFont="smallSystemBold"/>
+                                                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField verticalHuggingPriority="750" 
horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="125" 
translatesAutoresizingMaskIntoConstraints="NO" id="634">
+                                                        <rect key="frame" x="13" y="164" width="129" 
height="14"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" title="Adaptation" id="713">
+                                                            <font key="font" metaFont="smallSystemBold"/>
+                                                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField verticalHuggingPriority="750" 
horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="271" 
translatesAutoresizingMaskIntoConstraints="NO" id="635">
+                                                        <rect key="frame" x="13" y="44" width="275" 
height="42"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" id="714">
+                                                            <font key="font" metaFont="menu" size="11"/>
+                                                            <string key="title">Use this control to adjust 
the relative sizes of the letter boxes.  Note that selecting high values will slow your writing 
speed.</string>
+                                                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <scrollView fixedFrame="YES" autohidesScrollers="YES" 
horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" 
usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="416">
+                                            <rect key="frame" x="20" y="11" width="233" height="367"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <clipView key="contentView" ambiguous="YES" id="rRd-7x-sDd">
+                                                <rect key="frame" x="1" y="0.0" width="231" height="366"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <tableView verticalHuggingPriority="750" ambiguous="YES" 
allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" 
multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" headerView="731" id="417">
+                                                        <rect key="frame" x="0.0" y="0.0" width="231" 
height="341"/>
+                                                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" heightSizable="YES"/>
+                                                        <size key="intercellSpacing" width="3" height="2"/>
+                                                        <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="gridColor" name="gridColor" 
catalog="System" colorSpace="catalog"/>
+                                                        <tableColumns>
+                                                            <tableColumn width="228" 
minWidth="107.11279296875" maxWidth="1000" id="419">
+                                                                <tableHeaderCell key="headerCell" 
lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Alphabet Selection">
+                                                                    <font key="font" metaFont="message" 
size="11"/>
+                                                                    <color key="textColor" 
name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="backgroundColor" 
white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
+                                                                </tableHeaderCell>
+                                                                <textFieldCell key="dataCell" 
lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="725">
+                                                                    <font key="font" metaFont="system"/>
+                                                                    <color key="textColor" 
name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                                <tableColumnResizingMask key="resizingMask" 
resizeWithTable="YES" userResizable="YES"/>
+                                                                <connections>
+                                                                    <binding destination="414" name="value" 
keyPath="arrangedObjects.self" id="430"/>
+                                                                </connections>
+                                                            </tableColumn>
+                                                        </tableColumns>
+                                                    </tableView>
+                                                </subviews>
+                                            </clipView>
+                                            <scroller key="horizontalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="YES" id="730">
+                                                <rect key="frame" x="1" y="-30" width="268" height="15"/>
+                                                <autoresizingMask key="autoresizingMask"/>
+                                            </scroller>
+                                            <scroller key="verticalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="NO" id="729">
+                                                <rect key="frame" x="-30" y="17" width="15" height="330"/>
+                                                <autoresizingMask key="autoresizingMask"/>
+                                            </scroller>
+                                            <tableHeaderView key="headerView" id="731">
+                                                <rect key="frame" x="0.0" y="0.0" width="231" height="25"/>
+                                                <autoresizingMask key="autoresizingMask"/>
+                                            </tableHeaderView>
+                                        </scrollView>
+                                        <box fixedFrame="YES" title="Direction" 
translatesAutoresizingMaskIntoConstraints="NO" id="638">
+                                            <rect key="frame" x="258" y="7" width="305" height="140"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="nVF-Ka-xIb">
+                                                <rect key="frame" x="3" y="3" width="299" height="122"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <matrix verticalHuggingPriority="750" fixedFrame="YES" 
allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="615">
+                                                        <rect key="frame" x="12" y="12" width="136" 
height="98"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                                                        <size key="cellSize" width="136" height="18"/>
+                                                        <size key="intercellSpacing" width="4" height="2"/>
+                                                        <buttonCell key="prototype" type="radio" 
title="Radio" imagePosition="leading" alignment="left" inset="2" id="721">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <cells>
+                                                            <column>
+                                                                <buttonCell type="radio" title="Alphabet 
Default" imagePosition="leading" alignment="left" state="on" tag="-2" inset="2" id="620">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Left to 
Right" imagePosition="leading" alignment="left" inset="2" id="616">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Right to 
Left" imagePosition="leading" alignment="left" tag="1" inset="2" id="618">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Top to 
Bottom" imagePosition="leading" alignment="left" tag="3" inset="2" id="619">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Bottom to 
Top" imagePosition="leading" alignment="left" tag="2" inset="2" id="617">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                            </column>
+                                                        </cells>
+                                                        <connections>
+                                                            <binding destination="677" name="selectedTag" 
keyPath="values.ScreenOrientation" id="686"/>
+                                                        </connections>
+                                                    </matrix>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                    </subviews>
+                                </view>
+                            </tabViewItem>
+                            <tabViewItem label="Control" identifier="" id="32">
+                                <view key="view" id="35">
+                                    <rect key="frame" x="10" y="33" width="565" height="378"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                    <subviews>
+                                        <box fixedFrame="YES" title="Speed" 
translatesAutoresizingMaskIntoConstraints="NO" id="624">
+                                            <rect key="frame" x="258" y="291" width="305" height="87"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="iM7-CL-JEn">
+                                                <rect key="frame" x="3" y="3" width="299" height="69"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <slider verticalHuggingPriority="750" fixedFrame="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="63">
+                                                        <rect key="frame" x="10" y="34" width="258" 
height="25"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <sliderCell key="cell" continuous="YES" 
alignment="left" maxValue="800" doubleValue="500" tickMarkPosition="below" numberOfTickMarks="9" 
sliderType="linear" id="696">
+                                                            <font key="font" metaFont="user"/>
+                                                        </sliderCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.MaxBitRateTimes100.humanReadable" id="389"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.MaxBitRateTimes100" id="678"/>
+                                                        </connections>
+                                                    </slider>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="501">
+                                                        <rect key="frame" x="10" y="10" width="190" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Adapt 
speed automatically" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="697">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.AutoSpeedControl.humanReadable" id="598"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.AutoSpeedControl" id="679"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="Starting and Stopping" 
translatesAutoresizingMaskIntoConstraints="NO" id="654">
+                                            <rect key="frame" x="258" y="138" width="305" height="149"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="WOR-pb-RZ7">
+                                                <rect key="frame" x="3" y="3" width="299" height="131"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="448">
+                                                        <rect key="frame" x="12" y="62" width="188" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Start 
with mouse position:" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="698">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.StartOnMousePosition.humanReadable" id="479"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.StartWithMousePosition" id="874"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="452">
+                                                        <rect key="frame" x="12" y="82" width="145" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Start on 
space bar" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="699">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.StartOnSpace.humanReadable" id="494"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.StartOnSpace" id="681"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="454">
+                                                        <rect key="frame" x="12" y="102" width="189" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Start on 
left mouse button" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="700">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.StartOnLeft.humanReadable" id="486"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.StartOnLeft" id="680"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="507">
+                                                        <rect key="frame" x="12" y="12" width="173" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Pause 
outside of canvas" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="701">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.PauseOutside.humanReadable" id="581"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.PauseOutside" id="683"/>
+                                                        </connections>
+                                                    </button>
+                                                    <popUpButton verticalHuggingPriority="750" 
fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="626">
+                                                        <rect key="frame" x="30" y="32" width="171" 
height="26"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <popUpButtonCell key="cell" type="push" 
title="Centre Circle" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" 
borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="630" 
id="702">
+                                                            <behavior key="behavior" lightByBackground="YES" 
lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                            <menu key="menu" title="OtherViews" id="627">
+                                                                <items>
+                                                                    <menuItem title="Centre Circle" 
state="on" id="630"/>
+                                                                    <menuItem title="Two Box" id="629"/>
+                                                                </items>
+                                                            </menu>
+                                                        </popUpButtonCell>
+                                                        <connections>
+                                                            <binding destination="677" name="selectedIndex" 
keyPath="values.StartHandlerIdx" id="876"/>
+                                                        </connections>
+                                                    </popUpButton>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="Control Style" 
translatesAutoresizingMaskIntoConstraints="NO" id="656">
+                                            <rect key="frame" x="8" y="7" width="248" height="371"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="Aac-GU-HAO">
+                                                <rect key="frame" x="3" y="3" width="242" height="353"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <scrollView fixedFrame="YES" autohidesScrollers="YES" 
horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" 
usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="658">
+                                                        <rect key="frame" x="12" y="51" width="220" 
height="291"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <clipView key="contentView" ambiguous="YES" 
id="wTj-Le-jMi">
+                                                            <rect key="frame" x="1" y="1" width="218" 
height="289"/>
+                                                            <autoresizingMask key="autoresizingMask" 
widthSizable="YES" heightSizable="YES"/>
+                                                            <subviews>
+                                                                <tableView verticalHuggingPriority="750" 
ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" 
multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" id="659">
+                                                                    <rect key="frame" x="0.0" y="0.0" 
width="218" height="289"/>
+                                                                    <autoresizingMask key="autoresizingMask" 
widthSizable="YES" heightSizable="YES"/>
+                                                                    <size key="intercellSpacing" width="3" 
height="2"/>
+                                                                    <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="gridColor" name="gridColor" 
catalog="System" colorSpace="catalog"/>
+                                                                    <tableColumns>
+                                                                        <tableColumn editable="NO" 
width="214.9482421875" minWidth="71.9482421875" maxWidth="1000" id="660">
+                                                                            <tableHeaderCell 
key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Input Filters">
+                                                                                <font key="font" 
metaFont="message" size="11"/>
+                                                                                <color key="textColor" 
name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                                                <color key="backgroundColor" 
white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
+                                                                            </tableHeaderCell>
+                                                                            <textFieldCell key="dataCell" 
lineBreakMode="truncatingTail" alignment="left" id="724">
+                                                                                <font key="font" 
metaFont="system"/>
+                                                                                <color key="textColor" 
name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                                                <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                            </textFieldCell>
+                                                                            <tableColumnResizingMask 
key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                                            <connections>
+                                                                                <binding destination="662" 
name="value" keyPath="arrangedObjects.self" id="665"/>
+                                                                            </connections>
+                                                                        </tableColumn>
+                                                                    </tableColumns>
+                                                                    <connections>
+                                                                        <binding destination="662" 
name="doubleClickArgument" keyPath="selectedObjects" id="864">
+                                                                            <dictionary key="options">
+                                                                                <integer 
key="NSConditionallySetsEnabled" value="0"/>
+                                                                                <integer 
key="NSInvokesSeparatelyWithArrayObjects" value="1"/>
+                                                                                <string 
key="NSSelectorName">inputFilterSettings:</string>
+                                                                            </dictionary>
+                                                                        </binding>
+                                                                        <binding destination="-2" 
name="doubleClickTarget" keyPath="self" previousBinding="864" id="865">
+                                                                            <dictionary key="options">
+                                                                                <integer 
key="NSConditionallySetsEnabled" value="0"/>
+                                                                                <string 
key="NSSelectorName">inputFilterSettings:</string>
+                                                                            </dictionary>
+                                                                        </binding>
+                                                                    </connections>
+                                                                </tableView>
+                                                            </subviews>
+                                                        </clipView>
+                                                        <scroller key="horizontalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="YES" id="728">
+                                                            <rect key="frame" x="1" y="-30" width="268" 
height="15"/>
+                                                            <autoresizingMask key="autoresizingMask"/>
+                                                        </scroller>
+                                                        <scroller key="verticalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="NO" id="727">
+                                                            <rect key="frame" x="-30" y="17" width="15" 
height="330"/>
+                                                            <autoresizingMask key="autoresizingMask"/>
+                                                        </scroller>
+                                                    </scrollView>
+                                                    <button verticalHuggingPriority="750" fixedFrame="YES" 
imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="661">
+                                                        <rect key="frame" x="148" y="3" width="90" 
height="32"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="push" title="Options" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="703">
+                                                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="662" name="argument" 
keyPath="selectedObjects" id="866">
+                                                                <dictionary key="options">
+                                                                    <integer 
key="NSConditionallySetsEnabled" value="0"/>
+                                                                    <integer 
key="NSInvokesSeparatelyWithArrayObjects" value="1"/>
+                                                                    <string 
key="NSSelectorName">inputFilterSettings:</string>
+                                                                </dictionary>
+                                                            </binding>
+                                                            <binding destination="-2" name="target" 
keyPath="self" previousBinding="866" id="867">
+                                                                <dictionary key="options">
+                                                                    <integer 
key="NSConditionallySetsEnabled" value="0"/>
+                                                                    <string 
key="NSSelectorName">inputFilterSettings:</string>
+                                                                </dictionary>
+                                                            </binding>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                    </subviews>
+                                </view>
+                            </tabViewItem>
+                            <tabViewItem label="Appearance" identifier="1" id="58">
+                                <view key="view" ambiguous="YES" id="30">
+                                    <rect key="frame" x="10" y="33" width="565" height="378"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                    <subviews>
+                                        <box fixedFrame="YES" title="Colour Scheme" 
translatesAutoresizingMaskIntoConstraints="NO" id="645">
+                                            <rect key="frame" x="8" y="7" width="248" height="371"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="ryp-Nj-9S6">
+                                                <rect key="frame" x="3" y="3" width="242" height="353"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <scrollView fixedFrame="YES" autohidesScrollers="YES" 
horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" 
usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="425">
+                                                        <rect key="frame" x="12" y="12" width="220" 
height="330"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <clipView key="contentView" ambiguous="YES" 
id="aGk-gT-sDe">
+                                                            <rect key="frame" x="1" y="1" width="218" 
height="328"/>
+                                                            <autoresizingMask key="autoresizingMask" 
widthSizable="YES" heightSizable="YES"/>
+                                                            <subviews>
+                                                                <tableView verticalHuggingPriority="750" 
ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" 
columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" id="426">
+                                                                    <rect key="frame" x="0.0" y="0.0" 
width="218" height="328"/>
+                                                                    <autoresizingMask key="autoresizingMask" 
widthSizable="YES" heightSizable="YES"/>
+                                                                    <size key="intercellSpacing" width="3" 
height="2"/>
+                                                                    <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="gridColor" name="gridColor" 
catalog="System" colorSpace="catalog"/>
+                                                                    <tableColumns>
+                                                                        <tableColumn width="215" 
minWidth="40" maxWidth="1000" id="427">
+                                                                            <tableHeaderCell 
key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
+                                                                                <font key="font" 
metaFont="message" size="11"/>
+                                                                                <color key="textColor" 
name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                                                <color key="backgroundColor" 
white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
+                                                                            </tableHeaderCell>
+                                                                            <textFieldCell key="dataCell" 
lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="726">
+                                                                                <font key="font" 
metaFont="system"/>
+                                                                                <color key="textColor" 
name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                                                <color key="backgroundColor" 
name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                            </textFieldCell>
+                                                                            <tableColumnResizingMask 
key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                                            <connections>
+                                                                                <binding destination="423" 
name="value" keyPath="arrangedObjects.self" id="428"/>
+                                                                            </connections>
+                                                                        </tableColumn>
+                                                                    </tableColumns>
+                                                                </tableView>
+                                                            </subviews>
+                                                        </clipView>
+                                                        <scroller key="horizontalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="YES" id="733">
+                                                            <rect key="frame" x="1" y="-30" width="234" 
height="15"/>
+                                                            <autoresizingMask key="autoresizingMask"/>
+                                                        </scroller>
+                                                        <scroller key="verticalScroller" hidden="YES" 
verticalHuggingPriority="750" horizontal="NO" id="732">
+                                                            <rect key="frame" x="-30" y="17" width="15" 
height="298"/>
+                                                            <autoresizingMask key="autoresizingMask"/>
+                                                        </scroller>
+                                                    </scrollView>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="Dasher Font" 
translatesAutoresizingMaskIntoConstraints="NO" id="647">
+                                            <rect key="frame" x="258" y="7" width="305" height="140"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="8lD-7k-2ry">
+                                                <rect key="frame" x="3" y="3" width="299" height="122"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <matrix verticalHuggingPriority="750" fixedFrame="YES" 
allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="143">
+                                                        <rect key="frame" x="12" y="12" width="145" 
height="58"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                                                        <size key="cellSize" width="145" height="18"/>
+                                                        <size key="intercellSpacing" width="4" height="2"/>
+                                                        <buttonCell key="prototype" type="radio" 
title="Radio" imagePosition="leading" alignment="left" inset="2" id="722">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <cells>
+                                                            <column>
+                                                                <buttonCell type="radio" title="Small" 
imagePosition="leading" alignment="left" state="on" tag="1" inset="2" id="146">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Large" 
imagePosition="leading" alignment="left" tag="2" inset="2" id="148">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                                <buttonCell type="radio" title="Very Large" 
imagePosition="leading" alignment="left" tag="4" inset="2" id="144">
+                                                                    <behavior key="behavior" 
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                                                    <font key="font" metaFont="system"/>
+                                                                </buttonCell>
+                                                            </column>
+                                                        </cells>
+                                                        <connections>
+                                                            <binding destination="677" name="selectedTag" 
keyPath="values.DasherFontSize" id="691"/>
+                                                        </connections>
+                                                    </matrix>
+                                                    <popUpButton verticalHuggingPriority="750" 
fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="435">
+                                                        <rect key="frame" x="11" y="85" width="277" 
height="26"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <popUpButtonCell key="cell" type="push" 
title="Item1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" 
borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="439" 
id="715">
+                                                            <behavior key="behavior" lightByBackground="YES" 
lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                            <menu key="menu" title="OtherViews" id="436">
+                                                                <items>
+                                                                    <menuItem title="Item1" state="on" 
id="439"/>
+                                                                    <menuItem title="Item2" id="438"/>
+                                                                    <menuItem title="Item3" id="437"/>
+                                                                </items>
+                                                            </menu>
+                                                        </popUpButtonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="content" 
keyPath="permittedValuesForDasherFont" id="440"/>
+                                                            <binding destination="677" name="selectedValue" 
keyPath="values.DasherFont" previousBinding="440" id="692"/>
+                                                        </connections>
+                                                    </popUpButton>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="Appearance Options" 
translatesAutoresizingMaskIntoConstraints="NO" id="650">
+                                            <rect key="frame" x="258" y="262" width="305" height="116"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="pLD-3P-xgy">
+                                                <rect key="frame" x="3" y="3" width="299" height="98"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="383">
+                                                        <rect key="frame" x="10" y="71" width="157" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Show 
mouse position" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="716">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.DrawMouse.humanReadable" id="386"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.DrawMouse" id="687"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="384">
+                                                        <rect key="frame" x="10" y="51" width="281" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Draw line 
between crosshairs and mouse" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" 
id="717">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.DrawMouseLine.humanReadable" id="394"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.DrawMouseLine" id="688"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="442">
+                                                        <rect key="frame" x="10" y="11" width="137" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Draw box 
outlines" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="718">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.OutlineBoxes.humanReadable" id="444"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.OutlineBoxes" id="690"/>
+                                                        </connections>
+                                                    </button>
+                                                    <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="649">
+                                                        <rect key="frame" x="28" y="31" width="165" 
height="18"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <buttonCell key="cell" type="check" title="Increase 
line thickness" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="719">
+                                                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <binding destination="677" name="value" 
keyPath="values.LineWidth" id="689">
+                                                                <dictionary key="options">
+                                                                    <string 
key="NSValueTransformerName">LineWidthTransformer</string>
+                                                                </dictionary>
+                                                            </binding>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="X Non-linearity" 
translatesAutoresizingMaskIntoConstraints="NO" id="812">
+                                            <rect key="frame" x="258" y="210" width="305" height="48"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="nbY-zU-bNA">
+                                                <rect key="frame" x="3" y="3" width="299" height="30"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <slider verticalHuggingPriority="750" fixedFrame="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="793">
+                                                        <rect key="frame" x="8" y="4" width="286" 
height="25"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <sliderCell key="cell" continuous="YES" state="on" 
alignment="left" maxValue="9" doubleValue="3.375" tickMarkPosition="below" numberOfTickMarks="9" 
allowsTickMarkValuesOnly="YES" sliderType="linear" id="794">
+                                                            <font key="font" metaFont="user"/>
+                                                        </sliderCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.NonLinearX.humanReadable" id="828"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.NonLinearX" id="827"/>
+                                                        </connections>
+                                                    </slider>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                        <box fixedFrame="YES" title="Node Budget" 
translatesAutoresizingMaskIntoConstraints="NO" id="829">
+                                            <rect key="frame" x="258" y="158" width="305" height="48"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <view key="contentView" id="SSc-mg-pc4">
+                                                <rect key="frame" x="3" y="3" width="299" height="30"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" 
heightSizable="YES"/>
+                                                <subviews>
+                                                    <slider verticalHuggingPriority="750" fixedFrame="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="830">
+                                                        <rect key="frame" x="8" y="4" width="286" 
height="25"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                        <sliderCell key="cell" continuous="YES" state="on" 
alignment="left" minValue="400" maxValue="10000" doubleValue="400" tickMarkPosition="below" 
numberOfTickMarks="9" sliderType="linear" id="831">
+                                                            <font key="font" metaFont="user"/>
+                                                        </sliderCell>
+                                                        <connections>
+                                                            <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.NodeBudget.humanReadable" id="835"/>
+                                                            <binding destination="677" name="value" 
keyPath="values.NodeBudget" id="834"/>
+                                                        </connections>
+                                                    </slider>
+                                                </subviews>
+                                            </view>
+                                        </box>
+                                    </subviews>
+                                </view>
+                            </tabViewItem>
+                            <tabViewItem label="Application" identifier="" id="39">
+                                <view key="view" id="42">
+                                    <rect key="frame" x="10" y="33" width="565" height="378"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                    <subviews>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="734">
+                                            <rect key="frame" x="21" y="317" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Control Mode" 
bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="735">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.ControlMode.humanReadable" id="739"/>
+                                                <binding destination="677" name="value" 
keyPath="values.ControlMode" id="738"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="740">
+                                            <rect key="frame" x="43" y="257" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Force 
&quot;Stop&quot; Node" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="741">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.ControlHasHalt.humanReadable" id="745"/>
+                                                <binding destination="677" name="value" 
keyPath="values.ControlHasHalt" id="746"/>
+                                                <binding destination="677" name="enabled" 
keyPath="values.ControlMode" id="788"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="747">
+                                            <rect key="frame" x="43" y="277" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Speech functions" 
bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="748">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.ControlHasSpeech.humanReadable" id="752"/>
+                                                <binding destination="677" name="value" 
keyPath="values.ControlHasSpeech" id="751"/>
+                                                <binding destination="677" name="enabled" 
keyPath="values.ControlMode" id="784"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="753">
+                                            <rect key="frame" x="43" y="297" width="198" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Copy-to-clipboard 
function" bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="754">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.ControlHasCopy.humanReadable" id="759"/>
+                                                <binding destination="677" name="value" 
keyPath="values.ControlHasCopy" id="758"/>
+                                                <binding destination="677" name="enabled" 
keyPath="values.ControlMode" id="792"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="760">
+                                            <rect key="frame" x="21" y="349" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Speak as you write" 
bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="761">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.SpeakWords.humanReadable" id="765"/>
+                                                <binding destination="677" name="value" 
keyPath="values.SpeakWords" id="764"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="766">
+                                            <rect key="frame" x="21" y="219" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Speak all on stop" 
bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="767">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.SpeakOnStop.humanReadable" id="771"/>
+                                                <binding destination="677" name="value" 
keyPath="values.SpeakOnStop" id="770"/>
+                                            </connections>
+                                        </button>
+                                        <button fixedFrame="YES" imageHugsTitle="YES" 
translatesAutoresizingMaskIntoConstraints="NO" id="776">
+                                            <rect key="frame" x="21" y="199" width="157" height="18"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <buttonCell key="cell" type="check" title="Copy all on stop" 
bezelStyle="regularSquare" imagePosition="leading" alignment="left" inset="2" id="777">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <binding destination="-2" name="toolTip" 
keyPath="parameterDictionary.CopyOnStop.humanReadable" id="781"/>
+                                                <binding destination="677" name="value" 
keyPath="values.CopyOnStop" id="780"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                </view>
+                            </tabViewItem>
+                        </tabViewItems>
+                    </tabView>
+                </subviews>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="125"/>
+            </connections>
+            <point key="canvasLocation" x="11" y="150"/>
+        </window>
+        <window title="Panel" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" 
releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="174" userLabel="Panel1" 
customClass="NSPanel">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" 
bottomStrut="YES"/>
+            <rect key="contentRect" x="345" y="124" width="360" height="240"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
+            <value key="minSize" type="size" width="213" height="107"/>
+            <view key="contentView" id="175">
+                <rect key="frame" x="0.0" y="0.0" width="360" height="240"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box fixedFrame="YES" title="File Encoding" 
translatesAutoresizingMaskIntoConstraints="NO" id="176">
+                        <rect key="frame" x="64" y="42" width="173" height="122"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <view key="contentView" id="Bp6-F7-wzj">
+                            <rect key="frame" x="3" y="3" width="167" height="102"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <matrix verticalHuggingPriority="750" fixedFrame="YES" 
allowsEmptySelection="NO" autosizesCells="NO" translatesAutoresizingMaskIntoConstraints="NO" id="182">
+                                    <rect key="frame" x="12" y="12" width="145" height="78"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                    <color key="backgroundColor" name="controlColor" catalog="System" 
colorSpace="catalog"/>
+                                    <size key="cellSize" width="145" height="18"/>
+                                    <size key="intercellSpacing" width="4" height="2"/>
+                                    <buttonCell key="prototype" type="radio" title="Radio" 
imagePosition="leading" alignment="left" inset="2" id="723">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" 
lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <cells>
+                                        <column>
+                                            <buttonCell type="radio" title="Alphabet Default" 
imagePosition="leading" alignment="left" state="on" inset="2" id="181">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <buttonCell type="radio" title="Unicode UTF8" 
imagePosition="leading" alignment="left" tag="1" inset="2" id="177">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <buttonCell type="radio" title="Unicode UTF16 (LE)" 
imagePosition="leading" alignment="left" tag="2" inset="2" id="178">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <buttonCell type="radio" title="Unicode UTF16 (BE)" 
imagePosition="leading" alignment="left" tag="3" inset="2" id="179">
+                                                <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                        </column>
+                                    </cells>
+                                </matrix>
+                            </subviews>
+                        </view>
+                        <font key="titleFont" metaFont="system"/>
+                    </box>
+                    <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" 
fixedFrame="YES" preferredMaxLayoutWidth="204" translatesAutoresizingMaskIntoConstraints="NO" id="183">
+                        <rect key="frame" x="75" y="171" width="208" height="62"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="This 
panel is just holding the file encoding until it is ready to go into the prefs." id="720">
+                            <font key="font" metaFont="system" size="10"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" 
colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" 
colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                </subviews>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="378"/>
+            </connections>
+        </window>
+        <arrayController objectClassName="NSString" editable="NO" automaticallyPreparesContent="YES" 
selectsInsertedObjects="NO" id="414" userLabel="AlphabetIDs">
+            <declaredKeys>
+                <string>self</string>
+            </declaredKeys>
+            <connections>
+                <binding destination="-2" name="contentArray" keyPath="permittedValuesForAlphabetID" 
id="415"/>
+                <binding destination="-2" name="selectionIndexes" keyPath="selectionIndexesForAlphabetID" 
id="421"/>
+            </connections>
+        </arrayController>
+        <arrayController objectClassName="NSString" editable="NO" automaticallyPreparesContent="YES" 
selectsInsertedObjects="NO" id="423" userLabel="ColourIDs">
+            <declaredKeys>
+                <string>self</string>
+                <string>StopOnIdle</string>
+                <string>KeyControl</string>
+                <string>ControlMode</string>
+                <string>ColourMode</string>
+                <string>StartOnMousePosition</string>
+                <string>Autocalibrate</string>
+                <string>GameMode</string>
+                <string>parameterDictionary.DrawMouse.humanReadable</string>
+                <string>ButtonPulsingMode</string>
+                <string>ButtonFourDirectMode</string>
+            </declaredKeys>
+            <connections>
+                <binding destination="-2" name="contentArray" keyPath="permittedValuesForColourID" id="424"/>
+                <binding destination="-2" name="selectionIndexes" keyPath="selectionIndexesForColourID" 
id="429"/>
+            </connections>
+        </arrayController>
+        <arrayController objectClassName="NSString" editable="NO" automaticallyPreparesContent="YES" 
selectsInsertedObjects="NO" id="662" userLabel="InputFilters">
+            <declaredKeys>
+                <string>self</string>
+                <string>StopOnIdle</string>
+                <string>KeyControl</string>
+                <string>ControlMode</string>
+                <string>ColourMode</string>
+                <string>StartOnMousePosition</string>
+                <string>Autocalibrate</string>
+                <string>GameMode</string>
+                <string>parameterDictionary.DrawMouse.humanReadable</string>
+                <string>ButtonPulsingMode</string>
+                <string>ButtonFourDirectMode</string>
+            </declaredKeys>
+            <connections>
+                <binding destination="-2" name="contentArray" keyPath="permittedValuesForInputFilter" 
id="663"/>
+                <binding destination="-2" name="selectionIndexes" keyPath="selectionIndexesForInputFilter" 
id="664"/>
+            </connections>
+        </arrayController>
+        <userDefaultsController representsSharedInstance="YES" id="677" userLabel="Shared Defaults"/>
+    </objects>
+</document>
diff --git a/Src/MacOSX/Base.lproj/Preferences.nib/keyedobjects.nib 
b/Src/MacOSX/Base.lproj/Preferences.nib/keyedobjects.nib
new file mode 100644
index 00000000..10f8819d
Binary files /dev/null and b/Src/MacOSX/Base.lproj/Preferences.nib/keyedobjects.nib differ
diff --git a/Src/MacOSX/COSXDasherControl.h b/Src/MacOSX/COSXDasherControl.h
index d4354604..5918685b 100644
--- a/Src/MacOSX/COSXDasherControl.h
+++ b/Src/MacOSX/COSXDasherControl.h
@@ -22,7 +22,7 @@
 /// Class representing the Dasher UI component (ie the canvas and speed slider)
 ///
 
-class COSXDasherControl : public CDashIntfScreenMsgs {
+class COSXDasherControl : public CDashIntfScreenMsgs,CFileUtils {
   
 public:
   
@@ -37,7 +37,7 @@ public:
   
   COSXDasherControl(DasherApp *aDasherApp);
   ~COSXDasherControl();
-  
+  virtual int GetAllContextLenght();
   void Realize2();
   void TimerFired(NSPoint p);
   void Train(NSString *fileName);
@@ -49,7 +49,7 @@ public:
   NSDictionary *ParameterDictionary();
   
   void goddamn(unsigned long iTime, bool bForceRedraw);
-  virtual void WriteTrainFile(const std::string &filename, const std::string &strNewText);
+       virtual bool WriteUserDataFile(const std::string &filename, const std::string &strNewText, bool 
append);
   std::string GetAllContext();
   void ClearAllContext();
   std::string GetContext(unsigned int iOffset, unsigned int iLength);
diff --git a/Src/MacOSX/COSXDasherControl.mm b/Src/MacOSX/COSXDasherControl.mm
index 0aa3641d..532176b1 100644
--- a/Src/MacOSX/COSXDasherControl.mm
+++ b/Src/MacOSX/COSXDasherControl.mm
@@ -77,7 +77,7 @@ private:
 };
 
 COSXDasherControl::COSXDasherControl(DasherApp *aDasherApp)
-: CDashIntfScreenMsgs(new COSXSettingsStore()), dasherApp(aDasherApp), dasherEdit(nil),
+: CDashIntfScreenMsgs(new COSXSettingsStore(),this), dasherApp(aDasherApp), dasherEdit(nil),
   userDir([[NSString stringWithFormat:@"%@/Library/Application Support/Dasher/", NSHomeDirectory()] retain]) 
{
 }
 
@@ -108,19 +108,21 @@ void COSXDasherControl::Realize2() {
 
 void COSXDasherControl::ScanFiles(AbstractParser *parser, const string &strPattern) {
 
-  string strPath(StdStringFromNSString([[NSBundle mainBundle] resourcePath])+"/"+strPattern);
+  if (![[NSFileManager defaultManager] fileExistsAtPath:userDir isDirectory:NULL]) {
+    // userDir doesn't exist => create it, ready to receive stuff
+    (void)[[NSFileManager defaultManager] createDirectoryAtPath:userDir withIntermediateDirectories:YES 
attributes:nil error:nil];
+  }
+  
+  const string strPath(StdStringFromNSString([[NSBundle mainBundle] resourcePath])+"/"+strPattern);
   const char *sys[2];
   sys[0] = strPath.c_str();
   sys[1] = NULL;
   
-  const char *user[2]; user[1] = NULL;
-  if ([[NSFileManager defaultManager] fileExistsAtPath:userDir isDirectory:NULL]) {
-    user[0] = (StdStringFromNSString(userDir)+strPattern).c_str();
-  } else {
-    // userDir doesn't exist => create it, ready to receive stuff
-    (void)[[NSFileManager defaultManager] createDirectoryAtPath:userDir withIntermediateDirectories:YES 
attributes:nil error:nil];
-    user[0] = 0;
-  }
+  const char *user[2];
+  const string userPath = StdStringFromNSString(userDir) + strPattern;
+  user[0] = userPath.c_str();
+  user[1] = NULL;
+  
   globScan(parser, user, sys);
 }
 
@@ -197,20 +199,24 @@ void COSXDasherControl::Train(NSString *fileName) {
   CDasherInterfaceBase::ImportTrainingText(f);
 }
 
-void COSXDasherControl::WriteTrainFile(const std::string &filename, const std::string &strNewText) {
+bool COSXDasherControl::WriteUserDataFile(const std::string &filename, const std::string &strNewText, bool 
append)
+{
   if(strNewText.length() == 0)
-    return;
+    return false;
   
   std::string strFilename(StdStringFromNSString(userDir) + filename);
   
-  NSLog(@"Write train file: %s", strFilename.c_str());
-  
-  int fd=open(strFilename.c_str(),O_CREAT|O_WRONLY|O_APPEND,S_IRUSR|S_IWUSR);
+  NSLog(@"Write user data file: %s", strFilename.c_str());
+  int flg=O_CREAT|O_WRONLY;
+  int mode=S_IRUSR|S_IWUSR;
+  if(append)
+    flg|=O_APPEND;
+  int fd=open(strFilename.c_str(),flg, mode);
   write(fd,strNewText.c_str(),strNewText.length());
   close(fd);
+  return true;
 }
 
-
 NSDictionary *COSXDasherControl::ParameterDictionary() {
   static NSMutableDictionary *parameterDictionary = nil;
   
@@ -317,7 +323,10 @@ std::string COSXDasherControl::GetContext(unsigned int iOffset, unsigned int iLe
 std::string COSXDasherControl::GetAllContext() {
   return StdStringFromNSString([dasherEdit allContext]);
 }
-
+int COSXDasherControl::GetAllContextLenght()
+{
+  return StdStringFromNSString([dasherEdit allContext]).length();
+}
 void COSXDasherControl::ClearAllContext() {
   [dasherEdit clearContext];
   SetBuffer(0);
diff --git a/Src/MacOSX/Dasher.pbproj/project.xcworkspace/contents.xcworkspacedata 
b/Src/MacOSX/Dasher.pbproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..94b2795e
--- /dev/null
+++ b/Src/MacOSX/Dasher.pbproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+</Workspace>
diff --git a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
index 69eddb0c..9b025b1b 100755
--- a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
+++ b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
@@ -325,7 +325,6 @@
                333B409412088AFA00235721 /* DemoFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 
333B409212088AFA00235721 /* DemoFilter.cpp */; };
                333B409512088AFA00235721 /* DemoFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 
333B409312088AFA00235721 /* DemoFilter.h */; };
                3344F0691341297F001FACAB /* UserLogBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 
3344F0681341297F001FACAB /* UserLogBase.cpp */; };
-               334DE238135E3E68007C8D6D /* control.textlabels.xml in Resources */ = {isa = PBXBuildFile; 
fileRef = 334DE236135E3E68007C8D6D /* control.textlabels.xml */; };
                334DE239135E3E68007C8D6D /* control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 
334DE237135E3E68007C8D6D /* control.xml */; };
                334DE23B135E3F4B007C8D6D /* control.dtd in Resources */ = {isa = PBXBuildFile; fileRef = 
334DE23A135E3F4B007C8D6D /* control.dtd */; };
                339055E81195FBD0001BE240 /* Queue.h in Headers */ = {isa = PBXBuildFile; fileRef = 
339055E61195FBD0001BE240 /* Queue.h */; };
@@ -401,7 +400,6 @@
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
-               089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; 
lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = 
"<group>"; };
                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = 
wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = 
"<absolute>"; };
                1904CDA5048813400000000A /* DasherEdit.h */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.c.h; path = DasherEdit.h; sourceTree = "<group>"; };
                1904CDA6048813400000000A /* DasherEdit.mm */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.cpp.objcpp; path = DasherEdit.mm; sourceTree = "<group>"; };
@@ -705,13 +703,11 @@
                19C1AE810B130F18005C68D3 /* COSXMouseInput.h */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.c.h; path = COSXMouseInput.h; sourceTree = "<group>"; };
                19C49619045029A40000000A /* DasherApp.h */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.c.h; path = DasherApp.h; sourceTree = "<group>"; };
                19C4961D045029D70000000A /* DasherViewOpenGL.h */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = sourcecode.c.h; path = DasherViewOpenGL.h; sourceTree = "<group>"; };
-               19D4423A0454667F0000000A /* English */ = {isa = PBXFileReference; lastKnownFileType = 
wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = "<group>"; };
                19D4423C04546C410000000A /* PreferencesController.h */ = {isa = PBXFileReference; 
fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PreferencesController.h; sourceTree = 
"<group>"; };
                19D4423D04546C410000000A /* PreferencesController.mm */ = {isa = PBXFileReference; 
fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PreferencesController.mm; sourceTree = 
"<group>"; };
                19EEDB310450E75F0000000A /* DasherApp.mm */ = {isa = PBXFileReference; fileEncoding = 30; 
lastKnownFileType = sourcecode.cpp.objcpp; path = DasherApp.mm; sourceTree = "<group>"; };
                19F8C7E50C858A2800276B4F /* I18n.h */ = {isa = PBXFileReference; fileEncoding = 30; 
lastKnownFileType = sourcecode.c.h; name = I18n.h; path = ../Common/I18n.h; sourceTree = SOURCE_ROOT; };
                29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; 
lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-               29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = 
wrapper.nib; name = English; path = English.lproj/MainMenu.nib; 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>"; };
                3300115010A2EA7700D31B1D /* ExpansionPolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = sourcecode.cpp.cpp; path = ExpansionPolicy.cpp; sourceTree = "<group>"; };
@@ -797,6 +793,9 @@
                33FC93370FEFA2C900A9F08D /* TwoPushDynamicFilter.cpp */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TwoPushDynamicFilter.cpp; sourceTree = 
"<group>"; };
                33FC93380FEFA2C900A9F08D /* TwoPushDynamicFilter.h */ = {isa = PBXFileReference; fileEncoding 
= 4; lastKnownFileType = sourcecode.c.h; path = TwoPushDynamicFilter.h; sourceTree = "<group>"; };
                33FC93420FEFA2FB00A9F08D /* FrameRate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.cpp.cpp; path = FrameRate.cpp; sourceTree = "<group>"; };
+               CCF99E67241B843D003D3E51 /* Base */ = {isa = PBXFileReference; lastKnownFileType = 
wrapper.nib; name = Base; path = Base.lproj/Preferences.nib; sourceTree = "<group>"; };
+               CCF99E68241B843D003D3E51 /* Base */ = {isa = PBXFileReference; lastKnownFileType = 
wrapper.nib; name = Base; path = Base.lproj/MainMenu.nib; sourceTree = "<group>"; };
+               CCF99E69241B8441003D3E51 /* en */ = {isa = PBXFileReference; lastKnownFileType = 
text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
                E7641874142A48AD0031FC91 /* Globber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.cpp.cpp; name = Globber.cpp; path = ../Common/Globber.cpp; sourceTree = 
"<group>"; };
                E7641877142A48C70031FC91 /* Globber.h */ = {isa = PBXFileReference; fileEncoding = 4; 
lastKnownFileType = sourcecode.c.h; name = Globber.h; path = ../Common/Globber.h; sourceTree = "<group>"; };
                E792FAE914965F7A00938344 /* alphabet.cangjie.xml */ = {isa = PBXFileReference; fileEncoding = 
4; lastKnownFileType = text.xml; path = alphabet.cangjie.xml; sourceTree = "<group>"; };
@@ -1520,17 +1519,18 @@
                29B97313FDCFA39411CA2CEA /* Project object */ = {
                        isa = PBXProject;
                        attributes = {
-                               LastUpgradeCheck = 0410;
+                               LastUpgradeCheck = 1130;
                        };
                        buildConfigurationList = 198D19FD08965C4800CE3CC9 /* Build configuration list for 
PBXProject "Dasher" */;
                        compatibilityVersion = "Xcode 3.2";
-                       developmentRegion = English;
+                       developmentRegion = en;
                        hasScannedForEncodings = 1;
                        knownRegions = (
-                               English,
-                               Japanese,
-                               French,
-                               German,
+                               fr,
+                               Base,
+                               en,
+                               de,
+                               ja,
                        );
                        mainGroup = 29B97314FDCFA39411CA2CEA /* MacOSX */;
                        projectDirPath = "";
@@ -1728,7 +1728,6 @@
                                33E173E40F3E0B6400D19B38 /* training_swedish_SE.txt in Resources */,
                                33E173E50F3E0B6400D19B38 /* training_turkish_TR.txt in Resources */,
                                33E173E60F3E0B6400D19B38 /* training_welsh_GB.txt in Resources */,
-                               334DE238135E3E68007C8D6D /* control.textlabels.xml in Resources */,
                                334DE239135E3E68007C8D6D /* control.xml in Resources */,
                                334DE23B135E3F4B007C8D6D /* control.dtd in Resources */,
                                E7B0BE2D1491E2D6003EFD33 /* alphabet.bopoTrad.xml in Resources */,
@@ -1857,7 +1856,7 @@
                089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               089C165DFE840E0CC02AAC07 /* English */,
+                               CCF99E69241B8441003D3E51 /* en */,
                        );
                        name = InfoPlist.strings;
                        sourceTree = "<group>";
@@ -1865,7 +1864,7 @@
                19D442390454667F0000000A /* Preferences.nib */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               19D4423A0454667F0000000A /* English */,
+                               CCF99E67241B843D003D3E51 /* Base */,
                        );
                        name = Preferences.nib;
                        sourceTree = "<group>";
@@ -1873,7 +1872,7 @@
                29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
                        isa = PBXVariantGroup;
                        children = (
-                               29B97319FDCFA39411CA2CEA /* English */,
+                               CCF99E68241B843D003D3E51 /* Base */,
                        );
                        name = MainMenu.nib;
                        sourceTree = "<group>";
@@ -1884,6 +1883,8 @@
                198D19FA08965C4800CE3CC9 /* Development */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CLANG_ENABLE_OBJC_WEAK = YES;
+                               CODE_SIGN_IDENTITY = "-";
                                COPY_PHASE_STRIP = NO;
                                GCC_DYNAMIC_NO_PIC = NO;
                                GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
@@ -1901,6 +1902,7 @@
                                );
                                OTHER_LDFLAGS = "-lexpat";
                                OTHER_REZFLAGS = "";
+                               PRODUCT_BUNDLE_IDENTIFIER = uk.ac.cam.phy.inference.dasher;
                                PRODUCT_NAME = Dasher;
                                SECTORDER_FLAGS = "";
                                USER_HEADER_SEARCH_PATHS = /usr/local/include;
@@ -1917,6 +1919,8 @@
                198D19FB08965C4800CE3CC9 /* Deployment */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CLANG_ENABLE_OBJC_WEAK = YES;
+                               CODE_SIGN_IDENTITY = "-";
                                COPY_PHASE_STRIP = YES;
                                GCC_MODEL_TUNING = G4;
                                GCC_OPTIMIZATION_LEVEL = 3;
@@ -1929,6 +1933,7 @@
                                );
                                OTHER_LDFLAGS = "-lexpat";
                                OTHER_REZFLAGS = "";
+                               PRODUCT_BUNDLE_IDENTIFIER = uk.ac.cam.phy.inference.dasher;
                                PRODUCT_NAME = Dasher;
                                SECTORDER_FLAGS = "";
                                WARNING_CFLAGS = (
@@ -1944,6 +1949,8 @@
                198D19FC08965C4800CE3CC9 /* Default */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CLANG_ENABLE_OBJC_WEAK = YES;
+                               CODE_SIGN_IDENTITY = "-";
                                GCC_MODEL_TUNING = G4;
                                GCC_OPTIMIZATION_LEVEL = 3;
                                GCC_PREPROCESSOR_DEFINITIONS = TARGET_OS_MAC;
@@ -1954,6 +1961,7 @@
                                );
                                OTHER_LDFLAGS = /usr/local/lib/libexpat.a;
                                OTHER_REZFLAGS = "";
+                               PRODUCT_BUNDLE_IDENTIFIER = uk.ac.cam.phy.inference.dasher;
                                PRODUCT_NAME = Dasher;
                                SECTORDER_FLAGS = "";
                                WARNING_CFLAGS = (
@@ -1968,24 +1976,106 @@
                198D19FE08965C4800CE3CC9 /* Development */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               ENABLE_TESTABILITY = YES;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               MACOSX_DEPLOYMENT_TARGET = 10.14;
+                               ONLY_ACTIVE_ARCH = YES;
                        };
                        name = Development;
                };
                198D19FF08965C4800CE3CC9 /* Deployment */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
-                               ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = "";
                                GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               MACOSX_DEPLOYMENT_TARGET = 10.14;
                        };
                        name = Deployment;
                };
                198D1A0008965C4800CE3CC9 /* Default */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
+                               CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+                               CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_COMMA = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_ENUM_CONVERSION = YES;
+                               CLANG_WARN_INFINITE_RECURSION = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+                               CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+                               CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+                               CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+                               CLANG_WARN_STRICT_PROTOTYPES = YES;
+                               CLANG_WARN_SUSPICIOUS_MOVE = YES;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               GCC_NO_COMMON_BLOCKS = YES;
                                GCC_PREPROCESSOR_DEFINITIONS = "";
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES;
+                               GCC_WARN_UNUSED_FUNCTION = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               MACOSX_DEPLOYMENT_TARGET = 10.14;
                        };
                        name = Default;
                };
diff --git a/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Dasher.xcscheme 
b/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Dasher.xcscheme
new file mode 100644
index 00000000..1cad9b82
--- /dev/null
+++ b/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Dasher.xcscheme
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1130"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+               BuildableName = "Dasher.app"
+               BlueprintName = "Dasher"
+               ReferencedContainer = "container:Dasher.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Development"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Deployment"
+      selectedDebuggerIdentifier = ""
+      selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+            BuildableName = "Dasher.app"
+            BlueprintName = "Dasher"
+            ReferencedContainer = "container:Dasher.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Deployment"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+            BuildableName = "Dasher.app"
+            BlueprintName = "Dasher"
+            ReferencedContainer = "container:Dasher.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Development">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Deployment"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme 
b/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme
new file mode 100644
index 00000000..d51bd6fe
--- /dev/null
+++ b/Src/MacOSX/Dasher.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1130"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+               BuildableName = "Dasher.app"
+               BlueprintName = "Dasher"
+               ReferencedContainer = "container:Dasher.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Development"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Development"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+            BuildableName = "Dasher.app"
+            BlueprintName = "Dasher"
+            ReferencedContainer = "container:Dasher.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Deployment"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "1974FE1C0714861B00B95DA0"
+            BuildableName = "Dasher.app"
+            BlueprintName = "Dasher"
+            ReferencedContainer = "container:Dasher.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Development">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Deployment"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/Src/MacOSX/DasherViewOpenGL.mm b/Src/MacOSX/DasherViewOpenGL.mm
index c61c787e..e5368dc8 100755
--- a/Src/MacOSX/DasherViewOpenGL.mm
+++ b/Src/MacOSX/DasherViewOpenGL.mm
@@ -49,7 +49,7 @@ public:
   void RegenerateLabels() {
     OpenGLScreen::RegenerateLabels();
   }
-  
+  bool IsWindowUnderCursor() override { return YES; }
 protected:
   void RenderStringOntoCGContext(NSString *string, CGContextRef context, unsigned int iFontSize, bool bWrap) 
{
     NSGraphicsContext *old = [NSGraphicsContext currentContext];
diff --git a/Src/MacOSX/Info-Dasher.plist b/Src/MacOSX/Info-Dasher.plist
index f8c9a629..b6dacb6a 100755
--- a/Src/MacOSX/Info-Dasher.plist
+++ b/Src/MacOSX/Info-Dasher.plist
@@ -11,7 +11,7 @@
        <key>CFBundleIconFile</key>
        <string>DasherApp.icns</string>
        <key>CFBundleIdentifier</key>
-       <string>uk.ac.cam.phy.inference.dasher</string>
+       <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
@@ -23,7 +23,9 @@
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>5</string>
+       <string></string>
+       <key>LSApplicationCategoryType</key>
+       <string>public.app-category.productivity</string>
        <key>NSMainNibFile</key>
        <string>MainMenu</string>
        <key>NSPrincipalClass</key>
diff --git a/Src/MacOSX/LowLevelKeyboardHandling.c b/Src/MacOSX/LowLevelKeyboardHandling.c
index 0c24ea55..1132986b 100755
--- a/Src/MacOSX/LowLevelKeyboardHandling.c
+++ b/Src/MacOSX/LowLevelKeyboardHandling.c
@@ -543,7 +543,7 @@ GetKeyboardLayout (Ptr * resourcePtr, TextEncoding * encodingPtr)
      * possibly already in 10.2.
      */
     
-    currentLayoutId = GetScriptVariable(currentKeyScript,smScriptKeys);
+    currentLayoutId = GetScriptVariable(currentKeyScript,smKeyScript);
     
     if ((lastLayout == NULL) || (lastLayoutId != currentLayoutId)) {
       
diff --git a/Src/MacOSX/PreferencesController.h b/Src/MacOSX/PreferencesController.h
index fe08719b..bd322eae 100644
--- a/Src/MacOSX/PreferencesController.h
+++ b/Src/MacOSX/PreferencesController.h
@@ -16,13 +16,10 @@
 @class DasherApp;
 
 @interface PreferencesController : NSObject
-{
-  DasherApp *dasherApp;
+@property (strong) IBOutlet NSPanel *panel;
+@property (weak) DasherApp *dasherApp;
   
-  IBOutlet NSPanel *panel;
-  int fontToAlter;
-  
-}
+
 
 + (id)preferencesController;
 - (id)init;
diff --git a/Src/MacOSX/PreferencesController.mm b/Src/MacOSX/PreferencesController.mm
index cfdbd84c..66095a25 100644
--- a/Src/MacOSX/PreferencesController.mm
+++ b/Src/MacOSX/PreferencesController.mm
@@ -32,6 +32,9 @@ static NSString * const StartHandlerParamNames[2] = {
 
 @implementation PreferencesController
 
+@synthesize panel;
+@synthesize dasherApp;
+
 - (id)defaultsValueForKey:(NSString *)aKey {
   return [[NSUserDefaultsController sharedUserDefaultsController] valueForKeyPath:[NSString 
stringWithFormat:@"values.%@", aKey]];
 }
@@ -102,7 +105,10 @@ static NSString * const StartHandlerParamNames[2] = {
 
 - (void)makeKeyAndOrderFront:(id)sender {
   if (panel == nil) {
-    [NSBundle loadNibNamed:@"Preferences" owner:self];
+    //[NSBundle loadNibNamed:@"Preferences" owner:self];
+         [[NSBundle mainBundle] loadNibNamed:@"Preferences"
+                                                                                  owner:self
+                                                                topLevelObjects:nil];
   }
   
   [panel makeKeyAndOrderFront:self];
diff --git a/Src/MacOSX/English.lproj/InfoPlist.strings b/Src/MacOSX/en.lproj/InfoPlist.strings
similarity index 52%
rename from Src/MacOSX/English.lproj/InfoPlist.strings
rename to Src/MacOSX/en.lproj/InfoPlist.strings
index 7153ef24..f44f90b2 100644
Binary files a/Src/MacOSX/English.lproj/InfoPlist.strings and b/Src/MacOSX/en.lproj/InfoPlist.strings differ


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]