[dasher] Get MacOS Dasher building and working in 64-bit (#171)
- From: Patrick Welche <pwelche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dasher] Get MacOS Dasher building and working in 64-bit (#171)
- Date: Wed, 19 Aug 2020 10:32:53 +0000 (UTC)
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
"Stop" 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]