[dasher] MacOSX: input filter module settings! (Click options / double-click list)



commit b791349e0b3ba1c297f9dfd1ee7959090c32ee7c
Author: Alan Lawrence <acl33 inf phy cam ac uk>
Date:   Wed Nov 17 14:26:19 2010 +0000

    MacOSX: input filter module settings! (Click options / double-click list)
    
    Also try harder to make input filter list non-editable.

 Src/MacOSX/Dasher.xcodeproj/project.pbxproj        |    8 +
 .../English.lproj/Preferences.nib/designable.nib   |  186 ++++++++++++++++++--
 .../English.lproj/Preferences.nib/keyedobjects.nib |  Bin 50726 -> 51984 bytes
 Src/MacOSX/ModuleSettingsController.h              |   24 +++
 Src/MacOSX/ModuleSettingsController.mm             |  144 +++++++++++++++
 Src/MacOSX/PreferencesController.h                 |    1 +
 Src/MacOSX/PreferencesController.mm                |   11 ++
 7 files changed, 359 insertions(+), 15 deletions(-)
---
diff --git a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
index e09fb7f..2c084b6 100755
--- a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
+++ b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
@@ -349,6 +349,8 @@
 		3306E1F80FFE6CAD0017324C /* Trainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3306E1F60FFE6CAD0017324C /* Trainer.h */; };
 		3306E33D0FFFB9880017324C /* MandarinAlphMgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3306E33B0FFFB9880017324C /* MandarinAlphMgr.cpp */; };
 		3306E33E0FFFB9880017324C /* MandarinAlphMgr.h in Headers */ = {isa = PBXBuildFile; fileRef = 3306E33C0FFFB9880017324C /* MandarinAlphMgr.h */; };
+		330B91621292FE520022831C /* ModuleSettingsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 330B91611292FE510022831C /* ModuleSettingsController.mm */; };
+		330B91641292FE700022831C /* ModuleSettingsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 330B91631292FE700022831C /* ModuleSettingsController.h */; };
 		33135351102C6D8E00E28220 /* AlternatingDirectMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33135349102C6D8E00E28220 /* AlternatingDirectMode.cpp */; };
 		33135352102C6D8E00E28220 /* AlternatingDirectMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3313534A102C6D8E00E28220 /* AlternatingDirectMode.h */; };
 		33135353102C6D8E00E28220 /* CompassMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3313534B102C6D8E00E28220 /* CompassMode.cpp */; };
@@ -764,6 +766,8 @@
 		3306E1F60FFE6CAD0017324C /* Trainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Trainer.h; sourceTree = "<group>"; };
 		3306E33B0FFFB9880017324C /* MandarinAlphMgr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MandarinAlphMgr.cpp; sourceTree = "<group>"; };
 		3306E33C0FFFB9880017324C /* MandarinAlphMgr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MandarinAlphMgr.h; sourceTree = "<group>"; };
+		330B91611292FE510022831C /* ModuleSettingsController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ModuleSettingsController.mm; sourceTree = "<group>"; };
+		330B91631292FE700022831C /* ModuleSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModuleSettingsController.h; sourceTree = "<group>"; };
 		33135349102C6D8E00E28220 /* AlternatingDirectMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AlternatingDirectMode.cpp; sourceTree = "<group>"; };
 		3313534A102C6D8E00E28220 /* AlternatingDirectMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlternatingDirectMode.h; sourceTree = "<group>"; };
 		3313534B102C6D8E00E28220 /* CompassMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompassMode.cpp; sourceTree = "<group>"; };
@@ -853,6 +857,8 @@
 				199DCCD70450B94C0000000A /* DasherViewOpenGL.mm */,
 				196874000C2BDC2E00D63879 /* AlphabetLetter.h */,
 				196874010C2BDC2E00D63879 /* AlphabetLetter.mm */,
+				330B91631292FE700022831C /* ModuleSettingsController.h */,
+				330B91611292FE510022831C /* ModuleSettingsController.mm */,
 				196874040C2BDC2E00D63879 /* GLUtils.h */,
 				196874050C2BDC2E00D63879 /* GLUtils.mm */,
 				19D4423C04546C410000000A /* PreferencesController.h */,
@@ -1494,6 +1500,7 @@
 				339055E81195FBD0001BE240 /* Queue.h in Headers */,
 				33008360120CB7F900C41FAA /* ConvertingAlphMgr.h in Headers */,
 				339794D5120F2A9600CEA168 /* AlphInfo.h in Headers */,
+				330B91641292FE700022831C /* ModuleSettingsController.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1842,6 +1849,7 @@
 				339055E91195FBD0001BE240 /* Queue.m in Sources */,
 				33008361120CB7F900C41FAA /* ConvertingAlphMgr.cpp in Sources */,
 				339794D4120F2A9600CEA168 /* AlphInfo.cpp in Sources */,
+				330B91621292FE520022831C /* ModuleSettingsController.mm in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/Src/MacOSX/English.lproj/Preferences.nib/designable.nib b/Src/MacOSX/English.lproj/Preferences.nib/designable.nib
index 33a74e6..ebf8757 100644
--- a/Src/MacOSX/English.lproj/Preferences.nib/designable.nib
+++ b/Src/MacOSX/English.lproj/Preferences.nib/designable.nib
@@ -2,17 +2,17 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">10D575</string>
-		<string key="IBDocument.InterfaceBuilderVersion">762</string>
+		<string key="IBDocument.SystemVersion">10F569</string>
+		<string key="IBDocument.InterfaceBuilderVersion">788</string>
 		<string key="IBDocument.AppKitVersion">1038.29</string>
-		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">762</string>
+			<string key="NS.object.0">788</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="42"/>
+			<integer value="14"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -542,7 +542,7 @@
 								</object>
 								<object class="NSTabViewItem" id="213339562">
 									<object class="NSView" key="NSView" id="507754464">
-										<nil key="NSNextResponder"/>
+										<reference key="NSNextResponder" ref="703582030"/>
 										<int key="NSvFlags">256</int>
 										<object class="NSMutableArray" key="NSSubviews">
 											<bool key="EncodedWithXMLCoder">YES</bool>
@@ -870,7 +870,7 @@
 																							<reference key="NSTextColor" ref="1004625332"/>
 																						</object>
 																						<object class="NSTextFieldCell" key="NSDataCell" id="84708913">
-																							<int key="NSCellFlags">337772096</int>
+																							<int key="NSCellFlags">67239488</int>
 																							<int key="NSCellFlags2">2048</int>
 																							<reference key="NSSupport" ref="387582086"/>
 																							<reference key="NSControlView" ref="827531153"/>
@@ -879,7 +879,6 @@
 																						</object>
 																						<int key="NSResizingMask">3</int>
 																						<bool key="NSIsResizeable">YES</bool>
-																						<bool key="NSIsEditable">YES</bool>
 																						<reference key="NSTableView" ref="827531153"/>
 																					</object>
 																				</object>
@@ -984,6 +983,7 @@
 											</object>
 										</object>
 										<string key="NSFrame">{{10, 33}, {565, 378}}</string>
+										<reference key="NSSuperview" ref="703582030"/>
 									</object>
 									<string key="NSLabel">Control</string>
 									<reference key="NSColor" ref="409290091"/>
@@ -1629,7 +1629,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA</
 								</object>
 								<object class="NSTabViewItem" id="430082267">
 									<object class="NSView" key="NSView" id="290018728">
-										<reference key="NSNextResponder" ref="703582030"/>
+										<nil key="NSNextResponder"/>
 										<int key="NSvFlags">256</int>
 										<object class="NSMutableArray" key="NSSubviews">
 											<bool key="EncodedWithXMLCoder">YES</bool>
@@ -1789,21 +1789,20 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA</
 											</object>
 										</object>
 										<string key="NSFrame">{{10, 33}, {565, 378}}</string>
-										<reference key="NSSuperview" ref="703582030"/>
 									</object>
 									<string key="NSLabel">Application</string>
 									<reference key="NSColor" ref="409290091"/>
 									<reference key="NSTabView" ref="703582030"/>
 								</object>
 							</object>
-							<reference key="NSSelectedTabViewItem" ref="430082267"/>
+							<reference key="NSSelectedTabViewItem" ref="213339562"/>
 							<reference key="NSFont" ref="387582086"/>
 							<int key="NSTvFlags">0</int>
 							<bool key="NSAllowTruncatedLabels">YES</bool>
 							<bool key="NSDrawsBackground">YES</bool>
 							<object class="NSMutableArray" key="NSSubviews">
 								<bool key="EncodedWithXMLCoder">YES</bool>
-								<reference ref="290018728"/>
+								<reference ref="507754464"/>
 							</object>
 						</object>
 					</object>
@@ -2960,6 +2959,128 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA</
 					</object>
 					<int key="connectionID">835</int>
 				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">doubleClickArgument: selectedObjects</string>
+						<reference key="source" ref="827531153"/>
+						<reference key="destination" ref="335269801"/>
+						<object class="NSNibBindingConnector" key="connector" id="250500462">
+							<reference key="NSSource" ref="827531153"/>
+							<reference key="NSDestination" ref="335269801"/>
+							<string key="NSLabel">doubleClickArgument: selectedObjects</string>
+							<string key="NSBinding">doubleClickArgument</string>
+							<string key="NSKeyPath">selectedObjects</string>
+							<object class="NSDictionary" key="NSOptions">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSArray" key="dict.sortedKeys">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<string>NSConditionallySetsEnabled</string>
+									<string>NSInvokesSeparatelyWithArrayObjects</string>
+									<string>NSSelectorName</string>
+								</object>
+								<object class="NSMutableArray" key="dict.values">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<boolean value="NO"/>
+									<boolean value="YES"/>
+									<string>inputFilterSettings:</string>
+								</object>
+							</object>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">864</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">doubleClickTarget: self</string>
+						<reference key="source" ref="827531153"/>
+						<reference key="destination" ref="406668079"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="827531153"/>
+							<reference key="NSDestination" ref="406668079"/>
+							<string key="NSLabel">doubleClickTarget: self</string>
+							<string key="NSBinding">doubleClickTarget</string>
+							<string key="NSKeyPath">self</string>
+							<object class="NSDictionary" key="NSOptions">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSArray" key="dict.sortedKeys">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<string>NSConditionallySetsEnabled</string>
+									<string>NSSelectorName</string>
+								</object>
+								<object class="NSMutableArray" key="dict.values">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<boolean value="NO"/>
+									<string>inputFilterSettings:</string>
+								</object>
+							</object>
+							<reference key="NSPreviousConnector" ref="250500462"/>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">865</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">argument: selectedObjects</string>
+						<reference key="source" ref="643262560"/>
+						<reference key="destination" ref="335269801"/>
+						<object class="NSNibBindingConnector" key="connector" id="891823427">
+							<reference key="NSSource" ref="643262560"/>
+							<reference key="NSDestination" ref="335269801"/>
+							<string key="NSLabel">argument: selectedObjects</string>
+							<string key="NSBinding">argument</string>
+							<string key="NSKeyPath">selectedObjects</string>
+							<object class="NSDictionary" key="NSOptions">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSArray" key="dict.sortedKeys">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<string>NSConditionallySetsEnabled</string>
+									<string>NSInvokesSeparatelyWithArrayObjects</string>
+									<string>NSSelectorName</string>
+								</object>
+								<object class="NSMutableArray" key="dict.values">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<boolean value="NO"/>
+									<boolean value="YES"/>
+									<string>inputFilterSettings:</string>
+								</object>
+							</object>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">866</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBBindingConnection" key="connection">
+						<string key="label">target: self</string>
+						<reference key="source" ref="643262560"/>
+						<reference key="destination" ref="406668079"/>
+						<object class="NSNibBindingConnector" key="connector">
+							<reference key="NSSource" ref="643262560"/>
+							<reference key="NSDestination" ref="406668079"/>
+							<string key="NSLabel">target: self</string>
+							<string key="NSBinding">target</string>
+							<string key="NSKeyPath">self</string>
+							<object class="NSDictionary" key="NSOptions">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSArray" key="dict.sortedKeys">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<string>NSConditionallySetsEnabled</string>
+									<string>NSSelectorName</string>
+								</object>
+								<object class="NSMutableArray" key="dict.values">
+									<bool key="EncodedWithXMLCoder">YES</bool>
+									<boolean value="NO"/>
+									<string>inputFilterSettings:</string>
+								</object>
+							</object>
+							<reference key="NSPreviousConnector" ref="891823427"/>
+							<int key="NSNibBindingConnectorVersion">2</int>
+						</object>
+					</object>
+					<int key="connectionID">867</int>
+				</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
@@ -4451,7 +4572,7 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA</
 				</object>
 			</object>
 			<nil key="sourceID"/>
-			<int key="maxID">835</int>
+			<int key="maxID">867</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -4468,13 +4589,48 @@ AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA</
 					<string key="className">PreferencesController</string>
 					<string key="superclassName">NSObject</string>
 					<object class="NSMutableDictionary" key="actions">
-						<string key="NS.key.0">makeKeyAndOrderFront:</string>
-						<string key="NS.object.0">id</string>
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>inputFilterSettings:</string>
+							<string>makeKeyAndOrderFront:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>inputFilterSettings:</string>
+							<string>makeKeyAndOrderFront:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">inputFilterSettings:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">makeKeyAndOrderFront:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
 					</object>
 					<object class="NSMutableDictionary" key="outlets">
 						<string key="NS.key.0">panel</string>
 						<string key="NS.object.0">NSPanel</string>
 					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">panel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">panel</string>
+							<string key="candidateClassName">NSPanel</string>
+						</object>
+					</object>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
 						<string key="minorKey">PreferencesController.h</string>
diff --git a/Src/MacOSX/English.lproj/Preferences.nib/keyedobjects.nib b/Src/MacOSX/English.lproj/Preferences.nib/keyedobjects.nib
index f51a3c0..5e15696 100644
Binary files a/Src/MacOSX/English.lproj/Preferences.nib/keyedobjects.nib and b/Src/MacOSX/English.lproj/Preferences.nib/keyedobjects.nib differ
diff --git a/Src/MacOSX/ModuleSettingsController.h b/Src/MacOSX/ModuleSettingsController.h
new file mode 100644
index 0000000..46177a7
--- /dev/null
+++ b/Src/MacOSX/ModuleSettingsController.h
@@ -0,0 +1,24 @@
+//
+//  ModuleSettingsController.h
+//  Dasher
+//
+//  Created by Alan Lawrence on 10/02/2010.
+//  Copyright 2010 Cavendish Laboratory. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "COSXDasherControl.h"
+
+ interface ModuleSettingsController : NSWindowController {
+  CDasherInterfaceBase *intf;
+  SModuleSettings *settings;
+  int count;
+}
+
+///Create a parameters controller whose window has the specified title and allows to adjust the provided settings.
+-(id)initWithTitle:(NSString *)title Interface:(CDasherInterfaceBase *)intf Settings:(SModuleSettings *)settings Count:(int)count;
+
+///Show the window modally. (blocks until window dismissed)
+-(void)showModal;
+
+ end
diff --git a/Src/MacOSX/ModuleSettingsController.mm b/Src/MacOSX/ModuleSettingsController.mm
new file mode 100644
index 0000000..03f6cc6
--- /dev/null
+++ b/Src/MacOSX/ModuleSettingsController.mm
@@ -0,0 +1,144 @@
+//
+//  ModuleSettingsController.mm
+//  Dasher
+//
+//  Created by Alan Lawrence on 10/02/2010.
+//  Copyright 2010 Cavendish Laboratory. All rights reserved.
+//
+
+#import "ModuleSettingsController.h"
+#import "DasherUtil.h"
+
+using namespace Dasher;
+
+//private methods we actually need to call directly
+ interface ModuleSettingsController ()
+-(void)updateBoxTitle:(NSSlider *)slider;
+ end
+
+ implementation ModuleSettingsController
+
+-(id)initWithTitle:(NSString *)title Interface:(CDasherInterfaceBase *)_intf Settings:(SModuleSettings *)_settings Count:(int)_count {
+  int height=0;
+  for (int i=0; i<_count; i++)
+    if (_settings[i].iType == T_BOOL) height+=25;
+    else if (_settings[i].iType == T_LONG) height+=57;
+  
+  NSWindow *window = [[[NSPanel alloc] initWithContentRect:NSMakeRect(200.0f, 100.0f, 400.0f, height)
+                                                 styleMask:( NSClosableWindowMask | NSTitledWindowMask) 
+                                                   backing:NSBackingStoreBuffered defer:YES] autorelease];
+  if (self = [super initWithWindow:window]) {
+    settings = _settings;
+    count = _count;
+    intf=_intf;
+    [window setTitle:title];
+    NSUserDefaultsController *udc = [NSUserDefaultsController sharedUserDefaultsController];
+    for (int i=0, y=0; i<_count; i++) {
+      id ctrl; //either an NSButton, for bool parameters, or an NSSlider, for long params.
+      if (settings[i].iType == T_BOOL) {
+        NSButton *b = [[[NSButton alloc] initWithFrame:NSMakeRect(5.0, y+5, 390.0, 15.0)] autorelease];
+        [b setButtonType:NSSwitchButton];
+        [b setTitle:NSStringFromStdString(settings[i].szDescription)];
+        [[window contentView] addSubview:b];
+        [b setState:(intf->GetBoolParameter(settings[i].iParameter) ? NSOnState : NSOffState)];
+        [b setTag:settings[i].iParameter]; 
+        [b setTarget:self];
+        [b setAction:@selector(boolParamChanged:)];
+        ctrl = b;
+        y += 25;
+      } else if (settings[i].iType == T_LONG) {
+        NSBox *box = [[[NSBox alloc] initWithFrame:NSMakeRect(5.0, y+5, 390.0, 50.0)] autorelease];
+        //NSRect r=[[box contentView] bounds];
+        NSSlider *slider = [[[NSSlider alloc] initWithFrame:NSMakeRect(5.0, 2.0, 380.0, 20.0)] autorelease];
+        [slider setTag:i];
+        [slider setMinValue:settings[i].iMin]; [slider setMaxValue:settings[i].iMax];
+        //[slider setNumberOfTickMarks:(settings[i].iMax-settings[i].iMin)/settings[i].iDivisor+1];
+        //[slider setAllowsTickMarkValuesOnly:YES];
+        [slider setIntegerValue:intf->GetLongParameter(settings[i].iParameter)];
+        [slider setTarget:self];
+        [slider setAction:@selector(longParamChanged:)];
+        [[box contentView] addSubview:slider];
+        [self updateBoxTitle:slider];
+        [[window contentView] addSubview:box];
+        ctrl = slider;
+        y += 57;
+      }
+      NSString *paramName = NSStringFromStdString(intf->GetSettingsStore()->GetParameterName(settings[i].iParameter));
+      [udc addObserver:self forKeyPath:[NSString stringWithFormat:@"values.%@", paramName] options:0 context:ctrl];
+    }
+  } //else, window was autoreleased.
+  return self;
+}
+
+-(void)showModal {
+  NSWindow *window = [self window];
+  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowWillClose:) name:NSWindowWillCloseNotification object:window];  
+  [[NSApplication sharedApplication] runModalForWindow:window];
+}
+
+-(void)windowWillClose:(NSNotification *)notification {
+  //This gets invoked only when we've registered with the NSNotificationCenter,
+  // which we do only when we're about to show the window modally.
+  [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:[self window]];
+  NSUserDefaultsController *udc = [NSUserDefaultsController sharedUserDefaultsController];
+  for (int i=0; i<count; i++) {
+    NSString *paramName = NSStringFromStdString(intf->GetSettingsStore()->GetParameterName(settings[i].iParameter));
+    [udc removeObserver:self forKeyPath:[NSString stringWithFormat:@"values.%@",paramName]];
+  }
+  [[NSApplication sharedApplication] stopModal];
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
+  id ctx = (id)context;
+  if ([ctx isKindOfClass:[NSButton class]]) {
+    //boolean param
+    NSButton *btn = (NSButton *)ctx;
+    int iParameter = btn.tag;
+    [btn setState:(intf->GetBoolParameter(iParameter) ? NSOnState : NSOffState)];
+  } else if ([ctx isKindOfClass:[NSSlider class]]) {
+    //long param
+    NSSlider *slider = (NSSlider *)ctx;
+    int iParameter=settings[slider.tag].iParameter;
+    [slider setIntegerValue:intf->GetLongParameter(iParameter)];
+    [self updateBoxTitle:slider];
+  } else DASHER_ASSERT(false);
+}
+
+-(void)boolParamChanged:(id)nsbutton {
+  NSButton *b = (NSButton *)nsbutton;
+  intf->SetBoolParameter(b.tag, b.state==NSOnState);
+}
+
+-(void)longParamChanged:(id)nsslider {
+  NSSlider *slider = (NSSlider *)nsslider;
+  long val = [slider integerValue];
+  SModuleSettings *setting = &settings[slider.tag];
+  if (val != intf->GetLongParameter(setting->iParameter)) {
+    intf->SetLongParameter(setting->iParameter, val);
+    [self updateBoxTitle:slider];
+  }
+}
+
+-(void)updateBoxTitle:(NSSlider *)slider {
+  NSBox *box;
+  for (NSView *s = slider; ;) {
+    s = [s superview];
+    if ([s isKindOfClass:[NSBox class]]) {
+      box = (NSBox *)s;
+      break;
+    }
+  }
+  SModuleSettings *setting = &settings[slider.tag];
+  
+  int iPlaces=0, iDivisor(setting->iDivisor);
+  while (iDivisor > 1) {
+    iPlaces++;
+    iDivisor/=10;
+  }
+  NSString *format =[@"%@: %." stringByAppendingFormat:@"%df",iPlaces];  
+  box.title = [NSString stringWithFormat:format,NSStringFromStdString(setting->szDescription),(intf->GetLongParameter(setting->iParameter) / (float)setting->iDivisor)];
+}
+
+
+
+ end
diff --git a/Src/MacOSX/PreferencesController.h b/Src/MacOSX/PreferencesController.h
index 9752344..fe08719 100644
--- a/Src/MacOSX/PreferencesController.h
+++ b/Src/MacOSX/PreferencesController.h
@@ -27,6 +27,7 @@
 + (id)preferencesController;
 - (id)init;
 - (void)makeKeyAndOrderFront:(id)sender;
+-(void)inputFilterSettings:(id)sender;
 //- (void)displayFontPanel;
 //- (IBAction)changeFont:(id)sender;
 //- (void)changeDasherFont:(id)sender;
diff --git a/Src/MacOSX/PreferencesController.mm b/Src/MacOSX/PreferencesController.mm
index f9e605d..f7568e4 100644
--- a/Src/MacOSX/PreferencesController.mm
+++ b/Src/MacOSX/PreferencesController.mm
@@ -7,6 +7,7 @@
 //
 
 #import "PreferencesController.h"
+#import "ModuleSettingsController.h"
 #import "DasherApp.h"
 #import "DasherUtil.h"
 
@@ -79,6 +80,16 @@ static PreferencesController *preferencesController = nil;
   [panel makeKeyAndOrderFront:self];
 }
 
+-(void)inputFilterSettings:(NSString *)selectedObject {
+  SModuleSettings *pSettings; int iCount;
+  COSXDasherControl *intf = [dasherApp aquaDasherControl];
+  CDasherModule *inputFilter(intf->GetModuleByName(StdStringFromNSString(selectedObject)));
+  if (inputFilter && inputFilter->GetSettings(&pSettings, &iCount)) {
+    [[[[ModuleSettingsController alloc] initWithTitle:NSStringFromStdString(inputFilter->GetName()) Interface:intf Settings:pSettings Count:iCount] autorelease] showModal];
+  }
+  
+}
+
 - (NSArray *)permittedValuesForAlphabetID {
   return [dasherApp permittedValuesForParameter:SP_ALPHABET_ID];
 }



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