mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-06-26 00:29:27 +00:00
A Mac preferences window and settings
This commit is contained in:
parent
c140c5c7e0
commit
cfc779a86f
|
@ -82,7 +82,6 @@
|
|||
773B3DAD19568A570085CE5F /* debugger.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7319568A570085CE5F /* debugger.c */; };
|
||||
773B3DAE19568A570085CE5F /* opcodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7419568A570085CE5F /* opcodes.c */; };
|
||||
773B3DAF19568A570085CE5F /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7519568A570085CE5F /* misc.c */; };
|
||||
773B3DB019568A570085CE5F /* prefs.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7719568A570085CE5F /* prefs.c */; };
|
||||
773B3DBC19568A570085CE5F /* timing.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D8719568A570085CE5F /* timing.c */; };
|
||||
773B3DBE19568A570085CE5F /* vm.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D8D19568A570085CE5F /* vm.c */; };
|
||||
773B3DBF19568A570085CE5F /* cpu.S in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D9019568A570085CE5F /* cpu.S */; };
|
||||
|
@ -90,6 +89,8 @@
|
|||
773B3DC319568A570085CE5F /* zlib-helpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D9519568A570085CE5F /* zlib-helpers.c */; };
|
||||
773B3DCB1956903D0085CE5F /* libz.1.1.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 773B3DCA1956903D0085CE5F /* libz.1.1.3.dylib */; };
|
||||
773BC91619F2E6A900996893 /* EmulatorDiskController.m in Sources */ = {isa = PBXBuildFile; fileRef = 773BC91519F2E6A900996893 /* EmulatorDiskController.m */; };
|
||||
773BC91919F2FD4500996893 /* EmulatorPrefsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 773BC91819F2FD4500996893 /* EmulatorPrefsController.m */; };
|
||||
773BC91A19F31E7B00996893 /* prefs.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7719568A570085CE5F /* prefs.c */; };
|
||||
779DD827195764E200DF89E5 /* rom-shim.c in Sources */ = {isa = PBXBuildFile; fileRef = 779DD826195764E200DF89E5 /* rom-shim.c */; };
|
||||
779DD82F195BD9F900DF89E5 /* cpu.S in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D9019568A570085CE5F /* cpu.S */; };
|
||||
779DD830195BD9F900DF89E5 /* prefs.c in Sources */ = {isa = PBXBuildFile; fileRef = 773B3D7719568A570085CE5F /* prefs.c */; };
|
||||
|
@ -250,6 +251,8 @@
|
|||
773B3DCA1956903D0085CE5F /* libz.1.1.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.1.3.dylib; path = usr/lib/libz.1.1.3.dylib; sourceTree = SDKROOT; };
|
||||
773BC91419F2E6A900996893 /* EmulatorDiskController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EmulatorDiskController.h; path = Classes/OSX/EmulatorDiskController.h; sourceTree = "<group>"; };
|
||||
773BC91519F2E6A900996893 /* EmulatorDiskController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EmulatorDiskController.m; path = Classes/OSX/EmulatorDiskController.m; sourceTree = "<group>"; };
|
||||
773BC91719F2FD4500996893 /* EmulatorPrefsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EmulatorPrefsController.h; path = Classes/OSX/EmulatorPrefsController.h; sourceTree = "<group>"; };
|
||||
773BC91819F2FD4500996893 /* EmulatorPrefsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EmulatorPrefsController.m; path = Classes/OSX/EmulatorPrefsController.m; sourceTree = "<group>"; };
|
||||
779DD826195764E200DF89E5 /* rom-shim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "rom-shim.c"; sourceTree = "<group>"; };
|
||||
779DD850195BD9F900DF89E5 /* Apple2MacTestCPU.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2MacTestCPU.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
779DD851195BD9F900DF89E5 /* Apple2MacTestCPU-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Apple2MacTestCPU-Info.plist"; path = "/Users/aaronculliney/Documents/00web/apple2/Apple2Mac/Apple2MacTests/Apple2MacTestCPU-Info.plist"; sourceTree = "<absolute>"; };
|
||||
|
@ -450,16 +453,18 @@
|
|||
773B3D431956897D0085CE5F /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
773BC91419F2E6A900996893 /* EmulatorDiskController.h */,
|
||||
773BC91519F2E6A900996893 /* EmulatorDiskController.m */,
|
||||
77E1C0C219D7298F004344E0 /* EmulatorFullscreenWindow.m */,
|
||||
77E1C0C319D7298F004344E0 /* EmulatorFullscreenWindow.h */,
|
||||
77E1C0C019D7298F004344E0 /* EmulatorGLView.m */,
|
||||
77E1C0C119D7298F004344E0 /* EmulatorGLView.h */,
|
||||
773BC91719F2FD4500996893 /* EmulatorPrefsController.h */,
|
||||
773BC91819F2FD4500996893 /* EmulatorPrefsController.m */,
|
||||
77E1C0BE19D7298F004344E0 /* EmulatorWindowController.m */,
|
||||
77E1C0BF19D7298F004344E0 /* EmulatorWindowController.h */,
|
||||
4AC7A76B19ECC3FB00BCD457 /* EmulatorWindow.h */,
|
||||
4AC7A76C19ECC3FB00BCD457 /* EmulatorWindow.m */,
|
||||
773BC91419F2E6A900996893 /* EmulatorDiskController.h */,
|
||||
773BC91519F2E6A900996893 /* EmulatorDiskController.m */,
|
||||
);
|
||||
name = Classes;
|
||||
sourceTree = "<group>";
|
||||
|
@ -948,7 +953,6 @@
|
|||
773B3DBF19568A570085CE5F /* cpu.S in Sources */,
|
||||
779F565D19EAF66E00A6F107 /* speaker.c in Sources */,
|
||||
779F565B19EAF66E00A6F107 /* soundcore-openal.c in Sources */,
|
||||
773B3DB019568A570085CE5F /* prefs.c in Sources */,
|
||||
773B3DA419568A570085CE5F /* display.c in Sources */,
|
||||
773B3DA319568A570085CE5F /* disk.c in Sources */,
|
||||
773B3DAD19568A570085CE5F /* debugger.c in Sources */,
|
||||
|
@ -958,6 +962,7 @@
|
|||
773B3DBC19568A570085CE5F /* timing.c in Sources */,
|
||||
773B3DAF19568A570085CE5F /* misc.c in Sources */,
|
||||
77E1C0C419D7298F004344E0 /* EmulatorWindowController.m in Sources */,
|
||||
773BC91A19F31E7B00996893 /* prefs.c in Sources */,
|
||||
77E1C0B619D72700004344E0 /* matrixUtil.c in Sources */,
|
||||
77E1C0C519D7298F004344E0 /* EmulatorGLView.m in Sources */,
|
||||
773B3DAE19568A570085CE5F /* opcodes.c in Sources */,
|
||||
|
@ -972,6 +977,7 @@
|
|||
779F565E19EAF66E00A6F107 /* win-shim.c in Sources */,
|
||||
779F565919EAF66E00A6F107 /* AY8910.c in Sources */,
|
||||
77E1C0C619D7298F004344E0 /* EmulatorFullscreenWindow.m in Sources */,
|
||||
773BC91919F2FD4500996893 /* EmulatorPrefsController.m in Sources */,
|
||||
773B3DA519568A570085CE5F /* font.c in Sources */,
|
||||
773B3DA019568A570085CE5F /* cpu-supp.c in Sources */,
|
||||
779F561C19D7929100A6F107 /* glvideo.c in Sources */,
|
||||
|
|
|
@ -47,12 +47,21 @@ CA
|
|||
<menuItem isSeparatorItem="YES" id="236">
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</menuItem>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="129"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="129">
|
||||
<connections>
|
||||
<action selector="makeKeyAndOrderFront:" target="Mzv-VG-jce" id="Oek-48-Eyd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Toggle Full Screen..." keyEquivalent="F" id="rP9-cs-9dM">
|
||||
<connections>
|
||||
<action selector="toggleFullScreen:" target="M8b-ga-iOS" id="Xan-eQ-CRM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Toggle CPU Speed" keyEquivalent="S" id="b9q-zr-oNh">
|
||||
<connections>
|
||||
<action selector="toggleCPUSpeed:" target="M8b-ga-iOS" id="fA3-dJ-wtg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="143">
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</menuItem>
|
||||
|
@ -106,12 +115,13 @@ CA
|
|||
<window title="Apple2Mac" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="371" userLabel="Window - Apple2Mac" customClass="EmulatorWindow">
|
||||
<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="200" y="200" width="320" height="280"/>
|
||||
<rect key="contentRect" x="200" y="200" width="568" height="384"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/>
|
||||
<view key="contentView" id="372" customClass="EmulatorGLView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="280"/>
|
||||
<rect key="frame" x="0.0" y="-1" width="568" height="384"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</view>
|
||||
<point key="canvasLocation" x="-200" y="-887"/>
|
||||
</window>
|
||||
<customObject id="494" userLabel="EmulatorGLView" customClass="EmulatorGLView"/>
|
||||
<customObject id="M8b-ga-iOS" customClass="EmulatorWindowController" colorLabel="IBBuiltInLabel-Blue">
|
||||
|
@ -125,21 +135,22 @@ CA
|
|||
<outlet property="diskInA" destination="cb9-Pc-Ggd" id="kP3-qf-vci"/>
|
||||
<outlet property="diskInB" destination="5oU-oN-vUH" id="lNx-Lm-0FA"/>
|
||||
<outlet property="disksWindow" destination="RAk-at-ZT4" id="64k-qW-zF5"/>
|
||||
<outlet property="prefsWindow" destination="Mzv-VG-jce" id="dQt-pf-qdi"/>
|
||||
<outlet property="view" destination="372" id="pRG-Kn-92X"/>
|
||||
<outlet property="window" destination="371" id="z3B-S9-PsV"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<window title="Insert Disks" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="RAk-at-ZT4">
|
||||
<window title="Insert Disks" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="RAk-at-ZT4" userLabel="Window - Insert Disks">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="109" y="132" width="480" height="237"/>
|
||||
<rect key="contentRect" x="109" y="132" width="522" height="302"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
|
||||
<view key="contentView" id="rBl-rx-7uF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="237"/>
|
||||
<rect key="frame" x="0.0" y="-5" width="522" height="302"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="laF-n4-ciZ">
|
||||
<rect key="frame" x="18" y="200" width="225" height="17"/>
|
||||
<rect key="frame" x="38" y="262" width="225" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Slot 6 Drive A" id="Vea-pb-q49">
|
||||
<font key="font" metaFont="systemBold"/>
|
||||
|
@ -148,7 +159,7 @@ CA
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="Wzz-Yt-xlT">
|
||||
<rect key="frame" x="237" y="200" width="225" height="17"/>
|
||||
<rect key="frame" x="257" y="262" width="225" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Slot 6 Drive B" id="pUB-KI-7ef">
|
||||
<font key="font" metaFont="systemBold"/>
|
||||
|
@ -156,15 +167,8 @@ CA
|
|||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box autoresizesSubviews="NO" horizontalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="6cp-Ig-hvh">
|
||||
<rect key="frame" x="238" y="61" width="5" height="164"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" id="j1W-BP-P7S">
|
||||
<rect key="frame" x="81" y="85" width="99" height="32"/>
|
||||
<rect key="frame" x="101" y="98" width="99" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Choose..." bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="nVq-kA-8RS">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
|
@ -175,7 +179,7 @@ CA
|
|||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" id="lI0-3f-IsR">
|
||||
<rect key="frame" x="300" y="85" width="99" height="32"/>
|
||||
<rect key="frame" x="320" y="98" width="99" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Choose..." bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="nmE-5R-fEx">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
|
@ -186,7 +190,7 @@ CA
|
|||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="cb9-Pc-Ggd">
|
||||
<rect key="frame" x="18" y="175" width="216" height="17"/>
|
||||
<rect key="frame" x="38" y="217" width="216" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="U5Boot.do" id="UOE-Fx-vng">
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -195,7 +199,7 @@ CA
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="e89-G9-nNt">
|
||||
<rect key="frame" x="18" y="124" width="216" height="17"/>
|
||||
<rect key="frame" x="38" y="153" width="216" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title=".dsk 143360 bytes" id="rQi-K1-5Cu">
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -204,7 +208,7 @@ CA
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="AOj-bZ-LXp">
|
||||
<rect key="frame" x="249" y="124" width="216" height="17"/>
|
||||
<rect key="frame" x="269" y="153" width="216" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title=".dsk 143360 bytes" id="POW-zB-gIf">
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -213,7 +217,7 @@ CA
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="5oU-oN-vUH">
|
||||
<rect key="frame" x="249" y="175" width="213" height="17"/>
|
||||
<rect key="frame" x="269" y="217" width="213" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="U5Brit.do" id="KvS-JR-AdI">
|
||||
<font key="font" metaFont="system"/>
|
||||
|
@ -222,7 +226,7 @@ CA
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" id="uLZ-yk-ywF">
|
||||
<rect key="frame" x="198" y="13" width="85" height="32"/>
|
||||
<rect key="frame" x="423" y="13" width="85" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Reboot" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6er-wF-Uql">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
|
@ -233,7 +237,7 @@ CA
|
|||
</connections>
|
||||
</button>
|
||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" id="0vx-rm-Mio">
|
||||
<rect key="frame" x="20" y="149" width="212" height="18"/>
|
||||
<rect key="frame" x="40" y="184" width="212" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="91" height="18"/>
|
||||
|
@ -261,7 +265,7 @@ CA
|
|||
</connections>
|
||||
</matrix>
|
||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" id="Alr-gf-yTN">
|
||||
<rect key="frame" x="249" y="149" width="212" height="18"/>
|
||||
<rect key="frame" x="271" y="184" width="212" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="91" height="18"/>
|
||||
|
@ -288,9 +292,34 @@ CA
|
|||
<action selector="diskBProtectionChanged:" target="FHO-g2-V3A" id="kmz-zd-Zal"/>
|
||||
</connections>
|
||||
</matrix>
|
||||
<button id="Ur3-rW-YJG">
|
||||
<rect key="frame" x="149" y="59" width="355" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Startup with these disks" bezelStyle="regularSquare" imagePosition="right" alignment="right" inset="2" id="Jxo-4D-2c5">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="startupDiskChoiceChanged:" target="FHO-g2-V3A" id="eHE-yK-gIr"/>
|
||||
</connections>
|
||||
</button>
|
||||
<box autoresizesSubviews="NO" verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="7ZU-H6-jQn">
|
||||
<rect key="frame" x="12" y="85" width="498" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<box autoresizesSubviews="NO" horizontalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="864-Ov-2tE">
|
||||
<rect key="frame" x="248" y="96" width="5" height="194"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="260" y="-361.5"/>
|
||||
<point key="canvasLocation" x="-139" y="-901"/>
|
||||
</window>
|
||||
<customObject id="FHO-g2-V3A" customClass="EmulatorDiskController">
|
||||
<connections>
|
||||
|
@ -303,6 +332,365 @@ CA
|
|||
<outlet property="diskInA" destination="cb9-Pc-Ggd" id="chv-2S-Y2R"/>
|
||||
<outlet property="diskInB" destination="5oU-oN-vUH" id="8fb-s5-EKa"/>
|
||||
<outlet property="disksWindow" destination="RAk-at-ZT4" id="4wu-vw-EhL"/>
|
||||
<outlet property="startupDisksChoice" destination="Ur3-rW-YJG" id="gv4-SX-8jH"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<window title="Apple2Mac Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" animationBehavior="default" id="Mzv-VG-jce" userLabel="Window - Prefs">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="109" y="132" width="522" height="302"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
|
||||
<view key="contentView" id="bfK-7M-z1X">
|
||||
<rect key="frame" x="0.0" y="0.0" width="522" height="302"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<tabView id="xvZ-VK-VbM">
|
||||
<rect key="frame" x="13" y="10" width="496" height="286"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
<tabViewItems>
|
||||
<tabViewItem label="General" identifier="1" id="9QL-dh-vnO">
|
||||
<view key="view" id="NHh-74-iPh">
|
||||
<rect key="frame" x="10" y="33" width="476" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" id="RMd-Jf-hgi">
|
||||
<rect key="frame" x="196" y="220" width="84" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="CPU Speed" id="cbb-4q-VuM">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" id="hHW-BV-aWU">
|
||||
<rect key="frame" x="196" y="102" width="84" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="Alt Speed" id="aPu-QU-jtF">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="BIH-lT-BN3">
|
||||
<rect key="frame" x="365" y="180" width="44" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="100%" id="mKS-Ef-da9">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="v8u-UP-OWx">
|
||||
<rect key="frame" x="365" y="62" width="44" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="400%" id="LVf-iB-pGv">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<slider verticalHuggingPriority="750" id="HBI-oW-CEl">
|
||||
<rect key="frame" x="15" y="175" width="346" height="27"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<sliderCell key="cell" continuous="YES" alignment="left" minValue="0.25" maxValue="4" doubleValue="1" tickMarkPosition="below" numberOfTickMarks="16" sliderType="linear" id="FcD-OP-Q8S"/>
|
||||
<connections>
|
||||
<action selector="sliderDidMove:" target="mUW-Rh-bL1" id="OS1-pq-YYB"/>
|
||||
</connections>
|
||||
</slider>
|
||||
<button id="cZP-xV-zs3">
|
||||
<rect key="frame" x="413" y="179" width="48" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Max" bezelStyle="regularSquare" imagePosition="left" inset="2" id="YOA-Uz-RHo">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="peggedChoiceChanged:" target="mUW-Rh-bL1" id="CiQ-8c-AlP"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button id="Sjk-sn-E28">
|
||||
<rect key="frame" x="413" y="61" width="48" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Max" bezelStyle="regularSquare" imagePosition="left" inset="2" id="JEt-BY-gNF">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="peggedChoiceChanged:" target="mUW-Rh-bL1" id="K2H-Vc-15h"/>
|
||||
</connections>
|
||||
</button>
|
||||
<box autoresizesSubviews="NO" verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="9U0-v9-wTm">
|
||||
<rect key="frame" x="17" y="125" width="450" height="5"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<slider verticalHuggingPriority="750" id="y10-Rm-oDB">
|
||||
<rect key="frame" x="15" y="57" width="346" height="27"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<sliderCell key="cell" continuous="YES" state="on" alignment="left" minValue="0.25" maxValue="4" doubleValue="4" tickMarkPosition="below" numberOfTickMarks="16" sliderType="linear" id="Moc-Ll-CEH"/>
|
||||
<connections>
|
||||
<action selector="sliderDidMove:" target="mUW-Rh-bL1" id="JWb-jF-Yi8"/>
|
||||
</connections>
|
||||
</slider>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Audio" identifier="1" id="sJk-7J-qt2" userLabel="Audio">
|
||||
<view key="view" id="ct0-V1-eFp">
|
||||
<rect key="frame" x="10" y="33" width="476" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" id="3d5-Z5-xDN">
|
||||
<rect key="frame" x="17" y="179" width="442" height="58"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="442" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" enabled="NO" state="on" inset="2" id="fXT-Uh-8o7">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<cells>
|
||||
<column>
|
||||
<buttonCell type="radio" title="No soundcard" imagePosition="left" alignment="left" enabled="NO" tag="1" inset="2" id="QsT-B1-n2t">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Mockingboard Revision "C" in Slot 4/5" imagePosition="left" alignment="left" enabled="NO" state="on" inset="2" id="dqc-yy-ATU">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Mockingboard Revision "C" in Slot 4, Phasor in Slot 5" imagePosition="left" alignment="left" enabled="NO" inset="2" id="oY0-fc-5pv">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</column>
|
||||
</cells>
|
||||
<connections>
|
||||
<action selector="soundCardChoiceChanged:" target="mUW-Rh-bL1" id="Hba-MC-DJO"/>
|
||||
</connections>
|
||||
</matrix>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Video" identifier="1" id="Hoz-MQ-lVE">
|
||||
<view key="view" id="gXd-lK-Huk">
|
||||
<rect key="frame" x="10" y="33" width="476" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="dak-eg-hHn">
|
||||
<rect key="frame" x="15" y="220" width="96" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Color :" id="eHo-1T-edz">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" id="1sF-py-jCs">
|
||||
<rect key="frame" x="115" y="213" width="158" height="26"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Black/white" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="PX0-X3-MxY" id="eVj-ax-48A">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="gbp-xU-CmX">
|
||||
<items>
|
||||
<menuItem title="Black/white" state="on" id="PX0-X3-MxY">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Color" id="TRN-Jh-rFc">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Interpolated" state="on" id="RgR-Oe-oo5">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="colorChoiceChanged:" target="mUW-Rh-bL1" id="M58-28-Lmr"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<slider verticalHuggingPriority="750" id="9FG-IJ-hYc">
|
||||
<rect key="frame" x="115" y="171" width="346" height="27"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<sliderCell key="cell" enabled="NO" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="below" numberOfTickMarks="5" sliderType="linear" id="Cma-o2-8gh"/>
|
||||
</slider>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="RsU-77-Dkx">
|
||||
<rect key="frame" x="15" y="183" width="96" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Graphic Effects :" id="foK-d1-Lrb">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Joystick" identifier="2" id="Zc6-NX-eT8">
|
||||
<view key="view" id="g6Z-G2-RwC">
|
||||
<rect key="frame" x="10" y="33" width="476" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<box autoresizesSubviews="NO" horizontalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="Fkg-X3-0XG">
|
||||
<rect key="frame" x="236" y="9" width="5" height="236"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<font key="titleFont" metaFont="system"/>
|
||||
</box>
|
||||
<customView id="OWJ-x7-P0q">
|
||||
<rect key="frame" x="259" y="37" width="200" height="200"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" id="qrP-3M-EgH">
|
||||
<rect key="frame" x="46" y="83" width="109" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Calibrate..." bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Zhp-bX-Quw">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="calibrateJoystick:" target="mUW-Rh-bL1" id="zBh-I8-o6E"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</customView>
|
||||
<popUpButton verticalHuggingPriority="750" id="gBd-cR-p7O">
|
||||
<rect key="frame" x="15" y="213" width="218" height="26"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="tK3-cL-Zwi">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="hWa-Gt-x3s">
|
||||
<items>
|
||||
<menuItem title="Joystick Off" id="T86-gP-P52">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Keypad Emulation" id="fm9-GS-v01">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem title="Mac Joystick/Gamepad" state="on" id="rYd-Zm-Btm"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="joystickChoiceChanged:" target="mUW-Rh-bL1" id="0V1-oQ-2ed"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="Zt8-bA-2cM">
|
||||
<rect key="frame" x="245" y="12" width="75" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Button 1 :" id="5aE-WW-hxS">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="ea3-X4-r6a">
|
||||
<rect key="frame" x="15" y="162" width="29" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" alignment="left" title="100" id="XJf-vx-Msv">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="pGe-nD-Lac">
|
||||
<rect key="frame" x="324" y="12" width="18" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="✓" id="ubH-gJ-97X">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="XFG-kU-Ioe">
|
||||
<rect key="frame" x="443" y="12" width="18" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="✓" id="heq-gj-6Z1">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="gWY-LF-DGr">
|
||||
<rect key="frame" x="364" y="12" width="75" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Button 2 :" id="t0J-m7-pfW">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button id="MbK-fn-sy2">
|
||||
<rect key="frame" x="15" y="187" width="217" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Keypad Auto-Recenter" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="swI-VW-5rZ">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="autoRecenterChoiceChanged:" target="mUW-Rh-bL1" id="Ehf-jm-Exs"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="e2h-SS-aex">
|
||||
<rect key="frame" x="69" y="162" width="163" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" enabled="NO" sendsActionOnEndEditing="YES" alignment="left" title="Keypad Sensitivity" id="Gx0-zf-TeB">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="BrH-bm-tx3">
|
||||
<rect key="frame" x="47" y="156" width="19" height="27"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<stepperCell key="cell" continuous="YES" alignment="left" minValue="1" maxValue="255" doubleValue="4" id="Qxz-h1-hQt"/>
|
||||
<connections>
|
||||
<action selector="stepValueChanged:" target="mUW-Rh-bL1" id="2lw-7T-NTu"/>
|
||||
</connections>
|
||||
</stepper>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" id="PLJ-iK-Nsf">
|
||||
<rect key="frame" x="15" y="17" width="217" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Left Alt and right Alt keys are Joystick buttons 1 and 2" id="Kgw-5H-ygQ">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
</tabView>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="-349" y="-891"/>
|
||||
</window>
|
||||
<customObject id="mUW-Rh-bL1" customClass="EmulatorPrefsController">
|
||||
<connections>
|
||||
<outlet property="altMaxChoice" destination="Sjk-sn-E28" id="JHD-Ko-iXi"/>
|
||||
<outlet property="altSlider" destination="y10-Rm-oDB" id="1N0-fA-UNu"/>
|
||||
<outlet property="altSliderLabel" destination="v8u-UP-OWx" id="lF9-Wy-OcU"/>
|
||||
<outlet property="button0Pressed" destination="pGe-nD-Lac" id="E53-NC-AgR"/>
|
||||
<outlet property="button1Pressed" destination="XFG-kU-Ioe" id="ttU-0h-U2c"/>
|
||||
<outlet property="colorChoice" destination="1sF-py-jCs" id="2in-fp-XTK"/>
|
||||
<outlet property="cpuMaxChoice" destination="cZP-xV-zs3" id="FQf-hE-FC6"/>
|
||||
<outlet property="cpuSlider" destination="HBI-oW-CEl" id="xW6-qf-8dt"/>
|
||||
<outlet property="cpuSliderLabel" destination="BIH-lT-BN3" id="DQN-Z9-0pa"/>
|
||||
<outlet property="joystickCalibrationView" destination="OWJ-x7-P0q" id="g08-0g-YOg"/>
|
||||
<outlet property="joystickChoice" destination="gBd-cR-p7O" id="3os-mX-1E4"/>
|
||||
<outlet property="joystickRecenter" destination="MbK-fn-sy2" id="nEJ-ZU-arF"/>
|
||||
<outlet property="joystickStepLabel" destination="ea3-X4-r6a" id="JKX-kB-tcM"/>
|
||||
<outlet property="joystickStepper" destination="BrH-bm-tx3" id="PmM-yE-XNH"/>
|
||||
<outlet property="prefsWindow" destination="Mzv-VG-jce" id="4MA-Wb-bdU"/>
|
||||
<outlet property="soundCardChoice" destination="3d5-Z5-xDN" id="uHI-Ip-s2E"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
</objects>
|
||||
|
|
|
@ -8,6 +8,12 @@
|
|||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
typedef void (^DiskCompletionHandler)(NSOpenPanel *openPanel, NSInteger result);
|
||||
|
||||
@interface EmulatorDiskController : NSWindowController
|
||||
|
||||
+ (NSSet *)emulatorFileTypes;
|
||||
+ (NSString *)extensionForPath:(NSString *)path;
|
||||
+ (void)chooseDiskForWindow:(NSWindow *)window completionHandler:(DiskCompletionHandler)handler;
|
||||
|
||||
@end
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
//
|
||||
|
||||
#import "EmulatorDiskController.h"
|
||||
#import "EmulatorPrefsController.h"
|
||||
#import "common.h"
|
||||
|
||||
#define READONLY_CHOICE_INDEX 0
|
||||
#define NO_DISK_INSERTED @"(No Disk Inserted)"
|
||||
|
@ -27,6 +29,7 @@
|
|||
@property (assign) IBOutlet NSMatrix *diskBProtection;
|
||||
@property (assign) IBOutlet NSButton *chooseDiskA;
|
||||
@property (assign) IBOutlet NSButton *chooseDiskB;
|
||||
@property (assign) IBOutlet NSButton *startupDisksChoice;
|
||||
|
||||
@property (nonatomic, copy) NSString *diskAPath;
|
||||
@property (nonatomic, copy) NSString *diskBPath;
|
||||
|
@ -46,11 +49,47 @@
|
|||
[self.diskBProperties setStringValue:@""];
|
||||
[self.chooseDiskA setKeyEquivalent:@"\r"];
|
||||
[self.chooseDiskA setBezelStyle:NSRoundedBezelStyle];
|
||||
[self.startupDisksChoice setState:NSOffState];
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
NSString *startupDiskA = [defaults stringForKey:kApple2PrefStartupDiskA];
|
||||
BOOL startupDiskAProtection = [defaults boolForKey:kApple2PrefStartupDiskAProtected];
|
||||
if (startupDiskA)
|
||||
{
|
||||
const char *err = c_new_diskette_6(0, [startupDiskA UTF8String], startupDiskAProtection);
|
||||
if (err)
|
||||
{
|
||||
NSString *diskA = [NSString stringWithFormat:@"%@.gz", startupDiskA];
|
||||
err = c_new_diskette_6(0, [diskA UTF8String], startupDiskAProtection);
|
||||
}
|
||||
if (!err)
|
||||
{
|
||||
[self.diskInA setStringValue:[[startupDiskA pathComponents] lastObject]];
|
||||
[self.startupDisksChoice setState:NSOnState];
|
||||
}
|
||||
}
|
||||
|
||||
NSString *startupDiskB = [defaults stringForKey:kApple2PrefStartupDiskB];
|
||||
BOOL startupDiskBProtection = [defaults boolForKey:kApple2PrefStartupDiskBProtected];
|
||||
if (startupDiskB)
|
||||
{
|
||||
const char *err = c_new_diskette_6(1, [startupDiskB UTF8String], startupDiskBProtection);
|
||||
if (err)
|
||||
{
|
||||
NSString *diskB = [NSString stringWithFormat:@"%@.gz", startupDiskB];
|
||||
err = c_new_diskette_6(0, [diskB UTF8String], startupDiskBProtection);
|
||||
}
|
||||
if (!err)
|
||||
{
|
||||
[self.diskInB setStringValue:[[startupDiskB pathComponents] lastObject]];
|
||||
[self.startupDisksChoice setState:NSOnState];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
#warning TODO FIXME ... probably should exit emulator if this gets invoked ...
|
||||
self.diskAPath = nil;
|
||||
self.diskBPath = nil;
|
||||
[super dealloc];
|
||||
|
@ -66,7 +105,7 @@
|
|||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
NSButtonCell *readOnlyChoice = [[[self diskAProtection] cells] firstObject];
|
||||
NSString *path = [self diskAPath];
|
||||
[self _insertDisketteInDrive:0 path:path type:[self _extensionForPath:path] readOnly:([readOnlyChoice state] == NSOnState)];
|
||||
[self _insertDisketteInDrive:0 path:path type:[EmulatorDiskController extensionForPath:path] readOnly:([readOnlyChoice state] == NSOnState)];
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -80,7 +119,7 @@
|
|||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
NSButtonCell *readOnlyChoice = [[[self diskBProtection] cells] firstObject];
|
||||
NSString *path = [self diskBPath];
|
||||
[self _insertDisketteInDrive:1 path:path type:[self _extensionForPath:path] readOnly:([readOnlyChoice state] == NSOnState)];
|
||||
[self _insertDisketteInDrive:1 path:path type:[EmulatorDiskController extensionForPath:path] readOnly:([readOnlyChoice state] == NSOnState)];
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -146,7 +185,17 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
- (NSString *)_extensionForPath:(NSString *)path
|
||||
+ (NSSet *)emulatorFileTypes
|
||||
{
|
||||
static NSSet *set = nil;
|
||||
static dispatch_once_t onceToken = 0L;
|
||||
dispatch_once(&onceToken, ^{
|
||||
set = [[NSSet alloc] initWithObjects:@"dsk", @"nib", @"do", @"po", GZ_EXTENSION, nil];
|
||||
});
|
||||
return [[set retain] autorelease];
|
||||
}
|
||||
|
||||
+ (NSString *)extensionForPath:(NSString *)path
|
||||
{
|
||||
NSString *extension0 = [path pathExtension];
|
||||
NSString *extension1 = [[path stringByDeletingPathExtension] pathExtension];
|
||||
|
@ -157,9 +206,9 @@
|
|||
return extension0;
|
||||
}
|
||||
|
||||
- (void)_chooseDisk:(int)drive readOnly:(BOOL)readOnly
|
||||
+ (void)chooseDiskForWindow:(NSWindow *)window completionHandler:(DiskCompletionHandler)handler
|
||||
{
|
||||
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
|
||||
NSOpenPanel *openPanel = [[NSOpenPanel openPanel] retain];
|
||||
[openPanel setTitle:@"Choose a disk image"];
|
||||
NSURL *url = [[NSUserDefaults standardUserDefaults] URLForKey:kApple2DisksURL];
|
||||
if (!url)
|
||||
|
@ -167,7 +216,6 @@
|
|||
url = [[NSBundle mainBundle] URLForResource:@"blank" withExtension:@"dsk.gz"];
|
||||
url = [url URLByDeletingLastPathComponent];
|
||||
}
|
||||
[[NSUserDefaults standardUserDefaults] setURL:url forKey:kApple2DisksURL];
|
||||
[openPanel setDirectoryURL:url];
|
||||
[openPanel setShowsResizeIndicator:YES];
|
||||
[openPanel setShowsHiddenFiles:NO];
|
||||
|
@ -177,23 +225,39 @@
|
|||
[openPanel setAllowsMultipleSelection:NO];
|
||||
|
||||
// NOTE : Doesn't appear to be a way to specify ".dsk.gz" ... so we may inadvertently allow files of ".foo.gz" here
|
||||
NSSet *fileTypes = [NSSet setWithObjects:@"dsk", @"nib", @"do", @"po", GZ_EXTENSION, nil];
|
||||
NSSet *fileTypes = [EmulatorDiskController emulatorFileTypes];
|
||||
[openPanel setAllowedFileTypes:[fileTypes allObjects]];
|
||||
[openPanel beginSheetModalForWindow:[self disksWindow] completionHandler:^(NSInteger result) {
|
||||
handler = Block_copy(handler);
|
||||
[openPanel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {
|
||||
handler(openPanel, result);
|
||||
Block_release(handler);
|
||||
[openPanel autorelease];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)_chooseDisk:(int)drive readOnly:(BOOL)readOnly
|
||||
{
|
||||
[EmulatorDiskController chooseDiskForWindow:[self disksWindow] completionHandler:^(NSOpenPanel *openPanel, NSInteger result) {
|
||||
if (result == NSOKButton)
|
||||
{
|
||||
NSURL *selection = [[openPanel URLs] firstObject];
|
||||
NSString *path = [[selection path] stringByResolvingSymlinksInPath];
|
||||
NSString *extension = [self _extensionForPath:path];
|
||||
|
||||
NSString *extension = [EmulatorDiskController extensionForPath:path];
|
||||
NSSet *fileTypes = [EmulatorDiskController emulatorFileTypes];
|
||||
|
||||
NSString *directory = [path stringByDeletingLastPathComponent];
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults setURL:[NSURL URLWithString:directory] forKey:kApple2DisksURL];
|
||||
|
||||
if (![fileTypes containsObject:extension])
|
||||
{
|
||||
NSAlert *alert = [NSAlert alertWithError:[NSError errorWithDomain:@"Disk image must have file extension of .dsk, .do, .po, or .nib only" code:-1 userInfo:nil]];
|
||||
[alert beginSheetModalForWindow:[self disksWindow] completionHandler:nil];
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
[self _insertDisketteInDrive:drive path:path type:extension readOnly:readOnly];
|
||||
[self startupDiskChoiceChanged:nil];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
@ -210,4 +274,31 @@
|
|||
[self _chooseDisk:1 readOnly:([readOnlyChoice state] == NSOnState)];
|
||||
}
|
||||
|
||||
- (IBAction)startupDiskChoiceChanged:(id)sender
|
||||
{
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskA];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskB];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskAProtected];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskBProtected];
|
||||
|
||||
if ([self.startupDisksChoice state] == NSOnState)
|
||||
{
|
||||
if (disk6.disk[0].fp)
|
||||
{
|
||||
NSString *diskA = [NSString stringWithUTF8String:disk6.disk[0].file_name];
|
||||
[defaults setObject:diskA forKey:kApple2PrefStartupDiskA];
|
||||
NSButtonCell *readOnlyChoice = [[[self diskAProtection] cells] firstObject];
|
||||
[defaults setBool:([readOnlyChoice state] == NSOnState) forKey:kApple2PrefStartupDiskAProtected];
|
||||
}
|
||||
if (disk6.disk[1].fp)
|
||||
{
|
||||
NSString *diskB = [NSString stringWithUTF8String:disk6.disk[1].file_name];
|
||||
[defaults setObject:diskB forKey:kApple2PrefStartupDiskB];
|
||||
NSButtonCell *readOnlyChoice = [[[self diskBProtection] cells] firstObject];
|
||||
[defaults setBool:([readOnlyChoice state] == NSOnState) forKey:kApple2PrefStartupDiskBProtected];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
18
Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.h
Normal file
18
Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
//
|
||||
// EmulatorPrefsController.h
|
||||
// Apple2Mac
|
||||
//
|
||||
// Created by Aaron Culliney on 10/18/14.
|
||||
// Copyright (c) 2014 deadc0de.org. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
#define kApple2PrefStartupDiskA @"kApple2PrefStartupDiskA"
|
||||
#define kApple2PrefStartupDiskAProtected @"kApple2PrefStartupDiskAProtected"
|
||||
#define kApple2PrefStartupDiskB @"kApple2PrefStartupDiskB"
|
||||
#define kApple2PrefStartupDiskBProtected @"kApple2PrefStartupDiskBProtected"
|
||||
|
||||
@interface EmulatorPrefsController : NSWindowController
|
||||
|
||||
@end
|
232
Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m
Normal file
232
Apple2Mac/Apple2Mac/Classes/OSX/EmulatorPrefsController.m
Normal file
|
@ -0,0 +1,232 @@
|
|||
//
|
||||
// EmulatorPrefsController.m
|
||||
// Apple2Mac
|
||||
//
|
||||
// Created by Aaron Culliney on 10/18/14.
|
||||
// Copyright (c) 2014 deadc0de.org. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EmulatorPrefsController.h"
|
||||
#import "EmulatorDiskController.h"
|
||||
#import "common.h"
|
||||
|
||||
#define kApple2SavedPrefs @"kApple2SavedPrefs"
|
||||
#define kApple2CPUSpeed @"kApple2CPUSpeed"
|
||||
#define kApple2CPUSpeedIsMax @"kApple2CPUSpeedIsMax"
|
||||
#define kApple2AltSpeed @"kApple2AltSpeed"
|
||||
#define kApple2AltSpeedIsMax @"kApple2AltSpeedIsMax"
|
||||
#define kApple2SoundcardConfig @"kApple2SoundcardConfig"
|
||||
#define kApple2ColorConfig @"kApple2ColorConfig"
|
||||
#define kApple2JoystickConfig @"kApple2JoystickConfig"
|
||||
#define kApple2JoystickAutoRecenter @"kApple2JoystickAutoRecenter"
|
||||
#define kApple2JoystickStep @"kApple2JoystickStep"
|
||||
|
||||
@interface EmulatorPrefsController ()
|
||||
|
||||
@property (assign) IBOutlet NSWindow *prefsWindow;
|
||||
|
||||
@property (assign) IBOutlet NSSlider *cpuSlider;
|
||||
@property (assign) IBOutlet NSSlider *altSlider;
|
||||
@property (assign) IBOutlet NSTextField *cpuSliderLabel;
|
||||
@property (assign) IBOutlet NSTextField *altSliderLabel;
|
||||
@property (assign) IBOutlet NSButton *cpuMaxChoice;
|
||||
@property (assign) IBOutlet NSButton *altMaxChoice;
|
||||
|
||||
@property (assign) IBOutlet NSMatrix *soundCardChoice;
|
||||
|
||||
@property (assign) IBOutlet NSPopUpButton *colorChoice;
|
||||
|
||||
@property (assign) IBOutlet NSPopUpButton *joystickChoice;
|
||||
@property (assign) IBOutlet NSButton *joystickRecenter;
|
||||
@property (assign) IBOutlet NSTextField *joystickStepLabel;
|
||||
@property (assign) IBOutlet NSStepper *joystickStepper;
|
||||
|
||||
@property (assign) IBOutlet NSTextField *button0Pressed;
|
||||
@property (assign) IBOutlet NSTextField *button1Pressed;
|
||||
@property (assign) IBOutlet NSView *joystickCalibrationView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation EmulatorPrefsController
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
BOOL firstTime = ![defaults boolForKey:kApple2SavedPrefs];
|
||||
if (firstTime)
|
||||
{
|
||||
[defaults setBool:YES forKey:kApple2SavedPrefs];
|
||||
[defaults setDouble:1.0 forKey:kApple2CPUSpeed];
|
||||
[defaults setDouble:CPU_SCALE_SLOWEST forKey:kApple2AltSpeed];
|
||||
[defaults setBool:NO forKey:kApple2CPUSpeedIsMax];
|
||||
[defaults setBool:NO forKey:kApple2AltSpeedIsMax];
|
||||
[defaults setInteger:COLOR_INTERP forKey:kApple2ColorConfig];
|
||||
[defaults setInteger:JOY_KPAD forKey:kApple2JoystickConfig];
|
||||
[defaults setBool:YES forKey:kApple2JoystickAutoRecenter];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskA];
|
||||
[defaults removeObjectForKey:kApple2PrefStartupDiskB];
|
||||
}
|
||||
|
||||
cpu_scale_factor = [defaults doubleForKey:kApple2CPUSpeed];
|
||||
[self.cpuSlider setDoubleValue:cpu_scale_factor];
|
||||
[self.cpuSliderLabel setStringValue:[NSString stringWithFormat:@"%.0f%%", cpu_scale_factor*100]];
|
||||
if ([defaults boolForKey:kApple2CPUSpeedIsMax])
|
||||
{
|
||||
cpu_scale_factor = CPU_SCALE_FASTEST;
|
||||
[self.cpuMaxChoice setState:NSOnState];
|
||||
[self.cpuSlider setEnabled:NO];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.cpuMaxChoice setState:NSOffState];
|
||||
[self.cpuSlider setEnabled:YES];
|
||||
}
|
||||
|
||||
cpu_altscale_factor = [defaults doubleForKey:kApple2AltSpeed];
|
||||
[self.altSlider setDoubleValue:cpu_altscale_factor];
|
||||
[self.altSliderLabel setStringValue:[NSString stringWithFormat:@"%.0f%%", cpu_altscale_factor*100]];
|
||||
if ([defaults boolForKey:kApple2AltSpeedIsMax])
|
||||
{
|
||||
cpu_altscale_factor = CPU_SCALE_FASTEST;
|
||||
[self.altMaxChoice setState:NSOnState];
|
||||
[self.altSlider setEnabled:NO];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.altMaxChoice setState:NSOffState];
|
||||
[self.altSlider setEnabled:YES];
|
||||
}
|
||||
|
||||
#warning TODO : actually implement sound card choices
|
||||
[self.soundCardChoice deselectAllCells];
|
||||
[self.soundCardChoice selectCellAtRow:1 column:0];
|
||||
|
||||
NSInteger mode = [defaults integerForKey:kApple2ColorConfig];
|
||||
if (! ((mode >= COLOR_NONE) && (mode < NUM_COLOROPTS)) )
|
||||
{
|
||||
mode = COLOR_NONE;
|
||||
}
|
||||
[self.colorChoice selectItemAtIndex:mode];
|
||||
color_mode = (color_mode_t)mode;
|
||||
|
||||
mode = [defaults integerForKey:kApple2JoystickConfig];
|
||||
if (! ((mode >= JOY_OFF) && (mode < NUM_JOYOPTS)) )
|
||||
{
|
||||
mode = JOY_OFF;
|
||||
}
|
||||
joy_mode = (joystick_mode_t)mode;
|
||||
[self.joystickChoice selectItemAtIndex:mode];
|
||||
|
||||
joy_auto_recenter = [defaults integerForKey:kApple2JoystickAutoRecenter];
|
||||
[self.joystickRecenter setState:joy_auto_recenter ? NSOnState : NSOffState];
|
||||
joy_step = [defaults integerForKey:kApple2JoystickStep];
|
||||
[self.joystickStepLabel setIntegerValue:joy_step];
|
||||
[self.joystickStepper setIntegerValue:joy_step];
|
||||
}
|
||||
|
||||
- (void)_savePrefs
|
||||
{
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
[defaults setBool:YES forKey:kApple2SavedPrefs];
|
||||
[defaults setDouble:cpu_scale_factor forKey:kApple2CPUSpeed];
|
||||
[defaults setDouble:cpu_altscale_factor forKey:kApple2AltSpeed];
|
||||
[defaults setBool:([self.cpuMaxChoice state] == NSOnState) forKey:kApple2CPUSpeedIsMax];
|
||||
[defaults setBool:([self.altMaxChoice state] == NSOnState) forKey:kApple2AltSpeedIsMax];
|
||||
[defaults setInteger:color_mode forKey:kApple2ColorConfig];
|
||||
[defaults setInteger:joy_mode forKey:kApple2JoystickConfig];
|
||||
[defaults setBool:joy_auto_recenter forKey:kApple2JoystickAutoRecenter];
|
||||
}
|
||||
|
||||
- (IBAction)sliderDidMove:(id)sender
|
||||
{
|
||||
NSSlider *slider = (NSSlider *)sender;
|
||||
double value = [slider doubleValue];
|
||||
if (slider == self.cpuSlider)
|
||||
{
|
||||
cpu_scale_factor = value;
|
||||
[self.cpuSliderLabel setStringValue:[NSString stringWithFormat:@"%.0f%%", value*100]];
|
||||
}
|
||||
else
|
||||
{
|
||||
cpu_altscale_factor = value;
|
||||
[self.altSliderLabel setStringValue:[NSString stringWithFormat:@"%.0f%%", value*100]];
|
||||
}
|
||||
|
||||
#warning HACK TODO FIXME ... refactor timing stuff
|
||||
timing_toggle_cpu_speed();
|
||||
timing_toggle_cpu_speed();
|
||||
|
||||
[self _savePrefs];
|
||||
}
|
||||
|
||||
- (IBAction)peggedChoiceChanged:(id)sender
|
||||
{
|
||||
NSButton *maxButton = (NSButton *)sender;
|
||||
if (maxButton == self.cpuMaxChoice)
|
||||
{
|
||||
[self.cpuSlider setEnabled:([maxButton state] != NSOnState)];
|
||||
cpu_scale_factor = ([maxButton state] == NSOnState) ? CPU_SCALE_FASTEST : [self.cpuSlider doubleValue];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.altSlider setEnabled:([maxButton state] != NSOnState)];
|
||||
cpu_altscale_factor = ([maxButton state] == NSOnState) ? CPU_SCALE_FASTEST : [self.altSlider doubleValue];
|
||||
}
|
||||
|
||||
#warning HACK TODO FIXME ... refactor timing stuff
|
||||
timing_toggle_cpu_speed();
|
||||
timing_toggle_cpu_speed();
|
||||
|
||||
[self _savePrefs];
|
||||
}
|
||||
|
||||
- (IBAction)colorChoiceChanged:(id)sender
|
||||
{
|
||||
NSInteger mode = [self.colorChoice indexOfSelectedItem];
|
||||
if (! ((mode >= COLOR_NONE) && (mode < NUM_COLOROPTS)) )
|
||||
{
|
||||
mode = COLOR_NONE;
|
||||
}
|
||||
color_mode = (color_mode_t)mode;
|
||||
[self _savePrefs];
|
||||
|
||||
#warning HACK TODO FIXME need to refactor video resetting procedure
|
||||
video_set(0);
|
||||
video_setpage(!!(softswitches & SS_SCREEN));
|
||||
video_redraw();
|
||||
}
|
||||
|
||||
- (IBAction)soundCardChoiceChanged:(id)sender
|
||||
{
|
||||
#warning TODO : make soundcard configurable at runtime
|
||||
}
|
||||
|
||||
- (IBAction)joystickChoiceChanged:(id)sender
|
||||
{
|
||||
NSInteger mode = [self.joystickChoice indexOfSelectedItem];
|
||||
if (! ((mode >= JOY_OFF) && (mode < NUM_JOYOPTS)) )
|
||||
{
|
||||
mode = JOY_OFF;
|
||||
}
|
||||
joy_mode = (joystick_mode_t)mode;
|
||||
[self _savePrefs];
|
||||
}
|
||||
|
||||
- (IBAction)autoRecenterChoiceChanged:(id)sender
|
||||
{
|
||||
joy_auto_recenter = ([self.joystickRecenter state] == NSOnState);
|
||||
[self _savePrefs];
|
||||
}
|
||||
|
||||
- (IBAction)stepValueChanged:(id)sender
|
||||
{
|
||||
joy_step = [self.joystickStepper intValue];
|
||||
[self.joystickStepLabel setIntegerValue:joy_step];
|
||||
[self _savePrefs];
|
||||
}
|
||||
|
||||
- (IBAction)calibrateJoystick:(id)sender
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
@property (assign) IBOutlet EmulatorGLView *view;
|
||||
@property (assign) IBOutlet NSWindow *disksWindow;
|
||||
@property (assign) IBOutlet NSWindow *prefsWindow;
|
||||
|
||||
@property (nonatomic, retain) EmulatorFullscreenWindow *fullscreenWindow;
|
||||
@property (nonatomic, retain) NSWindow *standardWindow;
|
||||
|
@ -74,6 +75,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (IBAction)toggleCPUSpeed:(id)sender
|
||||
{
|
||||
timing_toggle_cpu_speed();
|
||||
}
|
||||
|
||||
- (void)goFullscreen
|
||||
{
|
||||
// If app is already fullscreen...
|
||||
|
|
Loading…
Reference in New Issue
Block a user