mirror of
https://github.com/ksherlock/ample.git
synced 2025-06-17 18:23:32 +00:00
Compare commits
167 Commits
Author | SHA1 | Date | |
---|---|---|---|
8bc7e26279 | |||
aea14d8dd4 | |||
23946962ad | |||
d0987932a8 | |||
c03f888032 | |||
2b127ac5a8 | |||
c6edfe91f2 | |||
11ba25588b | |||
695ed00552 | |||
c8e3c95240 | |||
4acd3d51a7 | |||
93cb6c5276 | |||
52e9f00b92 | |||
453e2bd497 | |||
c722b28ef3 | |||
7a077e5ec8 | |||
436694a0b6 | |||
01e36939aa | |||
20c767021c | |||
b64ca73346 | |||
62767971ee | |||
6b2c4c408a | |||
bbcc41cc10 | |||
f651ca6b26 | |||
16036d9df0 | |||
41653fcae1 | |||
87b4cc9494 | |||
9b349e699f | |||
03c8306718 | |||
41ad1f0d7a | |||
d5ed5f74a2 | |||
2409ad55a1 | |||
601e56ccaa | |||
d5d90ba6be | |||
4a0caa2e78 | |||
23a05d5414 | |||
4ffd8d1f44 | |||
f52470eb2e | |||
65aedba94b | |||
8707b4a246 | |||
5a0fdd5a7e | |||
4e05ff7e8c | |||
781d8ada60 | |||
d258fd2a48 | |||
2b2f3a2fd8 | |||
9bb0cc468a | |||
79c3eba93e | |||
e09a151c91 | |||
ce35015218 | |||
1dd3664a2b | |||
0616991a1b | |||
7633887391 | |||
c49c4df9bf | |||
eda219faa2 | |||
5382447dc9 | |||
8f989c0d3f | |||
1141e3da0d | |||
c5eeec9b6d | |||
2122f0707b | |||
809e344a2d | |||
405e802176 | |||
d352e7c45d | |||
5af5e2e300 | |||
afc3ac608a | |||
c200672650 | |||
345d4f3d74 | |||
b795d60995 | |||
09b4972084 | |||
49c191bf5f | |||
7f5efc1479 | |||
c7fa95c918 | |||
7178118ea9 | |||
e9654f01c0 | |||
098b8cb7da | |||
35b60b1358 | |||
0c56be79f3 | |||
e66502ea42 | |||
70f4738264 | |||
026a9e7704 | |||
7a482191ab | |||
3827cce320 | |||
82fbe43795 | |||
acfc37675b | |||
fa64005345 | |||
f79fb60883 | |||
d92145f6b4 | |||
139ab22f2a | |||
b58a859398 | |||
a278f679b0 | |||
0c55214085 | |||
7c704e577d | |||
d52c2cd9d1 | |||
5aa8990ac6 | |||
82a73ef79c | |||
0d4a08113b | |||
fc3bae79c3 | |||
053b9d84db | |||
c7d0a2aecb | |||
5a098b9d00 | |||
abf4e027ee | |||
ec020cf028 | |||
9ab4b8373d | |||
796b1f2fc8 | |||
d7b3c763dd | |||
32aad8cb61 | |||
1eb3811611 | |||
ac459adb57 | |||
d058aa6588 | |||
3889b42c14 | |||
34fcc3b3ed | |||
c10f2153ff | |||
23afbd8952 | |||
5fbc00e375 | |||
5dd04cd3b7 | |||
27bfc1cd8b | |||
800087096d | |||
669e9a16f4 | |||
7c766ba76e | |||
c307ab0403 | |||
7d1e1bf6bd | |||
9da9f6bd63 | |||
4144a6ad03 | |||
76ac6f777a | |||
6b43c42682 | |||
67f2c60286 | |||
cae68c7f5a | |||
681c70d515 | |||
7abb2f68a0 | |||
4c003007f5 | |||
a5a6222c9f | |||
058da073ee | |||
5e0d31a772 | |||
e958ffe65a | |||
2b0e6d4d9d | |||
33d6c651d0 | |||
0381037356 | |||
c4c2defc01 | |||
46fe931103 | |||
141877f8cb | |||
e9d348ec71 | |||
37b085e45f | |||
7af810d14f | |||
884f8b190a | |||
7b55c37128 | |||
c0534f0107 | |||
69f56830ca | |||
b8697d326c | |||
ef2bbeb9c3 | |||
3d5a2951bb | |||
789d61d9f1 | |||
5ffc85f9fc | |||
7b67522156 | |||
f14b291e60 | |||
576931cd71 | |||
9ed83bf316 | |||
751083ea26 | |||
1b7faf3ac4 | |||
bfbac2cc20 | |||
3bf2f63bf6 | |||
6468ee2629 | |||
5f84c4b2c1 | |||
8944c88339 | |||
3d4d0c92c7 | |||
e48e2a9223 | |||
a8e03a9490 | |||
5e87627251 | |||
41de913e5f |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,9 @@
|
|||||||
dist
|
dist
|
||||||
embedded/mame64
|
embedded/mame64
|
||||||
embedded/SDL2.framework
|
embedded/SDL2.framework
|
||||||
|
embedded/Sparkle.framework
|
||||||
|
embedded/Sparkle-*
|
||||||
|
embedded/SDL2-*
|
||||||
build
|
build
|
||||||
embedded/mame-data.tgz
|
embedded/mame-data.tgz
|
||||||
__pycache__
|
__pycache__
|
||||||
|
@ -62,6 +62,20 @@
|
|||||||
B6152B5725F4549F00605E6E /* Slot.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5525F4549F00605E6E /* Slot.m */; };
|
B6152B5725F4549F00605E6E /* Slot.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5525F4549F00605E6E /* Slot.m */; };
|
||||||
B6152B5A25F5B57E00605E6E /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5925F5B57E00605E6E /* Media.m */; };
|
B6152B5A25F5B57E00605E6E /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5925F5B57E00605E6E /* Media.m */; };
|
||||||
B6152B5B25F5B57E00605E6E /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5925F5B57E00605E6E /* Media.m */; };
|
B6152B5B25F5B57E00605E6E /* Media.m in Sources */ = {isa = PBXBuildFile; fileRef = B6152B5925F5B57E00605E6E /* Media.m */; };
|
||||||
|
B615A99F26640940001FBF99 /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E9A18125088B36005E7525 /* SlotView.xib */; };
|
||||||
|
B615A9A026640A70001FBF99 /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E9A17F25088B1B005E7525 /* SlotViewController.m */; };
|
||||||
|
B618B8C42729F6690045C2D8 /* laser128o.plist in Resources */ = {isa = PBXBuildFile; fileRef = B618B8C32729F6690045C2D8 /* laser128o.plist */; };
|
||||||
|
B618B8C52729F6690045C2D8 /* laser128o.plist in Resources */ = {isa = PBXBuildFile; fileRef = B618B8C32729F6690045C2D8 /* laser128o.plist */; };
|
||||||
|
B63005332666D6940014C381 /* BookmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B63005322666D6940014C381 /* BookmarkManager.m */; };
|
||||||
|
B63005342666D6940014C381 /* BookmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B63005322666D6940014C381 /* BookmarkManager.m */; };
|
||||||
|
B6301BE429107BE800495022 /* maclc520.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE329107BE800495022 /* maclc520.plist */; };
|
||||||
|
B6301BE529107BE800495022 /* maclc520.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE329107BE800495022 /* maclc520.plist */; };
|
||||||
|
B6301BE729107C1E00495022 /* maccclas.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE629107C1E00495022 /* maccclas.plist */; };
|
||||||
|
B6301BE829107C1E00495022 /* maccclas.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6301BE629107C1E00495022 /* maccclas.plist */; };
|
||||||
|
B635C09A26784A1200B23BFD /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09926784A1200B23BFD /* Sparkle.framework */; };
|
||||||
|
B635C09B26784A1200B23BFD /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09926784A1200B23BFD /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
B635C09D26784A4800B23BFD /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B635C09C26784A4800B23BFD /* Sparkle.framework */; };
|
||||||
|
B635C09F26784D4700B23BFD /* AmpleLite.m in Sources */ = {isa = PBXBuildFile; fileRef = B635C09E26784D4700B23BFD /* AmpleLite.m */; };
|
||||||
B6374AC4260EBBCF0045CA16 /* pty_shell.c in Sources */ = {isa = PBXBuildFile; fileRef = B6374AB6260EBB970045CA16 /* pty_shell.c */; };
|
B6374AC4260EBBCF0045CA16 /* pty_shell.c in Sources */ = {isa = PBXBuildFile; fileRef = B6374AB6260EBB970045CA16 /* pty_shell.c */; };
|
||||||
B6374AC5260EBC5A0045CA16 /* pty_shell in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6374ABD260EBBC90045CA16 /* pty_shell */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
B6374AC5260EBC5A0045CA16 /* pty_shell in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6374ABD260EBBC90045CA16 /* pty_shell */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6374AC9260ECB3F0045CA16 /* macclas2.plist */; };
|
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6374AC9260ECB3F0045CA16 /* macclas2.plist */; };
|
||||||
@ -110,6 +124,8 @@
|
|||||||
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */; };
|
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */; };
|
||||||
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
||||||
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
|
||||||
|
B63E57E22755AF2000F8B5D1 /* ace500.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63E57E12755AF1F00F8B5D1 /* ace500.plist */; };
|
||||||
|
B63E57E32755AF2000F8B5D1 /* ace500.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63E57E12755AF1F00F8B5D1 /* ace500.plist */; };
|
||||||
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
||||||
B646D10C263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
B646D10C263A5DF30014C586 /* ace1000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B646D10A263A5DF20014C586 /* ace1000.plist */; };
|
||||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
||||||
@ -121,7 +137,6 @@
|
|||||||
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F5250ED5E400A09B9B /* TableCellView.m */; };
|
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F5250ED5E400A09B9B /* TableCellView.m */; };
|
||||||
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
||||||
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = B64AF1F9250EF6A500A09B9B /* Transformers.m */; };
|
||||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* MachineViewController.m */; };
|
|
||||||
B65085B925B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
B65085B925B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
||||||
B65085BA25B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
B65085BA25B616AC00354EC9 /* maclc2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B625B616AC00354EC9 /* maclc2.plist */; };
|
||||||
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B725B616AC00354EC9 /* maclc3.plist */; };
|
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */ = {isa = PBXBuildFile; fileRef = B65085B725B616AC00354EC9 /* maclc3.plist */; };
|
||||||
@ -133,13 +148,23 @@
|
|||||||
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */; };
|
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */; };
|
||||||
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B66236B224FDA522006CABD7 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B66236B224FDA522006CABD7 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
B66236C124FDB7A6006CABD7 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B66236BF24FDB7A6006CABD7 /* Credits.rtf */; };
|
B66236C124FDB7A6006CABD7 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B66236BF24FDB7A6006CABD7 /* Credits.rtf */; };
|
||||||
|
B6665C14265A0E3E00254939 /* AutocompleteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = B6665C13265A0E3E00254939 /* AutocompleteControl.m */; };
|
||||||
|
B6665C15265A0E3E00254939 /* AutocompleteControl.m in Sources */ = {isa = PBXBuildFile; fileRef = B6665C13265A0E3E00254939 /* AutocompleteControl.m */; };
|
||||||
|
B6665C1C265C639A00254939 /* Autocomplete.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6665C1A265C639900254939 /* Autocomplete.xib */; };
|
||||||
|
B6665C1D265C639A00254939 /* Autocomplete.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6665C1A265C639900254939 /* Autocomplete.xib */; };
|
||||||
B66D0FE72611386C000902F1 /* SoftwareList.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D0FE62611386B000902F1 /* SoftwareList.m */; };
|
B66D0FE72611386C000902F1 /* SoftwareList.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D0FE62611386B000902F1 /* SoftwareList.m */; };
|
||||||
B66D0FE82611386C000902F1 /* SoftwareList.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D0FE62611386B000902F1 /* SoftwareList.m */; };
|
B66D0FE82611386C000902F1 /* SoftwareList.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D0FE62611386B000902F1 /* SoftwareList.m */; };
|
||||||
B6841BD7251EC926006A5C39 /* vmnet_helper.c in Sources */ = {isa = PBXBuildFile; fileRef = B6841BCA251EC88E006A5C39 /* vmnet_helper.c */; };
|
B6841BD7251EC926006A5C39 /* vmnet_helper.c in Sources */ = {isa = PBXBuildFile; fileRef = B6841BCA251EC88E006A5C39 /* vmnet_helper.c */; };
|
||||||
B6841BDA251ECB1C006A5C39 /* mame64 in CopyFiles */ = {isa = PBXBuildFile; fileRef = B66236B824FDA698006CABD7 /* mame64 */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
B6841BDA251ECB1C006A5C39 /* mame64 in CopyFiles */ = {isa = PBXBuildFile; fileRef = B66236B824FDA698006CABD7 /* mame64 */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
B6841BDE251ECC29006A5C39 /* vmnet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6841BDD251ECC29006A5C39 /* vmnet.framework */; };
|
B6841BDE251ECC29006A5C39 /* vmnet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6841BDD251ECC29006A5C39 /* vmnet.framework */; };
|
||||||
|
B68A899026BE18E000B2C8C6 /* MidiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B68A898F26BE18E000B2C8C6 /* MidiManager.m */; };
|
||||||
|
B68A899126BE18E000B2C8C6 /* MidiManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B68A898F26BE18E000B2C8C6 /* MidiManager.m */; };
|
||||||
|
B68A899426BF124B00B2C8C6 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */; };
|
||||||
|
B68A899526BF12A600B2C8C6 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */; };
|
||||||
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
||||||
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A1A1932528EB1700DB0FD7 /* Menu.m */; };
|
||||||
|
B6ABF47C275986EB00DC3D48 /* ace2200.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6ABF47B275986EA00DC3D48 /* ace2200.plist */; };
|
||||||
|
B6ABF47D275986EB00DC3D48 /* ace2200.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6ABF47B275986EA00DC3D48 /* ace2200.plist */; };
|
||||||
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
||||||
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B9EA642506A5550080E70D /* EjectButton.m */; };
|
||||||
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
||||||
@ -194,7 +219,6 @@
|
|||||||
B6E08076252574690075F4E1 /* vmnet_helper in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6841BD0251EC913006A5C39 /* vmnet_helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
B6E08076252574690075F4E1 /* vmnet_helper in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6841BD0251EC913006A5C39 /* vmnet_helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
B6E4B5B024FDE2670094A35C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA258724E99BEB005FB8FF /* main.m */; };
|
B6E4B5B024FDE2670094A35C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA258724E99BEB005FB8FF /* main.m */; };
|
||||||
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */; };
|
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6D6DE4024FADFAC00661A5F /* LaunchWindowController.m */; };
|
||||||
B6E4B5B224FDE2670094A35C /* MachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64E15A824EA1D5300E8AD3D /* MachineViewController.m */; };
|
|
||||||
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
|
||||||
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */ = {isa = PBXBuildFile; fileRef = B60A6E1324EE0AE2004B7EEF /* FlippedView.m */; };
|
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */ = {isa = PBXBuildFile; fileRef = B60A6E1324EE0AE2004B7EEF /* FlippedView.m */; };
|
||||||
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BA257F24E99BE9005FB8FF /* AppDelegate.m */; };
|
||||||
@ -253,8 +277,28 @@
|
|||||||
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F224F5F36F005CB652 /* apple2jp.plist */; };
|
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */ = {isa = PBXBuildFile; fileRef = B61099F224F5F36F005CB652 /* apple2jp.plist */; };
|
||||||
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0324F5F371005CB652 /* apple2.plist */; };
|
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0324F5F371005CB652 /* apple2.plist */; };
|
||||||
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0024F5F371005CB652 /* prav8m.plist */; };
|
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6109A0024F5F371005CB652 /* prav8m.plist */; };
|
||||||
B6E9A18025088B1B005E7525 /* NewSlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E9A17F25088B1B005E7525 /* NewSlotViewController.m */; };
|
B6E6DCEB27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */; };
|
||||||
B6E9A18325088B36005E7525 /* NewSlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E9A18125088B36005E7525 /* NewSlotView.xib */; };
|
B6E6DCEC27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */; };
|
||||||
|
B6E6DCF727B0873200E0A76E /* BookmarkWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */; };
|
||||||
|
B6E6DCF827B0873200E0A76E /* BookmarkWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */; };
|
||||||
|
B6E6DCFB27B0A09300E0A76E /* BookmarkWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */; };
|
||||||
|
B6E6DCFC27B0A09300E0A76E /* BookmarkWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */; };
|
||||||
|
B6E6DD0127B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */; };
|
||||||
|
B6E6DD0227B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */; };
|
||||||
|
B6E6DD0327B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */; };
|
||||||
|
B6E6DD0427B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */; };
|
||||||
|
B6E6DD1327B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */; };
|
||||||
|
B6E6DD1427B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */; };
|
||||||
|
B6E6DD1527B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */; };
|
||||||
|
B6E6DD1627B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */; };
|
||||||
|
B6E9A18025088B1B005E7525 /* SlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E9A17F25088B1B005E7525 /* SlotViewController.m */; };
|
||||||
|
B6E9A18325088B36005E7525 /* SlotView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6E9A18125088B36005E7525 /* SlotView.xib */; };
|
||||||
|
B6F7B538266FDA5B00624C6B /* MachineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6F7B536266FDA5B00624C6B /* MachineView.xib */; };
|
||||||
|
B6F7B539266FDA5B00624C6B /* MachineView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6F7B536266FDA5B00624C6B /* MachineView.xib */; };
|
||||||
|
B6F7B53C267017A200624C6B /* NewMachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F7B53B267017A200624C6B /* NewMachineViewController.m */; };
|
||||||
|
B6F7B53D267017A200624C6B /* NewMachineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F7B53B267017A200624C6B /* NewMachineViewController.m */; };
|
||||||
|
B6FECAFB28C0093600E143DA /* las3000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6FECAFA28C0093600E143DA /* las3000.plist */; };
|
||||||
|
B6FECAFC28C0093600E143DA /* las3000.plist in Resources */ = {isa = PBXBuildFile; fileRef = B6FECAFA28C0093600E143DA /* las3000.plist */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
@ -274,6 +318,7 @@
|
|||||||
dstSubfolderSpec = 10;
|
dstSubfolderSpec = 10;
|
||||||
files = (
|
files = (
|
||||||
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */,
|
B66236B524FDA527006CABD7 /* SDL2.framework in Embed Frameworks */,
|
||||||
|
B635C09B26784A1200B23BFD /* Sparkle.framework in Embed Frameworks */,
|
||||||
);
|
);
|
||||||
name = "Embed Frameworks";
|
name = "Embed Frameworks";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -317,10 +362,8 @@
|
|||||||
B6004DEF24FB05D600D38596 /* LogWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = LogWindow.xib; path = Base.lproj/LogWindow.xib; sourceTree = "<group>"; };
|
B6004DEF24FB05D600D38596 /* LogWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = LogWindow.xib; path = Base.lproj/LogWindow.xib; sourceTree = "<group>"; };
|
||||||
B608E17D2502FE0C00D53465 /* TransparentScroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TransparentScroller.h; sourceTree = "<group>"; };
|
B608E17D2502FE0C00D53465 /* TransparentScroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TransparentScroller.h; sourceTree = "<group>"; };
|
||||||
B608E17E2502FE0C00D53465 /* TransparentScroller.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TransparentScroller.m; sourceTree = "<group>"; };
|
B608E17E2502FE0C00D53465 /* TransparentScroller.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TransparentScroller.m; sourceTree = "<group>"; };
|
||||||
B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2gs.plist; sourceTree = "<group>"; };
|
|
||||||
B60A6E1224EE0AE2004B7EEF /* FlippedView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FlippedView.h; sourceTree = "<group>"; };
|
B60A6E1224EE0AE2004B7EEF /* FlippedView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FlippedView.h; sourceTree = "<group>"; };
|
||||||
B60A6E1324EE0AE2004B7EEF /* FlippedView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlippedView.m; sourceTree = "<group>"; };
|
B60A6E1324EE0AE2004B7EEF /* FlippedView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlippedView.m; sourceTree = "<group>"; };
|
||||||
B61099E424F5F230005CB652 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SlotView.xib; sourceTree = "<group>"; };
|
|
||||||
B61099E624F5F230005CB652 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MediaView.xib; sourceTree = "<group>"; };
|
B61099E624F5F230005CB652 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MediaView.xib; sourceTree = "<group>"; };
|
||||||
B61099EA24F5F36E005CB652 /* apple2e.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2e.plist; sourceTree = "<group>"; };
|
B61099EA24F5F36E005CB652 /* apple2e.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2e.plist; sourceTree = "<group>"; };
|
||||||
B61099EB24F5F36E005CB652 /* hkc8800a.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = hkc8800a.plist; sourceTree = "<group>"; };
|
B61099EB24F5F36E005CB652 /* hkc8800a.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = hkc8800a.plist; sourceTree = "<group>"; };
|
||||||
@ -367,10 +410,20 @@
|
|||||||
B6109A1424F5F376005CB652 /* apple2cp.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2cp.plist; sourceTree = "<group>"; };
|
B6109A1424F5F376005CB652 /* apple2cp.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2cp.plist; sourceTree = "<group>"; };
|
||||||
B6109A1524F5F376005CB652 /* apple2p.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2p.plist; sourceTree = "<group>"; };
|
B6109A1524F5F376005CB652 /* apple2p.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple2p.plist; sourceTree = "<group>"; };
|
||||||
B6109A1624F5F376005CB652 /* agat7.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = agat7.plist; sourceTree = "<group>"; };
|
B6109A1624F5F376005CB652 /* agat7.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = agat7.plist; sourceTree = "<group>"; };
|
||||||
|
B611BA392679489F008597B5 /* pty_shell.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = pty_shell.entitlements; sourceTree = "<group>"; };
|
||||||
|
B611BA3A267948B5008597B5 /* vmnet_helper.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = vmnet_helper.entitlements; sourceTree = "<group>"; };
|
||||||
B6152B5425F4549F00605E6E /* Slot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Slot.h; sourceTree = "<group>"; };
|
B6152B5425F4549F00605E6E /* Slot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Slot.h; sourceTree = "<group>"; };
|
||||||
B6152B5525F4549F00605E6E /* Slot.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Slot.m; sourceTree = "<group>"; };
|
B6152B5525F4549F00605E6E /* Slot.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Slot.m; sourceTree = "<group>"; };
|
||||||
B6152B5825F5B4F100605E6E /* Media.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Media.h; sourceTree = "<group>"; };
|
B6152B5825F5B4F100605E6E /* Media.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Media.h; sourceTree = "<group>"; };
|
||||||
B6152B5925F5B57E00605E6E /* Media.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Media.m; sourceTree = "<group>"; };
|
B6152B5925F5B57E00605E6E /* Media.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Media.m; sourceTree = "<group>"; };
|
||||||
|
B618B8C32729F6690045C2D8 /* laser128o.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = laser128o.plist; sourceTree = "<group>"; };
|
||||||
|
B63005312666D6940014C381 /* BookmarkManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BookmarkManager.h; sourceTree = "<group>"; };
|
||||||
|
B63005322666D6940014C381 /* BookmarkManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BookmarkManager.m; sourceTree = "<group>"; };
|
||||||
|
B6301BE329107BE800495022 /* maclc520.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc520.plist; sourceTree = "<group>"; };
|
||||||
|
B6301BE629107C1E00495022 /* maccclas.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maccclas.plist; sourceTree = "<group>"; };
|
||||||
|
B635C09926784A1200B23BFD /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = embedded/Sparkle.framework; sourceTree = "<group>"; };
|
||||||
|
B635C09C26784A4800B23BFD /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = embedded/Sparkle.framework; sourceTree = "<group>"; };
|
||||||
|
B635C09E26784D4700B23BFD /* AmpleLite.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AmpleLite.m; sourceTree = "<group>"; };
|
||||||
B6374AB6260EBB970045CA16 /* pty_shell.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pty_shell.c; sourceTree = "<group>"; };
|
B6374AB6260EBB970045CA16 /* pty_shell.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pty_shell.c; sourceTree = "<group>"; };
|
||||||
B6374ABD260EBBC90045CA16 /* pty_shell */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = pty_shell; sourceTree = BUILT_PRODUCTS_DIR; };
|
B6374ABD260EBBC90045CA16 /* pty_shell */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = pty_shell; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
B6374AC9260ECB3F0045CA16 /* macclas2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macclas2.plist; sourceTree = "<group>"; };
|
B6374AC9260ECB3F0045CA16 /* macclas2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macclas2.plist; sourceTree = "<group>"; };
|
||||||
@ -400,6 +453,7 @@
|
|||||||
B63C1F0D25B1447C0016A611 /* CheatSheetWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheatSheetWindowController.h; sourceTree = "<group>"; };
|
B63C1F0D25B1447C0016A611 /* CheatSheetWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheatSheetWindowController.h; sourceTree = "<group>"; };
|
||||||
B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheatSheetWindowController.m; sourceTree = "<group>"; };
|
B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheatSheetWindowController.m; sourceTree = "<group>"; };
|
||||||
B63C1F1125B147E10016A611 /* CheatSheet.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = CheatSheet.html; sourceTree = "<group>"; };
|
B63C1F1125B147E10016A611 /* CheatSheet.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = CheatSheet.html; sourceTree = "<group>"; };
|
||||||
|
B63E57E12755AF1F00F8B5D1 /* ace500.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace500.plist; sourceTree = "<group>"; };
|
||||||
B646D10A263A5DF20014C586 /* ace1000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace1000.plist; sourceTree = "<group>"; };
|
B646D10A263A5DF20014C586 /* ace1000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace1000.plist; sourceTree = "<group>"; };
|
||||||
B64979C024EF6703008ABD20 /* MediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaViewController.h; sourceTree = "<group>"; };
|
B64979C024EF6703008ABD20 /* MediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaViewController.h; sourceTree = "<group>"; };
|
||||||
B64979C124EF6703008ABD20 /* MediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaViewController.m; sourceTree = "<group>"; };
|
B64979C124EF6703008ABD20 /* MediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaViewController.m; sourceTree = "<group>"; };
|
||||||
@ -415,22 +469,26 @@
|
|||||||
B65085B625B616AC00354EC9 /* maclc2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc2.plist; sourceTree = "<group>"; };
|
B65085B625B616AC00354EC9 /* maclc2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc2.plist; sourceTree = "<group>"; };
|
||||||
B65085B725B616AC00354EC9 /* maclc3.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc3.plist; sourceTree = "<group>"; };
|
B65085B725B616AC00354EC9 /* maclc3.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maclc3.plist; sourceTree = "<group>"; };
|
||||||
B65085B825B616AC00354EC9 /* maciici.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maciici.plist; sourceTree = "<group>"; };
|
B65085B825B616AC00354EC9 /* maciici.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = maciici.plist; sourceTree = "<group>"; };
|
||||||
B65593AF24ECB61800722E0C /* SlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotViewController.h; sourceTree = "<group>"; };
|
|
||||||
B65593B024ECB61800722E0C /* SlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotViewController.m; sourceTree = "<group>"; };
|
|
||||||
B65D718525E70BD5008C5F87 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
B65D718525E70BD5008C5F87 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||||
B66236A724FD9A34006CABD7 /* PreferencesWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PreferencesWindowController.h; sourceTree = "<group>"; };
|
B66236A724FD9A34006CABD7 /* PreferencesWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PreferencesWindowController.h; sourceTree = "<group>"; };
|
||||||
B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindowController.m; sourceTree = "<group>"; };
|
B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PreferencesWindowController.m; sourceTree = "<group>"; };
|
||||||
B66236B224FDA522006CABD7 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = embedded/SDL2.framework; sourceTree = "<group>"; };
|
B66236B224FDA522006CABD7 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = embedded/SDL2.framework; sourceTree = "<group>"; };
|
||||||
B66236B824FDA698006CABD7 /* mame64 */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = mame64; path = embedded/mame64; sourceTree = "<group>"; };
|
B66236B824FDA698006CABD7 /* mame64 */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = mame64; path = embedded/mame64; sourceTree = "<group>"; };
|
||||||
B66236C024FDB7A6006CABD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Base; path = Base.lproj/Credits.rtf; sourceTree = "<group>"; };
|
B66236C024FDB7A6006CABD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Base; path = Base.lproj/Credits.rtf; sourceTree = "<group>"; };
|
||||||
|
B6665C12265A0E3E00254939 /* AutocompleteControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutocompleteControl.h; sourceTree = "<group>"; };
|
||||||
|
B6665C13265A0E3E00254939 /* AutocompleteControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutocompleteControl.m; sourceTree = "<group>"; };
|
||||||
|
B6665C1B265C639900254939 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Autocomplete.xib; sourceTree = "<group>"; };
|
||||||
B66D0FE62611386B000902F1 /* SoftwareList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SoftwareList.m; sourceTree = "<group>"; };
|
B66D0FE62611386B000902F1 /* SoftwareList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SoftwareList.m; sourceTree = "<group>"; };
|
||||||
B66D0FE926113AA8000902F1 /* SoftwareList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoftwareList.h; sourceTree = "<group>"; };
|
B66D0FE926113AA8000902F1 /* SoftwareList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoftwareList.h; sourceTree = "<group>"; };
|
||||||
B67BD48424EE249D0073E334 /* apple1.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = apple1.plist; sourceTree = "<group>"; };
|
|
||||||
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vmnet_helper.c; sourceTree = "<group>"; };
|
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vmnet_helper.c; sourceTree = "<group>"; };
|
||||||
B6841BD0251EC913006A5C39 /* vmnet_helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = vmnet_helper; sourceTree = BUILT_PRODUCTS_DIR; };
|
B6841BD0251EC913006A5C39 /* vmnet_helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = vmnet_helper; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
B6841BDD251ECC29006A5C39 /* vmnet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vmnet.framework; path = System/Library/Frameworks/vmnet.framework; sourceTree = SDKROOT; };
|
B6841BDD251ECC29006A5C39 /* vmnet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vmnet.framework; path = System/Library/Frameworks/vmnet.framework; sourceTree = SDKROOT; };
|
||||||
|
B68A898F26BE18E000B2C8C6 /* MidiManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MidiManager.m; sourceTree = "<group>"; };
|
||||||
|
B68A899226BE320200B2C8C6 /* MidiManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MidiManager.h; sourceTree = "<group>"; };
|
||||||
|
B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||||
B6A1A1932528EB1700DB0FD7 /* Menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Menu.m; sourceTree = "<group>"; };
|
B6A1A1932528EB1700DB0FD7 /* Menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Menu.m; sourceTree = "<group>"; };
|
||||||
B6A1A1962528EB4600DB0FD7 /* Menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Menu.h; sourceTree = "<group>"; };
|
B6A1A1962528EB4600DB0FD7 /* Menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Menu.h; sourceTree = "<group>"; };
|
||||||
|
B6ABF47B275986EA00DC3D48 /* ace2200.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ace2200.plist; sourceTree = "<group>"; };
|
||||||
B6B9EA642506A5550080E70D /* EjectButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EjectButton.m; sourceTree = "<group>"; };
|
B6B9EA642506A5550080E70D /* EjectButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EjectButton.m; sourceTree = "<group>"; };
|
||||||
B6B9EA652506A5550080E70D /* EjectButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EjectButton.h; sourceTree = "<group>"; };
|
B6B9EA652506A5550080E70D /* EjectButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EjectButton.h; sourceTree = "<group>"; };
|
||||||
B6BA257B24E99BE9005FB8FF /* Ample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
B6BA257B24E99BE9005FB8FF /* Ample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@ -468,9 +526,27 @@
|
|||||||
B6DE32422605482500418375 /* mac512k.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = mac512k.plist; sourceTree = "<group>"; };
|
B6DE32422605482500418375 /* mac512k.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = mac512k.plist; sourceTree = "<group>"; };
|
||||||
B6DE32432605482500418375 /* macse.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macse.plist; sourceTree = "<group>"; };
|
B6DE32432605482500418375 /* macse.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = macse.plist; sourceTree = "<group>"; };
|
||||||
B6E4B5FA24FDE2670094A35C /* Ample Lite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ample Lite.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
B6E4B5FA24FDE2670094A35C /* Ample Lite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ample Lite.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
B6E9A17E25088B1B005E7525 /* NewSlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NewSlotViewController.h; sourceTree = "<group>"; };
|
B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Ample.xcdatamodel; sourceTree = "<group>"; };
|
||||||
B6E9A17F25088B1B005E7525 /* NewSlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NewSlotViewController.m; sourceTree = "<group>"; };
|
B6E6DCF627B0873100E0A76E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/BookmarkWindow.xib; sourceTree = "<group>"; };
|
||||||
B6E9A18225088B36005E7525 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/NewSlotView.xib; sourceTree = "<group>"; };
|
B6E6DCF927B0A09300E0A76E /* BookmarkWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BookmarkWindowController.h; sourceTree = "<group>"; };
|
||||||
|
B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BookmarkWindowController.m; sourceTree = "<group>"; };
|
||||||
|
B6E6DCFD27B0D17C00E0A76E /* Bookmark+CoreDataProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bookmark+CoreDataProperties.h"; sourceTree = "<group>"; };
|
||||||
|
B6E6DCFE27B0D17C00E0A76E /* Bookmark+CoreDataClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bookmark+CoreDataClass.h"; sourceTree = "<group>"; };
|
||||||
|
B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Bookmark+CoreDataClass.m"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Bookmark+CoreDataProperties.m"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD0E27B161C400E0A76E /* Bookmark.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Bookmark.h; path = Ample/Bookmark.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
B6E6DD0F27B1D71700E0A76E /* DiskImage+CoreDataProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DiskImage+CoreDataProperties.h"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD1027B1D71700E0A76E /* DiskImage+CoreDataClass.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DiskImage+CoreDataClass.h"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DiskImage+CoreDataClass.m"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DiskImage+CoreDataProperties.m"; sourceTree = "<group>"; };
|
||||||
|
B6E6DD1727B1DF5F00E0A76E /* DiskImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DiskImage.h; sourceTree = "<group>"; };
|
||||||
|
B6E9A17E25088B1B005E7525 /* SlotViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SlotViewController.h; sourceTree = "<group>"; };
|
||||||
|
B6E9A17F25088B1B005E7525 /* SlotViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SlotViewController.m; sourceTree = "<group>"; };
|
||||||
|
B6E9A18225088B36005E7525 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SlotView.xib; sourceTree = "<group>"; };
|
||||||
|
B6F7B537266FDA5B00624C6B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MachineView.xib; sourceTree = "<group>"; };
|
||||||
|
B6F7B53A267017A200624C6B /* NewMachineViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NewMachineViewController.h; sourceTree = "<group>"; };
|
||||||
|
B6F7B53B267017A200624C6B /* NewMachineViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NewMachineViewController.m; sourceTree = "<group>"; };
|
||||||
|
B6FECAFA28C0093600E143DA /* las3000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = las3000.plist; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -494,6 +570,9 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
B65D718625E70BD5008C5F87 /* WebKit.framework in Frameworks */,
|
B65D718625E70BD5008C5F87 /* WebKit.framework in Frameworks */,
|
||||||
|
B635C09D26784A4800B23BFD /* Sparkle.framework in Frameworks */,
|
||||||
|
B68A899426BF124B00B2C8C6 /* CoreMIDI.framework in Frameworks */,
|
||||||
|
B635C09A26784A1200B23BFD /* Sparkle.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -501,6 +580,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
B68A899526BF12A600B2C8C6 /* CoreMIDI.framework in Frameworks */,
|
||||||
B65D718725E70BE5008C5F87 /* WebKit.framework in Frameworks */,
|
B65D718725E70BE5008C5F87 /* WebKit.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -511,6 +591,7 @@
|
|||||||
B6374AB2260EBB970045CA16 /* pty_shell */ = {
|
B6374AB2260EBB970045CA16 /* pty_shell */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B611BA392679489F008597B5 /* pty_shell.entitlements */,
|
||||||
B6374AB6260EBB970045CA16 /* pty_shell.c */,
|
B6374AB6260EBB970045CA16 /* pty_shell.c */,
|
||||||
);
|
);
|
||||||
path = pty_shell;
|
path = pty_shell;
|
||||||
@ -519,8 +600,6 @@
|
|||||||
B649798C24EEC165008ABD20 /* Recovered References */ = {
|
B649798C24EEC165008ABD20 /* Recovered References */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B67BD48424EE249D0073E334 /* apple1.plist */,
|
|
||||||
B60A6E0B24ECE23F004B7EEF /* apple2gs.plist */,
|
|
||||||
);
|
);
|
||||||
name = "Recovered References";
|
name = "Recovered References";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -529,7 +608,9 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B6109A0824F5F373005CB652 /* ace100.plist */,
|
B6109A0824F5F373005CB652 /* ace100.plist */,
|
||||||
|
B63E57E12755AF1F00F8B5D1 /* ace500.plist */,
|
||||||
B646D10A263A5DF20014C586 /* ace1000.plist */,
|
B646D10A263A5DF20014C586 /* ace1000.plist */,
|
||||||
|
B6ABF47B275986EA00DC3D48 /* ace2200.plist */,
|
||||||
B6109A1624F5F376005CB652 /* agat7.plist */,
|
B6109A1624F5F376005CB652 /* agat7.plist */,
|
||||||
B6109A1224F5F375005CB652 /* agat9.plist */,
|
B6109A1224F5F375005CB652 /* agat9.plist */,
|
||||||
B6109A1124F5F375005CB652 /* albert.plist */,
|
B6109A1124F5F375005CB652 /* albert.plist */,
|
||||||
@ -568,6 +649,8 @@
|
|||||||
B61099F724F5F36F005CB652 /* las128ex.plist */,
|
B61099F724F5F36F005CB652 /* las128ex.plist */,
|
||||||
B61099F824F5F36F005CB652 /* laser2c.plist */,
|
B61099F824F5F36F005CB652 /* laser2c.plist */,
|
||||||
B6109A1024F5F375005CB652 /* laser128.plist */,
|
B6109A1024F5F375005CB652 /* laser128.plist */,
|
||||||
|
B618B8C32729F6690045C2D8 /* laser128o.plist */,
|
||||||
|
B6FECAFA28C0093600E143DA /* las3000.plist */,
|
||||||
B6109A0B24F5F373005CB652 /* maxxi.plist */,
|
B6109A0B24F5F373005CB652 /* maxxi.plist */,
|
||||||
B61099ED24F5F36E005CB652 /* microeng.plist */,
|
B61099ED24F5F36E005CB652 /* microeng.plist */,
|
||||||
B61099F524F5F36F005CB652 /* models.plist */,
|
B61099F524F5F36F005CB652 /* models.plist */,
|
||||||
@ -587,6 +670,7 @@
|
|||||||
B6374AE2260ECDDD0045CA16 /* mac2fdhd.plist */,
|
B6374AE2260ECDDD0045CA16 /* mac2fdhd.plist */,
|
||||||
B6DE32422605482500418375 /* mac512k.plist */,
|
B6DE32422605482500418375 /* mac512k.plist */,
|
||||||
B6DE323F2605482400418375 /* mac512ke.plist */,
|
B6DE323F2605482400418375 /* mac512ke.plist */,
|
||||||
|
B6301BE629107C1E00495022 /* maccclas.plist */,
|
||||||
B6374AC9260ECB3F0045CA16 /* macclas2.plist */,
|
B6374AC9260ECB3F0045CA16 /* macclas2.plist */,
|
||||||
B6DE323E2605482400418375 /* macclasc.plist */,
|
B6DE323E2605482400418375 /* macclasc.plist */,
|
||||||
B6374ACA260ECB3F0045CA16 /* macii.plist */,
|
B6374ACA260ECB3F0045CA16 /* macii.plist */,
|
||||||
@ -600,6 +684,7 @@
|
|||||||
B6DD1FE725B407E6004A3242 /* maclc.plist */,
|
B6DD1FE725B407E6004A3242 /* maclc.plist */,
|
||||||
B65085B625B616AC00354EC9 /* maclc2.plist */,
|
B65085B625B616AC00354EC9 /* maclc2.plist */,
|
||||||
B65085B725B616AC00354EC9 /* maclc3.plist */,
|
B65085B725B616AC00354EC9 /* maclc3.plist */,
|
||||||
|
B6301BE329107BE800495022 /* maclc520.plist */,
|
||||||
B6DE32412605482500418375 /* macplus.plist */,
|
B6DE32412605482500418375 /* macplus.plist */,
|
||||||
B6DE32432605482500418375 /* macse.plist */,
|
B6DE32432605482500418375 /* macse.plist */,
|
||||||
B6374AD0260ECB400045CA16 /* macse30.plist */,
|
B6374AD0260ECB400045CA16 /* macse30.plist */,
|
||||||
@ -611,6 +696,8 @@
|
|||||||
B66236B624FDA686006CABD7 /* Frameworks */ = {
|
B66236B624FDA686006CABD7 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B68A899326BF124B00B2C8C6 /* CoreMIDI.framework */,
|
||||||
|
B635C09926784A1200B23BFD /* Sparkle.framework */,
|
||||||
B65D718525E70BD5008C5F87 /* WebKit.framework */,
|
B65D718525E70BD5008C5F87 /* WebKit.framework */,
|
||||||
B6841BDD251ECC29006A5C39 /* vmnet.framework */,
|
B6841BDD251ECC29006A5C39 /* vmnet.framework */,
|
||||||
);
|
);
|
||||||
@ -622,6 +709,7 @@
|
|||||||
children = (
|
children = (
|
||||||
B63C1B8D25004C6D00511A71 /* mame-data.tgz */,
|
B63C1B8D25004C6D00511A71 /* mame-data.tgz */,
|
||||||
B66236B824FDA698006CABD7 /* mame64 */,
|
B66236B824FDA698006CABD7 /* mame64 */,
|
||||||
|
B635C09C26784A4800B23BFD /* Sparkle.framework */,
|
||||||
B66236B224FDA522006CABD7 /* SDL2.framework */,
|
B66236B224FDA522006CABD7 /* SDL2.framework */,
|
||||||
);
|
);
|
||||||
name = "Embedded Content";
|
name = "Embedded Content";
|
||||||
@ -630,6 +718,7 @@
|
|||||||
B6841BD1251EC913006A5C39 /* vmnet_helper */ = {
|
B6841BD1251EC913006A5C39 /* vmnet_helper */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B611BA3A267948B5008597B5 /* vmnet_helper.entitlements */,
|
||||||
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */,
|
B6841BCA251EC88E006A5C39 /* vmnet_helper.c */,
|
||||||
);
|
);
|
||||||
path = vmnet_helper;
|
path = vmnet_helper;
|
||||||
@ -662,22 +751,26 @@
|
|||||||
B6BA257D24E99BE9005FB8FF /* Ample */ = {
|
B6BA257D24E99BE9005FB8FF /* Ample */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B6E6DD0527B160D400E0A76E /* Core Data */,
|
||||||
|
B6665C12265A0E3E00254939 /* AutocompleteControl.h */,
|
||||||
|
B6665C13265A0E3E00254939 /* AutocompleteControl.m */,
|
||||||
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */,
|
B6BA257E24E99BE9005FB8FF /* AppDelegate.h */,
|
||||||
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */,
|
B6BA257F24E99BE9005FB8FF /* AppDelegate.m */,
|
||||||
B63C1B8924FF4B7100511A71 /* Ample.h */,
|
B63C1B8924FF4B7100511A71 /* Ample.h */,
|
||||||
|
B635C09E26784D4700B23BFD /* AmpleLite.m */,
|
||||||
B63C1B8A24FF4BF700511A71 /* Ample.m */,
|
B63C1B8A24FF4BF700511A71 /* Ample.m */,
|
||||||
|
B6E6DD0E27B161C400E0A76E /* Bookmark.h */,
|
||||||
|
B6E6DD1727B1DF5F00E0A76E /* DiskImage.h */,
|
||||||
B64AF1F4250ED5E400A09B9B /* TableCellView.h */,
|
B64AF1F4250ED5E400A09B9B /* TableCellView.h */,
|
||||||
B64AF1F5250ED5E400A09B9B /* TableCellView.m */,
|
B64AF1F5250ED5E400A09B9B /* TableCellView.m */,
|
||||||
B6152B5425F4549F00605E6E /* Slot.h */,
|
B6152B5425F4549F00605E6E /* Slot.h */,
|
||||||
B6152B5525F4549F00605E6E /* Slot.m */,
|
B6152B5525F4549F00605E6E /* Slot.m */,
|
||||||
B6152B5825F5B4F100605E6E /* Media.h */,
|
B6152B5825F5B4F100605E6E /* Media.h */,
|
||||||
B6152B5925F5B57E00605E6E /* Media.m */,
|
B6152B5925F5B57E00605E6E /* Media.m */,
|
||||||
B6E9A17E25088B1B005E7525 /* NewSlotViewController.h */,
|
B6E9A17E25088B1B005E7525 /* SlotViewController.h */,
|
||||||
B6E9A17F25088B1B005E7525 /* NewSlotViewController.m */,
|
B6E9A17F25088B1B005E7525 /* SlotViewController.m */,
|
||||||
B6A1A1932528EB1700DB0FD7 /* Menu.m */,
|
B6A1A1932528EB1700DB0FD7 /* Menu.m */,
|
||||||
B6A1A1962528EB4600DB0FD7 /* Menu.h */,
|
B6A1A1962528EB4600DB0FD7 /* Menu.h */,
|
||||||
B65593B024ECB61800722E0C /* SlotViewController.m */,
|
|
||||||
B65593AF24ECB61800722E0C /* SlotViewController.h */,
|
|
||||||
B64979C024EF6703008ABD20 /* MediaViewController.h */,
|
B64979C024EF6703008ABD20 /* MediaViewController.h */,
|
||||||
B64979C124EF6703008ABD20 /* MediaViewController.m */,
|
B64979C124EF6703008ABD20 /* MediaViewController.m */,
|
||||||
B64E15A724EA1D5300E8AD3D /* MachineViewController.h */,
|
B64E15A724EA1D5300E8AD3D /* MachineViewController.h */,
|
||||||
@ -688,11 +781,17 @@
|
|||||||
B608E17E2502FE0C00D53465 /* TransparentScroller.m */,
|
B608E17E2502FE0C00D53465 /* TransparentScroller.m */,
|
||||||
B66D0FE62611386B000902F1 /* SoftwareList.m */,
|
B66D0FE62611386B000902F1 /* SoftwareList.m */,
|
||||||
B66D0FE926113AA8000902F1 /* SoftwareList.h */,
|
B66D0FE926113AA8000902F1 /* SoftwareList.h */,
|
||||||
|
B63005312666D6940014C381 /* BookmarkManager.h */,
|
||||||
|
B63005322666D6940014C381 /* BookmarkManager.m */,
|
||||||
|
B6F7B53A267017A200624C6B /* NewMachineViewController.h */,
|
||||||
|
B6F7B53B267017A200624C6B /* NewMachineViewController.m */,
|
||||||
B6BA563A251685DA00B0C47D /* Window Controllers */,
|
B6BA563A251685DA00B0C47D /* Window Controllers */,
|
||||||
B6B9EA652506A5550080E70D /* EjectButton.h */,
|
B6B9EA652506A5550080E70D /* EjectButton.h */,
|
||||||
B6B9EA642506A5550080E70D /* EjectButton.m */,
|
B6B9EA642506A5550080E70D /* EjectButton.m */,
|
||||||
B64AF1F8250EF6A500A09B9B /* Transformers.h */,
|
B64AF1F8250EF6A500A09B9B /* Transformers.h */,
|
||||||
B64AF1F9250EF6A500A09B9B /* Transformers.m */,
|
B64AF1F9250EF6A500A09B9B /* Transformers.m */,
|
||||||
|
B68A898F26BE18E000B2C8C6 /* MidiManager.m */,
|
||||||
|
B68A899226BE320200B2C8C6 /* MidiManager.h */,
|
||||||
B6BA258124E99BEB005FB8FF /* Assets.xcassets */,
|
B6BA258124E99BEB005FB8FF /* Assets.xcassets */,
|
||||||
B64E15AF24EA365E00E8AD3D /* Resources */,
|
B64E15AF24EA365E00E8AD3D /* Resources */,
|
||||||
B6BA258624E99BEB005FB8FF /* Info.plist */,
|
B6BA258624E99BEB005FB8FF /* Info.plist */,
|
||||||
@ -708,6 +807,8 @@
|
|||||||
B6BA563A251685DA00B0C47D /* Window Controllers */ = {
|
B6BA563A251685DA00B0C47D /* Window Controllers */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
B6E6DCF927B0A09300E0A76E /* BookmarkWindowController.h */,
|
||||||
|
B6E6DCFA27B0A09300E0A76E /* BookmarkWindowController.m */,
|
||||||
B64AF1F0250ECB2E00A09B9B /* DiskImagesWindowController.h */,
|
B64AF1F0250ECB2E00A09B9B /* DiskImagesWindowController.h */,
|
||||||
B64AF1F1250ECB2E00A09B9B /* DiskImagesWindowController.m */,
|
B64AF1F1250ECB2E00A09B9B /* DiskImagesWindowController.m */,
|
||||||
B63C1B9125008A2700511A71 /* DownloadWindowController.h */,
|
B63C1B9125008A2700511A71 /* DownloadWindowController.h */,
|
||||||
@ -727,7 +828,10 @@
|
|||||||
B6D6DE4224FAEE8900661A5F /* Nibs */ = {
|
B6D6DE4224FAEE8900661A5F /* Nibs */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B6E9A18125088B36005E7525 /* NewSlotView.xib */,
|
B6665C1A265C639900254939 /* Autocomplete.xib */,
|
||||||
|
B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */,
|
||||||
|
B6E9A18125088B36005E7525 /* SlotView.xib */,
|
||||||
|
B6F7B536266FDA5B00624C6B /* MachineView.xib */,
|
||||||
B63C1B9325008A2700511A71 /* DownloadWindow.xib */,
|
B63C1B9325008A2700511A71 /* DownloadWindow.xib */,
|
||||||
B66236BF24FDB7A6006CABD7 /* Credits.rtf */,
|
B66236BF24FDB7A6006CABD7 /* Credits.rtf */,
|
||||||
B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */,
|
B6D6DE3C24FADF8B00661A5F /* LaunchWindow.xib */,
|
||||||
@ -735,7 +839,6 @@
|
|||||||
B6BA258324E99BEB005FB8FF /* MainMenu.xib */,
|
B6BA258324E99BEB005FB8FF /* MainMenu.xib */,
|
||||||
B61099E524F5F230005CB652 /* MediaView.xib */,
|
B61099E524F5F230005CB652 /* MediaView.xib */,
|
||||||
B6D6DE3724FAC8B500661A5F /* Preferences.xib */,
|
B6D6DE3724FAC8B500661A5F /* Preferences.xib */,
|
||||||
B61099E324F5F230005CB652 /* SlotView.xib */,
|
|
||||||
B64AF1EC250EC35B00A09B9B /* DiskImages.xib */,
|
B64AF1EC250EC35B00A09B9B /* DiskImages.xib */,
|
||||||
B63C1F0925B143C50016A611 /* CheatSheet.xib */,
|
B63C1F0925B143C50016A611 /* CheatSheet.xib */,
|
||||||
);
|
);
|
||||||
@ -761,6 +864,22 @@
|
|||||||
path = images;
|
path = images;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
B6E6DD0527B160D400E0A76E /* Core Data */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */,
|
||||||
|
B6E6DCFE27B0D17C00E0A76E /* Bookmark+CoreDataClass.h */,
|
||||||
|
B6E6DCFF27B0D17C00E0A76E /* Bookmark+CoreDataClass.m */,
|
||||||
|
B6E6DCFD27B0D17C00E0A76E /* Bookmark+CoreDataProperties.h */,
|
||||||
|
B6E6DD0027B0D17C00E0A76E /* Bookmark+CoreDataProperties.m */,
|
||||||
|
B6E6DD1027B1D71700E0A76E /* DiskImage+CoreDataClass.h */,
|
||||||
|
B6E6DD1127B1D71700E0A76E /* DiskImage+CoreDataClass.m */,
|
||||||
|
B6E6DD0F27B1D71700E0A76E /* DiskImage+CoreDataProperties.h */,
|
||||||
|
B6E6DD1227B1D71700E0A76E /* DiskImage+CoreDataProperties.m */,
|
||||||
|
);
|
||||||
|
path = "Core Data";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@ -808,6 +927,7 @@
|
|||||||
B66236B124FDA443006CABD7 /* Embed Frameworks */,
|
B66236B124FDA443006CABD7 /* Embed Frameworks */,
|
||||||
B6152B5C25F6F4F800605E6E /* ShellScript */,
|
B6152B5C25F6F4F800605E6E /* ShellScript */,
|
||||||
B66236BB24FDA71D006CABD7 /* CopyFiles */,
|
B66236BB24FDA71D006CABD7 /* CopyFiles */,
|
||||||
|
B611BA3D26796483008597B5 /* ShellScript */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -882,33 +1002,55 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
B6DDECD62505A86E0093587A /* eject-16x16.png in Resources */,
|
||||||
|
B6DDECCC2505A86E0093587A /* eject-16x16@2x.png in Resources */,
|
||||||
|
B6FECAFB28C0093600E143DA /* las3000.plist in Resources */,
|
||||||
|
B6DDECCE2505A86E0093587A /* eject-16x16@3x.png in Resources */,
|
||||||
|
B6DDECD02505A86E0093587A /* eject-hover-16x16.png in Resources */,
|
||||||
|
B6DDECD22505A86E0093587A /* eject-hover-16x16@2x.png in Resources */,
|
||||||
|
B6DDECD42505A86E0093587A /* eject-hover-16x16@3x.png in Resources */,
|
||||||
|
B6DE323826044C1100418375 /* caution.png in Resources */,
|
||||||
|
B6DE323626044C1100418375 /* caution@2x.png in Resources */,
|
||||||
|
B6DE323B26044DB800418375 /* caution@3x.png in Resources */,
|
||||||
|
B6DDECC025057A550093587A /* drag-handle-4x10.png in Resources */,
|
||||||
|
B6DDECC225057A550093587A /* drag-handle-4x10@2x.png in Resources */,
|
||||||
|
B6DDECC425057A550093587A /* drag-handle-4x10@3x.png in Resources */,
|
||||||
|
B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */,
|
||||||
|
B6D6DE3E24FADF8B00661A5F /* LaunchWindow.xib in Resources */,
|
||||||
|
B6004DF124FB05D600D38596 /* LogWindow.xib in Resources */,
|
||||||
|
B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */,
|
||||||
|
B6665C1C265C639A00254939 /* Autocomplete.xib in Resources */,
|
||||||
|
B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */,
|
||||||
|
B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */,
|
||||||
|
B61099E824F5F231005CB652 /* MediaView.xib in Resources */,
|
||||||
|
B6E9A18325088B36005E7525 /* SlotView.xib in Resources */,
|
||||||
|
B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */,
|
||||||
|
B63C1F0B25B143C50016A611 /* CheatSheet.xib in Resources */,
|
||||||
B6109A3324F5F377005CB652 /* apple2eeuk.plist in Resources */,
|
B6109A3324F5F377005CB652 /* apple2eeuk.plist in Resources */,
|
||||||
|
B6E6DCF727B0873200E0A76E /* BookmarkWindow.xib in Resources */,
|
||||||
B6374ADB260ECB400045CA16 /* maciix.plist in Resources */,
|
B6374ADB260ECB400045CA16 /* maciix.plist in Resources */,
|
||||||
B6109A2424F5F377005CB652 /* las128ex.plist in Resources */,
|
B6109A2424F5F377005CB652 /* las128ex.plist in Resources */,
|
||||||
|
B618B8C42729F6690045C2D8 /* laser128o.plist in Resources */,
|
||||||
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */,
|
B646D10B263A5DF30014C586 /* ace1000.plist in Resources */,
|
||||||
B63C1BA8250192E600511A71 /* zijini.plist in Resources */,
|
B63C1BA8250192E600511A71 /* zijini.plist in Resources */,
|
||||||
B6109A1D24F5F377005CB652 /* space84.plist in Resources */,
|
B6109A1D24F5F377005CB652 /* space84.plist in Resources */,
|
||||||
B6374AD9260ECB400045CA16 /* maciicx.plist in Resources */,
|
B6374AD9260ECB400045CA16 /* maciicx.plist in Resources */,
|
||||||
B6109A3F24F5F377005CB652 /* agat9.plist in Resources */,
|
B6109A3F24F5F377005CB652 /* agat9.plist in Resources */,
|
||||||
B63C1B9D250192D800511A71 /* cece.plist in Resources */,
|
B63C1B9D250192D800511A71 /* cece.plist in Resources */,
|
||||||
B6D6DE3E24FADF8B00661A5F /* LaunchWindow.xib in Resources */,
|
|
||||||
B6109A3124F5F377005CB652 /* apple1.plist in Resources */,
|
B6109A3124F5F377005CB652 /* apple1.plist in Resources */,
|
||||||
B6374AD3260ECB400045CA16 /* macii.plist in Resources */,
|
B6374AD3260ECB400045CA16 /* macii.plist in Resources */,
|
||||||
|
B63E57E22755AF2000F8B5D1 /* ace500.plist in Resources */,
|
||||||
B6109A3524F5F377005CB652 /* ace100.plist in Resources */,
|
B6109A3524F5F377005CB652 /* ace100.plist in Resources */,
|
||||||
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */,
|
B65085BB25B616AC00354EC9 /* maclc3.plist in Resources */,
|
||||||
B6109A3424F5F377005CB652 /* am64.plist in Resources */,
|
B6109A3424F5F377005CB652 /* am64.plist in Resources */,
|
||||||
B6DDECCC2505A86E0093587A /* eject-16x16@2x.png in Resources */,
|
|
||||||
B6DE32462605482500418375 /* macclasc.plist in Resources */,
|
B6DE32462605482500418375 /* macclasc.plist in Resources */,
|
||||||
B6004DF124FB05D600D38596 /* LogWindow.xib in Resources */,
|
|
||||||
B6DE32502605482500418375 /* macse.plist in Resources */,
|
B6DE32502605482500418375 /* macse.plist in Resources */,
|
||||||
B6BA258224E99BEB005FB8FF /* Assets.xcassets in Resources */,
|
|
||||||
B6109A1724F5F377005CB652 /* apple2e.plist in Resources */,
|
B6109A1724F5F377005CB652 /* apple2e.plist in Resources */,
|
||||||
B6109A3C24F5F377005CB652 /* am100.plist in Resources */,
|
B6109A3C24F5F377005CB652 /* am100.plist in Resources */,
|
||||||
B6DDECD02505A86E0093587A /* eject-hover-16x16.png in Resources */,
|
|
||||||
B6109A2524F5F377005CB652 /* laser2c.plist in Resources */,
|
B6109A2524F5F377005CB652 /* laser2c.plist in Resources */,
|
||||||
B6109A3D24F5F377005CB652 /* laser128.plist in Resources */,
|
B6109A3D24F5F377005CB652 /* laser128.plist in Resources */,
|
||||||
B6109A2824F5F377005CB652 /* apple2ep.plist in Resources */,
|
B6109A2824F5F377005CB652 /* apple2ep.plist in Resources */,
|
||||||
B6DDECC225057A550093587A /* drag-handle-4x10@2x.png in Resources */,
|
B6F7B538266FDA5B00624C6B /* MachineView.xib in Resources */,
|
||||||
B6109A1924F5F377005CB652 /* apple2ees.plist in Resources */,
|
B6109A1924F5F377005CB652 /* apple2ees.plist in Resources */,
|
||||||
B6DE32482605482500418375 /* mac512ke.plist in Resources */,
|
B6DE32482605482500418375 /* mac512ke.plist in Resources */,
|
||||||
B6109A3924F5F377005CB652 /* prav8c.plist in Resources */,
|
B6109A3924F5F377005CB652 /* prav8c.plist in Resources */,
|
||||||
@ -920,15 +1062,11 @@
|
|||||||
B6109A2E24F5F377005CB652 /* apple2eefr.plist in Resources */,
|
B6109A2E24F5F377005CB652 /* apple2eefr.plist in Resources */,
|
||||||
B6109A2C24F5F377005CB652 /* spectred.plist in Resources */,
|
B6109A2C24F5F377005CB652 /* spectred.plist in Resources */,
|
||||||
B6109A4124F5F377005CB652 /* apple2cp.plist in Resources */,
|
B6109A4124F5F377005CB652 /* apple2cp.plist in Resources */,
|
||||||
B6BA258524E99BEB005FB8FF /* MainMenu.xib in Resources */,
|
|
||||||
B6109A3A24F5F377005CB652 /* prav82.plist in Resources */,
|
B6109A3A24F5F377005CB652 /* prav82.plist in Resources */,
|
||||||
B6DD1FE825B407E7004A3242 /* maclc.plist in Resources */,
|
B6DD1FE825B407E7004A3242 /* maclc.plist in Resources */,
|
||||||
B6109A2024F5F377005CB652 /* apple2euk.plist in Resources */,
|
B6109A2024F5F377005CB652 /* apple2euk.plist in Resources */,
|
||||||
B6DE324C2605482500418375 /* macplus.plist in Resources */,
|
B6DE324C2605482500418375 /* macplus.plist in Resources */,
|
||||||
B6DE323826044C1100418375 /* caution.png in Resources */,
|
|
||||||
B6109A2F24F5F377005CB652 /* uniap2ti.plist in Resources */,
|
B6109A2F24F5F377005CB652 /* uniap2ti.plist in Resources */,
|
||||||
B6DDECD42505A86E0093587A /* eject-hover-16x16@3x.png in Resources */,
|
|
||||||
B6DDECD62505A86E0093587A /* eject-16x16.png in Resources */,
|
|
||||||
B6109A1E24F5F377005CB652 /* apple2c.plist in Resources */,
|
B6109A1E24F5F377005CB652 /* apple2c.plist in Resources */,
|
||||||
B6109A1A24F5F377005CB652 /* microeng.plist in Resources */,
|
B6109A1A24F5F377005CB652 /* microeng.plist in Resources */,
|
||||||
B6374AD5260ECB400045CA16 /* maciisi.plist in Resources */,
|
B6374AD5260ECB400045CA16 /* maciisi.plist in Resources */,
|
||||||
@ -939,48 +1077,39 @@
|
|||||||
B6109A1824F5F377005CB652 /* hkc8800a.plist in Resources */,
|
B6109A1824F5F377005CB652 /* hkc8800a.plist in Resources */,
|
||||||
B6109A2324F5F377005CB652 /* apple2gsr0.plist in Resources */,
|
B6109A2324F5F377005CB652 /* apple2gsr0.plist in Resources */,
|
||||||
B63C1BA1250192D800511A71 /* cecg.plist in Resources */,
|
B63C1BA1250192D800511A71 /* cecg.plist in Resources */,
|
||||||
B6DE323626044C1100418375 /* caution@2x.png in Resources */,
|
|
||||||
B63C1BA3250192D800511A71 /* cec2000.plist in Resources */,
|
B63C1BA3250192D800511A71 /* cec2000.plist in Resources */,
|
||||||
B6109A2624F5F377005CB652 /* mprof3.plist in Resources */,
|
B6109A2624F5F377005CB652 /* mprof3.plist in Resources */,
|
||||||
B63C1B9F250192D800511A71 /* ceci.plist in Resources */,
|
B63C1B9F250192D800511A71 /* ceci.plist in Resources */,
|
||||||
B6109A3224F5F377005CB652 /* basis108.plist in Resources */,
|
B6109A3224F5F377005CB652 /* basis108.plist in Resources */,
|
||||||
B6DE323B26044DB800418375 /* caution@3x.png in Resources */,
|
|
||||||
B6109A4324F5F377005CB652 /* agat7.plist in Resources */,
|
B6109A4324F5F377005CB652 /* agat7.plist in Resources */,
|
||||||
|
B6ABF47C275986EB00DC3D48 /* ace2200.plist in Resources */,
|
||||||
B6DE324E2605482500418375 /* mac512k.plist in Resources */,
|
B6DE324E2605482500418375 /* mac512k.plist in Resources */,
|
||||||
B6DDECC425057A550093587A /* drag-handle-4x10@3x.png in Resources */,
|
|
||||||
B6109A2B24F5F377005CB652 /* elppa.plist in Resources */,
|
B6109A2B24F5F377005CB652 /* elppa.plist in Resources */,
|
||||||
B63C1B8E25004C6D00511A71 /* mame-data.tgz in Resources */,
|
B63C1B8E25004C6D00511A71 /* mame-data.tgz in Resources */,
|
||||||
B6DDECCE2505A86E0093587A /* eject-16x16@3x.png in Resources */,
|
|
||||||
B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */,
|
|
||||||
B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */,
|
B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */,
|
||||||
B65085BD25B616AC00354EC9 /* maciici.plist in Resources */,
|
B65085BD25B616AC00354EC9 /* maciici.plist in Resources */,
|
||||||
|
B6301BE429107BE800495022 /* maclc520.plist in Resources */,
|
||||||
B6374AE3260ECDDD0045CA16 /* maciihmu.plist in Resources */,
|
B6374AE3260ECDDD0045CA16 /* maciihmu.plist in Resources */,
|
||||||
B6374ADF260ECB400045CA16 /* macse30.plist in Resources */,
|
B6374ADF260ECB400045CA16 /* macse30.plist in Resources */,
|
||||||
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */,
|
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */,
|
||||||
B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */,
|
|
||||||
B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */,
|
B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */,
|
||||||
B6109A2224F5F377005CB652 /* models.plist in Resources */,
|
B6109A2224F5F377005CB652 /* models.plist in Resources */,
|
||||||
B6109A4024F5F377005CB652 /* craft2p.plist in Resources */,
|
B6109A4024F5F377005CB652 /* craft2p.plist in Resources */,
|
||||||
B6109A1B24F5F377005CB652 /* uniap2pt.plist in Resources */,
|
B6109A1B24F5F377005CB652 /* uniap2pt.plist in Resources */,
|
||||||
B6109A3724F5F377005CB652 /* las128e2.plist in Resources */,
|
B6109A3724F5F377005CB652 /* las128e2.plist in Resources */,
|
||||||
B61099E824F5F231005CB652 /* MediaView.xib in Resources */,
|
|
||||||
B6374AE5260ECDDD0045CA16 /* mac2fdhd.plist in Resources */,
|
B6374AE5260ECDDD0045CA16 /* mac2fdhd.plist in Resources */,
|
||||||
B63C1B90250088DD00511A71 /* roms.plist in Resources */,
|
B63C1B90250088DD00511A71 /* roms.plist in Resources */,
|
||||||
B6109A2724F5F377005CB652 /* uniap2en.plist in Resources */,
|
B6109A2724F5F377005CB652 /* uniap2en.plist in Resources */,
|
||||||
B6109A2A24F5F377005CB652 /* apple3.plist in Resources */,
|
B6109A2A24F5F377005CB652 /* apple3.plist in Resources */,
|
||||||
B6109A2124F5F377005CB652 /* apple2ee.plist in Resources */,
|
B6109A2124F5F377005CB652 /* apple2ee.plist in Resources */,
|
||||||
B63C1BA5250192D800511A71 /* cecm.plist in Resources */,
|
B63C1BA5250192D800511A71 /* cecm.plist in Resources */,
|
||||||
B6E9A18325088B36005E7525 /* NewSlotView.xib in Resources */,
|
|
||||||
B6DDECC025057A550093587A /* drag-handle-4x10.png in Resources */,
|
|
||||||
B6DDECD22505A86E0093587A /* eject-hover-16x16@2x.png in Resources */,
|
|
||||||
B6109A3624F5F377005CB652 /* dodo.plist in Resources */,
|
B6109A3624F5F377005CB652 /* dodo.plist in Resources */,
|
||||||
B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */,
|
|
||||||
B6109A2924F5F377005CB652 /* apple2gs.plist in Resources */,
|
B6109A2924F5F377005CB652 /* apple2gs.plist in Resources */,
|
||||||
B6109A1F24F5F377005CB652 /* apple2jp.plist in Resources */,
|
B6109A1F24F5F377005CB652 /* apple2jp.plist in Resources */,
|
||||||
B63C1F0B25B143C50016A611 /* CheatSheet.xib in Resources */,
|
|
||||||
B6374AD7260ECB400045CA16 /* maciivi.plist in Resources */,
|
B6374AD7260ECB400045CA16 /* maciivi.plist in Resources */,
|
||||||
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */,
|
B6374AD1260ECB400045CA16 /* macclas2.plist in Resources */,
|
||||||
B6DE324A2605482500418375 /* macsefd.plist in Resources */,
|
B6DE324A2605482500418375 /* macsefd.plist in Resources */,
|
||||||
|
B6301BE729107C1E00495022 /* maccclas.plist in Resources */,
|
||||||
B6109A3024F5F377005CB652 /* apple2.plist in Resources */,
|
B6109A3024F5F377005CB652 /* apple2.plist in Resources */,
|
||||||
B6109A2D24F5F377005CB652 /* prav8m.plist in Resources */,
|
B6109A2D24F5F377005CB652 /* prav8m.plist in Resources */,
|
||||||
);
|
);
|
||||||
@ -990,7 +1119,18 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
B6DDECD72505A86E0093587A /* eject-16x16.png in Resources */,
|
||||||
|
B6DDECCD2505A86E0093587A /* eject-16x16@2x.png in Resources */,
|
||||||
B6DDECCF2505A86E0093587A /* eject-16x16@3x.png in Resources */,
|
B6DDECCF2505A86E0093587A /* eject-16x16@3x.png in Resources */,
|
||||||
|
B6DDECD12505A86E0093587A /* eject-hover-16x16.png in Resources */,
|
||||||
|
B6DDECD32505A86E0093587A /* eject-hover-16x16@2x.png in Resources */,
|
||||||
|
B6DDECD52505A86E0093587A /* eject-hover-16x16@3x.png in Resources */,
|
||||||
|
B6DE323926044C1100418375 /* caution.png in Resources */,
|
||||||
|
B6DE323726044C1100418375 /* caution@2x.png in Resources */,
|
||||||
|
B6DE323C26044DB800418375 /* caution@3x.png in Resources */,
|
||||||
|
B6DDECC125057A550093587A /* drag-handle-4x10.png in Resources */,
|
||||||
|
B6DDECC325057A550093587A /* drag-handle-4x10@2x.png in Resources */,
|
||||||
|
B6DDECC525057A550093587A /* drag-handle-4x10@3x.png in Resources */,
|
||||||
B6374AE6260ECDDD0045CA16 /* mac2fdhd.plist in Resources */,
|
B6374AE6260ECDDD0045CA16 /* mac2fdhd.plist in Resources */,
|
||||||
B6374ADC260ECB400045CA16 /* maciix.plist in Resources */,
|
B6374ADC260ECB400045CA16 /* maciix.plist in Resources */,
|
||||||
B6E4B5BC24FDE2670094A35C /* apple2eeuk.plist in Resources */,
|
B6E4B5BC24FDE2670094A35C /* apple2eeuk.plist in Resources */,
|
||||||
@ -1001,9 +1141,10 @@
|
|||||||
B63C1BA6250192D800511A71 /* cecm.plist in Resources */,
|
B63C1BA6250192D800511A71 /* cecm.plist in Resources */,
|
||||||
B6E4B5BF24FDE2670094A35C /* agat9.plist in Resources */,
|
B6E4B5BF24FDE2670094A35C /* agat9.plist in Resources */,
|
||||||
B6E4B5C024FDE2670094A35C /* LaunchWindow.xib in Resources */,
|
B6E4B5C024FDE2670094A35C /* LaunchWindow.xib in Resources */,
|
||||||
B6DE323726044C1100418375 /* caution@2x.png in Resources */,
|
B6665C1D265C639A00254939 /* Autocomplete.xib in Resources */,
|
||||||
B6E4B5C124FDE2670094A35C /* apple1.plist in Resources */,
|
B6E4B5C124FDE2670094A35C /* apple1.plist in Resources */,
|
||||||
B6E4B5C224FDE2670094A35C /* ace100.plist in Resources */,
|
B6E4B5C224FDE2670094A35C /* ace100.plist in Resources */,
|
||||||
|
B6E6DCF827B0873200E0A76E /* BookmarkWindow.xib in Resources */,
|
||||||
B6374AD6260ECB400045CA16 /* maciisi.plist in Resources */,
|
B6374AD6260ECB400045CA16 /* maciisi.plist in Resources */,
|
||||||
B6DE32472605482500418375 /* macclasc.plist in Resources */,
|
B6DE32472605482500418375 /* macclasc.plist in Resources */,
|
||||||
B6E4B5C324FDE2670094A35C /* am64.plist in Resources */,
|
B6E4B5C324FDE2670094A35C /* am64.plist in Resources */,
|
||||||
@ -1016,24 +1157,24 @@
|
|||||||
B6E4B5C724FDE2670094A35C /* am100.plist in Resources */,
|
B6E4B5C724FDE2670094A35C /* am100.plist in Resources */,
|
||||||
B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */,
|
B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */,
|
||||||
B6374ADA260ECB400045CA16 /* maciicx.plist in Resources */,
|
B6374ADA260ECB400045CA16 /* maciicx.plist in Resources */,
|
||||||
B6DDECC125057A550093587A /* drag-handle-4x10.png in Resources */,
|
B615A99F26640940001FBF99 /* SlotView.xib in Resources */,
|
||||||
B63C1F0C25B143C50016A611 /* CheatSheet.xib in Resources */,
|
B63C1F0C25B143C50016A611 /* CheatSheet.xib in Resources */,
|
||||||
B6374AE0260ECB400045CA16 /* macse30.plist in Resources */,
|
B6374AE0260ECB400045CA16 /* macse30.plist in Resources */,
|
||||||
B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */,
|
B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */,
|
||||||
B646D10C263A5DF30014C586 /* ace1000.plist in Resources */,
|
B646D10C263A5DF30014C586 /* ace1000.plist in Resources */,
|
||||||
B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */,
|
B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */,
|
||||||
B6DDECCD2505A86E0093587A /* eject-16x16@2x.png in Resources */,
|
|
||||||
B6E4B5CB24FDE2670094A35C /* apple2ees.plist in Resources */,
|
B6E4B5CB24FDE2670094A35C /* apple2ees.plist in Resources */,
|
||||||
B6E4B5CC24FDE2670094A35C /* prav8c.plist in Resources */,
|
B6E4B5CC24FDE2670094A35C /* prav8c.plist in Resources */,
|
||||||
B6E4B5CD24FDE2670094A35C /* ivelultr.plist in Resources */,
|
B6E4B5CD24FDE2670094A35C /* ivelultr.plist in Resources */,
|
||||||
B6E4B5CE24FDE2670094A35C /* maxxi.plist in Resources */,
|
B6E4B5CE24FDE2670094A35C /* maxxi.plist in Resources */,
|
||||||
B6DE324B2605482500418375 /* macsefd.plist in Resources */,
|
B6DE324B2605482500418375 /* macsefd.plist in Resources */,
|
||||||
B6E4B5CF24FDE2670094A35C /* apple2eefr.plist in Resources */,
|
B6E4B5CF24FDE2670094A35C /* apple2eefr.plist in Resources */,
|
||||||
B6DE323926044C1100418375 /* caution.png in Resources */,
|
|
||||||
B6374AD8260ECB400045CA16 /* maciivi.plist in Resources */,
|
B6374AD8260ECB400045CA16 /* maciivi.plist in Resources */,
|
||||||
|
B63E57E32755AF2000F8B5D1 /* ace500.plist in Resources */,
|
||||||
B6E4B5D124FDE2670094A35C /* spectred.plist in Resources */,
|
B6E4B5D124FDE2670094A35C /* spectred.plist in Resources */,
|
||||||
B63C1B9725008A2700511A71 /* DownloadWindow.xib in Resources */,
|
B63C1B9725008A2700511A71 /* DownloadWindow.xib in Resources */,
|
||||||
B6E4B5D224FDE2670094A35C /* apple2cp.plist in Resources */,
|
B6E4B5D224FDE2670094A35C /* apple2cp.plist in Resources */,
|
||||||
|
B618B8C52729F6690045C2D8 /* laser128o.plist in Resources */,
|
||||||
B6E4B5D324FDE2670094A35C /* MainMenu.xib in Resources */,
|
B6E4B5D324FDE2670094A35C /* MainMenu.xib in Resources */,
|
||||||
B6E4B5D424FDE2670094A35C /* prav82.plist in Resources */,
|
B6E4B5D424FDE2670094A35C /* prav82.plist in Resources */,
|
||||||
B6E4B5D524FDE2670094A35C /* apple2euk.plist in Resources */,
|
B6E4B5D524FDE2670094A35C /* apple2euk.plist in Resources */,
|
||||||
@ -1044,30 +1185,28 @@
|
|||||||
B6E4B5D924FDE2670094A35C /* albert.plist in Resources */,
|
B6E4B5D924FDE2670094A35C /* albert.plist in Resources */,
|
||||||
B6E4B5DA24FDE2670094A35C /* Credits.rtf in Resources */,
|
B6E4B5DA24FDE2670094A35C /* Credits.rtf in Resources */,
|
||||||
B6E4B5DB24FDE2670094A35C /* apple2p.plist in Resources */,
|
B6E4B5DB24FDE2670094A35C /* apple2p.plist in Resources */,
|
||||||
B6DDECD12505A86E0093587A /* eject-hover-16x16.png in Resources */,
|
|
||||||
B65085BE25B616AC00354EC9 /* maciici.plist in Resources */,
|
B65085BE25B616AC00354EC9 /* maciici.plist in Resources */,
|
||||||
B6DE32512605482500418375 /* macse.plist in Resources */,
|
B6DE32512605482500418375 /* macse.plist in Resources */,
|
||||||
B65085BC25B616AC00354EC9 /* maclc3.plist in Resources */,
|
B65085BC25B616AC00354EC9 /* maclc3.plist in Resources */,
|
||||||
B6DE32492605482500418375 /* mac512ke.plist in Resources */,
|
B6DE32492605482500418375 /* mac512ke.plist in Resources */,
|
||||||
B6DE32452605482500418375 /* mac128k.plist in Resources */,
|
B6DE32452605482500418375 /* mac128k.plist in Resources */,
|
||||||
B63C1BA4250192D800511A71 /* cec2000.plist in Resources */,
|
B63C1BA4250192D800511A71 /* cec2000.plist in Resources */,
|
||||||
B6DDECD32505A86E0093587A /* eject-hover-16x16@2x.png in Resources */,
|
|
||||||
B6E4B5DC24FDE2670094A35C /* hkc8800a.plist in Resources */,
|
B6E4B5DC24FDE2670094A35C /* hkc8800a.plist in Resources */,
|
||||||
B6374AE4260ECDDD0045CA16 /* maciihmu.plist in Resources */,
|
B6374AE4260ECDDD0045CA16 /* maciihmu.plist in Resources */,
|
||||||
B6DDECC525057A550093587A /* drag-handle-4x10@3x.png in Resources */,
|
|
||||||
B6E4B5DD24FDE2670094A35C /* apple2gsr0.plist in Resources */,
|
B6E4B5DD24FDE2670094A35C /* apple2gsr0.plist in Resources */,
|
||||||
B6DE323C26044DB800418375 /* caution@3x.png in Resources */,
|
|
||||||
B6E4B5DE24FDE2670094A35C /* mprof3.plist in Resources */,
|
B6E4B5DE24FDE2670094A35C /* mprof3.plist in Resources */,
|
||||||
B6E4B5DF24FDE2670094A35C /* basis108.plist in Resources */,
|
B6E4B5DF24FDE2670094A35C /* basis108.plist in Resources */,
|
||||||
B6DDECD52505A86E0093587A /* eject-hover-16x16@3x.png in Resources */,
|
|
||||||
B6DD1FE925B407E7004A3242 /* maclc.plist in Resources */,
|
B6DD1FE925B407E7004A3242 /* maclc.plist in Resources */,
|
||||||
B6E4B5E024FDE2670094A35C /* agat7.plist in Resources */,
|
B6E4B5E024FDE2670094A35C /* agat7.plist in Resources */,
|
||||||
B6E4B5E124FDE2670094A35C /* elppa.plist in Resources */,
|
B6E4B5E124FDE2670094A35C /* elppa.plist in Resources */,
|
||||||
B6E4B5E224FDE2670094A35C /* apple2gsr1.plist in Resources */,
|
B6E4B5E224FDE2670094A35C /* apple2gsr1.plist in Resources */,
|
||||||
|
B6301BE529107BE800495022 /* maclc520.plist in Resources */,
|
||||||
B6E4B5E324FDE2670094A35C /* Defaults.plist in Resources */,
|
B6E4B5E324FDE2670094A35C /* Defaults.plist in Resources */,
|
||||||
B6E4B5E424FDE2670094A35C /* models.plist in Resources */,
|
B6E4B5E424FDE2670094A35C /* models.plist in Resources */,
|
||||||
|
B6F7B539266FDA5B00624C6B /* MachineView.xib in Resources */,
|
||||||
B63C1BA9250192E600511A71 /* zijini.plist in Resources */,
|
B63C1BA9250192E600511A71 /* zijini.plist in Resources */,
|
||||||
B6E4B5E524FDE2670094A35C /* craft2p.plist in Resources */,
|
B6E4B5E524FDE2670094A35C /* craft2p.plist in Resources */,
|
||||||
|
B6ABF47D275986EB00DC3D48 /* ace2200.plist in Resources */,
|
||||||
B6E4B5E624FDE2670094A35C /* uniap2pt.plist in Resources */,
|
B6E4B5E624FDE2670094A35C /* uniap2pt.plist in Resources */,
|
||||||
B6E4B5E724FDE2670094A35C /* las128e2.plist in Resources */,
|
B6E4B5E724FDE2670094A35C /* las128e2.plist in Resources */,
|
||||||
B63C1B9E250192D800511A71 /* cece.plist in Resources */,
|
B63C1B9E250192D800511A71 /* cece.plist in Resources */,
|
||||||
@ -1075,17 +1214,17 @@
|
|||||||
B6E4B5E924FDE2670094A35C /* uniap2en.plist in Resources */,
|
B6E4B5E924FDE2670094A35C /* uniap2en.plist in Resources */,
|
||||||
B6374AD2260ECB400045CA16 /* macclas2.plist in Resources */,
|
B6374AD2260ECB400045CA16 /* macclas2.plist in Resources */,
|
||||||
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */,
|
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */,
|
||||||
|
B6301BE829107C1E00495022 /* maccclas.plist in Resources */,
|
||||||
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */,
|
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */,
|
||||||
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */,
|
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */,
|
||||||
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */,
|
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */,
|
||||||
B6DE324D2605482500418375 /* macplus.plist in Resources */,
|
B6DE324D2605482500418375 /* macplus.plist in Resources */,
|
||||||
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */,
|
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */,
|
||||||
B6374ADE260ECB400045CA16 /* maciivx.plist in Resources */,
|
B6374ADE260ECB400045CA16 /* maciivx.plist in Resources */,
|
||||||
B6DDECD72505A86E0093587A /* eject-16x16.png in Resources */,
|
|
||||||
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */,
|
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */,
|
||||||
|
B6FECAFC28C0093600E143DA /* las3000.plist in Resources */,
|
||||||
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */,
|
B6E4B5F024FDE2670094A35C /* apple2jp.plist in Resources */,
|
||||||
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */,
|
B6E4B5F124FDE2670094A35C /* apple2.plist in Resources */,
|
||||||
B6DDECC325057A550093587A /* drag-handle-4x10@2x.png in Resources */,
|
|
||||||
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */,
|
B6E4B5F224FDE2670094A35C /* prav8m.plist in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -1093,6 +1232,26 @@
|
|||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
B611BA3D26796483008597B5 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_FOLDER_PATH)/mame64",
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(TARGET_BUILD_DIR)/$(EXECUTABLE_FOLDER_PATH)/mame-link",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n#cd \"$TARGET_BUILD_DIR/$EXECUTABLE_FOLDER_PATH\"\n#if [ ! -e mame-link] ; then ln -s mame64 mame-link ; fi\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
B6152B5C25F6F4F800605E6E /* ShellScript */ = {
|
B6152B5C25F6F4F800605E6E /* ShellScript */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@ -1108,7 +1267,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\ncd \"embedded\"\necho perl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\nperl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\n";
|
shellScript = "# set the mame rpath and entitlements.\n\ncd \"embedded\"\necho perl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\nperl install_name_tool.pl --verbose mame64 \"@executable_path/../Frameworks\"\n\necho /usr/bin/codesign --sign - --deep --force --options=runtime --entitlements mame64.entitlements --timestamp mame64\n/usr/bin/codesign --sign - --deep --force --options=runtime --entitlements mame64.entitlements --timestamp mame64\n\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
@ -1135,24 +1294,33 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
B608E17F2502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
B608E17F2502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
||||||
B6E9A18025088B1B005E7525 /* NewSlotViewController.m in Sources */,
|
B6E9A18025088B1B005E7525 /* SlotViewController.m in Sources */,
|
||||||
|
B6E6DD1527B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */,
|
||||||
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */,
|
B6A1A1942528EB1700DB0FD7 /* Menu.m in Sources */,
|
||||||
|
B6E6DD1327B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */,
|
||||||
|
B6E6DD0127B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */,
|
||||||
B6BA258824E99BEB005FB8FF /* main.m in Sources */,
|
B6BA258824E99BEB005FB8FF /* main.m in Sources */,
|
||||||
B63C1B8B24FF4BF700511A71 /* Ample.m in Sources */,
|
B63C1B8B24FF4BF700511A71 /* Ample.m in Sources */,
|
||||||
|
B6E6DCFB27B0A09300E0A76E /* BookmarkWindowController.m in Sources */,
|
||||||
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */,
|
B6B9EA662506A5550080E70D /* EjectButton.m in Sources */,
|
||||||
B6152B5A25F5B57E00605E6E /* Media.m in Sources */,
|
B6152B5A25F5B57E00605E6E /* Media.m in Sources */,
|
||||||
B6152B5625F4549F00605E6E /* Slot.m in Sources */,
|
B6152B5625F4549F00605E6E /* Slot.m in Sources */,
|
||||||
B6D6DE4124FADFAC00661A5F /* LaunchWindowController.m in Sources */,
|
B6D6DE4124FADFAC00661A5F /* LaunchWindowController.m in Sources */,
|
||||||
B64E15A924EA1D5300E8AD3D /* MachineViewController.m in Sources */,
|
B6665C14265A0E3E00254939 /* AutocompleteControl.m in Sources */,
|
||||||
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */,
|
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */,
|
||||||
B60A6E1424EE0AE2004B7EEF /* FlippedView.m in Sources */,
|
B60A6E1424EE0AE2004B7EEF /* FlippedView.m in Sources */,
|
||||||
|
B68A899026BE18E000B2C8C6 /* MidiManager.m in Sources */,
|
||||||
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */,
|
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */,
|
||||||
B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */,
|
B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */,
|
||||||
|
B6E6DD0327B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */,
|
||||||
|
B63005332666D6940014C381 /* BookmarkManager.m in Sources */,
|
||||||
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */,
|
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */,
|
||||||
B63C1F0F25B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
B63C1F0F25B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
||||||
B64AF1F2250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
B64AF1F2250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
||||||
|
B6F7B53C267017A200624C6B /* NewMachineViewController.m in Sources */,
|
||||||
B64AF1F6250ED5E400A09B9B /* TableCellView.m in Sources */,
|
B64AF1F6250ED5E400A09B9B /* TableCellView.m in Sources */,
|
||||||
B66D0FE72611386C000902F1 /* SoftwareList.m in Sources */,
|
B66D0FE72611386C000902F1 /* SoftwareList.m in Sources */,
|
||||||
|
B6E6DCEB27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */,
|
||||||
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */,
|
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */,
|
||||||
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */,
|
B64AF1FA250EF6A500A09B9B /* Transformers.m in Sources */,
|
||||||
);
|
);
|
||||||
@ -1162,22 +1330,33 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
B68A899126BE18E000B2C8C6 /* MidiManager.m in Sources */,
|
||||||
B608E1802502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
B608E1802502FE0C00D53465 /* TransparentScroller.m in Sources */,
|
||||||
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */,
|
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */,
|
||||||
B6E4B5B024FDE2670094A35C /* main.m in Sources */,
|
B6E4B5B024FDE2670094A35C /* main.m in Sources */,
|
||||||
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
|
||||||
|
B6E6DD1427B1D71700E0A76E /* DiskImage+CoreDataClass.m in Sources */,
|
||||||
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */,
|
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */,
|
||||||
B64AF1F3250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
B64AF1F3250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
|
||||||
|
B6E6DCEC27AEE15F00E0A76E /* Ample.xcdatamodeld in Sources */,
|
||||||
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */,
|
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */,
|
||||||
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */,
|
B6A1A1952528EB1700DB0FD7 /* Menu.m in Sources */,
|
||||||
B6152B5B25F5B57E00605E6E /* Media.m in Sources */,
|
B6152B5B25F5B57E00605E6E /* Media.m in Sources */,
|
||||||
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */,
|
B6E4B5B124FDE2670094A35C /* LaunchWindowController.m in Sources */,
|
||||||
B6152B5725F4549F00605E6E /* Slot.m in Sources */,
|
B6152B5725F4549F00605E6E /* Slot.m in Sources */,
|
||||||
B6E4B5B224FDE2670094A35C /* MachineViewController.m in Sources */,
|
|
||||||
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */,
|
B6E4B5B324FDE2670094A35C /* MediaViewController.m in Sources */,
|
||||||
|
B6E6DCFC27B0A09300E0A76E /* BookmarkWindowController.m in Sources */,
|
||||||
|
B6E6DD1627B1D71700E0A76E /* DiskImage+CoreDataProperties.m in Sources */,
|
||||||
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */,
|
B64AF1F7250ED5E400A09B9B /* TableCellView.m in Sources */,
|
||||||
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */,
|
B6E4B5B424FDE2670094A35C /* FlippedView.m in Sources */,
|
||||||
|
B6E6DD0227B0D17C00E0A76E /* Bookmark+CoreDataClass.m in Sources */,
|
||||||
|
B6E6DD0427B0D17C00E0A76E /* Bookmark+CoreDataProperties.m in Sources */,
|
||||||
|
B63005342666D6940014C381 /* BookmarkManager.m in Sources */,
|
||||||
|
B615A9A026640A70001FBF99 /* SlotViewController.m in Sources */,
|
||||||
|
B6665C15265A0E3E00254939 /* AutocompleteControl.m in Sources */,
|
||||||
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */,
|
B6E4B5B524FDE2670094A35C /* AppDelegate.m in Sources */,
|
||||||
|
B6F7B53D267017A200624C6B /* NewMachineViewController.m in Sources */,
|
||||||
|
B635C09F26784D4700B23BFD /* AmpleLite.m in Sources */,
|
||||||
B66D0FE82611386C000902F1 /* SoftwareList.m in Sources */,
|
B66D0FE82611386C000902F1 /* SoftwareList.m in Sources */,
|
||||||
B6E4B5B624FDE2670094A35C /* LogWindowController.m in Sources */,
|
B6E4B5B624FDE2670094A35C /* LogWindowController.m in Sources */,
|
||||||
B6E4B5B724FDE2670094A35C /* PreferencesWindowController.m in Sources */,
|
B6E4B5B724FDE2670094A35C /* PreferencesWindowController.m in Sources */,
|
||||||
@ -1188,14 +1367,6 @@
|
|||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
B61099E324F5F230005CB652 /* SlotView.xib */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
B61099E424F5F230005CB652 /* Base */,
|
|
||||||
);
|
|
||||||
name = SlotView.xib;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
B61099E524F5F230005CB652 /* MediaView.xib */ = {
|
B61099E524F5F230005CB652 /* MediaView.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -1228,6 +1399,14 @@
|
|||||||
name = Credits.rtf;
|
name = Credits.rtf;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
B6665C1A265C639900254939 /* Autocomplete.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
B6665C1B265C639900254939 /* Base */,
|
||||||
|
);
|
||||||
|
name = Autocomplete.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
B6BA258324E99BEB005FB8FF /* MainMenu.xib */ = {
|
B6BA258324E99BEB005FB8FF /* MainMenu.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -1252,12 +1431,28 @@
|
|||||||
name = LaunchWindow.xib;
|
name = LaunchWindow.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
B6E9A18125088B36005E7525 /* NewSlotView.xib */ = {
|
B6E6DCF527B0873100E0A76E /* BookmarkWindow.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
B6E6DCF627B0873100E0A76E /* Base */,
|
||||||
|
);
|
||||||
|
name = BookmarkWindow.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B6E9A18125088B36005E7525 /* SlotView.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
B6E9A18225088B36005E7525 /* Base */,
|
B6E9A18225088B36005E7525 /* Base */,
|
||||||
);
|
);
|
||||||
name = NewSlotView.xib;
|
name = SlotView.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
B6F7B536266FDA5B00624C6B /* MachineView.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
B6F7B537266FDA5B00624C6B /* Base */,
|
||||||
|
);
|
||||||
|
name = MachineView.xib;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
/* End PBXVariantGroup section */
|
/* End PBXVariantGroup section */
|
||||||
@ -1267,8 +1462,11 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_MODULES = NO;
|
CLANG_ENABLE_MODULES = NO;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = pty_shell/pty_shell.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INSTALL_PATH = "";
|
INSTALL_PATH = "";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@ -1277,8 +1475,11 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_MODULES = NO;
|
CLANG_ENABLE_MODULES = NO;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = pty_shell/pty_shell.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INSTALL_PATH = "";
|
INSTALL_PATH = "";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@ -1286,8 +1487,11 @@
|
|||||||
B6841BD5251EC913006A5C39 /* Debug */ = {
|
B6841BD5251EC913006A5C39 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_ENTITLEMENTS = vmnet_helper/vmnet_helper.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INSTALL_PATH = "";
|
INSTALL_PATH = "";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@ -1295,8 +1499,11 @@
|
|||||||
B6841BD6251EC913006A5C39 /* Release */ = {
|
B6841BD6251EC913006A5C39 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CODE_SIGN_ENTITLEMENTS = vmnet_helper/vmnet_helper.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
INSTALL_PATH = "";
|
INSTALL_PATH = "";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@ -1351,7 +1558,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
@ -1403,7 +1610,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
@ -1417,14 +1624,19 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 13;
|
CURRENT_PROJECT_VERSION = 44;
|
||||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/embedded",
|
||||||
|
);
|
||||||
INFOPLIST_FILE = Ample/Info.plist;
|
INFOPLIST_FILE = Ample/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 0.231;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
|
MARKETING_VERSION = "0.254-u2";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
@ -1437,14 +1649,19 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 13;
|
CURRENT_PROJECT_VERSION = 44;
|
||||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/embedded",
|
||||||
|
);
|
||||||
INFOPLIST_FILE = Ample/Info.plist;
|
INFOPLIST_FILE = Ample/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 0.231;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
|
MARKETING_VERSION = "0.254-u2";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.ksherlock.ample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
@ -1457,12 +1674,14 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 44;
|
||||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||||
INFOPLIST_FILE = Ample/Info.plist;
|
INFOPLIST_FILE = Ample/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
@ -1475,12 +1694,14 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Ample/Ample.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 44;
|
||||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||||
INFOPLIST_FILE = Ample/Info.plist;
|
INFOPLIST_FILE = Ample/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.ksherlock.ample-lite";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
};
|
};
|
||||||
@ -1535,6 +1756,19 @@
|
|||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
/* Begin XCVersionGroup section */
|
||||||
|
B6E6DCE927AEE15F00E0A76E /* Ample.xcdatamodeld */ = {
|
||||||
|
isa = XCVersionGroup;
|
||||||
|
children = (
|
||||||
|
B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */,
|
||||||
|
);
|
||||||
|
currentVersion = B6E6DCEA27AEE15F00E0A76E /* Ample.xcdatamodel */;
|
||||||
|
path = Ample.xcdatamodeld;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
versionGroupType = wrapper.xcdatamodel;
|
||||||
|
};
|
||||||
|
/* End XCVersionGroup section */
|
||||||
};
|
};
|
||||||
rootObject = B6BA257324E99BE9005FB8FF /* Project object */;
|
rootObject = B6BA257324E99BE9005FB8FF /* Project object */;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
<key>com.apple.security.cs.disable-library-validation</key>
|
||||||
|
<true/>
|
||||||
<key>com.apple.security.files.user-selected.read-only</key>
|
<key>com.apple.security.files.user-selected.read-only</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
@ -40,4 +40,16 @@ extern NSString *kDownloadExtension;
|
|||||||
extern NSString *kDefaultDownloadURL;
|
extern NSString *kDefaultDownloadURL;
|
||||||
extern NSString *kDefaultDownloadExtension;
|
extern NSString *kDefaultDownloadExtension;
|
||||||
|
|
||||||
|
extern NSString *kNotificationDiskImageAdded;
|
||||||
|
extern NSString *kNotificationDiskImageMagicRoute;
|
||||||
|
extern NSString *kNotificationBookmarkMagicRoute;
|
||||||
|
|
||||||
|
@protocol Bookmark <NSObject>
|
||||||
|
-(BOOL)loadBookmark: (NSDictionary *)bookmark;
|
||||||
|
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark;
|
||||||
|
|
||||||
|
-(void)willLoadBookmark: (NSDictionary *)bookmark;
|
||||||
|
-(void)didLoadBookmark: (NSDictionary *)bookmark;
|
||||||
|
@end
|
||||||
|
|
||||||
#endif /* Ample_h */
|
#endif /* Ample_h */
|
||||||
|
@ -42,7 +42,7 @@ NSURL *MameURL(void) {
|
|||||||
|
|
||||||
if ([defaults boolForKey: kUseCustomMame]) {
|
if ([defaults boolForKey: kUseCustomMame]) {
|
||||||
NSString *path = [defaults stringForKey: kMamePath];
|
NSString *path = [defaults stringForKey: kMamePath];
|
||||||
if (![path length]) return [NSURL fileURLWithPath: path];
|
if ([path length]) return [NSURL fileURLWithPath: path];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
return [bundle URLForAuxiliaryExecutable: @"mame64"];
|
||||||
@ -135,3 +135,7 @@ NSString *kDefaultDownloadExtension = @"DefaultDownloadExtension";
|
|||||||
|
|
||||||
NSString *kDownloadURL = @"DownloadURL";
|
NSString *kDownloadURL = @"DownloadURL";
|
||||||
NSString *kDownloadExtension = @"DownloadExtension";
|
NSString *kDownloadExtension = @"DownloadExtension";
|
||||||
|
|
||||||
|
NSString *kNotificationDiskImageAdded = @"Disk Image Added";
|
||||||
|
NSString *kNotificationDiskImageMagicRoute = @"Disk Image Magic Route";
|
||||||
|
NSString *kNotificationBookmarkMagicRoute = @"Bookmark Magic Route";
|
||||||
|
26
Ample/AmpleLite.m
Normal file
26
Ample/AmpleLite.m
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// AmpleLite.m
|
||||||
|
// Ample Lite
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 6/14/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
@class NSMenuItem;
|
||||||
|
|
||||||
|
@interface SUUpdater : NSObject
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation SUUpdater
|
||||||
|
|
||||||
|
- (IBAction)checkForUpdates:(id)sender {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -11,6 +11,6 @@
|
|||||||
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
@interface AppDelegate : NSObject <NSApplicationDelegate>
|
||||||
|
|
||||||
- (IBAction)displayPreferences:(id)sender;
|
- (IBAction)displayPreferences:(id)sender;
|
||||||
|
- (IBAction)manageBookmarks: (id)sender;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -12,7 +12,10 @@
|
|||||||
#import "DownloadWindowController.h"
|
#import "DownloadWindowController.h"
|
||||||
#import "DiskImagesWindowController.h"
|
#import "DiskImagesWindowController.h"
|
||||||
#import "CheatSheetWindowController.h"
|
#import "CheatSheetWindowController.h"
|
||||||
|
#import "BookmarkWindowController.h"
|
||||||
|
|
||||||
#import "Transformers.h"
|
#import "Transformers.h"
|
||||||
|
#import "BookmarkManager.h"
|
||||||
|
|
||||||
#import "LogWindowController.h"
|
#import "LogWindowController.h"
|
||||||
|
|
||||||
@ -27,6 +30,8 @@
|
|||||||
NSWindowController *_downloader;
|
NSWindowController *_downloader;
|
||||||
NSWindowController *_diskImages;
|
NSWindowController *_diskImages;
|
||||||
NSWindowController *_cheatSheet;
|
NSWindowController *_cheatSheet;
|
||||||
|
NSWindowController *_bookmarks;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -40,6 +45,8 @@
|
|||||||
|
|
||||||
RegisterTransformers();
|
RegisterTransformers();
|
||||||
|
|
||||||
|
//BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||||
|
|
||||||
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
path = [bundle pathForResource: @"Defaults" ofType: @"plist"];
|
||||||
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
dict = [NSDictionary dictionaryWithContentsOfFile: path];
|
||||||
|
|
||||||
@ -48,17 +55,17 @@
|
|||||||
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
[[NSUserDefaults standardUserDefaults] registerDefaults: dict];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_diskImages = [DiskImagesWindowController sharedInstance]; //[DiskImagesWindowController new];
|
_diskImages = [DiskImagesWindowController sharedInstance]; //[DiskImagesWindowController new];
|
||||||
|
|
||||||
if ([self installMameComponents]) {
|
if ([self installMameComponents]) {
|
||||||
|
|
||||||
[self displayLaunchWindow];
|
[self displayLaunchWindow];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-(void)displayLaunchWindow {
|
-(void)displayLaunchWindow {
|
||||||
|
|
||||||
if (!_launcher) {
|
if (!_launcher) {
|
||||||
@ -96,18 +103,23 @@
|
|||||||
@"xfz",
|
@"xfz",
|
||||||
path
|
path
|
||||||
];
|
];
|
||||||
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
if (@available(macOS 10.13, *)) {
|
||||||
|
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||||
|
[task setCurrentDirectoryURL: sd];
|
||||||
|
} else {
|
||||||
|
[task setLaunchPath: @"/usr/bin/tar"];
|
||||||
|
[task setCurrentDirectoryPath: SupportDirectoryPath()];
|
||||||
|
}
|
||||||
[task setArguments: argv];
|
[task setArguments: argv];
|
||||||
[task setCurrentDirectoryURL: sd];
|
|
||||||
|
|
||||||
|
|
||||||
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||||
[task setTerminationHandler: ^(NSTask *task){
|
[task setTerminationHandler: ^(NSTask *task){
|
||||||
|
|
||||||
|
int st = [task terminationStatus];
|
||||||
|
// delay so the install window is visible, I think
|
||||||
dispatch_after(when, dispatch_get_main_queue(), ^{
|
dispatch_after(when, dispatch_get_main_queue(), ^{
|
||||||
|
|
||||||
int st = [task terminationStatus];
|
|
||||||
|
|
||||||
if (st) {
|
if (st) {
|
||||||
NSAlert *alert = [NSAlert new];
|
NSAlert *alert = [NSAlert new];
|
||||||
[alert setMessageText: @"An error occurred extracting MAME components"];
|
[alert setMessageText: @"An error occurred extracting MAME components"];
|
||||||
@ -136,6 +148,7 @@
|
|||||||
|
|
||||||
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
||||||
// Insert code here to tear down your application
|
// Insert code here to tear down your application
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
|
||||||
@ -208,5 +221,87 @@
|
|||||||
[ws openURL: url];
|
[ws openURL: url];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)mameMac68kWiki:(id)sender {
|
||||||
|
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
||||||
|
|
||||||
|
NSURL *url = [NSURL URLWithString: @"https://wiki.mamedev.org/index.php/Driver:Mac_68K"];
|
||||||
|
[ws openURL: url];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (IBAction)manageBookmarks: (id)sender {
|
||||||
|
|
||||||
|
if (!_bookmarks) {
|
||||||
|
_bookmarks = [BookmarkWindowController new];
|
||||||
|
}
|
||||||
|
[_bookmarks showWindow: sender];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(IBAction)installMameComponents:(id)sender {
|
||||||
|
|
||||||
|
|
||||||
|
/* install the mame data components. */
|
||||||
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
|
NSURL *sd = SupportDirectory();
|
||||||
|
|
||||||
|
NSURL *ample_url = [sd URLByAppendingPathComponent: @"Ample.plist"];
|
||||||
|
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithContentsOfURL: ample_url];
|
||||||
|
|
||||||
|
//NSDate *oldDate = [d objectForKey: kMameComponentsDate];
|
||||||
|
NSDate *newDate = [defaults objectForKey: kMameComponentsDate];
|
||||||
|
if (![newDate isKindOfClass: [NSDate class]])
|
||||||
|
newDate = nil;
|
||||||
|
|
||||||
|
NSString *path = [bundle pathForResource: @"mame-data" ofType: @"tgz"];
|
||||||
|
if (!path) return; // Ample Lite?
|
||||||
|
|
||||||
|
|
||||||
|
NSWindow *win = _installWindow;
|
||||||
|
[win makeKeyAndOrderFront: nil];
|
||||||
|
NSTask *task = [NSTask new];
|
||||||
|
NSArray *argv = @[
|
||||||
|
@"xfz",
|
||||||
|
path
|
||||||
|
];
|
||||||
|
if (@available(macOS 10.13, *)) {
|
||||||
|
[task setExecutableURL: [NSURL fileURLWithPath: @"/usr/bin/tar"]];
|
||||||
|
[task setCurrentDirectoryURL: sd];
|
||||||
|
} else {
|
||||||
|
[task setLaunchPath: @"/usr/bin/tar"];
|
||||||
|
[task setCurrentDirectoryPath: SupportDirectoryPath()];
|
||||||
|
}
|
||||||
|
[task setArguments: argv];
|
||||||
|
|
||||||
|
|
||||||
|
//dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
|
||||||
|
[task setTerminationHandler: ^(NSTask *task){
|
||||||
|
|
||||||
|
int st = [task terminationStatus];
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
|
||||||
|
if (st) {
|
||||||
|
NSAlert *alert = [NSAlert new];
|
||||||
|
[alert setMessageText: @"An error occurred extracting MAME components"];
|
||||||
|
[alert runModal];
|
||||||
|
[win close];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d) {
|
||||||
|
[d setObject: newDate forKey: kMameComponentsDate];
|
||||||
|
[d writeToURL: ample_url atomically: YES];
|
||||||
|
} else {
|
||||||
|
[@{ kMameComponentsDate: newDate } writeToURL: ample_url atomically: YES];
|
||||||
|
}
|
||||||
|
[win close];
|
||||||
|
// need to reload the software list data.
|
||||||
|
});
|
||||||
|
|
||||||
|
}];
|
||||||
|
[task launch];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
42
Ample/AutocompleteControl.h
Normal file
42
Ample/AutocompleteControl.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// AutocompleteControl.h
|
||||||
|
// Autocomplete
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/20/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class AutocompleteControl;
|
||||||
|
|
||||||
|
@protocol AutocompleteItem
|
||||||
|
-(NSString *)menuTitle;
|
||||||
|
-(NSAttributedString *)menuAttributedTitle; //?? can it still handle color?
|
||||||
|
-(BOOL)menuEnabled;
|
||||||
|
-(BOOL)menuIsHeader;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@protocol AutoCompleteDelegate
|
||||||
|
|
||||||
|
-(NSArray<id<AutocompleteItem>> *)autocomplete: (AutocompleteControl *)control completionsForString: (NSString *)string;
|
||||||
|
-(NSArray<id<AutocompleteItem>> *)autocomplete: (AutocompleteControl *)control completionsForItem: (id<AutocompleteItem>)item;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface AutocompleteControl : NSSearchField
|
||||||
|
|
||||||
|
@property NSInteger minWidth;
|
||||||
|
@property NSInteger maxDisplayItems;
|
||||||
|
@property (nullable, weak) id<AutoCompleteDelegate> autocompleteDelegate;
|
||||||
|
|
||||||
|
-(void)invalidate;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
885
Ample/AutocompleteControl.m
Normal file
885
Ample/AutocompleteControl.m
Normal file
@ -0,0 +1,885 @@
|
|||||||
|
//
|
||||||
|
// AutocompleteControl.m
|
||||||
|
// Autocomplete
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/20/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "AutocompleteControl.h"
|
||||||
|
#include <wctype.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Todo --
|
||||||
|
- when there is a value, can filter the list by only including header items and the selected value
|
||||||
|
- draw inactive menu items
|
||||||
|
- when menu is hidden then text is manually deleted (not esc canceled), then down/up arrow the list needs to update.
|
||||||
|
- eliminate nib and do it manually.
|
||||||
|
- when menus is too tall, macos moves it to the top of the screen.
|
||||||
|
- 1. it's not moved someplace more appropriate when the size shrinks
|
||||||
|
- 2. it should display to the left or right in that case.
|
||||||
|
- need to know parent's frame.
|
||||||
|
|
||||||
|
- fuzzy search - minimum distance between letters?
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@interface ACMenuView : NSView
|
||||||
|
@property (nonatomic) NSArray<id<AutocompleteItem>> *items;
|
||||||
|
|
||||||
|
@property (weak) AutocompleteControl *parent;
|
||||||
|
|
||||||
|
-(void)reset;
|
||||||
|
-(void)reset: (id<AutocompleteItem>)value;
|
||||||
|
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items;
|
||||||
|
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items value: (id<AutocompleteItem>)value;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface AutocompleteControl ()
|
||||||
|
{
|
||||||
|
IBOutlet NSPanel *_panel;
|
||||||
|
__weak IBOutlet ACMenuView *_menuView;
|
||||||
|
__weak IBOutlet NSScrollView *_scrollView;
|
||||||
|
|
||||||
|
id<AutocompleteItem> _value;
|
||||||
|
BOOL _editing;
|
||||||
|
BOOL _dirty;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface AutocompleteControl (SearchField) <NSSearchFieldDelegate>
|
||||||
|
-(void)fixTextColor: (BOOL)editing;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation AutocompleteControl
|
||||||
|
|
||||||
|
-(void)_init {
|
||||||
|
|
||||||
|
[self setDelegate: self];
|
||||||
|
[self setPlaceholderString: @""];
|
||||||
|
[(NSSearchFieldCell *)[self cell] setSearchButtonCell: nil];
|
||||||
|
|
||||||
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
|
NSNib *nib = [[NSNib alloc] initWithNibNamed: @"Autocomplete" bundle: bundle];
|
||||||
|
|
||||||
|
NSArray *topLevel = nil;
|
||||||
|
[nib instantiateWithOwner: self topLevelObjects: &topLevel];
|
||||||
|
|
||||||
|
[_panel setMovable: NO];
|
||||||
|
[_panel setBecomesKeyOnlyIfNeeded: YES];
|
||||||
|
[_menuView setParent: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(id)initWithFrame:(NSRect)frameRect {
|
||||||
|
if ((self = [super initWithFrame: frameRect])) {
|
||||||
|
[self _init];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(id)initWithCoder:(NSCoder *)coder {
|
||||||
|
if ((self = [super initWithCoder: coder])) {
|
||||||
|
[self _init];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
-(NSString *)stringValue {
|
||||||
|
return [super stringValue];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-(id)objectValue {
|
||||||
|
return _value;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setStringValue:(NSString *)stringValue {
|
||||||
|
[super setStringValue: stringValue ? stringValue : @""];
|
||||||
|
if (_value && [[_value menuTitle] isEqualToString: stringValue] == NO) {
|
||||||
|
// post change notification?
|
||||||
|
_value = nil;
|
||||||
|
[_menuView reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self fixTextColor: _editing];
|
||||||
|
// todo -- search for a matching item, update text color.
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo -- _menuView has second copy of value, need to update that.
|
||||||
|
-(void)setObjectValue:(id)objectValue {
|
||||||
|
if (_value == objectValue) return;
|
||||||
|
if (![objectValue conformsToProtocol: @protocol(AutocompleteItem)]) {
|
||||||
|
_value = nil;
|
||||||
|
[_menuView reset];
|
||||||
|
[super setStringValue: @""];
|
||||||
|
[self fixTextColor: _editing];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_value = objectValue;
|
||||||
|
if (!_value) [super setStringValue: @""]; //
|
||||||
|
else {
|
||||||
|
[super setStringValue: [_value menuTitle]];
|
||||||
|
[_menuView reset: _value];
|
||||||
|
// TODO -- menu view currently uses text search.
|
||||||
|
//NSArray *array = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||||
|
//[_menuView setItems: array value: _value];
|
||||||
|
}
|
||||||
|
[self fixTextColor: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)valid {
|
||||||
|
return _value != nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)hideSuggestions: (id)sender {
|
||||||
|
|
||||||
|
if (![_panel isVisible]) return;
|
||||||
|
|
||||||
|
NSWindow *window = [self window];
|
||||||
|
|
||||||
|
[window removeChildWindow: _panel];
|
||||||
|
[_panel orderOut: sender];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)showSuggestions: (id)sender {
|
||||||
|
|
||||||
|
if ([_panel isVisible]) return;
|
||||||
|
NSWindow *window = [self window];
|
||||||
|
|
||||||
|
NSRect wFrame = [_panel frame];
|
||||||
|
NSRect vFrame = [self frame];
|
||||||
|
|
||||||
|
NSRect rect = { .origin = vFrame.origin, .size = wFrame.size };
|
||||||
|
rect = [window convertRectToScreen:rect];
|
||||||
|
|
||||||
|
rect.origin.y -= wFrame.size.height + 4;
|
||||||
|
rect.size.width = MAX(vFrame.size.width, _minWidth);
|
||||||
|
// todo - min width option.
|
||||||
|
[_panel setFrame: rect display: YES];
|
||||||
|
|
||||||
|
//[_panel setFrameOrigin: rect.origin];
|
||||||
|
[window addChildWindow: _panel ordered: NSWindowAbove];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)updateSuggestions {
|
||||||
|
|
||||||
|
if (!_autocompleteDelegate) return;
|
||||||
|
NSString *needle = [self stringValue];
|
||||||
|
|
||||||
|
NSArray *items = [_autocompleteDelegate autocomplete: self completionsForString: needle];
|
||||||
|
|
||||||
|
[_menuView setItems: items];
|
||||||
|
if ([items count]) {
|
||||||
|
[self showSuggestions: nil];
|
||||||
|
} else {
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)invalidate {
|
||||||
|
|
||||||
|
if (!_autocompleteDelegate) return;
|
||||||
|
|
||||||
|
NSArray *items = nil;
|
||||||
|
|
||||||
|
/* if there is an object value, try to retain it. */
|
||||||
|
if (_value) {
|
||||||
|
|
||||||
|
[_menuView reset];
|
||||||
|
items = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||||
|
if (items) {
|
||||||
|
[_menuView setItems: items];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_value = nil;
|
||||||
|
[self invoke];
|
||||||
|
}
|
||||||
|
NSString *needle = [self stringValue];
|
||||||
|
|
||||||
|
if ([needle length]) {
|
||||||
|
_dirty = YES;
|
||||||
|
}
|
||||||
|
// if only 1 match, auto-set value?
|
||||||
|
items = [_autocompleteDelegate autocomplete: self completionsForString: needle];
|
||||||
|
[self fixTextColor: _editing];
|
||||||
|
[_menuView setItems: items];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// prevent action messages from the search field/cell.
|
||||||
|
-(BOOL)sendAction:(SEL)action to:(id)target {
|
||||||
|
if (action == [self action] && target == [self target]) return NO;
|
||||||
|
return [super sendAction: action to: target];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)invoke {
|
||||||
|
_dirty = NO;
|
||||||
|
[super sendAction: [self action] to: [self target]];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation AutocompleteControl (SearchField)
|
||||||
|
|
||||||
|
-(void)fixTextColor: (BOOL)editing {
|
||||||
|
NSColor *color = editing || _value ? [NSColor controlTextColor] : [NSColor systemRedColor];
|
||||||
|
[self setTextColor: color];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)controlTextDidChange:(NSNotification *)notification {
|
||||||
|
//NSLog(@"controlTextDidChange");
|
||||||
|
|
||||||
|
if (_value) {
|
||||||
|
_dirty = YES;
|
||||||
|
_value = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *s = [self stringValue];
|
||||||
|
if ([s length]) {
|
||||||
|
[self updateSuggestions];
|
||||||
|
} else {
|
||||||
|
_dirty = YES;
|
||||||
|
_value = nil;
|
||||||
|
[_menuView reset];
|
||||||
|
[_menuView setItems: nil];
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
[self invoke];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (void)controlTextDidBeginEditing:(NSNotification *)obj {
|
||||||
|
//NSLog(@"controlTextDidBeginEditing");
|
||||||
|
|
||||||
|
_editing = YES;
|
||||||
|
_dirty = NO;
|
||||||
|
[self fixTextColor: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- (void)controlTextDidEndEditing:(NSNotification *)obj {
|
||||||
|
//NSLog(@"controlTextDidEndEditing");
|
||||||
|
|
||||||
|
_editing = NO;
|
||||||
|
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
|
||||||
|
if (_dirty) {
|
||||||
|
_value = nil;
|
||||||
|
[self invoke];
|
||||||
|
}
|
||||||
|
[self fixTextColor: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)selectItem:(id<AutocompleteItem>)item withSelector:(SEL)selector {
|
||||||
|
|
||||||
|
// for newline/mousedown, will still retain focus after updating
|
||||||
|
// so we need to invalidate the value if it's edited further.
|
||||||
|
if (selector == @selector(insertNewline:) || selector == @selector(mouseDown:) || selector == @selector(insertTab:)) {
|
||||||
|
|
||||||
|
_value = item;
|
||||||
|
NSString *str = [item menuTitle];
|
||||||
|
|
||||||
|
[super setStringValue: str];
|
||||||
|
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
|
||||||
|
NSText *fieldEditor = [self currentEditor];
|
||||||
|
//[fieldEditor setSelectedRange: NSMakeRange([str length], 0)];
|
||||||
|
[fieldEditor setSelectedRange: NSMakeRange(0, [str length])];
|
||||||
|
|
||||||
|
[self invoke];
|
||||||
|
|
||||||
|
// need to invalidate the menu so it reloads
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSArray *array = [_autocompleteDelegate autocomplete: self completionsForItem: _value];
|
||||||
|
[_menuView setItems: array];
|
||||||
|
#else
|
||||||
|
[_menuView setItems: nil];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//NSLog(@"selectItem:withSelector:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
||||||
|
|
||||||
|
if (commandSelector == @selector(moveUp:)) {
|
||||||
|
//[self showSuggestions: nil];
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[_menuView moveUp: textView];
|
||||||
|
} else {
|
||||||
|
[self updateSuggestions];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandSelector == @selector(moveDown:)) {
|
||||||
|
//[self showSuggestions: nil];
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[_menuView moveDown: textView];
|
||||||
|
} else {
|
||||||
|
[self updateSuggestions];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandSelector == @selector(insertNewline:)) {
|
||||||
|
if ([_panel isVisible])
|
||||||
|
[_menuView insertNewline: textView];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandSelector == @selector(insertTab:)) {
|
||||||
|
if ([_panel isVisible])
|
||||||
|
[_menuView insertTab: textView];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandSelector == @selector(complete:)) {
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
} else {
|
||||||
|
[self updateSuggestions];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// esc ?
|
||||||
|
// if panel open, hide
|
||||||
|
// if panel closed, delete.
|
||||||
|
if (commandSelector == @selector(cancelOperation:)) {
|
||||||
|
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
} else {
|
||||||
|
_value = nil;
|
||||||
|
[super setStringValue: @""];
|
||||||
|
|
||||||
|
[self hideSuggestions: nil];
|
||||||
|
[_menuView reset];
|
||||||
|
//[_menuView setItems: _completions];
|
||||||
|
// sigh...
|
||||||
|
#if 0
|
||||||
|
NSArray *items =[_autocompleteDelegate autocomplete: self completionsForString: @""];
|
||||||
|
[_menuView setItems: items];
|
||||||
|
#endif
|
||||||
|
[self invoke];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandSelector == @selector(scrollPageDown:)) {
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[_menuView scrollPageDown: textView];
|
||||||
|
} else {
|
||||||
|
[self updateSuggestions];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if (commandSelector == @selector(scrollPageUp:)) {
|
||||||
|
if ([_panel isVisible]) {
|
||||||
|
[_menuView scrollPageUp: textView];
|
||||||
|
} else {
|
||||||
|
[self updateSuggestions];
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//NSLog(@"%@", NSStringFromSelector(commandSelector));
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface ACMenuView () {
|
||||||
|
id<AutocompleteItem> _value;
|
||||||
|
NSInteger _index;
|
||||||
|
NSInteger _count;
|
||||||
|
NSArray<id<AutocompleteItem>> *_items;
|
||||||
|
NSTrackingArea *_trackingArea;
|
||||||
|
NSColor *_backgroundColor;
|
||||||
|
NSColor *_selectedColor;
|
||||||
|
BOOL _tracking;
|
||||||
|
BOOL _clipped;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation ACMenuView
|
||||||
|
|
||||||
|
#define MENU_FONT_SIZE 11
|
||||||
|
#define MENU_HEIGHT 14
|
||||||
|
#define MARGIN_TOP 0 //6
|
||||||
|
#define MARGIN_BOTTOM 0 //6
|
||||||
|
#define INDENT 7
|
||||||
|
#define HEADER_INDENT 7
|
||||||
|
#define MAX_DISPLAY_ITEMS 16
|
||||||
|
|
||||||
|
|
||||||
|
-(void)_init {
|
||||||
|
_backgroundColor = [NSColor windowBackgroundColor];
|
||||||
|
if (@available(macOS 10.14, *)) {
|
||||||
|
_selectedColor = [NSColor selectedContentBackgroundColor];
|
||||||
|
} else {
|
||||||
|
_selectedColor = [NSColor selectedTextBackgroundColor];
|
||||||
|
}
|
||||||
|
NSTrackingAreaOptions options = NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveInActiveApp;
|
||||||
|
_trackingArea = [[NSTrackingArea alloc] initWithRect: NSZeroRect
|
||||||
|
options: options
|
||||||
|
owner: self
|
||||||
|
userInfo: nil];
|
||||||
|
|
||||||
|
[self addTrackingArea: _trackingArea];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(id)initWithCoder:(NSCoder *)coder {
|
||||||
|
if ((self = [super initWithCoder: coder])) {
|
||||||
|
[self _init];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)isFlipped {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)acceptsFirstMouse:(NSEvent *)event {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CGFloat HeightForItems(NSUInteger count) {
|
||||||
|
return count * MENU_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSSize)intrinsicContentSize {
|
||||||
|
return NSMakeSize(NSViewNoIntrinsicMetric, _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSSize)sizeThatFits:(NSSize)size {
|
||||||
|
size.height = _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM;
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sizeToFit {
|
||||||
|
NSSize size = [self frame].size;
|
||||||
|
size.height = _count * MENU_HEIGHT + MARGIN_TOP + MARGIN_BOTTOM;
|
||||||
|
[self setFrameSize: size];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)reset {
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
_index = -1;
|
||||||
|
_value = nil;
|
||||||
|
_items = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)reset: (id<AutocompleteItem>)value {
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
_index = -1;
|
||||||
|
_items = nil;
|
||||||
|
_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setItems:(NSArray *)items value: (id<AutocompleteItem> )value {
|
||||||
|
if (_items == items && _value == value) return;
|
||||||
|
_items = [items copy];
|
||||||
|
_index = -1;
|
||||||
|
_count = [items count];
|
||||||
|
_value = value;
|
||||||
|
|
||||||
|
if (!_items) {
|
||||||
|
_value = nil;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// also check enabled status....
|
||||||
|
if (_value) {
|
||||||
|
_index = [_items indexOfObject: _value];
|
||||||
|
if (_index == NSNotFound) {
|
||||||
|
_index = -1;
|
||||||
|
_value = nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if only 1 entry, auto-select it.
|
||||||
|
if (!_value) {
|
||||||
|
NSInteger count = -1;
|
||||||
|
for (id<AutocompleteItem> item in _items) {
|
||||||
|
++count;
|
||||||
|
if ([item menuIsHeader]) continue;
|
||||||
|
if (_value) {
|
||||||
|
_value = nil;
|
||||||
|
_index = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_value = item;
|
||||||
|
_index = count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NSInteger displayCount = MIN(_count, MAX_DISPLAY_ITEMS);
|
||||||
|
CGFloat newHeight = HeightForItems(displayCount) + 8 ; // 4px top/bottom
|
||||||
|
NSWindow *window = [self window];
|
||||||
|
NSRect wFrame = [window frame];
|
||||||
|
|
||||||
|
NSRect contentRect = [[[self enclosingScrollView] contentView] frame];
|
||||||
|
|
||||||
|
//NSSize size = [self intrinsicContentSize];
|
||||||
|
//NSInteger minWidth = [_parent minWidth];
|
||||||
|
//size.width = MAX(wFrame.size.width, minWidth);
|
||||||
|
//size.height += 8;
|
||||||
|
|
||||||
|
CGFloat delta = wFrame.size.height - newHeight;
|
||||||
|
|
||||||
|
wFrame.origin.y += delta;
|
||||||
|
wFrame.size.height = newHeight;
|
||||||
|
|
||||||
|
_clipped = (_count > displayCount);
|
||||||
|
|
||||||
|
[self setFrameSize: NSMakeSize(contentRect.size.width /*- 15.0*/, HeightForItems(_count))];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
[window setFrame: wFrame display: YES];
|
||||||
|
|
||||||
|
if (_value) {
|
||||||
|
[self scrollToRow: _index position: ScrollToCenter force: NO];
|
||||||
|
} else {
|
||||||
|
[self scrollToRow: 0 position: ScrollToTop force: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
//[self sizeToFit];
|
||||||
|
//[[self window] setContentSize: [self frame].size];
|
||||||
|
|
||||||
|
//NSLog(@"%@", NSStringFromRect(wFrame));
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setItems:(NSArray<id<AutocompleteItem>> *)items {
|
||||||
|
|
||||||
|
if (_items == items) return;
|
||||||
|
[self setItems: items value: _value];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-(id<AutocompleteItem>)itemAtPoint: (NSPoint)point indexPtr: (NSInteger *)indexPtr {
|
||||||
|
|
||||||
|
NSInteger index = floor(point.y / MENU_HEIGHT);
|
||||||
|
if (index < 0 || index >= _count) return nil;
|
||||||
|
if (indexPtr) *indexPtr = index;
|
||||||
|
return [_items objectAtIndex: index];
|
||||||
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ScrollToTop,
|
||||||
|
ScrollToBottom,
|
||||||
|
ScrollToCenter,
|
||||||
|
};
|
||||||
|
|
||||||
|
-(void)scrollToRow: (NSInteger)row position: (unsigned)position force: (BOOL)force {
|
||||||
|
if (row < 0) return;
|
||||||
|
if (!_clipped) return;
|
||||||
|
|
||||||
|
NSScrollView *scrollView = [self enclosingScrollView];
|
||||||
|
NSClipView *clipView = [scrollView contentView];
|
||||||
|
|
||||||
|
NSRect visibleRect = [self visibleRect];
|
||||||
|
if (!force) {
|
||||||
|
NSRect mRect = NSMakeRect(0, row * MENU_HEIGHT, 1 , MENU_HEIGHT);
|
||||||
|
if (NSContainsRect(visibleRect, mRect)) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSInteger topRow = row;
|
||||||
|
switch (position) {
|
||||||
|
case ScrollToTop:
|
||||||
|
break;
|
||||||
|
case ScrollToBottom:
|
||||||
|
topRow -= MAX_DISPLAY_ITEMS -1;
|
||||||
|
break;
|
||||||
|
case ScrollToCenter:
|
||||||
|
topRow -= MAX_DISPLAY_ITEMS/2 - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (topRow < 0) topRow = 0;
|
||||||
|
if (topRow > _count - MAX_DISPLAY_ITEMS)
|
||||||
|
topRow = _count - MAX_DISPLAY_ITEMS;
|
||||||
|
NSPoint point = NSMakePoint(0, topRow * MENU_HEIGHT);
|
||||||
|
|
||||||
|
//[self scrollClipView: clipView toPoint: point];
|
||||||
|
[clipView scrollToPoint: point];
|
||||||
|
[scrollView reflectScrolledClipView: clipView];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)moveUp:(id)sender {
|
||||||
|
if (_count == 0 || _index <= 0) return;
|
||||||
|
|
||||||
|
NSInteger index = 0;
|
||||||
|
id<AutocompleteItem> value = nil;
|
||||||
|
for (index = _index - 1; index >= 0; --index) {
|
||||||
|
value = [_items objectAtIndex: index];
|
||||||
|
if ([value menuIsHeader]) continue;
|
||||||
|
if (![value menuEnabled]) continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (index < 0) return;
|
||||||
|
if (index == _index) return;
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
[self invalidateRow: index];
|
||||||
|
|
||||||
|
_index = index;
|
||||||
|
_value = value;
|
||||||
|
[self scrollToRow: index position: ScrollToTop force: NO];
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)moveDown:(id)sender {
|
||||||
|
|
||||||
|
// _index -1 selects first item.
|
||||||
|
if (_count == 0 || _index == _count - 1) return;
|
||||||
|
|
||||||
|
NSInteger index = 0;
|
||||||
|
id<AutocompleteItem> value = nil;
|
||||||
|
for (index = _index + 1; index < _count ; ++index) {
|
||||||
|
value = [_items objectAtIndex: index];
|
||||||
|
if ([value menuIsHeader]) continue;
|
||||||
|
if (![value menuEnabled]) continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (index == _count) return;
|
||||||
|
if (index == _index) return;
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
[self invalidateRow: index];
|
||||||
|
|
||||||
|
_index = index;
|
||||||
|
_value = value;
|
||||||
|
|
||||||
|
[self scrollToRow: index position: ScrollToBottom force: NO];
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)scrollPageUp:(id)sender {
|
||||||
|
if (_count == 0 || _index <= 0) return;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)scrollPageDown:(id)sender {
|
||||||
|
if (_count == 0 || _index == _count - 1) return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)insertNewline:(id)sender {
|
||||||
|
if (_value) {
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)insertTab:(id)sender {
|
||||||
|
// if only one option, autocomplete?
|
||||||
|
if (_value) {
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)mouseMoved:(NSEvent *)event {
|
||||||
|
//NSLog(@"mouse moved");
|
||||||
|
|
||||||
|
if (!_tracking) return;
|
||||||
|
|
||||||
|
NSPoint p = [event locationInWindow];
|
||||||
|
p = [self convertPoint: p fromView: nil];
|
||||||
|
|
||||||
|
|
||||||
|
NSInteger index;
|
||||||
|
id<AutocompleteItem> value = [self itemAtPoint: p indexPtr: &index];
|
||||||
|
if (!value) return;
|
||||||
|
if (index == _index) return;
|
||||||
|
if ([value menuIsHeader]) return;
|
||||||
|
if (![value menuEnabled]) return;
|
||||||
|
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
[self invalidateRow: index];
|
||||||
|
|
||||||
|
_index = index;
|
||||||
|
_value = value;
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
-(void)mouseDown:(NSEvent *)event {
|
||||||
|
if (!_tracking) return;
|
||||||
|
|
||||||
|
NSPoint p = [event locationInWindow];
|
||||||
|
p = [self convertPoint: p fromView: nil];
|
||||||
|
|
||||||
|
NSInteger index;
|
||||||
|
id<AutocompleteItem> value = [self itemAtPoint: p indexPtr: &index];
|
||||||
|
if (!value) return;
|
||||||
|
if (index != _index) {
|
||||||
|
if ([value menuIsHeader]) return;
|
||||||
|
if (![value menuEnabled]) return;
|
||||||
|
|
||||||
|
[self invalidateRow: _index];
|
||||||
|
[self invalidateRow: index];
|
||||||
|
|
||||||
|
_index = index;
|
||||||
|
_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[_parent selectItem: _value withSelector: _cmd];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)mouseEntered:(NSEvent *)event {
|
||||||
|
//NSLog(@"mouse entered");
|
||||||
|
_tracking = YES;
|
||||||
|
|
||||||
|
}
|
||||||
|
-(void)mouseExited:(NSEvent *)event {
|
||||||
|
//NSLog(@"mouse exited");
|
||||||
|
|
||||||
|
_tracking = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)invalidateRow:(NSInteger)row {
|
||||||
|
if (row < 0 || row >= _count) return;
|
||||||
|
|
||||||
|
NSRect r = NSZeroRect;
|
||||||
|
NSRect bounds = [self bounds];
|
||||||
|
|
||||||
|
r.size.width = bounds.size.width;
|
||||||
|
r.size.height = MENU_HEIGHT;
|
||||||
|
r.origin.y = MENU_HEIGHT * row + MARGIN_TOP;
|
||||||
|
//NSLog(@"Invalidating %ld - %@", row, NSStringFromRect(r));
|
||||||
|
[self setNeedsDisplayInRect: r];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void DrawString(NSString *str, NSDictionary *attr, CGRect rect) {
|
||||||
|
|
||||||
|
NSSize size = [str sizeWithAttributes: attr];
|
||||||
|
if (size.width <= rect.size.width) {
|
||||||
|
[str drawInRect: rect withAttributes: attr];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSMutableString *mstr = [str mutableCopy];
|
||||||
|
// binary search is probably the best way to handle it :/
|
||||||
|
NSInteger l = [mstr length];
|
||||||
|
while (l > 2) {
|
||||||
|
[mstr replaceCharactersInRange: NSMakeRange(l-2, 2) withString: @"…"];
|
||||||
|
--l;
|
||||||
|
size = [mstr sizeWithAttributes: attr];
|
||||||
|
if (size.width <= rect.size.width) {
|
||||||
|
[mstr drawInRect: rect withAttributes: attr];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)drawItem: (id<AutocompleteItem>)item inRect: (NSRect)rect {
|
||||||
|
NSColor *textColor = [NSColor textColor];
|
||||||
|
if (!item) return;
|
||||||
|
|
||||||
|
if (item == _value) {
|
||||||
|
textColor = [NSColor selectedMenuItemTextColor];
|
||||||
|
[_selectedColor setFill];
|
||||||
|
NSRectFill(rect);
|
||||||
|
}
|
||||||
|
NSString *string = [item menuTitle];
|
||||||
|
|
||||||
|
if ([item menuIsHeader]) {
|
||||||
|
textColor = [NSColor secondaryLabelColor];
|
||||||
|
NSDictionary *attr = @{
|
||||||
|
NSForegroundColorAttributeName: textColor,
|
||||||
|
NSFontAttributeName: [NSFont systemFontOfSize: MENU_FONT_SIZE], // [NSFont boldSystemFontOfSize: 13],
|
||||||
|
};
|
||||||
|
NSRect r = NSInsetRect(rect, HEADER_INDENT, 0);
|
||||||
|
DrawString(string, attr, r);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
NSDictionary *attr = @{
|
||||||
|
NSForegroundColorAttributeName: textColor,
|
||||||
|
NSFontAttributeName: [NSFont systemFontOfSize: MENU_FONT_SIZE],
|
||||||
|
};
|
||||||
|
NSRect r = NSInsetRect(rect, INDENT, 0);
|
||||||
|
r.origin.x += INDENT;
|
||||||
|
r.size.width -= INDENT;
|
||||||
|
DrawString(string, attr, r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawRect:(NSRect)dirtyRect {
|
||||||
|
[super drawRect:dirtyRect];
|
||||||
|
|
||||||
|
NSRect r = [self bounds];
|
||||||
|
NSInteger begin = floor((NSMinY(dirtyRect) - MARGIN_TOP) / MENU_HEIGHT);
|
||||||
|
NSInteger end = ceil((NSMaxY(dirtyRect) - MARGIN_TOP) / MENU_HEIGHT);
|
||||||
|
if (begin < 0) begin = 0;
|
||||||
|
if (end > _count) end = _count;
|
||||||
|
|
||||||
|
|
||||||
|
r.origin.y = MENU_HEIGHT * begin + MARGIN_TOP;
|
||||||
|
r.size.height = MENU_HEIGHT;
|
||||||
|
for (NSInteger index = begin; index < end; ++index) {
|
||||||
|
id<AutocompleteItem> item = [_items objectAtIndex: index];
|
||||||
|
[self drawItem: item inRect: r];
|
||||||
|
r.origin.y += MENU_HEIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
/* custom scroller that doesn't draw a background. */
|
||||||
|
@interface ACScroller : NSScroller
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation ACScroller
|
||||||
|
|
||||||
|
|
||||||
|
-(void)drawRect:(NSRect)dirtyRect {
|
||||||
|
//[[NSColor windowBackgroundColor] set];
|
||||||
|
[[NSColor clearColor] set];
|
||||||
|
NSRectFill(dirtyRect);
|
||||||
|
[self drawKnob];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface ACPanel : NSPanel
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation ACPanel
|
||||||
|
|
||||||
|
/* needed to prevent the pop-up child window from being moved when offscreen. */
|
||||||
|
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen {
|
||||||
|
return frameRect;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
55
Ample/Base.lproj/Autocomplete.xib
Normal file
55
Ample/Base.lproj/Autocomplete.xib
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?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" customObjectInstantitationMethod="direct">
|
||||||
|
<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="AutocompleteControl">
|
||||||
|
<connections>
|
||||||
|
<outlet property="_menuView" destination="F2h-9b-Ouu" id="min-gE-sma"/>
|
||||||
|
<outlet property="_panel" destination="OYW-cj-FD5" id="DYJ-rN-6Ep"/>
|
||||||
|
<outlet property="_scrollView" destination="VQ6-PE-hTH" id="iKA-Ps-nkl"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="OYW-cj-FD5" customClass="ACPanel">
|
||||||
|
<windowStyleMask key="styleMask" utility="YES" nonactivatingPanel="YES" fullSizeContentView="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="272" y="172" width="300" height="400"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
|
<view key="contentView" id="3pz-HL-mV1">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="0.0" horizontalPageScroll="0.0" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="VQ6-PE-hTH">
|
||||||
|
<rect key="frame" x="0.0" y="4" width="300" height="392"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="HWy-NN-aOV">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="300" height="392"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view id="F2h-9b-Ouu" customClass="ACMenuView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="300" height="392"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</clipView>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Az6-1a-Hei">
|
||||||
|
<rect key="frame" x="-100" y="-100" width="168" height="15"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="tng-g2-1LZ" customClass="ACScroller">
|
||||||
|
<rect key="frame" x="285" y="0.0" width="15" height="392"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<point key="canvasLocation" x="127" y="73"/>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
223
Ample/Base.lproj/BookmarkWindow.xib
Normal file
223
Ample/Base.lproj/BookmarkWindow.xib
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="BookmarkWindowController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="arrayController" destination="7gA-MI-adT" id="XJ0-qj-ho5"/>
|
||||||
|
<outlet property="bookmarkManager" destination="Ryd-Nr-sPf" id="LM4-IP-ehb"/>
|
||||||
|
<outlet property="tableView" destination="mkQ-pQ-kXu" id="jqC-GF-vrE"/>
|
||||||
|
<outlet property="window" destination="QvC-M9-y7g" id="ovK-qY-XrZ"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<window title="Bookmarks" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="196" y="240" width="400" height="450"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||||
|
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="450"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cgh-jG-i97">
|
||||||
|
<rect key="frame" x="-1" y="-1" width="402" height="452"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<clipView key="contentView" id="xDr-v4-sVR">
|
||||||
|
<rect key="frame" x="1" y="1" width="400" height="450"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="firstColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="hmS-CB-Huq" viewBased="YES" id="mkQ-pQ-kXu">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="425"/>
|
||||||
|
<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="232" minWidth="40" maxWidth="1000" id="U9x-dw-Kd3">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Name">
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="jIY-mU-1gw">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<sortDescriptor key="sortDescriptorPrototype" selector="caseInsensitiveCompare:" sortKey="name"/>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView id="R8h-Wj-cHA">
|
||||||
|
<rect key="frame" x="1" y="1" width="237" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cIh-ya-lB0">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="237" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" title="Table View Cell" id="a7b-vf-Kzd">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="R8h-Wj-cHA" name="value" keyPath="objectValue.name" id="UWc-85-Ghw">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSValidatesImmediately" value="YES"/>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="cIh-ya-lB0" id="DMK-Kc-RpK"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
<tableColumn editable="NO" width="100" minWidth="100" maxWidth="100" id="fvh-YG-X9R">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Machine">
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="waa-dh-M0V">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="machine"/>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView id="LUd-BZ-Kpw">
|
||||||
|
<rect key="frame" x="241" y="1" width="100" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Qd-Zj-XZi">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="100" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="ztJ-V1-N1t">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="LUd-BZ-Kpw" name="value" keyPath="objectValue.machine" id="IYK-LP-fHo"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="4Qd-Zj-XZi" id="u3u-3q-Vc2"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
<tableColumn editable="NO" width="50" minWidth="50" maxWidth="50" id="rmr-1r-2Cb">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Default">
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="zuw-8H-5ck">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="automatic"/>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView id="f3C-qX-bVY">
|
||||||
|
<rect key="frame" x="344" y="1" width="54" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LzD-ps-EdD">
|
||||||
|
<rect key="frame" x="19" y="1" width="16" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSStatusAvailable" id="kH7-IH-D1y"/>
|
||||||
|
<connections>
|
||||||
|
<binding destination="f3C-qX-bVY" name="hidden" keyPath="objectValue.automatic" id="izX-1f-EU8">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="imageView" destination="LzD-ps-EdD" id="hef-CI-Ly8"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
<connections>
|
||||||
|
<action trigger="doubleAction" selector="doubleClick:" target="-2" id="VaT-3X-cCf"/>
|
||||||
|
<binding destination="7gA-MI-adT" name="content" keyPath="arrangedObjects" id="5So-FR-r94"/>
|
||||||
|
<outlet property="dataSource" destination="-2" id="kso-yU-XdI"/>
|
||||||
|
<outlet property="delegate" destination="-2" id="Lyf-Wr-8w0"/>
|
||||||
|
<outlet property="menu" destination="cH2-L7-ScC" id="3MS-Tc-P04"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
</clipView>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="O1o-6N-F5z">
|
||||||
|
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="3n8-lN-RGL">
|
||||||
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<tableHeaderView key="headerView" wantsLayer="YES" id="hmS-CB-Huq">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="400" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</tableHeaderView>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="-2" id="4OM-KB-CAh"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="-72" y="91"/>
|
||||||
|
</window>
|
||||||
|
<arrayController mode="entity" entityName="Bookmark" automaticallyPreparesContent="YES" preservesSelection="NO" selectsInsertedObjects="NO" avoidsEmptySelection="NO" clearsFilterPredicateOnInsertion="NO" id="7gA-MI-adT">
|
||||||
|
<connections>
|
||||||
|
<binding destination="Ryd-Nr-sPf" name="managedObjectContext" keyPath="managedObjectContext" id="hMi-JG-LQC"/>
|
||||||
|
<binding destination="-2" name="selectionIndexes" keyPath="tableView.selectedRowIndexes" id="dyb-Wv-Duo"/>
|
||||||
|
<binding destination="-2" name="sortDescriptors" keyPath="tableView.sortDescriptors" previousBinding="dyb-Wv-Duo" id="fkc-Yv-ZLN"/>
|
||||||
|
</connections>
|
||||||
|
</arrayController>
|
||||||
|
<customObject id="Ryd-Nr-sPf" customClass="BookmarkManagerProxy"/>
|
||||||
|
<menu id="cH2-L7-ScC">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Set Default" id="JGR-HC-oCO">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="setDefault:" target="-2" id="QQK-aI-l2p"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Clear Default" id="ulz-3z-Pgl">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="clearDefault:" target="-2" id="mIc-UM-kj0"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Delete" id="B7V-fY-Cbe">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="deleteBookmark:" target="-2" id="zQl-vg-Eg4"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="-2" id="raV-YO-2UW"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="355" y="-28"/>
|
||||||
|
</menu>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="NSStatusAvailable" width="16" height="16"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
@ -1,16 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
||||||
<plugIn identifier="com.apple.WebKit2IBPlugin" version="15705"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="CheatSheetWindowController">
|
<customObject id="-2" userLabel="File's Owner" customClass="CheatSheetWindowController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="_webView" destination="Yc9-xA-jWX" id="rsd-1e-HPk"/>
|
|
||||||
<outlet property="webView" destination="Yc9-xA-jWX" id="EE3-gk-f71"/>
|
|
||||||
<outlet property="window" destination="QvC-M9-y7g" id="U2v-sN-OzH"/>
|
<outlet property="window" destination="QvC-M9-y7g" id="U2v-sN-OzH"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
@ -23,19 +19,6 @@
|
|||||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
|
||||||
<wkWebView hidden="YES" wantsLayer="YES" fixedFrame="YES" allowsLinkPreview="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yc9-xA-jWX">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<wkWebViewConfiguration key="configuration">
|
|
||||||
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
|
|
||||||
<wkPreferences key="preferences" javaScriptCanOpenWindowsAutomatically="NO"/>
|
|
||||||
</wkWebViewConfiguration>
|
|
||||||
<connections>
|
|
||||||
<outlet property="navigationDelegate" destination="-2" id="1WW-1B-FdZ"/>
|
|
||||||
</connections>
|
|
||||||
</wkWebView>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
</view>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="-2" id="u4H-aq-RE2"/>
|
<outlet property="delegate" destination="-2" id="u4H-aq-RE2"/>
|
||||||
|
@ -33,6 +33,15 @@ Please note that MAME is a registered trademark of Gregory Ember, and permission
|
|||||||
\cf0 \cb1 \kerning1\expnd0\expndtw0 SDL 2.0 is distributed under the {\field{\*\fldinst{HYPERLINK "https://libsdl.org/license.php"}}{\fldrslt zlib license}}. This license allows you to use SDL freely in any software.\
|
\cf0 \cb1 \kerning1\expnd0\expndtw0 SDL 2.0 is distributed under the {\field{\*\fldinst{HYPERLINK "https://libsdl.org/license.php"}}{\fldrslt zlib license}}. This license allows you to use SDL freely in any software.\
|
||||||
\
|
\
|
||||||
\pard\pardeftab720\qc\partightenfactor0
|
\pard\pardeftab720\qc\partightenfactor0
|
||||||
|
{\field{\*\fldinst{HYPERLINK "https://sparkle-project.org/"}}{\fldrslt
|
||||||
|
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||||
|
Sparkle}}\
|
||||||
|
\pard\pardeftab720\partightenfactor0
|
||||||
|
\cf0 \
|
||||||
|
Sparkle is open source software available under the permissive MIT license, and is developed on GitHub by the Sparkle Project with the help of dozens of valued contributors.\
|
||||||
|
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\partightenfactor0
|
||||||
|
\cf0 \
|
||||||
|
\pard\pardeftab720\qc\partightenfactor0
|
||||||
{\field{\*\fldinst{HYPERLINK "https://usdawatercolors.nal.usda.gov/pom/catalog.xhtml?id=POM00001916"}}{\fldrslt
|
{\field{\*\fldinst{HYPERLINK "https://usdawatercolors.nal.usda.gov/pom/catalog.xhtml?id=POM00001916"}}{\fldrslt
|
||||||
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
\f0\b\fs36 \cf0 \cb3 \expnd0\expndtw0\kerning0
|
||||||
Icon}}
|
Icon}}
|
||||||
@ -42,6 +51,6 @@ Icon}}
|
|||||||
|
|
||||||
\f1\b0\fs28 \cf0 \
|
\f1\b0\fs28 \cf0 \
|
||||||
\pard\pardeftab720\qj\partightenfactor0
|
\pard\pardeftab720\qj\partightenfactor0
|
||||||
\cf4 \cb3 R.C. Steadman, 6-1-\'9221.\
|
\cf4 R.C. Steadman, 1921-06-01.\
|
||||||
\
|
\
|
||||||
U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special Collections, National Agricultural Library, Beltsville, MD 20705}
|
U.S. Department of Agriculture Pomological Watercolor Collection. Rare and Special Collections, National Agricultural Library, Beltsville, MD 20705}
|
@ -1,138 +1,24 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="DiskImagesWindowController">
|
<customObject id="-2" userLabel="File's Owner" customClass="DiskImagesWindowController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="arrayController" destination="vmp-9h-Z5R" id="WYF-Xq-BnN"/>
|
<outlet property="arrayController" destination="YmL-8S-msS" id="Pva-sz-XFI"/>
|
||||||
<outlet property="tableView" destination="J5l-1d-030" id="3hU-ho-1ag"/>
|
<outlet property="tableView" destination="cqO-ig-A9t" id="hbI-ho-WYj"/>
|
||||||
<outlet property="window" destination="R7r-B9-Bw0" id="hDE-Qa-m4g"/>
|
<outlet property="window" destination="AtY-lA-KIp" id="aaq-cR-kq8"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Recent Disk Images" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="RecentDiskImagesWindow" animationBehavior="default" titlebarAppearsTransparent="YES" id="R7r-B9-Bw0" customClass="NSPanel">
|
<customObject id="stE-9g-lJ2" customClass="BookmarkManagerProxy"/>
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
<arrayController mode="entity" entityName="DiskImage" automaticallyPreparesContent="YES" avoidsEmptySelection="NO" automaticallyRearrangesObjects="YES" id="YmL-8S-msS">
|
||||||
<windowPositionMask key="initialPositionMask" rightStrut="YES"/>
|
|
||||||
<rect key="contentRect" x="200" y="172" width="300" height="400"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
|
||||||
<view key="contentView" focusRingType="none" id="Kkg-Tp-4m1">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<subviews>
|
|
||||||
<scrollView focusRingType="none" fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" findBarPosition="belowContent" translatesAutoresizingMaskIntoConstraints="NO" id="ivr-XT-BPS">
|
|
||||||
<rect key="frame" x="-1" y="-1" width="302" height="402"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<clipView key="contentView" ambiguous="YES" copiesOnScroll="NO" id="1jn-uc-06s">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<tableView focusRingType="none" verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" id="J5l-1d-030">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="302" height="402"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
|
||||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<tableColumns>
|
|
||||||
<tableColumn width="282" minWidth="40" maxWidth="1000" id="1rF-M3-pYV">
|
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</tableHeaderCell>
|
|
||||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="erY-fh-OHK">
|
|
||||||
<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"/>
|
|
||||||
<prototypeCellViews>
|
|
||||||
<tableCellView id="AJH-gH-E8G">
|
|
||||||
<rect key="frame" x="1" y="1" width="282" height="22"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="esO-OR-AcY">
|
|
||||||
<rect key="frame" x="6" y="5" width="196" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="Image Name.2mg" id="xgc-u7-sFX">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="AJH-gH-E8G" name="value" keyPath="objectValue.path" id="S0h-hl-OPM">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">FilePathTransformer</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
<binding destination="AJH-gH-E8G" name="toolTip" keyPath="objectValue.path" id="gXq-2p-MpM"/>
|
|
||||||
</connections>
|
|
||||||
</textField>
|
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wzl-mV-Pmp">
|
|
||||||
<rect key="frame" x="206" y="3" width="75" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" alignment="right" title="32MB" id="QYB-us-igD">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="AJH-gH-E8G" name="value" keyPath="objectValue.size" id="omG-8X-flx">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">FileSizeTransformer</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
|
||||||
<connections>
|
|
||||||
<outlet property="textField" destination="esO-OR-AcY" id="9mX-Yt-vpg"/>
|
|
||||||
</connections>
|
|
||||||
</tableCellView>
|
|
||||||
</prototypeCellViews>
|
|
||||||
<connections>
|
|
||||||
<binding destination="vmp-9h-Z5R" name="value" keyPath="arrangedObjects.selection" id="32X-Ez-K7S"/>
|
|
||||||
</connections>
|
|
||||||
</tableColumn>
|
|
||||||
</tableColumns>
|
|
||||||
<connections>
|
|
||||||
<binding destination="vmp-9h-Z5R" name="content" keyPath="arrangedObjects" id="GHn-tz-ash"/>
|
|
||||||
<outlet property="dataSource" destination="-2" id="PRV-Rt-UuC"/>
|
|
||||||
<outlet property="delegate" destination="-2" id="WuV-c9-o5I"/>
|
|
||||||
<outlet property="menu" destination="bCS-1z-UOZ" id="UCb-2v-WrM"/>
|
|
||||||
</connections>
|
|
||||||
</tableView>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</clipView>
|
|
||||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ynD-Kb-eb3">
|
|
||||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="Dbq-yF-MKx" customClass="TransparentScroller">
|
|
||||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<userDefinedRuntimeAttributes>
|
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
|
||||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
</userDefinedRuntimeAttributes>
|
|
||||||
</scroller>
|
|
||||||
</scrollView>
|
|
||||||
</subviews>
|
|
||||||
</view>
|
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="-2" id="1Hn-2t-Vzj"/>
|
<binding destination="stE-9g-lJ2" name="managedObjectContext" keyPath="managedObjectContext" id="GyD-kH-DBa"/>
|
||||||
</connections>
|
|
||||||
<point key="canvasLocation" x="-188" y="143"/>
|
|
||||||
</window>
|
|
||||||
<arrayController id="vmp-9h-Z5R">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="contentArray" keyPath="self.content" id="UTv-za-ry7"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</arrayController>
|
</arrayController>
|
||||||
<menu id="bCS-1z-UOZ">
|
<menu id="bCS-1z-UOZ">
|
||||||
@ -155,5 +41,159 @@
|
|||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-667" y="170"/>
|
<point key="canvasLocation" x="-667" y="170"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
<window title="Recent Disk Images" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="RecentDiskImagesWindow" animationBehavior="default" id="AtY-lA-KIp">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="283" y="305" width="408" height="270"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||||
|
<view key="contentView" id="zHI-2R-bOe">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="408" height="270"/>
|
||||||
|
<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="a3G-Wf-K8I">
|
||||||
|
<rect key="frame" x="-1" y="-1" width="410" height="272"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<clipView key="contentView" id="SFr-s6-6di">
|
||||||
|
<rect key="frame" x="1" y="1" width="408" height="270"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="iwP-JL-O3g" viewBased="YES" id="cqO-ig-A9t">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="408" height="245"/>
|
||||||
|
<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="300" minWidth="40" maxWidth="1000" id="k9E-Si-iTY">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Name">
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="trJ-af-d0b">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<sortDescriptor key="sortDescriptorPrototype" selector="caseInsensitiveCompare:" sortKey="name"/>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView id="2Ic-UI-Je3">
|
||||||
|
<rect key="frame" x="1" y="1" width="305" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gkM-KB-x76">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="305" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="PitchDark.2mg" id="Wcg-zo-CeN">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="2Ic-UI-Je3" name="value" keyPath="objectValue.name" id="FAu-HR-0jF"/>
|
||||||
|
<binding destination="2Ic-UI-Je3" name="toolTip" keyPath="objectValue.path" id="0MM-sv-mET"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="gkM-KB-x76" id="tpG-TS-sXI"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
<tableColumn width="93" minWidth="40" maxWidth="1000" id="0aJ-xJ-YSS">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Size">
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="jRd-9Y-U6W">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<sortDescriptor key="sortDescriptorPrototype" selector="compare:" sortKey="size"/>
|
||||||
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView id="UW9-AF-U9F">
|
||||||
|
<rect key="frame" x="309" y="1" width="97" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6Ry-Zn-euh">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="97" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="32 MB" id="fXp-OZ-Qcu">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="UW9-AF-U9F" name="value" keyPath="objectValue.size" id="Hca-7L-QN7">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">FileSizeTransformer</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="6Ry-Zn-euh" id="vUm-0h-5qV"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
<connections>
|
||||||
|
<action trigger="doubleAction" selector="doubleClick:" target="-2" id="wdp-Ek-Olo"/>
|
||||||
|
<binding destination="YmL-8S-msS" name="content" keyPath="arrangedObjects" id="v56-YR-Qve"/>
|
||||||
|
<binding destination="YmL-8S-msS" name="sortDescriptors" keyPath="sortDescriptors" previousBinding="v56-YR-Qve" id="BGa-9c-RdD"/>
|
||||||
|
<outlet property="dataSource" destination="-2" id="gCn-sa-fuX"/>
|
||||||
|
<outlet property="delegate" destination="-2" id="VHT-aS-4iS"/>
|
||||||
|
<outlet property="menu" destination="bCS-1z-UOZ" id="a2u-hd-hPS"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
</clipView>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Z7O-AK-X5q">
|
||||||
|
<rect key="frame" x="1" y="119" width="223" height="15"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="OLa-ra-vIN">
|
||||||
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<tableHeaderView key="headerView" id="iwP-JL-O3g">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="408" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</tableHeaderView>
|
||||||
|
</scrollView>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<toolbar key="toolbar" implicitIdentifier="D9701924-6955-47B8-A2FF-DBD466AAEB92" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="regular" id="Gp6-Kl-lr2">
|
||||||
|
<allowedToolbarItems>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="lBE-ee-rCy"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="C346E56F-4480-4D8A-8485-33A3A51D7B78" label="" paletteLabel="Filter" sizingBehavior="auto" id="DsU-uu-UmZ">
|
||||||
|
<nil key="toolTip"/>
|
||||||
|
<searchField key="view" wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" id="qHV-IA-ysc">
|
||||||
|
<rect key="frame" x="0.0" y="14" width="96" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" continuous="YES" borderStyle="bezel" placeholderString="Filter" usesSingleLineMode="YES" bezelStyle="round" id="BWo-eC-ahz">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</searchFieldCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="filter:" target="-2" id="KhW-DS-b8s"/>
|
||||||
|
</connections>
|
||||||
|
</searchField>
|
||||||
|
</toolbarItem>
|
||||||
|
</allowedToolbarItems>
|
||||||
|
<defaultToolbarItems>
|
||||||
|
<toolbarItem reference="lBE-ee-rCy"/>
|
||||||
|
<toolbarItem reference="lBE-ee-rCy"/>
|
||||||
|
<toolbarItem reference="DsU-uu-UmZ"/>
|
||||||
|
</defaultToolbarItems>
|
||||||
|
</toolbar>
|
||||||
|
<point key="canvasLocation" x="-196" y="513"/>
|
||||||
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
@ -8,8 +8,11 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="DownloadWindowController">
|
<customObject id="-2" userLabel="File's Owner" customClass="DownloadWindowController">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="allFilterButton" destination="Kgj-LP-FsF" id="yub-s9-RVW"/>
|
||||||
|
<outlet property="arrayController" destination="jhO-4z-Qwt" id="GHu-xb-4zU"/>
|
||||||
<outlet property="downloadField" destination="sJz-So-jbA" id="WjK-48-FcE"/>
|
<outlet property="downloadField" destination="sJz-So-jbA" id="WjK-48-FcE"/>
|
||||||
<outlet property="formatButton" destination="2Rg-eX-DUq" id="oYo-MG-Sc6"/>
|
<outlet property="formatButton" destination="2Rg-eX-DUq" id="oYo-MG-Sc6"/>
|
||||||
|
<outlet property="missingFilterButton" destination="6c7-tU-3F3" id="89Y-wQ-9pB"/>
|
||||||
<outlet property="tableView" destination="FLX-Wt-y53" id="a4O-pk-EAt"/>
|
<outlet property="tableView" destination="FLX-Wt-y53" id="a4O-pk-EAt"/>
|
||||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||||
</connections>
|
</connections>
|
||||||
@ -18,45 +21,29 @@
|
|||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="ROMs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="DownloadManagerWindow" animationBehavior="default" id="F0z-JX-Cv5">
|
<window title="ROMs" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="DownloadManagerWindow" animationBehavior="default" id="F0z-JX-Cv5">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
<rect key="contentRect" x="196" y="240" width="400" height="575"/>
|
<rect key="contentRect" x="196" y="240" width="454" height="575"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
<value key="minSize" type="size" width="300" height="300"/>
|
<value key="minSize" type="size" width="454" height="300"/>
|
||||||
<view key="contentView" id="se5-gp-TjO">
|
<view key="contentView" id="se5-gp-TjO">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="575"/>
|
<rect key="frame" x="0.0" y="0.0" width="454" height="575"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rg5-Qf-4Mw">
|
|
||||||
<rect key="frame" x="324" y="19" width="56" height="23"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
|
||||||
<buttonCell key="cell" type="roundTextured" title="Cancel" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i6Z-OM-lqE">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<string key="keyEquivalent">.</string>
|
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="enabled" keyPath="self.active" id="mBP-8S-yGB"/>
|
|
||||||
</connections>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="cancelAll:" target="-2" id="ycl-eJ-ByB"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="51" horizontalPageScroll="10" verticalLineScroll="51" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-nT-mEa">
|
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="51" horizontalPageScroll="10" verticalLineScroll="51" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CMD-nT-mEa">
|
||||||
<rect key="frame" x="0.0" y="130" width="402" height="446"/>
|
<rect key="frame" x="0.0" y="130" width="456" height="446"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="Igp-aH-flp">
|
<clipView key="contentView" ambiguous="YES" drawsBackground="NO" id="Igp-aH-flp">
|
||||||
<rect key="frame" x="1" y="1" width="400" height="444"/>
|
<rect key="frame" x="1" y="1" width="454" height="444"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="49" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
<tableView verticalHuggingPriority="750" ambiguous="YES" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="49" rowSizeStyle="automatic" viewBased="YES" id="FLX-Wt-y53">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="400" height="444"/>
|
<rect key="frame" x="0.0" y="0.0" width="454" height="444"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableViewGridLines key="gridStyleMask" dashed="YES"/>
|
<tableViewGridLines key="gridStyleMask" dashed="YES"/>
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
<tableColumns>
|
<tableColumns>
|
||||||
<tableColumn width="397" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
<tableColumn width="451" minWidth="40" maxWidth="1000" id="5jP-bY-fhI">
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -69,63 +56,68 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||||
<prototypeCellViews>
|
<prototypeCellViews>
|
||||||
<tableCellView identifier="Cell" focusRingType="none" id="aBv-F5-XWo">
|
<tableCellView focusRingType="none" id="onK-6l-2iV">
|
||||||
<rect key="frame" x="1" y="1" width="397" height="17"/>
|
<rect key="frame" x="1" y="1" width="451" height="49"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pWm-hb-BXB">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="397" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="p71-gJ-vFV">
|
|
||||||
<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>
|
|
||||||
<connections>
|
|
||||||
<outlet property="textField" destination="pWm-hb-BXB" id="NNG-rj-AAQ"/>
|
|
||||||
</connections>
|
|
||||||
</tableCellView>
|
|
||||||
<tableCellView identifier="DownloadCell" focusRingType="none" id="onK-6l-2iV" customClass="DownloadTableCellView">
|
|
||||||
<rect key="frame" x="1" y="20" width="397" height="49"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="A44-us-TEl">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="A44-us-TEl">
|
||||||
<rect key="frame" x="25" y="28" width="371" height="17"/>
|
<rect key="frame" x="41" y="28" width="409" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="NSU-6I-nsG">
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="NSU-6I-nsG">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="onK-6l-2iV" name="value" keyPath="objectValue.name" id="t1L-kM-AW6">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSMultipleValuesPlaceholder">multiple</string>
|
||||||
|
<string key="NSNoSelectionPlaceholder">no selection</string>
|
||||||
|
<string key="NSNotApplicablePlaceholder">n/a</string>
|
||||||
|
<string key="NSNullPlaceholder">null</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
<binding destination="onK-6l-2iV" name="textColor" keyPath="objectValue.titleColor" id="0Qx-rz-DEZ"/>
|
||||||
|
<binding destination="onK-6l-2iV" name="toolTip" keyPath="objectValue.value" id="rUb-Jb-KbT"/>
|
||||||
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="jBN-UJ-tWi">
|
|
||||||
<rect key="frame" x="3" y="29" width="16" height="16"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
</progressIndicator>
|
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hfu-hP-QAH">
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hfu-hP-QAH">
|
||||||
<rect key="frame" x="25" y="3" width="371" height="17"/>
|
<rect key="frame" x="41" y="3" width="409" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="1cQ-Zh-q0o">
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="1cQ-Zh-q0o">
|
||||||
<font key="font" metaFont="system" size="10"/>
|
<font key="font" metaFont="system" size="10"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="onK-6l-2iV" name="textColor" keyPath="objectValue.descriptionColor" id="KVi-3N-Swm"/>
|
||||||
|
<binding destination="onK-6l-2iV" name="value" keyPath="objectValue.statusDescription" id="yV1-5r-YDh"/>
|
||||||
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
<progressIndicator wantsLayer="YES" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="jBN-UJ-tWi">
|
||||||
|
<rect key="frame" x="3" y="9" width="32" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||||
|
<connections>
|
||||||
|
<binding destination="onK-6l-2iV" name="animate" keyPath="objectValue.task" id="d22-JL-3Z7">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSIsNotNil</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</progressIndicator>
|
||||||
</subviews>
|
</subviews>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="activity" destination="jBN-UJ-tWi" id="ZwD-yU-Vne"/>
|
<outlet property="textField" destination="A44-us-TEl" id="ude-er-Gm4"/>
|
||||||
<outlet property="statusTextField" destination="hfu-hP-QAH" id="8Hv-BB-kYA"/>
|
|
||||||
<outlet property="textField" destination="A44-us-TEl" id="Ta5-nd-ed1"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</tableCellView>
|
</tableCellView>
|
||||||
</prototypeCellViews>
|
</prototypeCellViews>
|
||||||
|
<connections>
|
||||||
|
<binding destination="jhO-4z-Qwt" name="value" keyPath="arrangedObjects.selection" id="KQP-Xo-Fbf"/>
|
||||||
|
</connections>
|
||||||
</tableColumn>
|
</tableColumn>
|
||||||
</tableColumns>
|
</tableColumns>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="dataSource" destination="-2" id="Ghf-k9-bRK"/>
|
<binding destination="jhO-4z-Qwt" name="content" keyPath="arrangedObjects" id="2av-gV-V4K"/>
|
||||||
<outlet property="delegate" destination="-2" id="rpR-0W-4Nu"/>
|
|
||||||
<outlet property="menu" destination="RJM-21-hjO" id="xpL-0n-1jm"/>
|
<outlet property="menu" destination="RJM-21-hjO" id="xpL-0n-1jm"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
@ -142,7 +134,7 @@
|
|||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sJz-So-jbA">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sJz-So-jbA">
|
||||||
<rect key="frame" x="51" y="101" width="329" height="21"/>
|
<rect key="frame" x="51" y="101" width="383" height="21"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="HKe-di-YSs">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="HKe-di-YSs">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@ -154,9 +146,9 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fhd-vr-Q2G">
|
||||||
<rect key="frame" x="192" y="18" width="124" height="23"/>
|
<rect key="frame" x="208" y="13" width="150" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="roundTextured" title="Download Missing" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
<buttonCell key="cell" type="push" title="Download Missing" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AKx-eg-iLS">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@ -188,13 +180,13 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="AuM-pD-Gul">
|
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="AuM-pD-Gul">
|
||||||
<rect key="frame" x="12" y="52" width="368" height="5"/>
|
<rect key="frame" x="12" y="52" width="422" height="5"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
</box>
|
</box>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dpY-qZ-2Nk">
|
<button verticalHuggingPriority="750" fixedFrame="YES" imageHugsTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dpY-qZ-2Nk">
|
||||||
<rect key="frame" x="90" y="13" width="100" height="32"/>
|
<rect key="frame" x="93" y="13" width="115" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="ROMs" bezelStyle="rounded" image="NSFolder" imagePosition="leading" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="E0t-sX-rgE">
|
<buttonCell key="cell" type="push" title="ROMs" bezelStyle="rounded" image="NSFolder" imagePosition="left" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="E0t-sX-rgE">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
@ -204,7 +196,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lnv-mh-zAr">
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lnv-mh-zAr">
|
||||||
<rect key="frame" x="6" y="13" width="87" height="32"/>
|
<rect key="frame" x="6" y="13" width="87" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="mYS-h7-GUa">
|
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="mYS-h7-GUa">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@ -237,12 +229,66 @@
|
|||||||
</binding>
|
</binding>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rg5-Qf-4Mw">
|
||||||
|
<rect key="frame" x="358" y="13" width="82" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i6Z-OM-lqE">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent">.</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="enabled" keyPath="self.active" id="mBP-8S-yGB"/>
|
||||||
|
</connections>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="cancelAll:" target="-2" id="ycl-eJ-ByB"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
|
<toolbar key="toolbar" implicitIdentifier="B60021E6-BFBC-44E6-97DC-120AA9FD3269" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="regular" id="kpz-W4-xgh">
|
||||||
|
<allowedToolbarItems>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="tbY-ts-Irb"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="3Kc-zG-IdN"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="BD743A15-0B61-48FF-9EED-FD8D57EF8459" label="All" paletteLabel="All" tag="1" sizingBehavior="auto" id="Jj0-n8-I5a">
|
||||||
|
<nil key="toolTip"/>
|
||||||
|
<button key="view" verticalHuggingPriority="750" tag="1" id="Kgj-LP-FsF">
|
||||||
|
<rect key="frame" x="0.0" y="14" width="74" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="All" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="9s7-S1-hW1">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="filterButton:" target="-2" id="gTc-Ul-FYR"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</toolbarItem>
|
||||||
|
<toolbarItem implicitItemIdentifier="5B013840-E582-4568-8448-DDD7EE1E5AE2" label="Missing" paletteLabel="Missing" tag="2" sizingBehavior="auto" id="GV4-aX-5Ox">
|
||||||
|
<nil key="toolTip"/>
|
||||||
|
<button key="view" verticalHuggingPriority="750" tag="2" id="6c7-tU-3F3">
|
||||||
|
<rect key="frame" x="0.0" y="14" width="74" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="recessed" title="Missing" bezelStyle="recessed" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ui2-dz-IZj">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
|
||||||
|
<font key="font" metaFont="systemBold" size="12"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="filterButton:" target="-2" id="R6W-hU-oqL"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</toolbarItem>
|
||||||
|
</allowedToolbarItems>
|
||||||
|
<defaultToolbarItems>
|
||||||
|
<toolbarItem reference="Jj0-n8-I5a"/>
|
||||||
|
<toolbarItem reference="GV4-aX-5Ox"/>
|
||||||
|
</defaultToolbarItems>
|
||||||
|
</toolbar>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="32" y="119.5"/>
|
<point key="canvasLocation" x="59" y="119.5"/>
|
||||||
</window>
|
</window>
|
||||||
<menu id="RJM-21-hjO">
|
<menu id="RJM-21-hjO">
|
||||||
<items>
|
<items>
|
||||||
@ -252,6 +298,12 @@
|
|||||||
<action selector="showInFinder:" target="-2" id="ltL-yL-7EP"/>
|
<action selector="showInFinder:" target="-2" id="ltL-yL-7EP"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Move to Trash" id="x1Q-OF-5hM">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="moveToTrash:" target="-2" id="swr-yf-hA2"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Download" tag="2" id="ree-Zg-jYB">
|
<menuItem title="Download" tag="2" id="ree-Zg-jYB">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -270,6 +322,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-348" y="164"/>
|
<point key="canvasLocation" x="-348" y="164"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
<arrayController objectClassName="DownloadItem" editable="NO" preservesSelection="NO" selectsInsertedObjects="NO" avoidsEmptySelection="NO" clearsFilterPredicateOnInsertion="NO" automaticallyRearrangesObjects="YES" id="jhO-4z-Qwt" customClass="DownloadItemArrayController"/>
|
||||||
<userDefaultsController representsSharedInstance="YES" id="721-9N-Bma"/>
|
<userDefaultsController representsSharedInstance="YES" id="721-9N-Bma"/>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -8,12 +8,16 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="LaunchWindowController">
|
<customObject id="-2" userLabel="File's Owner" customClass="LaunchWindowController">
|
||||||
<connections>
|
<connections>
|
||||||
|
<outlet property="addBookmarkWindow" destination="yIt-hP-HBq" id="Qhx-WV-cg4"/>
|
||||||
|
<outlet property="bookmarkErrorField" destination="RiJ-Xw-sgW" id="6y5-Fo-AnM"/>
|
||||||
|
<outlet property="bookmarkTextField" destination="fAl-Vn-x1w" id="GNr-j6-BiQ"/>
|
||||||
<outlet property="machineView" destination="oVt-eD-aaj" id="Q9V-Kr-6GN"/>
|
<outlet property="machineView" destination="oVt-eD-aaj" id="Q9V-Kr-6GN"/>
|
||||||
<outlet property="machineViewController" destination="RgH-d9-xl8" id="DIa-h0-6y2"/>
|
<outlet property="machineViewController" destination="FSD-3v-Wni" id="tXv-zJ-QO3"/>
|
||||||
<outlet property="mediaController" destination="t7c-zy-czN" id="a7d-HC-TWx"/>
|
<outlet property="mediaController" destination="t7c-zy-czN" id="a7d-HC-TWx"/>
|
||||||
<outlet property="mediaView" destination="J9O-xI-P5J" id="PmZ-VC-4SN"/>
|
<outlet property="mediaView" destination="J9O-xI-P5J" id="PmZ-VC-4SN"/>
|
||||||
<outlet property="slotController" destination="lyS-mc-3Tf" id="LXo-Ii-fDX"/>
|
<outlet property="slotController" destination="lyS-mc-3Tf" id="LXo-Ii-fDX"/>
|
||||||
<outlet property="slotView" destination="P9d-sS-qEb" id="qlH-u0-hzq"/>
|
<outlet property="slotView" destination="P9d-sS-qEb" id="qlH-u0-hzq"/>
|
||||||
|
<outlet property="softwareListControl" destination="pNl-g4-ZLh" id="U0i-R9-GLE"/>
|
||||||
<outlet property="window" destination="Vze-YF-m6e" id="JUs-Eb-MW8"/>
|
<outlet property="window" destination="Vze-YF-m6e" id="JUs-Eb-MW8"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
@ -21,51 +25,19 @@
|
|||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="LaunchWindow" animationBehavior="default" id="Vze-YF-m6e">
|
<window title="Ample" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="LaunchWindow" animationBehavior="default" id="Vze-YF-m6e">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
<rect key="contentRect" x="335" y="390" width="718" height="795"/>
|
<rect key="contentRect" x="335" y="390" width="1000" height="640"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
<view key="contentView" id="Ssv-Jw-EE0">
|
<view key="contentView" id="Ssv-Jw-EE0">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="718" height="795"/>
|
<rect key="frame" x="0.0" y="0.0" width="1000" height="640"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oVt-eD-aaj">
|
|
||||||
<rect key="frame" x="0.0" y="615" width="718" height="180"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
</customView>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nKp-px-nHg">
|
|
||||||
<rect key="frame" x="588.5" y="58" width="111" height="23"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
|
||||||
<buttonCell key="cell" type="roundTextured" title="Launch" bezelStyle="texturedRounded" image="NSAppleMenuImage" imagePosition="left" alignment="center" borderStyle="border" inset="2" id="Ct1-Rb-7uI">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<string key="keyEquivalent" base64-UTF8="YES">
|
|
||||||
DQ
|
|
||||||
</string>
|
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="launchAction:" target="-2" id="a4d-zv-1CU"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nNO-3T-OAy">
|
|
||||||
<rect key="frame" x="470.5" y="58" width="109" height="23"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
|
||||||
<buttonCell key="cell" type="roundTextured" title="Reset Slots" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Uii-5h-2R2">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<string key="keyEquivalent">r</string>
|
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="resetSlots:" target="lyS-mc-3Tf" id="1qi-N0-Q8B"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<customView id="P9d-sS-qEb" customClass="FlippedView">
|
<customView id="P9d-sS-qEb" customClass="FlippedView">
|
||||||
<rect key="frame" x="20" y="92" width="316" height="363"/>
|
<rect key="frame" x="302" y="105" width="326" height="363"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
</customView>
|
</customView>
|
||||||
<tabView initialItem="zUN-Qs-haG" id="l8R-bg-6Zm">
|
<tabView initialItem="zUN-Qs-haG" id="l8R-bg-6Zm">
|
||||||
<rect key="frame" x="13" y="453" width="692" height="160"/>
|
<rect key="frame" x="295" y="466" width="692" height="160"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<tabViewItems>
|
<tabViewItems>
|
||||||
<tabViewItem label="Video" identifier="" id="zUN-Qs-haG">
|
<tabViewItem label="Video" identifier="" id="zUN-Qs-haG">
|
||||||
@ -122,7 +94,7 @@ DQ
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hM8-FM-Agh">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hM8-FM-Agh">
|
||||||
<rect key="frame" x="382" y="87" width="172" height="25"/>
|
<rect key="frame" x="382" y="87" width="174" height="25"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="Dsm-bi-Txy" id="mBS-h4-BWC">
|
<popUpButtonCell key="cell" type="push" title="Default" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="Dsm-bi-Txy" id="mBS-h4-BWC">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@ -147,6 +119,9 @@ DQ
|
|||||||
<menuItem title="LCD Grid" tag="5" id="A6k-ku-z2M">
|
<menuItem title="LCD Grid" tag="5" id="A6k-ku-z2M">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Fighters" id="1aA-ge-f8R">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
@ -238,7 +213,7 @@ DQ
|
|||||||
</button>
|
</button>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PGK-yK-2ZK">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PGK-yK-2ZK">
|
||||||
<rect key="frame" x="15" y="91" width="43" height="16"/>
|
<rect key="frame" x="15" y="91" width="43" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Speed" id="D9w-Mz-PXs">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Speed" id="D9w-Mz-PXs">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -246,7 +221,7 @@ DQ
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FE4-gG-fPb">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FE4-gG-fPb">
|
||||||
<rect key="frame" x="62" y="86" width="107" height="25"/>
|
<rect key="frame" x="62" y="86" width="109" height="25"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="100%" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="1" imageScaling="proportionallyDown" inset="2" selectedItem="yoI-Ra-evu" id="M40-f0-awc">
|
<popUpButtonCell key="cell" type="push" title="100%" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="1" imageScaling="proportionallyDown" inset="2" selectedItem="yoI-Ra-evu" id="M40-f0-awc">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@ -266,6 +241,17 @@ DQ
|
|||||||
<binding destination="-2" name="selectedTag" keyPath="self.mameSpeed" id="nFG-yA-KC1"/>
|
<binding destination="-2" name="selectedTag" keyPath="self.mameSpeed" id="nFG-yA-KC1"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</popUpButton>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="knB-Rn-1Cm">
|
||||||
|
<rect key="frame" x="15" y="40" width="67" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Rewind" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Y7b-jN-HCc">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="self.mameRewind" id="Hw5-n7-O27"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
@ -299,7 +285,7 @@ DQ
|
|||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Yf-ZJ-8kx">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Yf-ZJ-8kx">
|
||||||
<rect key="frame" x="132" y="59" width="523" height="21"/>
|
<rect key="frame" x="132" y="59" width="523" height="21"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.wav" drawsBackground="YES" id="Xqc-zw-28b">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.wav" drawsBackground="YES" usesSingleLineMode="YES" id="Xqc-zw-28b">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -316,7 +302,7 @@ DQ
|
|||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ne8-5I-D1H">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ne8-5I-D1H">
|
||||||
<rect key="frame" x="132" y="28" width="523" height="21"/>
|
<rect key="frame" x="132" y="28" width="523" height="21"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.vgm" drawsBackground="YES" id="xGs-Mi-wzj">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.vgm" drawsBackground="YES" usesSingleLineMode="YES" id="xGs-Mi-wzj">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -341,7 +327,7 @@ DQ
|
|||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xht-PS-Hw8">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xht-PS-Hw8">
|
||||||
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.avi" drawsBackground="YES" id="iY4-FF-x2e">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file.avi" drawsBackground="YES" usesSingleLineMode="YES" id="iY4-FF-x2e">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
@ -369,26 +355,69 @@ DQ
|
|||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
</tabViewItem>
|
</tabViewItem>
|
||||||
|
<tabViewItem label="Paths" identifier="" id="PVN-Iw-nYG">
|
||||||
|
<view key="view" id="5qP-bQ-Id6">
|
||||||
|
<rect key="frame" x="10" y="33" width="672" height="114"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VDW-FX-9az">
|
||||||
|
<rect key="frame" x="132" y="90" width="523" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/directory/" drawsBackground="YES" usesSingleLineMode="YES" id="ykl-aj-n1L">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="enabled" keyPath="self.mameShareDirectory" id="bPv-hU-XgK"/>
|
||||||
|
<binding destination="-2" name="value" keyPath="self.mameShareDirectoryPath" id="ddj-BN-tsY">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSNullPlaceholder">/path/to/directory/</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1fA-nr-wns">
|
||||||
|
<rect key="frame" x="15" y="91" width="117" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Share Directory" bezelStyle="regularSquare" imagePosition="left" inset="2" id="xmA-1v-wU7">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="self.mameShareDirectory" id="x3D-ho-u4v"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
</tabViewItem>
|
||||||
</tabViewItems>
|
</tabViewItems>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="machine" id="odt-eJ-VrX">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSIsNil</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
</tabView>
|
</tabView>
|
||||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="J9O-xI-P5J" customClass="FlippedView">
|
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="J9O-xI-P5J" customClass="FlippedView">
|
||||||
<rect key="frame" x="382" y="92" width="316" height="363"/>
|
<rect key="frame" x="654" y="107" width="326" height="331"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
</customView>
|
</customView>
|
||||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" id="2ue-XT-byh">
|
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" horizontalScrollElasticity="none" id="2ue-XT-byh">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="eSY-AU-tvi">
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="eSY-AU-tvi">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textView focusRingType="none" editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="c0R-8x-RL2">
|
<textView focusRingType="none" editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" allowsCharacterPickerTouchBarItem="NO" textCompletion="NO" id="c0R-8x-RL2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="718" height="51"/>
|
<rect key="frame" x="0.0" y="0.0" width="1001" height="69"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="minSize" width="718" height="51"/>
|
<size key="minSize" width="1001" height="69"/>
|
||||||
<size key="maxSize" width="718" height="10000000"/>
|
<size key="maxSize" width="1001" height="10000000"/>
|
||||||
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="value" keyPath="self.commandLine" id="deQ-gK-fgu">
|
<binding destination="-2" name="value" keyPath="self.commandLine" id="deQ-gK-fgu">
|
||||||
@ -409,13 +438,224 @@ DQ
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</scroller>
|
</scroller>
|
||||||
</scrollView>
|
</scrollView>
|
||||||
|
<searchField wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" id="pNl-g4-ZLh" customClass="AutocompleteControl">
|
||||||
|
<rect key="frame" x="654" y="446" width="326" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" placeholderString="Software List" usesSingleLineMode="YES" bezelStyle="round" id="sMi-a3-XEn">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</searchFieldCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="softwareChanged:" target="-2" id="879-da-UEc"/>
|
||||||
|
</connections>
|
||||||
|
</searchField>
|
||||||
|
<customView id="oVt-eD-aaj" customClass="FlippedView">
|
||||||
|
<rect key="frame" x="0.0" y="69" width="294" height="571"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
</customView>
|
||||||
|
<box verticalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="UwI-q9-hEm">
|
||||||
|
<rect key="frame" x="0.0" y="67" width="1000" height="5"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
|
</box>
|
||||||
|
<box horizontalHuggingPriority="750" fixedFrame="YES" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="xjH-Gv-MHt">
|
||||||
|
<rect key="frame" x="291" y="69" width="5" height="571"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/>
|
||||||
|
</box>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nKp-px-nHg">
|
||||||
|
<rect key="frame" x="869.5" y="76" width="111" height="23"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="roundTextured" title="Launch" bezelStyle="texturedRounded" image="NSAppleMenuImage" imagePosition="left" alignment="center" borderStyle="border" inset="2" id="Ct1-Rb-7uI">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
DQ
|
||||||
|
</string>
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="launchAction:" target="-2" id="a4d-zv-1CU"/>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="machine" id="8Ks-FY-Tmk">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSIsNil</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="769" y="120.5"/>
|
<toolbar key="toolbar" implicitIdentifier="ACA8EE70-5505-4CFD-9F78-7A480D93260B" autosavesConfiguration="NO" allowsUserCustomization="NO" prefersToBeShown="NO" displayMode="iconAndLabel" sizeMode="regular" id="b3J-Bx-3nk">
|
||||||
|
<allowedToolbarItems>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarShowColorsItem" id="uHd-dY-alN"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarShowFontsItem" id="WEM-Gw-Utx"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarPrintItem" id="RCG-fn-6Ue"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="BRc-Qf-FCk"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="Dtt-KT-5NO"/>
|
||||||
|
</allowedToolbarItems>
|
||||||
|
<defaultToolbarItems/>
|
||||||
|
</toolbar>
|
||||||
|
<connections>
|
||||||
|
<outlet property="menu" destination="Aa5-Sk-gZX" id="Sj0-0o-oZb"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="590" y="40"/>
|
||||||
</window>
|
</window>
|
||||||
<viewController title="Media View" nibName="MediaView" id="t7c-zy-czN" customClass="MediaViewController"/>
|
<viewController title="Media View" nibName="MediaView" id="t7c-zy-czN" customClass="MediaViewController"/>
|
||||||
<viewController title="Slot View" nibName="NewSlotView" id="lyS-mc-3Tf" customClass="NewSlotViewController"/>
|
<viewController title="Slot View" nibName="SlotView" id="lyS-mc-3Tf" customClass="SlotViewController"/>
|
||||||
<customObject id="RgH-d9-xl8" customClass="MachineViewController"/>
|
<window title="Add Bookmark" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="yIt-hP-HBq">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES"/>
|
||||||
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
|
<rect key="contentRect" x="196" y="240" width="462" height="116"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
|
<view key="contentView" wantsLayer="YES" id="WVd-g4-Tbl">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="462" height="116"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Gho-Xy-rn4">
|
||||||
|
<rect key="frame" x="358" y="13" width="90" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Vxo-rD-aMe">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
DQ
|
||||||
|
</string>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="bookmarkSave:" target="-2" id="wLF-LE-5RO"/>
|
||||||
|
<binding destination="-2" name="enabled" keyPath="bookmarkName" id="U5R-gU-1bE">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">StringNotEmptyTransformer</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3sv-Kd-Ep5">
|
||||||
|
<rect key="frame" x="268" y="13" width="90" height="32"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jaa-RY-PAg">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
|
Gw
|
||||||
|
</string>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="bookmarkCancel:" target="-2" id="uWM-vs-hz7"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1fO-x7-Gft">
|
||||||
|
<rect key="frame" x="18" y="80" width="103" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Add Bookmark…" id="AZS-JR-SNt">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fAl-Vn-x1w">
|
||||||
|
<rect key="frame" x="20" y="49" width="422" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="bookmark name" drawsBackground="YES" id="Enq-2z-cle">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="bookmarkName" id="84v-el-4Uk">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||||
|
<string key="NSNullPlaceholder">bookmark name</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RiJ-Xw-sgW">
|
||||||
|
<rect key="frame" x="20" y="20" width="248" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Ehz-4Z-Tjq">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EFq-dZ-y90">
|
||||||
|
<rect key="frame" x="378" y="79" width="66" height="18"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="check" title="Default" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="cOs-WH-9Dr">
|
||||||
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="bookmarkDefault" id="Oiv-hR-5fn"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
</view>
|
||||||
|
<point key="canvasLocation" x="-62" y="95"/>
|
||||||
|
</window>
|
||||||
|
<viewController nibName="MachineView" id="FSD-3v-Wni" customClass="NewMachineViewController"/>
|
||||||
|
<menu id="Aa5-Sk-gZX">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Launch" image="NSAppleMenuImage" id="OSH-7C-D6z">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="launchAction:" target="-2" id="ZY2-He-VyK"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="Iti-F9-p35"/>
|
||||||
|
<menuItem title="List Media…" id="M5h-4W-0nV">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="listMedia:" target="-2" id="IO7-MG-zud"/>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="optionKey" id="LhL-2l-iss">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="List Slots…" id="cNj-Sb-KkE">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="listSlots:" target="-2" id="3nb-mV-eUK"/>
|
||||||
|
<binding destination="-2" name="hidden" keyPath="optionKey" id="dwp-Kn-LfC">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="yZx-W2-lZg"/>
|
||||||
|
<menuItem title="Reset All" id="PQ0-yO-SKz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="resetAll:" target="-2" id="hF5-fl-bMr"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Reset Machine" id="1by-3B-LSd">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="resetMachine:" target="-2" id="7au-OM-Q88"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Reset Slots" id="ccx-xm-qeo">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="resetSlots:" target="lyS-mc-3Tf" id="39K-rS-u9D"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Reset Media" id="Opr-7k-fO1">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="resetMedia:" target="-2" id="n5j-1R-NJl"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="-2" id="wqC-IG-63F"/>
|
||||||
|
</connections>
|
||||||
|
<point key="canvasLocation" x="-121" y="-2"/>
|
||||||
|
</menu>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="NSAppleMenuImage" width="11" height="14"/>
|
<image name="NSAppleMenuImage" width="11" height="14"/>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
|
||||||
<view key="contentView" id="se5-gp-TjO">
|
<view key="contentView" id="se5-gp-TjO">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<scrollView fixedFrame="YES" borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hj3-ou-djb">
|
<scrollView fixedFrame="YES" borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hj3-ou-djb">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
<rect key="frame" x="0.0" y="0.0" width="800" height="270"/>
|
||||||
@ -52,10 +52,31 @@
|
|||||||
</scrollView>
|
</scrollView>
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
|
<toolbar key="toolbar" implicitIdentifier="54C242E0-0A7F-491A-9B83-7279A9663A36" autosavesConfiguration="NO" allowsUserCustomization="NO" displayMode="iconOnly" sizeMode="small" id="Cik-bA-ZYu">
|
||||||
|
<allowedToolbarItems>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarShowColorsItem" id="zxC-EA-a7F"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarShowFontsItem" id="xZv-cQ-rPS"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarPrintItem" id="2BZ-oP-sMg"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="j5G-hW-61a"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="a72-iv-2QT"/>
|
||||||
|
<toolbarItem implicitItemIdentifier="21A9965C-D1B3-4E82-A344-1688A467E870" label="Clear Log" paletteLabel="Clear Log" tag="-1" image="NSTrashEmpty" id="pn5-MM-9p1">
|
||||||
|
<connections>
|
||||||
|
<action selector="clearLog:" target="-2" id="VU3-mv-6WR"/>
|
||||||
|
</connections>
|
||||||
|
</toolbarItem>
|
||||||
|
</allowedToolbarItems>
|
||||||
|
<defaultToolbarItems>
|
||||||
|
<toolbarItem reference="a72-iv-2QT"/>
|
||||||
|
<toolbarItem reference="pn5-MM-9p1"/>
|
||||||
|
</defaultToolbarItems>
|
||||||
|
</toolbar>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-285" y="-234"/>
|
<point key="canvasLocation" x="-285" y="-234"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="NSTrashEmpty" width="32" height="32"/>
|
||||||
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
109
Ample/Base.lproj/MachineView.xib
Normal file
109
Ample/Base.lproj/MachineView.xib
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<?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" customObjectInstantitationMethod="direct">
|
||||||
|
<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="NewMachineViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="outlineView" destination="9V6-He-b8A" id="XeC-DJ-oXY"/>
|
||||||
|
<outlet property="view" destination="t3T-qF-D0e" id="Svb-w7-hs9"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="26" horizontalPageScroll="10" verticalLineScroll="26" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="t3T-qF-D0e">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<clipView key="contentView" drawsBackground="NO" id="DyG-qq-uBF">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" autosaveName="machine-view" rowHeight="24" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autosaveExpandedItems="YES" outlineTableColumn="e67-js-boV" id="9V6-He-b8A">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="274" height="543"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<tableColumns>
|
||||||
|
<tableColumn width="271" minWidth="16" maxWidth="1000" id="e67-js-boV">
|
||||||
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||||
|
<font key="font" metaFont="smallSystem"/>
|
||||||
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</tableHeaderCell>
|
||||||
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="jZU-xV-PI4">
|
||||||
|
<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"/>
|
||||||
|
<prototypeCellViews>
|
||||||
|
<tableCellView identifier="HeaderCell" id="2iF-4F-HfC">
|
||||||
|
<rect key="frame" x="1" y="1" width="271" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9tU-X8-FZn">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="271" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="HEADER CELL" id="EUi-TS-vlq">
|
||||||
|
<font key="font" metaFont="systemBold"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="2iF-4F-HfC" name="value" keyPath="objectValue.description" id="He3-9c-g9A"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="9tU-X8-FZn" id="p2B-eV-6bS"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
<tableCellView identifier="DataCell" id="7b4-T1-d29">
|
||||||
|
<rect key="frame" x="1" y="20" width="271" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FkS-zP-pRB">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="271" height="17"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="g6t-E7-0lM">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="7b4-T1-d29" name="value" keyPath="objectValue.description" id="kp8-ww-1aE"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="textField" destination="FkS-zP-pRB" id="JkE-pr-7px"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
</prototypeCellViews>
|
||||||
|
</tableColumn>
|
||||||
|
</tableColumns>
|
||||||
|
<connections>
|
||||||
|
<action selector="clickAction:" target="-2" id="O3p-cV-gwk"/>
|
||||||
|
<outlet property="dataSource" destination="-2" id="nW2-qs-3w6"/>
|
||||||
|
<outlet property="delegate" destination="-2" id="4Wc-Pe-v81"/>
|
||||||
|
</connections>
|
||||||
|
</outlineView>
|
||||||
|
</subviews>
|
||||||
|
<nil key="backgroundColor"/>
|
||||||
|
</clipView>
|
||||||
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="kig-a5-Ay0">
|
||||||
|
<rect key="frame" x="-100" y="-100" width="238" height="15"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="lLp-pv-Fbj" customClass="TransparentScroller">
|
||||||
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</scroller>
|
||||||
|
<point key="canvasLocation" x="-91" y="132"/>
|
||||||
|
</scrollView>
|
||||||
|
</objects>
|
||||||
|
</document>
|
@ -13,12 +13,19 @@
|
|||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<customObject id="rSq-qV-SGy" customClass="BookmarkManager">
|
||||||
|
<connections>
|
||||||
|
<outlet property="menu" destination="ha0-nx-PIl" id="Ozd-ID-egK"/>
|
||||||
|
<outlet property="updateMenuItem" destination="30b-vT-HIa" id="AgZ-LE-no6"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
<customObject id="Voe-Tx-rLC" customClass="AppDelegate">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="installWindow" destination="jWX-pY-Zpb" id="xAj-Vj-Vxn"/>
|
<outlet property="installWindow" destination="jWX-pY-Zpb" id="xAj-Vj-Vxn"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||||
|
<customObject id="3aq-Tx-mno" customClass="SUUpdater"/>
|
||||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Ample" id="1Xt-HY-uBw">
|
<menuItem title="Ample" id="1Xt-HY-uBw">
|
||||||
@ -31,7 +38,16 @@
|
|||||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Check for Updates…" id="CPy-r4-rzr">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="checkForUpdates:" target="3aq-Tx-mno" id="qJG-Nv-0Lu"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||||
|
<menuItem title="Reinstall MAME components" hidden="YES" id="c3P-WT-eUP">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="displayPreferences:" target="Voe-Tx-rLC" id="Hsm-pX-sUc"/>
|
<action selector="displayPreferences:" target="Voe-Tx-rLC" id="Hsm-pX-sUc"/>
|
||||||
@ -389,6 +405,45 @@
|
|||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Bookmarks" id="vHO-2e-qJc">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Bookmarks" id="ha0-nx-PIl">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Manage Bookmarks…" keyEquivalent="b" id="isI-q6-b1V">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="manageBookmarks:" target="-1" id="vOm-90-AoO"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Add Bookmark…" keyEquivalent="d" id="1JF-xV-zmG">
|
||||||
|
<connections>
|
||||||
|
<action selector="addBookmark:" target="-1" id="cqp-ko-BfQ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Update Bookmark" keyEquivalent="D" id="30b-vT-HIa">
|
||||||
|
<connections>
|
||||||
|
<action selector="updateBookmark:" target="-1" id="Au0-Sp-cUD"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Set Default" hidden="YES" id="vbR-vS-lqO">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="defaultSave:" target="-1" id="FP9-EX-OKP"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="gWR-Yl-mg6"/>
|
||||||
|
<menuItem title="Default" hidden="YES" id="mXC-Lp-gem">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="defaultLoad:" target="-1" id="ErS-k6-azP"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="rSq-qV-SGy" id="Z7N-CG-hU1"/>
|
||||||
|
</connections>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Window" id="aUF-d1-5bR">
|
<menuItem title="Window" id="aUF-d1-5bR">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||||
@ -451,7 +506,13 @@
|
|||||||
<menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU">
|
<menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="mameAppleWiki:" target="Voe-Tx-rLC" id="KEg-0U-KdU"/>
|
<action selector="mameAppleWiki:" target="Voe-Tx-rLC" id="jRe-m6-mP0"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="MAME Mac 68K Wiki" id="hDL-K6-iVF">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="mameMac68kWiki:" target="Voe-Tx-rLC" id="ZzB-54-vXN"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="MAME Documentation" id="1IW-V0-UWA">
|
<menuItem title="MAME Documentation" id="1IW-V0-UWA">
|
||||||
@ -486,5 +547,6 @@
|
|||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="13" y="-182"/>
|
<point key="canvasLocation" x="13" y="-182"/>
|
||||||
</window>
|
</window>
|
||||||
|
<userDefaultsController representsSharedInstance="YES" id="uGS-pc-Wsn"/>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
@ -15,13 +15,13 @@
|
|||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="25" horizontalPageScroll="10" verticalLineScroll="25" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="nVT-kT-bWl">
|
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="25" horizontalPageScroll="10" verticalLineScroll="25" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="nVT-kT-bWl">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" ambiguous="YES" copiesOnScroll="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IBD-wb-pch">
|
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" ambiguous="YES" drawsBackground="NO" copiesOnScroll="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IBD-wb-pch">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="22" rowSizeStyle="automatic" viewBased="YES" outlineTableColumn="pBj-py-R6a" id="sIz-DD-PZQ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="363"/>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="331"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<size key="intercellSpacing" width="2" height="3"/>
|
<size key="intercellSpacing" width="2" height="3"/>
|
||||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
@ -52,13 +52,16 @@
|
|||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<binding destination="33q-UT-ur5" name="value" keyPath="objectValue.title" id="JQR-UW-ifh"/>
|
||||||
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
</subviews>
|
</subviews>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="textField" destination="Pep-mX-LHY" id="hUe-cf-6vq"/>
|
<outlet property="textField" destination="Pep-mX-LHY" id="hUe-cf-6vq"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableCellView>
|
</tableCellView>
|
||||||
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="TablePathView">
|
<tableCellView identifier="ItemView" translatesAutoresizingMaskIntoConstraints="NO" id="yGq-lc-RCM" customClass="PathTableCellView">
|
||||||
<rect key="frame" x="1" y="21" width="296" height="22"/>
|
<rect key="frame" x="1" y="21" width="296" height="22"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
@ -70,6 +73,8 @@
|
|||||||
</pathCell>
|
</pathCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="pathAction:" target="-2" id="4oX-bW-ANp"/>
|
<action selector="pathAction:" target="-2" id="4oX-bW-ANp"/>
|
||||||
|
<binding destination="yGq-lc-RCM" name="value" keyPath="objectValue.url" id="Ony-ph-VVo"/>
|
||||||
|
<binding destination="yGq-lc-RCM" name="enabled" keyPath="objectValue.valid" id="f8P-gt-vmK"/>
|
||||||
</connections>
|
</connections>
|
||||||
</pathControl>
|
</pathControl>
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="6g1-NT-J1w">
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="6g1-NT-J1w">
|
||||||
@ -86,6 +91,7 @@
|
|||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="ejectAction:" target="-2" id="XAl-eQ-nUj"/>
|
<action selector="ejectAction:" target="-2" id="XAl-eQ-nUj"/>
|
||||||
|
<binding destination="yGq-lc-RCM" name="enabled" keyPath="objectValue.occupied" id="4a4-L7-ztC"/>
|
||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
@ -95,6 +101,147 @@
|
|||||||
<outlet property="pathControl" destination="f7R-TO-fmF" id="oH7-N3-JC7"/>
|
<outlet property="pathControl" destination="f7R-TO-fmF" id="oH7-N3-JC7"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableCellView>
|
</tableCellView>
|
||||||
|
<tableCellView identifier="BBItemView" id="2Nq-Xz-tkV" customClass="PathTableCellView">
|
||||||
|
<rect key="frame" x="1" y="46" width="296" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="47E-Ef-Ott">
|
||||||
|
<rect key="frame" x="0.0" y="1" width="20" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="vwE-Ev-NBf"/>
|
||||||
|
</imageView>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zxn-1E-o34" customClass="EjectButton">
|
||||||
|
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="Os7-NH-tnx">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="ejectAction:" target="-2" id="uy2-92-9La"/>
|
||||||
|
<binding destination="2Nq-Xz-tkV" name="enabled" keyPath="objectValue.occupied" id="SNi-sQ-J2W"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pNE-yJ-EK8">
|
||||||
|
<rect key="frame" x="20" y="0.0" width="244" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="socket.address:port or /path/to/file" drawsBackground="YES" id="h2U-ig-Cms">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="textAction:" target="-2" id="lmX-t8-mEc"/>
|
||||||
|
<binding destination="2Nq-Xz-tkV" name="value" keyPath="objectValue.string" id="2dZ-JJ-asM">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSNullPlaceholder">socket.address:port or /path/to/file</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
<binding destination="2Nq-Xz-tkV" name="enabled" keyPath="objectValue.valid" id="ZTM-E3-Y9P"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dragHandle" destination="47E-Ef-Ott" id="bnY-rz-24V"/>
|
||||||
|
<outlet property="ejectButton" destination="zxn-1E-o34" id="eC6-Mf-tN6"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
<tableCellView identifier="OutputItemView" id="jQd-Ar-5uf" customClass="PathTableCellView">
|
||||||
|
<rect key="frame" x="1" y="71" width="296" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="Jg1-Wh-HDk">
|
||||||
|
<rect key="frame" x="0.0" y="1" width="20" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="SjY-iM-xSZ"/>
|
||||||
|
</imageView>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vG4-PP-efF" customClass="EjectButton">
|
||||||
|
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="VX6-hb-mCU">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="ejectAction:" target="-2" id="LNr-rK-kpx"/>
|
||||||
|
<binding destination="jQd-Ar-5uf" name="enabled" keyPath="objectValue.occupied" id="p4S-6q-dCG"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Tm9-Zq-fag">
|
||||||
|
<rect key="frame" x="20" y="0.0" width="244" height="21"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="/path/to/file" drawsBackground="YES" id="RUQ-s4-75A">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="textAction:" target="-2" id="N7h-6y-D8W"/>
|
||||||
|
<binding destination="jQd-Ar-5uf" name="value" keyPath="objectValue.string" id="kXU-qJ-HKa">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSNullPlaceholder">/path/to/file</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
<binding destination="jQd-Ar-5uf" name="enabled" keyPath="objectValue.valid" id="1wE-NY-Vb2"/>
|
||||||
|
</connections>
|
||||||
|
</textField>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dragHandle" destination="Jg1-Wh-HDk" id="o14-ay-0Ou"/>
|
||||||
|
<outlet property="ejectButton" destination="vG4-PP-efF" id="X2I-2N-t5r"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
|
<tableCellView identifier="MidiItemView" id="HDi-YM-iKn" customClass="MidiTableCellView">
|
||||||
|
<rect key="frame" x="1" y="96" width="296" height="22"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="XcO-0S-W4c">
|
||||||
|
<rect key="frame" x="0.0" y="1" width="20" height="20"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" image="drag-handle-4x10" id="4a2-So-rxD"/>
|
||||||
|
</imageView>
|
||||||
|
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="F3v-8Z-LaF" customClass="EjectButton">
|
||||||
|
<rect key="frame" x="277" y="3" width="16" height="16"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
|
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="eject-16x16" imagePosition="only" alignment="center" alternateImage="eject-hover-16x16" imageScaling="proportionallyDown" inset="2" id="b3t-Zp-2si">
|
||||||
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
</buttonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="ejectAction:" target="-2" id="AvU-Sz-QKJ"/>
|
||||||
|
<binding destination="HDi-YM-iKn" name="enabled" keyPath="objectValue.occupied" id="ERy-Iz-T9Q"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L2F-mj-lkr">
|
||||||
|
<rect key="frame" x="20" y="-3" width="244" height="25"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="CaJ-NG-vbR" id="Rac-za-bEQ">
|
||||||
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<menu key="menu" id="I55-5S-oM2">
|
||||||
|
<items>
|
||||||
|
<menuItem state="on" id="CaJ-NG-vbR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</popUpButtonCell>
|
||||||
|
<connections>
|
||||||
|
<action selector="midiAction:" target="-2" id="LDL-4h-xUR"/>
|
||||||
|
<binding destination="HDi-YM-iKn" name="selectedValue" keyPath="objectValue.string" id="xjL-hx-VG3">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">EmptyStringTransformer</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</popUpButton>
|
||||||
|
</subviews>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dragHandle" destination="XcO-0S-W4c" id="oKY-UF-LkW"/>
|
||||||
|
<outlet property="ejectButton" destination="F3v-8Z-LaF" id="ql8-4u-qCA"/>
|
||||||
|
<outlet property="popUpButton" destination="L2F-mj-lkr" id="Ktx-Yc-DIp"/>
|
||||||
|
</connections>
|
||||||
|
</tableCellView>
|
||||||
</prototypeCellViews>
|
</prototypeCellViews>
|
||||||
</tableColumn>
|
</tableColumn>
|
||||||
</tableColumns>
|
</tableColumns>
|
||||||
|
@ -1,236 +0,0 @@
|
|||||||
<?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" customObjectInstantitationMethod="direct">
|
|
||||||
<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="NewSlotViewController">
|
|
||||||
<connections>
|
|
||||||
<outlet property="_popover" destination="QIT-2T-wdy" id="WUB-OS-kem"/>
|
|
||||||
<outlet property="childOutlineView" destination="uM0-Gk-crn" id="aL5-uC-O28"/>
|
|
||||||
<outlet property="outlineView" destination="Xj3-Qf-yek" id="AWE-Rg-XUM"/>
|
|
||||||
<outlet property="view" destination="D45-lv-6Fv" id="av3-OE-ph2"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="D45-lv-6Fv">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" copiesOnScroll="NO" id="8x1-xN-a7c">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="2" autoresizesOutlineColumn="YES" outlineTableColumn="u7T-p8-F2Z" id="Xj3-Qf-yek">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
|
||||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<tableColumns>
|
|
||||||
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="u7T-p8-F2Z">
|
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</tableHeaderCell>
|
|
||||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FM7-eO-FE4">
|
|
||||||
<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"/>
|
|
||||||
<prototypeCellViews>
|
|
||||||
<tableCellView identifier="MenuCell" id="1RI-9K-5qj" customClass="SlotTableCellView">
|
|
||||||
<rect key="frame" x="1" y="1" width="296" height="25"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qIF-d4-kOf">
|
|
||||||
<rect key="frame" x="0.0" y="5" width="90" height="17"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="RAM:" id="tIz-xZ-ZJH">
|
|
||||||
<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" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zQ8-o3-yBB">
|
|
||||||
<rect key="frame" x="82" y="0.0" width="199" height="25"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="tGi-yg-GFr" id="gt4-HK-pd1">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" autoenablesItems="NO" id="KWV-nn-eiB">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="tGi-yg-GFr"/>
|
|
||||||
<menuItem title="Item 2" id="XJr-Gb-4D4"/>
|
|
||||||
<menuItem title="Item 3" id="JeB-Fb-DeQ"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="9MH-mu-u5V"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xCe-sY-sGe">
|
|
||||||
<rect key="frame" x="282" y="8" width="14" height="10"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSListViewTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="0qU-ID-kJ8">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="hamburger:" target="-2" id="5Xa-j7-Aod"/>
|
|
||||||
<binding destination="1RI-9K-5qj" name="hidden" keyPath="objectValue.selectedItem.children" id="rY2-0l-0N8">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
</subviews>
|
|
||||||
<connections>
|
|
||||||
<outlet property="hamburgerButton" destination="xCe-sY-sGe" id="5Da-If-Bt4"/>
|
|
||||||
<outlet property="menuButton" destination="zQ8-o3-yBB" id="zZf-nm-tCI"/>
|
|
||||||
<outlet property="textField" destination="qIF-d4-kOf" id="zIF-4n-v1e"/>
|
|
||||||
</connections>
|
|
||||||
</tableCellView>
|
|
||||||
</prototypeCellViews>
|
|
||||||
</tableColumn>
|
|
||||||
</tableColumns>
|
|
||||||
<connections>
|
|
||||||
<outlet property="dataSource" destination="-2" id="OV9-yE-OFp"/>
|
|
||||||
<outlet property="delegate" destination="-2" id="kXs-TN-3VL"/>
|
|
||||||
</connections>
|
|
||||||
</outlineView>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</clipView>
|
|
||||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="rYF-ld-adB">
|
|
||||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="4pL-Dn-e75" customClass="TransparentScroller">
|
|
||||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
<userDefinedRuntimeAttributes>
|
|
||||||
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
|
||||||
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</userDefinedRuntimeAttribute>
|
|
||||||
</userDefinedRuntimeAttributes>
|
|
||||||
</scroller>
|
|
||||||
<point key="canvasLocation" x="-100" y="154"/>
|
|
||||||
</scrollView>
|
|
||||||
<viewController id="ziL-Zf-s1k" userLabel="Popover View Controller">
|
|
||||||
<connections>
|
|
||||||
<outlet property="view" destination="uew-UQ-Q25" id="qjB-ya-gFf"/>
|
|
||||||
</connections>
|
|
||||||
</viewController>
|
|
||||||
<popover behavior="t" id="QIT-2T-wdy">
|
|
||||||
<connections>
|
|
||||||
<outlet property="contentViewController" destination="ziL-Zf-s1k" id="rj8-2U-9t0"/>
|
|
||||||
</connections>
|
|
||||||
</popover>
|
|
||||||
<customView id="uew-UQ-Q25">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="250" height="400"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<button id="2jh-iq-DV6">
|
|
||||||
<rect key="frame" x="232" y="382" width="14" height="14"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
|
||||||
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSStopProgressFreestandingTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="Wp7-Km-kYI">
|
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<string key="keyEquivalent" base64-UTF8="YES">
|
|
||||||
Gw
|
|
||||||
</string>
|
|
||||||
</buttonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="performClose:" target="QIT-2T-wdy" id="Q04-24-ZOK"/>
|
|
||||||
</connections>
|
|
||||||
</button>
|
|
||||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="5gB-oE-Gza">
|
|
||||||
<rect key="frame" x="0.0" y="20" width="250" height="360"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<clipView key="contentView" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="X5e-Ka-JLr">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autoresizesOutlineColumn="YES" outlineTableColumn="o1K-z1-KVi" id="uM0-Gk-crn">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<size key="intercellSpacing" width="3" height="2"/>
|
|
||||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<tableColumns>
|
|
||||||
<tableColumn width="230" minWidth="40" maxWidth="1000" id="o1K-z1-KVi">
|
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</tableHeaderCell>
|
|
||||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="A12-NQ-gW3">
|
|
||||||
<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"/>
|
|
||||||
<prototypeCellViews>
|
|
||||||
<tableCellView identifier="MenuCell" id="Mgb-8H-DmI" customClass="SlotTableCellView">
|
|
||||||
<rect key="frame" x="1" y="1" width="230" height="25"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ThL-Yz-7Kd">
|
|
||||||
<rect key="frame" x="1" y="0.0" width="229" height="25"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="djR-rV-wzX" id="SkW-fW-gwL">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" autoenablesItems="NO" id="7Ib-TL-f6U">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="djR-rV-wzX"/>
|
|
||||||
<menuItem title="Item 2" id="qbC-4D-6t6"/>
|
|
||||||
<menuItem title="Item 3" id="qPv-x5-zpj"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="ytA-nD-fIS"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</subviews>
|
|
||||||
<connections>
|
|
||||||
<outlet property="menuButton" destination="ThL-Yz-7Kd" id="3Oc-hx-qKl"/>
|
|
||||||
</connections>
|
|
||||||
</tableCellView>
|
|
||||||
</prototypeCellViews>
|
|
||||||
</tableColumn>
|
|
||||||
</tableColumns>
|
|
||||||
<connections>
|
|
||||||
<outlet property="dataSource" destination="-2" id="HXP-pH-3Lc"/>
|
|
||||||
<outlet property="delegate" destination="-2" id="nwb-IL-MsP"/>
|
|
||||||
</connections>
|
|
||||||
</outlineView>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
||||||
</clipView>
|
|
||||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Keh-oo-CPO">
|
|
||||||
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="wtc-gL-alh" customClass="TransparentScroller">
|
|
||||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
</scrollView>
|
|
||||||
</subviews>
|
|
||||||
<point key="canvasLocation" x="-451" y="61"/>
|
|
||||||
</customView>
|
|
||||||
</objects>
|
|
||||||
<resources>
|
|
||||||
<image name="NSListViewTemplate" width="14" height="10"/>
|
|
||||||
<image name="NSStopProgressFreestandingTemplate" width="14" height="14"/>
|
|
||||||
</resources>
|
|
||||||
</document>
|
|
@ -8,625 +8,229 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="SlotViewController">
|
<customObject id="-2" userLabel="File's Owner" customClass="SlotViewController">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="aux_menu" destination="3kq-qn-7YR" id="wic-Ry-yAf"/>
|
<outlet property="_popover" destination="QIT-2T-wdy" id="WUB-OS-kem"/>
|
||||||
<outlet property="exp_menu" destination="San-wP-1ez" id="X7u-dM-xrI"/>
|
<outlet property="childOutlineView" destination="uM0-Gk-crn" id="aL5-uC-O28"/>
|
||||||
<outlet property="game_menu" destination="K8G-bZ-6mZ" id="IeQ-ZT-5F6"/>
|
<outlet property="outlineView" destination="Xj3-Qf-yek" id="AWE-Rg-XUM"/>
|
||||||
<outlet property="modem_menu" destination="KHf-kC-BpZ" id="Qab-mA-anC"/>
|
<outlet property="view" destination="D45-lv-6Fv" id="av3-OE-ph2"/>
|
||||||
<outlet property="printer_menu" destination="sTp-en-8Wd" id="zeu-LF-6mV"/>
|
|
||||||
<outlet property="ram_menu" destination="Yks-M5-vi0" id="h5y-Un-jYJ"/>
|
|
||||||
<outlet property="rs232_menu" destination="6ln-U2-0Pi" id="7CT-OE-idV"/>
|
|
||||||
<outlet property="sl0_menu" destination="Jw1-t7-YyU" id="BB5-6y-zyf"/>
|
|
||||||
<outlet property="sl1_menu" destination="bta-RS-JT4" id="cpI-db-kzX"/>
|
|
||||||
<outlet property="sl2_menu" destination="cDU-b1-x5a" id="WtL-Fo-Q1B"/>
|
|
||||||
<outlet property="sl3_menu" destination="aSh-cs-0Nn" id="24o-66-LjH"/>
|
|
||||||
<outlet property="sl4_menu" destination="kU5-cR-hPZ" id="STc-6r-nxH"/>
|
|
||||||
<outlet property="sl5_menu" destination="8z4-8f-kLU" id="cLl-Ee-LUD"/>
|
|
||||||
<outlet property="sl6_menu" destination="GLb-F4-PWe" id="ubk-pt-e1Q"/>
|
|
||||||
<outlet property="sl7_menu" destination="IV2-3M-qfw" id="s5k-4G-w4r"/>
|
|
||||||
<outlet property="view" destination="OM3-7F-wiN" id="yre-ts-aHj"/>
|
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<gridView autoresizesSubviews="NO" misplaced="YES" xPlacement="leading" yPlacement="bottom" rowAlignment="none" translatesAutoresizingMaskIntoConstraints="NO" id="OM3-7F-wiN">
|
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="D45-lv-6Fv">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="306" height="459"/>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||||
<rows>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<gridRow yPlacement="center" height="25" id="tHD-ui-hIL">
|
<clipView key="contentView" autoresizesSubviews="NO" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="8x1-xN-a7c">
|
||||||
<connections>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.ram" id="ze9-jx-lv0">
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<dictionary key="options">
|
<subviews>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="2" autoresizesOutlineColumn="YES" outlineTableColumn="u7T-p8-F2Z" id="Xj3-Qf-yek">
|
||||||
</dictionary>
|
<rect key="frame" x="0.0" y="0.0" width="316" height="386"/>
|
||||||
</binding>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</connections>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
</gridRow>
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
<gridRow yPlacement="center" height="25" id="Ccd-U2-Gx5">
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
<tableColumns>
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl0" id="YsR-kI-yrh">
|
<tableColumn editable="NO" width="296" minWidth="40" maxWidth="1000" id="u7T-p8-F2Z">
|
||||||
<dictionary key="options">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
</dictionary>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
</binding>
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
</connections>
|
</tableHeaderCell>
|
||||||
</gridRow>
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="FM7-eO-FE4">
|
||||||
<gridRow yPlacement="center" height="25" id="JGU-aq-3uw">
|
<font key="font" metaFont="system"/>
|
||||||
<connections>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl1" id="1io-aZ-v2G">
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<dictionary key="options">
|
</textFieldCell>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||||
</dictionary>
|
<prototypeCellViews>
|
||||||
</binding>
|
<tableCellView identifier="MenuCell" id="1RI-9K-5qj" customClass="SlotTableCellView">
|
||||||
</connections>
|
<rect key="frame" x="1" y="1" width="296" height="25"/>
|
||||||
</gridRow>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<gridRow yPlacement="center" height="25" id="gVW-Ya-phU">
|
<subviews>
|
||||||
<connections>
|
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qIF-d4-kOf">
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl2" id="AgS-hm-ePr">
|
<rect key="frame" x="0.0" y="5" width="90" height="17"/>
|
||||||
<dictionary key="options">
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="RAM:" id="tIz-xZ-ZJH">
|
||||||
</dictionary>
|
<font key="font" metaFont="system"/>
|
||||||
</binding>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
</connections>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</gridRow>
|
</textFieldCell>
|
||||||
<gridRow yPlacement="center" height="25" id="3fP-qp-zmi">
|
</textField>
|
||||||
<connections>
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zQ8-o3-yBB">
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl3" id="98U-4P-iRh">
|
<rect key="frame" x="82" y="0.0" width="199" height="25"/>
|
||||||
<dictionary key="options">
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="tGi-yg-GFr" id="gt4-HK-pd1">
|
||||||
</dictionary>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
</binding>
|
<font key="font" metaFont="menu"/>
|
||||||
</connections>
|
<menu key="menu" autoenablesItems="NO" id="KWV-nn-eiB">
|
||||||
</gridRow>
|
<items>
|
||||||
<gridRow yPlacement="center" height="25" id="86u-5p-UT6">
|
<menuItem title="Item 1" state="on" id="tGi-yg-GFr"/>
|
||||||
<connections>
|
<menuItem title="Item 2" id="XJr-Gb-4D4"/>
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl4" id="hsy-pm-Qjk">
|
<menuItem title="Item 3" id="JeB-Fb-DeQ"/>
|
||||||
<dictionary key="options">
|
</items>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
</menu>
|
||||||
</dictionary>
|
</popUpButtonCell>
|
||||||
</binding>
|
<connections>
|
||||||
</connections>
|
<action selector="menuChanged:" target="-2" id="9MH-mu-u5V"/>
|
||||||
</gridRow>
|
</connections>
|
||||||
<gridRow yPlacement="center" height="25" id="Wdg-xb-xQx">
|
</popUpButton>
|
||||||
<connections>
|
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xCe-sY-sGe">
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl5" id="0QC-RB-278">
|
<rect key="frame" x="282" y="8" width="14" height="10"/>
|
||||||
<dictionary key="options">
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSListViewTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="0qU-ID-kJ8">
|
||||||
</dictionary>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
</binding>
|
<font key="font" metaFont="system"/>
|
||||||
</connections>
|
</buttonCell>
|
||||||
</gridRow>
|
<connections>
|
||||||
<gridRow yPlacement="center" height="25" id="ein-Fe-vBw">
|
<action selector="hamburger:" target="-2" id="5Xa-j7-Aod"/>
|
||||||
<connections>
|
<binding destination="1RI-9K-5qj" name="hidden" keyPath="objectValue.selectedItem.children" id="rY2-0l-0N8">
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl6" id="731-3P-DUy">
|
<dictionary key="options">
|
||||||
<dictionary key="options">
|
<string key="NSValueTransformerName">NSIsNil</string>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
</dictionary>
|
||||||
</dictionary>
|
</binding>
|
||||||
</binding>
|
</connections>
|
||||||
</connections>
|
</button>
|
||||||
</gridRow>
|
</subviews>
|
||||||
<gridRow yPlacement="center" height="25" id="qjB-2w-AWE">
|
<connections>
|
||||||
<connections>
|
<outlet property="hamburgerButton" destination="xCe-sY-sGe" id="5Da-If-Bt4"/>
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.sl7" id="sew-Ds-4I9">
|
<outlet property="menuButton" destination="zQ8-o3-yBB" id="zZf-nm-tCI"/>
|
||||||
<dictionary key="options">
|
<outlet property="textField" destination="qIF-d4-kOf" id="zIF-4n-v1e"/>
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
</connections>
|
||||||
</dictionary>
|
</tableCellView>
|
||||||
</binding>
|
</prototypeCellViews>
|
||||||
</connections>
|
</tableColumn>
|
||||||
</gridRow>
|
</tableColumns>
|
||||||
<gridRow yPlacement="center" height="25" id="EEX-dh-jwn">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.exp" id="EOZ-lS-QHF">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
<gridRow yPlacement="center" height="25" id="OaZ-ZQ-gKK">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.aux" id="OlF-v7-JZx">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
<gridRow yPlacement="center" height="25" id="wQi-Oz-7Ye">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.rs232" id="AeP-bn-blv">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
<gridRow yPlacement="center" height="25" id="gr2-eY-995">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.gameio" id="x3I-Bd-9di">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
<gridRow yPlacement="center" height="25" id="1xN-lm-s4l">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.printer" id="T9a-lH-z5K">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
<gridRow yPlacement="center" height="25" id="M2s-qn-SIT">
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="hidden" keyPath="machine.modem" id="PSe-R3-S3e">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">NSIsNil</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</gridRow>
|
|
||||||
</rows>
|
|
||||||
<columns>
|
|
||||||
<gridColumn xPlacement="fill" width="100" id="zpB-Rf-dWg"/>
|
|
||||||
<gridColumn xPlacement="fill" width="200" id="6Vn-yh-FoQ"/>
|
|
||||||
</columns>
|
|
||||||
<gridCells>
|
|
||||||
<gridCell row="tHD-ui-hIL" column="zpB-Rf-dWg" id="deJ-sv-Hb7">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nHa-QG-HjJ">
|
|
||||||
<rect key="frame" x="-2" y="439" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="RAM:" id="CvY-8m-Ni9">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="tHD-ui-hIL" column="6Vn-yh-FoQ" id="dak-Ha-01u">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="16" translatesAutoresizingMaskIntoConstraints="NO" id="Yks-M5-vi0">
|
|
||||||
<rect key="frame" x="104" y="433" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="92u-m2-3yN" id="XFo-KF-ueS">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="k8O-sG-Qld">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="92u-m2-3yN">
|
|
||||||
<attributedString key="attributedTitle"/>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Item 2" id="dPG-tR-M4A"/>
|
|
||||||
<menuItem title="Item 3" id="q2n-oZ-46s"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="memoryMenuChanged:" target="-2" id="m1Q-Xj-z22"/>
|
<outlet property="dataSource" destination="-2" id="OV9-yE-OFp"/>
|
||||||
<binding destination="-2" name="content" keyPath="machine.ram" id="UCD-j5-7Bh"/>
|
<outlet property="delegate" destination="-2" id="kXs-TN-3VL"/>
|
||||||
</connections>
|
</connections>
|
||||||
</popUpButton>
|
</outlineView>
|
||||||
</gridCell>
|
</subviews>
|
||||||
<gridCell row="Ccd-U2-Gx5" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="QI6-Cz-URX">
|
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="v8c-Rp-Mnt">
|
</clipView>
|
||||||
<rect key="frame" x="-2" y="408" width="104" height="16"/>
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="rYF-ld-adB">
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 0:" id="EF7-NX-RMW">
|
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||||
<font key="font" metaFont="system"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
</scroller>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="4pL-Dn-e75" customClass="TransparentScroller">
|
||||||
</textFieldCell>
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
</textField>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</gridCell>
|
<userDefinedRuntimeAttributes>
|
||||||
<gridCell row="Ccd-U2-Gx5" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="0KQ-Qt-8KP">
|
<userDefinedRuntimeAttribute type="color" keyPath="backgroundColor">
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jw1-t7-YyU">
|
<color key="value" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<rect key="frame" x="104" y="402" width="205" height="25"/>
|
</userDefinedRuntimeAttribute>
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8Iv-mH-mEI" id="47g-IO-4Xt">
|
</userDefinedRuntimeAttributes>
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
</scroller>
|
||||||
<font key="font" metaFont="menu"/>
|
<point key="canvasLocation" x="-100" y="154"/>
|
||||||
<menu key="menu" id="nrR-Tr-UaW">
|
</scrollView>
|
||||||
<items>
|
<viewController id="ziL-Zf-s1k" userLabel="Popover View Controller">
|
||||||
<menuItem title="Item 1" state="on" id="8Iv-mH-mEI"/>
|
<connections>
|
||||||
<menuItem title="Item 2" id="Prr-6W-NWp"/>
|
<outlet property="view" destination="uew-UQ-Q25" id="qjB-ya-gFf"/>
|
||||||
<menuItem title="Item 3" id="xz3-bi-5IM"/>
|
</connections>
|
||||||
</items>
|
</viewController>
|
||||||
</menu>
|
<popover behavior="t" id="QIT-2T-wdy">
|
||||||
</popUpButtonCell>
|
<connections>
|
||||||
<connections>
|
<outlet property="contentViewController" destination="ziL-Zf-s1k" id="rj8-2U-9t0"/>
|
||||||
<action selector="menuChanged:" target="-2" id="wPZ-cY-9Ir"/>
|
</connections>
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl0" id="2aW-3q-Mvt"/>
|
</popover>
|
||||||
</connections>
|
<customView id="uew-UQ-Q25">
|
||||||
</popUpButton>
|
<rect key="frame" x="0.0" y="0.0" width="250" height="400"/>
|
||||||
</gridCell>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<gridCell row="JGU-aq-3uw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="Y1R-Ob-g2b">
|
<subviews>
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0gP-wH-DVr">
|
<button id="2jh-iq-DV6">
|
||||||
<rect key="frame" x="-2" y="377" width="104" height="16"/>
|
<rect key="frame" x="232" y="382" width="14" height="14"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 1:" id="bfg-tf-E34">
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSStopProgressFreestandingTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="Wp7-Km-kYI">
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<font key="font" metaFont="system"/>
|
||||||
</textFieldCell>
|
<string key="keyEquivalent" base64-UTF8="YES">
|
||||||
</textField>
|
Gw
|
||||||
</gridCell>
|
</string>
|
||||||
<gridCell row="JGU-aq-3uw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="v8q-Rj-E4q">
|
</buttonCell>
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="bta-RS-JT4">
|
<connections>
|
||||||
<rect key="frame" x="104" y="371" width="205" height="25"/>
|
<action selector="performClose:" target="QIT-2T-wdy" id="Q04-24-ZOK"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="dXO-at-nGw" id="kNn-6b-ysf">
|
</connections>
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
</button>
|
||||||
<font key="font" metaFont="menu"/>
|
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="27" horizontalPageScroll="10" verticalLineScroll="27" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" id="5gB-oE-Gza">
|
||||||
<menu key="menu" id="4ah-BI-RD5">
|
<rect key="frame" x="0.0" y="20" width="250" height="360"/>
|
||||||
<items>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<menuItem title="Item 1" state="on" id="dXO-at-nGw"/>
|
<clipView key="contentView" focusRingType="none" drawsBackground="NO" copiesOnScroll="NO" id="X5e-Ka-JLr">
|
||||||
<menuItem title="Item 2" id="UZY-8b-qmE"/>
|
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||||
<menuItem title="Item 3" id="zxA-OM-BIY"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
</items>
|
<subviews>
|
||||||
</menu>
|
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" selectionHighlightStyle="none" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" typeSelect="NO" rowHeight="25" rowSizeStyle="automatic" viewBased="YES" indentationPerLevel="16" autoresizesOutlineColumn="YES" outlineTableColumn="o1K-z1-KVi" id="uM0-Gk-crn">
|
||||||
</popUpButtonCell>
|
<rect key="frame" x="0.0" y="0.0" width="250" height="360"/>
|
||||||
<connections>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<action selector="menuChanged:" target="-2" id="hl3-N2-89k"/>
|
<size key="intercellSpacing" width="3" height="2"/>
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl1" id="wQI-oy-SYz"/>
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
</connections>
|
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||||
</popUpButton>
|
<tableColumns>
|
||||||
</gridCell>
|
<tableColumn width="230" minWidth="40" maxWidth="1000" id="o1K-z1-KVi">
|
||||||
<gridCell row="gVW-Ya-phU" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="tpv-Yc-qii">
|
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EHZ-ol-QVz">
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<rect key="frame" x="-2" y="346" width="104" height="16"/>
|
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 2:" id="FlL-pN-rn7">
|
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
</tableHeaderCell>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="A12-NQ-gW3">
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<font key="font" metaFont="system"/>
|
||||||
</textFieldCell>
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textField>
|
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</gridCell>
|
</textFieldCell>
|
||||||
<gridCell row="gVW-Ya-phU" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="OzN-rM-Pgi">
|
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES"/>
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="cDU-b1-x5a">
|
<prototypeCellViews>
|
||||||
<rect key="frame" x="104" y="340" width="205" height="25"/>
|
<tableCellView identifier="MenuCell" id="Mgb-8H-DmI" customClass="SlotTableCellView">
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vCY-qF-aB3" id="jvL-SH-nvG">
|
<rect key="frame" x="1" y="1" width="230" height="25"/>
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<subviews>
|
||||||
<menu key="menu" id="Hp6-Gt-pVV">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ThL-Yz-7Kd">
|
||||||
<items>
|
<rect key="frame" x="1" y="0.0" width="229" height="25"/>
|
||||||
<menuItem title="Item 1" state="on" id="vCY-qF-aB3"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<menuItem title="Item 2" id="pbR-nc-itb"/>
|
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" autoenablesItems="NO" selectedItem="djR-rV-wzX" id="SkW-fW-gwL">
|
||||||
<menuItem title="Item 3" id="L8Z-vH-OCa"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
</items>
|
<font key="font" metaFont="menu"/>
|
||||||
</menu>
|
<menu key="menu" autoenablesItems="NO" id="7Ib-TL-f6U">
|
||||||
</popUpButtonCell>
|
<items>
|
||||||
<connections>
|
<menuItem title="Item 1" state="on" id="djR-rV-wzX"/>
|
||||||
<action selector="menuChanged:" target="-2" id="T5w-C4-Ohq"/>
|
<menuItem title="Item 2" id="qbC-4D-6t6"/>
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl2" id="uXQ-0A-98q"/>
|
<menuItem title="Item 3" id="qPv-x5-zpj"/>
|
||||||
</connections>
|
</items>
|
||||||
</popUpButton>
|
</menu>
|
||||||
</gridCell>
|
</popUpButtonCell>
|
||||||
<gridCell row="3fP-qp-zmi" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="LbW-TT-AQ7">
|
<connections>
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zGs-8d-L0S">
|
<action selector="menuChanged:" target="-2" id="ytA-nD-fIS"/>
|
||||||
<rect key="frame" x="-2" y="315" width="104" height="16"/>
|
</connections>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 3:" id="KZK-h8-8cw">
|
</popUpButton>
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
</subviews>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<connections>
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<outlet property="menuButton" destination="ThL-Yz-7Kd" id="3Oc-hx-qKl"/>
|
||||||
</textFieldCell>
|
</connections>
|
||||||
</textField>
|
</tableCellView>
|
||||||
</gridCell>
|
</prototypeCellViews>
|
||||||
<gridCell row="3fP-qp-zmi" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="h8H-TB-p2z">
|
</tableColumn>
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="aSh-cs-0Nn">
|
</tableColumns>
|
||||||
<rect key="frame" x="104" y="309" width="205" height="25"/>
|
<connections>
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="2yS-4z-8OR" id="HaE-TD-5Wx">
|
<outlet property="dataSource" destination="-2" id="HXP-pH-3Lc"/>
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<outlet property="delegate" destination="-2" id="nwb-IL-MsP"/>
|
||||||
<font key="font" metaFont="menu"/>
|
</connections>
|
||||||
<menu key="menu" id="zka-z5-hPa">
|
</outlineView>
|
||||||
<items>
|
</subviews>
|
||||||
<menuItem title="Item 1" state="on" id="2yS-4z-8OR"/>
|
<color key="backgroundColor" white="1" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
<menuItem title="Item 2" id="q4H-Fz-zVr"/>
|
</clipView>
|
||||||
<menuItem title="Item 3" id="HtQ-6y-S25"/>
|
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="Keh-oo-CPO">
|
||||||
</items>
|
<rect key="frame" x="-100" y="-100" width="223" height="15"/>
|
||||||
</menu>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</popUpButtonCell>
|
</scroller>
|
||||||
<connections>
|
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="wtc-gL-alh" customClass="TransparentScroller">
|
||||||
<action selector="menuChanged:" target="-2" id="5uS-La-5cM"/>
|
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl3" id="YgU-fX-fPC"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</connections>
|
</scroller>
|
||||||
</popUpButton>
|
</scrollView>
|
||||||
</gridCell>
|
</subviews>
|
||||||
<gridCell row="86u-5p-UT6" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="hJR-nJ-yYi">
|
<point key="canvasLocation" x="-451" y="61"/>
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zsX-jd-6ba">
|
</customView>
|
||||||
<rect key="frame" x="-2" y="284" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 4:" id="WXv-RF-e7f">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="86u-5p-UT6" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="dHu-cL-FyO">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="4" translatesAutoresizingMaskIntoConstraints="NO" id="kU5-cR-hPZ">
|
|
||||||
<rect key="frame" x="104" y="278" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="NaS-CV-XQm" id="rOP-eY-UKe">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="Iwv-z3-oJb">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="NaS-CV-XQm"/>
|
|
||||||
<menuItem title="Item 2" id="ovb-SG-Eg4"/>
|
|
||||||
<menuItem title="Item 3" id="GVh-L4-3Cp"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="I35-wl-YdH"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl4" id="yfx-hj-6Ly"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="Wdg-xb-xQx" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="dsM-t5-8ng">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ANg-c1-hGf">
|
|
||||||
<rect key="frame" x="-2" y="253" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 5:" id="EhN-EV-65V">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="Wdg-xb-xQx" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="ffm-pA-jjo">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="5" translatesAutoresizingMaskIntoConstraints="NO" id="8z4-8f-kLU">
|
|
||||||
<rect key="frame" x="104" y="247" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="gH7-4J-xsg" id="cmc-Gf-Slp">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="Cma-00-qCY">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="gH7-4J-xsg"/>
|
|
||||||
<menuItem title="Item 2" id="meM-WH-GgP"/>
|
|
||||||
<menuItem title="Item 3" id="ILg-Ld-9Ri"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="jSe-j9-QUW"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl5" id="Uo1-Rg-wko"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="ein-Fe-vBw" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="PSw-Jx-eS2">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Cr1-RK-Z7V">
|
|
||||||
<rect key="frame" x="-2" y="222" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 6:" id="uzy-th-5Yc">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="ein-Fe-vBw" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="FsV-vO-KAs">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="6" translatesAutoresizingMaskIntoConstraints="NO" id="GLb-F4-PWe">
|
|
||||||
<rect key="frame" x="104" y="216" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="VaX-M9-Op0" id="CjU-rC-HUT">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="3xq-Hn-icN">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="VaX-M9-Op0"/>
|
|
||||||
<menuItem title="Item 2" id="Fhy-5D-e6z"/>
|
|
||||||
<menuItem title="Item 3" id="9jw-LA-666"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="yZO-kH-P6Q"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl6" id="0ze-xJ-DNX"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="qjB-2w-AWE" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="1WE-Mm-0O3">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Ia-XB-C6D">
|
|
||||||
<rect key="frame" x="-2" y="191" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Slot 7:" id="32J-6e-nRV">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="qjB-2w-AWE" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Yvr-uR-Hr5">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="7" translatesAutoresizingMaskIntoConstraints="NO" id="IV2-3M-qfw">
|
|
||||||
<rect key="frame" x="104" y="185" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="8nb-Bq-4R4" id="nKb-Ar-bCb">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="R2a-Mg-LsY">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="8nb-Bq-4R4"/>
|
|
||||||
<menuItem title="Item 2" id="rFT-bC-KE9"/>
|
|
||||||
<menuItem title="Item 3" id="4jB-gp-lYT"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="llh-ab-ayK"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.sl7" id="hT6-pS-WmL"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="EEX-dh-jwn" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="iRl-IX-FSD">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Avf-lX-f2Q">
|
|
||||||
<rect key="frame" x="-2" y="160" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Expansion:" id="PEU-OV-910">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="EEX-dh-jwn" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="Ehv-aA-Llc">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="8" translatesAutoresizingMaskIntoConstraints="NO" id="San-wP-1ez">
|
|
||||||
<rect key="frame" x="104" y="154" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="jtv-Qx-oVD" id="42u-b4-3kx">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="1hM-MS-UEz">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="jtv-Qx-oVD"/>
|
|
||||||
<menuItem title="Item 2" id="UeB-A1-nyv"/>
|
|
||||||
<menuItem title="Item 3" id="GyZ-dv-MS4"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="fi5-WL-lQa"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.exp" id="C88-Gb-QTE"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="OaZ-ZQ-gKK" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="wRB-Wh-7kG">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EMz-7i-H38">
|
|
||||||
<rect key="frame" x="-2" y="129" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Auxiliary:" id="SoV-Qy-h2g">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="OaZ-ZQ-gKK" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="bx6-Rc-x2V">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="9" translatesAutoresizingMaskIntoConstraints="NO" id="3kq-qn-7YR">
|
|
||||||
<rect key="frame" x="104" y="123" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="vWX-Cb-ldP" id="NqP-Uq-Knv">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="7Ef-KS-ulj">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="vWX-Cb-ldP"/>
|
|
||||||
<menuItem title="Item 2" id="Yg1-xZ-vXq"/>
|
|
||||||
<menuItem title="Item 3" id="BwC-w9-hBy"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="uvt-uD-Adn"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.aux" id="KA7-7x-qeJ"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="wQi-Oz-7Ye" column="zpB-Rf-dWg" xPlacement="fill" yPlacement="center" id="KoQ-xV-fQu">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JAG-sJ-u2B">
|
|
||||||
<rect key="frame" x="-2" y="98" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="RS 232:" id="iG2-rY-VDv">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="wQi-Oz-7Ye" column="6Vn-yh-FoQ" xPlacement="fill" yPlacement="center" id="zWk-jd-i0V">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="10" translatesAutoresizingMaskIntoConstraints="NO" id="6ln-U2-0Pi">
|
|
||||||
<rect key="frame" x="104" y="92" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="uu3-rr-iD8" id="daT-eX-4Vu">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="fMw-mh-Qfi">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="uu3-rr-iD8"/>
|
|
||||||
<menuItem title="Item 2" id="f1r-MS-itp"/>
|
|
||||||
<menuItem title="Item 3" id="WhP-Di-CHP"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="gmZ-pW-35n"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.rs232" id="LxA-8b-jb4"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="gr2-eY-995" column="zpB-Rf-dWg" id="xIE-bJ-mzr">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Svb-pu-WPf">
|
|
||||||
<rect key="frame" x="-2" y="67" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Game I/O:" id="2Gc-mV-zCZ">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="gr2-eY-995" column="6Vn-yh-FoQ" id="nhy-Gp-GLL">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="11" translatesAutoresizingMaskIntoConstraints="NO" id="K8G-bZ-6mZ">
|
|
||||||
<rect key="frame" x="104" y="61" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="GOm-Tf-6qc" id="Mig-Nu-gZB">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="faU-zS-LgN">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="GOm-Tf-6qc"/>
|
|
||||||
<menuItem title="Item 2" id="XgG-U0-2G7"/>
|
|
||||||
<menuItem title="Item 3" id="4Ea-aE-sB1"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="o53-71-xuf"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.gameio" id="tJw-AS-RUz"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="1xN-lm-s4l" column="zpB-Rf-dWg" id="vPV-KN-NNp">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="31K-iE-RCe">
|
|
||||||
<rect key="frame" x="-2" y="36" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Printer:" id="QZI-H7-i8m">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="1xN-lm-s4l" column="6Vn-yh-FoQ" id="KRc-Z8-drK">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="12" translatesAutoresizingMaskIntoConstraints="NO" id="sTp-en-8Wd">
|
|
||||||
<rect key="frame" x="104" y="30" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="TU9-ed-ofw" id="1OL-aw-xNL">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="MSP-Iu-ix3">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="TU9-ed-ofw"/>
|
|
||||||
<menuItem title="Item 2" id="7wI-Tn-rE0"/>
|
|
||||||
<menuItem title="Item 3" id="bQc-pc-ccM"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="Fxc-YB-SF9"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.printer" id="3l1-Hn-v47"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="M2s-qn-SIT" column="zpB-Rf-dWg" id="8R2-aA-mLq">
|
|
||||||
<textField key="contentView" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MH0-Nk-5Py">
|
|
||||||
<rect key="frame" x="-2" y="5" width="104" height="16"/>
|
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Modem:" id="HQq-VN-Ju9">
|
|
||||||
<font key="font" usesAppearanceFont="YES"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</gridCell>
|
|
||||||
<gridCell row="M2s-qn-SIT" column="6Vn-yh-FoQ" id="idI-pW-e7v">
|
|
||||||
<popUpButton key="contentView" verticalHuggingPriority="750" tag="13" translatesAutoresizingMaskIntoConstraints="NO" id="KHf-kC-BpZ">
|
|
||||||
<rect key="frame" x="104" y="-1" width="205" height="25"/>
|
|
||||||
<popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="CxO-3g-va1" id="jDr-6p-C7y">
|
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
|
||||||
<font key="font" metaFont="menu"/>
|
|
||||||
<menu key="menu" id="lxi-Z0-ya6">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Item 1" state="on" id="CxO-3g-va1"/>
|
|
||||||
<menuItem title="Item 2" id="OpR-vy-iL5"/>
|
|
||||||
<menuItem title="Item 3" id="xvH-9B-ge5"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
|
||||||
<connections>
|
|
||||||
<action selector="menuChanged:" target="-2" id="pHW-GG-2VQ"/>
|
|
||||||
<binding destination="-2" name="content" keyPath="machine.modem" id="hFa-pj-NnN"/>
|
|
||||||
</connections>
|
|
||||||
</popUpButton>
|
|
||||||
</gridCell>
|
|
||||||
</gridCells>
|
|
||||||
<point key="canvasLocation" x="268" y="71"/>
|
|
||||||
</gridView>
|
|
||||||
<userDefaultsController representsSharedInstance="YES" id="ZGN-Cx-9po"/>
|
|
||||||
</objects>
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="NSListViewTemplate" width="14" height="10"/>
|
||||||
|
<image name="NSStopProgressFreestandingTemplate" width="14" height="14"/>
|
||||||
|
</resources>
|
||||||
</document>
|
</document>
|
||||||
|
14
Ample/Bookmark.h
Normal file
14
Ample/Bookmark.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// Bookmark.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef Bookmark_h
|
||||||
|
#define Bookmark_h
|
||||||
|
|
||||||
|
#import "Bookmark+CoreDataClass.h"
|
||||||
|
|
||||||
|
#endif /* Bookmark_h */
|
45
Ample/BookmarkManager.h
Normal file
45
Ample/BookmarkManager.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// BookmarkManager.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 6/1/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CoreData/CoreData.h>
|
||||||
|
|
||||||
|
@class NSMenu;
|
||||||
|
@class NSMenuItem;
|
||||||
|
@class Bookmark;
|
||||||
|
@class DiskImage;
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface BookmarkManager : NSObject
|
||||||
|
|
||||||
|
@property (weak) IBOutlet NSMenu *menu;
|
||||||
|
@property (weak) IBOutlet NSMenuItem *updateMenuItem;
|
||||||
|
@property (readonly) NSManagedObjectContext *managedObjectContext;
|
||||||
|
|
||||||
|
@property (nullable) Bookmark *currentBookmark;
|
||||||
|
|
||||||
|
+(instancetype)sharedManager;
|
||||||
|
|
||||||
|
-(NSString *)uniqueBookmarkName: (NSString *)name;
|
||||||
|
|
||||||
|
-(NSError *)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name automatic: (BOOL)automatic;
|
||||||
|
|
||||||
|
//-(NSError *)saveDefault: (NSDictionary *)bookmark;
|
||||||
|
|
||||||
|
-(Bookmark *)defaultBookmark;
|
||||||
|
-(NSDictionary *)loadDefault;
|
||||||
|
|
||||||
|
-(NSError *)setAutomatic: (Bookmark *)bookmark;
|
||||||
|
|
||||||
|
-(BOOL)addDiskImage: (NSObject *)pathOrURL;
|
||||||
|
|
||||||
|
//-(void)convertLegacyBookmarks;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
651
Ample/BookmarkManager.m
Normal file
651
Ample/BookmarkManager.m
Normal file
@ -0,0 +1,651 @@
|
|||||||
|
//
|
||||||
|
// BookmarkManager.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 6/1/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BookmarkManager.h"
|
||||||
|
#import "Ample.h"
|
||||||
|
|
||||||
|
#import "Bookmark.h"
|
||||||
|
#import "DiskImage.h"
|
||||||
|
#import "Menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface BookmarkManager () {
|
||||||
|
|
||||||
|
NSPersistentStoreCoordinator *_psc;
|
||||||
|
NSManagedObjectContext *_moc;
|
||||||
|
NSManagedObjectModel *_mom;
|
||||||
|
NSPersistentStore *_store;
|
||||||
|
|
||||||
|
NSFetchRequest *_defaultRequest;
|
||||||
|
|
||||||
|
|
||||||
|
NSURL *_bookmarkDirectory;
|
||||||
|
NSArrayController *_items;
|
||||||
|
NSUInteger _newMenuGeneration;
|
||||||
|
NSUInteger _currentMenuGeneration;
|
||||||
|
|
||||||
|
Bookmark *_currentBookmark;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface BookmarkManager (MenuDelegate) <NSMenuDelegate>
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BookmarkManager
|
||||||
|
|
||||||
|
static BookmarkManager *singleton = nil;
|
||||||
|
|
||||||
|
-(void)awakeFromNib {
|
||||||
|
if (!singleton) {
|
||||||
|
singleton = self;
|
||||||
|
if (!_items) [self initMenus];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+(instancetype)sharedManager {
|
||||||
|
if (!singleton) singleton = [BookmarkManager new];
|
||||||
|
return singleton;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(instancetype)init {
|
||||||
|
if (singleton) return singleton;
|
||||||
|
|
||||||
|
|
||||||
|
if ((self = [super init])) {
|
||||||
|
[self initCoreData];
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||||
|
[nc addObserver: self selector: @selector(diskImageAdded:) name: kNotificationDiskImageAdded object: nil];
|
||||||
|
|
||||||
|
|
||||||
|
_newMenuGeneration = 1;
|
||||||
|
_currentMenuGeneration = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//singleton = self;
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSManagedObjectContext *)managedObjectContext {
|
||||||
|
return _moc;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)initCoreData {
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
BOOL new = NO;
|
||||||
|
|
||||||
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
|
NSURL *url = [bundle URLForResource: @"Ample" withExtension: @"momd"];
|
||||||
|
_mom = [[NSManagedObjectModel alloc] initWithContentsOfURL: url];
|
||||||
|
|
||||||
|
_psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: _mom];
|
||||||
|
|
||||||
|
_moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSMainQueueConcurrencyType];
|
||||||
|
[_moc setPersistentStoreCoordinator: _psc];
|
||||||
|
|
||||||
|
//[_moc setMergePolicy: [NSMergePolicy rollbackMergePolicy]];
|
||||||
|
|
||||||
|
url = SupportDirectory();
|
||||||
|
#if 0
|
||||||
|
url = [url URLByAppendingPathComponent: @"Ample.db"];
|
||||||
|
|
||||||
|
if (![url checkResourceIsReachableAndReturnError: &error])
|
||||||
|
new = YES;
|
||||||
|
|
||||||
|
|
||||||
|
_store = [_psc addPersistentStoreWithType: NSSQLiteStoreType
|
||||||
|
configuration: nil
|
||||||
|
URL: url
|
||||||
|
options: nil
|
||||||
|
error: &error];
|
||||||
|
#else
|
||||||
|
|
||||||
|
url = [url URLByAppendingPathComponent: @"Ample.xml"];
|
||||||
|
|
||||||
|
if (![url checkResourceIsReachableAndReturnError: &error])
|
||||||
|
new = YES;
|
||||||
|
|
||||||
|
|
||||||
|
_store = [_psc addPersistentStoreWithType: NSXMLStoreType
|
||||||
|
configuration: nil
|
||||||
|
URL: url
|
||||||
|
options: nil
|
||||||
|
error: &error];
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
_defaultRequest = [Bookmark fetchRequest];
|
||||||
|
[_defaultRequest setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||||
|
|
||||||
|
if (new) {
|
||||||
|
[self convertLegacyBookmarks];
|
||||||
|
[self convertLegacyDiskImages];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)willTerminate: (NSNotification *)notification {
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
|
||||||
|
if (![_moc save: &error]) {
|
||||||
|
NSLog(@"%@", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)convertLegacyBookmarks {
|
||||||
|
|
||||||
|
//NSEntityDescription *e;
|
||||||
|
|
||||||
|
//e = [NSEntityDescription entityForName: @"Bookmark" inManagedObjectContext: moc];
|
||||||
|
|
||||||
|
NSURL *url = [self bookmarkDirectory];
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
|
NSArray *files = [fm contentsOfDirectoryAtURL: url
|
||||||
|
includingPropertiesForKeys: nil
|
||||||
|
options: NSDirectoryEnumerationSkipsHiddenFiles
|
||||||
|
error: &error];
|
||||||
|
|
||||||
|
NSDate *now = [NSDate date];
|
||||||
|
for (NSURL *url in files) {
|
||||||
|
|
||||||
|
|
||||||
|
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||||
|
//NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListBinaryFormat_v1_0 options: 0 error: &error];
|
||||||
|
|
||||||
|
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||||
|
|
||||||
|
[b setName: [url lastPathComponent]];
|
||||||
|
[b setDictionary: dict];
|
||||||
|
//[b setData: data];
|
||||||
|
[b setMachine: [dict objectForKey: @"machine"]];
|
||||||
|
[b setCreated: now];
|
||||||
|
}
|
||||||
|
|
||||||
|
// default...
|
||||||
|
|
||||||
|
url = [url URLByAppendingPathComponent: @".Default"];
|
||||||
|
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL: url];
|
||||||
|
if (dict) {
|
||||||
|
//NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListBinaryFormat_v1_0 options: 0 error: &error];
|
||||||
|
|
||||||
|
NSString *name = [self uniqueBookmarkName: @"Default"];
|
||||||
|
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||||
|
|
||||||
|
[b setName: name];
|
||||||
|
[b setAutomatic: YES];
|
||||||
|
[b setDictionary: dict];
|
||||||
|
//[b setData: data];
|
||||||
|
[b setMachine: [dict objectForKey: @"machine"]];
|
||||||
|
[b setCreated: now];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (![_moc save: &error]) {
|
||||||
|
NSLog(@"%@", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)convertLegacyDiskImages {
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
NSURL *sd = SupportDirectory();
|
||||||
|
NSURL *url = [sd URLByAppendingPathComponent: @"RecentDiskImages.plist"];
|
||||||
|
|
||||||
|
NSArray *array = [NSArray arrayWithContentsOfURL: url];
|
||||||
|
if (!array) return;
|
||||||
|
|
||||||
|
for (NSDictionary *d in array) {
|
||||||
|
|
||||||
|
NSManagedObject *o = [NSEntityDescription insertNewObjectForEntityForName: @"DiskImage" inManagedObjectContext: _moc];
|
||||||
|
[o setValue: [d objectForKey: @"date"] forKey: @"added"];
|
||||||
|
[o setValue: [d objectForKey: @"date"] forKey: @"accessed"];
|
||||||
|
[o setValue: [d objectForKey: @"path"] forKey: @"path"];
|
||||||
|
[o setValue: [d objectForKey: @"size"] forKey: @"size"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (![_moc save: &error]) {
|
||||||
|
NSLog(@"%@", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSURL *)bookmarkDirectory {
|
||||||
|
|
||||||
|
if (_bookmarkDirectory) return _bookmarkDirectory;
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
|
||||||
|
NSURL *url = SupportDirectory();
|
||||||
|
url = [url URLByAppendingPathComponent: @"Bookmarks"];
|
||||||
|
NSError *error = nil;
|
||||||
|
[fm createDirectoryAtURL: url withIntermediateDirectories: YES attributes: nil error: &error];
|
||||||
|
if (error) NSLog(@"%@", error);
|
||||||
|
_bookmarkDirectory = url;
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(Bookmark *)defaultBookmark {
|
||||||
|
|
||||||
|
NSFetchRequest *req;
|
||||||
|
NSError *error;
|
||||||
|
NSArray *array;
|
||||||
|
|
||||||
|
req = [Bookmark fetchRequest];
|
||||||
|
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||||
|
array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
|
||||||
|
return [array firstObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSDictionary *)loadDefault {
|
||||||
|
Bookmark *b = [self defaultBookmark];
|
||||||
|
return [b dictionary];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* save as .Default */
|
||||||
|
-(NSError *)saveDefault: (NSDictionary *)bookmark {
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* check if it already exists */
|
||||||
|
|
||||||
|
NSFetchRequest *req;
|
||||||
|
NSError *error;
|
||||||
|
NSArray *array;
|
||||||
|
Bookmark *b;
|
||||||
|
NSDate *now = [NSDate date];
|
||||||
|
BOOL ok;
|
||||||
|
|
||||||
|
req = [[NSFetchRequest alloc] initWithEntityName: @"Default"];
|
||||||
|
array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
|
||||||
|
|
||||||
|
b = [array firstObject];
|
||||||
|
if (b) {
|
||||||
|
[b setModified: now];
|
||||||
|
} else {
|
||||||
|
b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Default" inManagedObjectContext: _moc];
|
||||||
|
|
||||||
|
[b setName: @"Default"];
|
||||||
|
[b setCreated: now];
|
||||||
|
}
|
||||||
|
[b setDictionary: bookmark];
|
||||||
|
[b setMachine: [bookmark objectForKey: @"machine"]];
|
||||||
|
|
||||||
|
ok = [_moc save: &error];
|
||||||
|
if (!ok) NSLog(@"%@", error);
|
||||||
|
return error;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSURL *url = [self bookmarkDirectory];
|
||||||
|
url = [url URLByAppendingPathComponent: @".Default"];
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
BOOL ok = NO;
|
||||||
|
if (@available(macOS 10.13, *)) {
|
||||||
|
ok = [bookmark writeToURL: url error: &error];
|
||||||
|
if (!ok) NSLog(@"%@", error);
|
||||||
|
} else {
|
||||||
|
ok = [bookmark writeToURL: url atomically: YES];
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(NSError *)setAutomatic: (Bookmark *)bookmark {
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
NSFetchRequest *req = [Bookmark fetchRequest];
|
||||||
|
[req setPredicate: [NSPredicate predicateWithFormat: @"automatic == TRUE"]];
|
||||||
|
|
||||||
|
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
for (Bookmark *b in array) {
|
||||||
|
if (b != bookmark) [b setAutomatic: NO];
|
||||||
|
}
|
||||||
|
[bookmark setAutomatic: YES];
|
||||||
|
if (error) return error;
|
||||||
|
[_moc save: &error];
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSError *)saveBookmark: (NSDictionary *)bookmark name: (NSString *)name automatic: (BOOL)automatic {
|
||||||
|
|
||||||
|
NSDate *now = [NSDate date];
|
||||||
|
NSError *error;
|
||||||
|
BOOL ok;
|
||||||
|
|
||||||
|
Bookmark *b = (Bookmark *)[NSEntityDescription insertNewObjectForEntityForName: @"Bookmark" inManagedObjectContext: _moc];
|
||||||
|
|
||||||
|
[b setName: name];
|
||||||
|
[b setDictionary: bookmark];
|
||||||
|
[b setMachine: [bookmark objectForKey: @"machine"]];
|
||||||
|
[b setCreated: now];
|
||||||
|
[b setAutomatic: automatic];
|
||||||
|
|
||||||
|
ok = [b validateForInsert: &error];
|
||||||
|
if (!ok) {
|
||||||
|
// will be useful, eg "name is too long"
|
||||||
|
// keys: NSValidationErrorObject, NSLocalizedDescription, NSValidationErrorKey, NSValidationErrorValue
|
||||||
|
//NSLog(@"%@", error);
|
||||||
|
[_moc deleteObject: b];
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ok = [_moc save: &error];
|
||||||
|
if (!ok) {
|
||||||
|
//NSLog(@"%@", error);
|
||||||
|
[_moc deleteObject: b];
|
||||||
|
error = [NSError errorWithDomain: @"Ample" code: 0 userInfo: @{ NSLocalizedDescriptionKey: @"Duplicate name" }];
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (automatic) {
|
||||||
|
[self setAutomatic: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)loadBookmarks {
|
||||||
|
|
||||||
|
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||||
|
|
||||||
|
|
||||||
|
_items = [NSArrayController new];
|
||||||
|
[_items setManagedObjectContext: _moc];
|
||||||
|
[_items setAvoidsEmptySelection: NO];
|
||||||
|
[_items setAutomaticallyPreparesContent: YES];
|
||||||
|
[_items setAutomaticallyRearrangesObjects: YES];
|
||||||
|
[_items setEntityName: @"Bookmark"];
|
||||||
|
[_items setSortDescriptors: @[ s ]];
|
||||||
|
|
||||||
|
[_items fetch: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* extract the number from a trailing " (%d)" */
|
||||||
|
static int extract_number(NSString *s, NSInteger offset) {
|
||||||
|
|
||||||
|
unichar buffer[32];
|
||||||
|
NSInteger len = [s length] - offset;
|
||||||
|
unichar c;
|
||||||
|
int i;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
if (len < 4) return -1; /* " (1)"*/
|
||||||
|
if (len > 8) return -1; /* " (99999)" */
|
||||||
|
|
||||||
|
NSRange r = NSMakeRange(offset, len);
|
||||||
|
[s getCharacters: buffer range: r];
|
||||||
|
|
||||||
|
buffer[len] = 0;
|
||||||
|
i = 0;
|
||||||
|
if (buffer[i++] != ' ') return -1;
|
||||||
|
if (buffer[i++] != '(') return -1;
|
||||||
|
|
||||||
|
c = buffer[i++];
|
||||||
|
if (c < '1' || c > '9') return -1;
|
||||||
|
n = c - '0';
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
c = buffer[i];
|
||||||
|
if (c < '0' || c > '9') break;
|
||||||
|
n = n * 10 + (c - '0');
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer[i++] != ')') return -1;
|
||||||
|
if (buffer[i++] != 0) return -1;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(NSString *)uniqueBookmarkName: (NSString *)name {
|
||||||
|
|
||||||
|
NSInteger length = [name length];
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
NSPredicate *p = [NSPredicate predicateWithFormat: @"name BEGINSWITH %@", name];
|
||||||
|
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||||
|
[req setPredicate: p];
|
||||||
|
|
||||||
|
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
if (![array count]) return name;
|
||||||
|
|
||||||
|
uint64_t bits = 1; /* mark 0 as unavailable */
|
||||||
|
NSInteger max = 0;
|
||||||
|
BOOL exact = NO;
|
||||||
|
for (Bookmark *b in array) {
|
||||||
|
NSString *s = [b name];
|
||||||
|
if ([name isEqualToString: s]) {
|
||||||
|
exact = YES;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int n = extract_number(s, length);
|
||||||
|
if (n < 1) continue;
|
||||||
|
if (n > max) max = n;
|
||||||
|
if (n < 64)
|
||||||
|
bits |= (1 << n);
|
||||||
|
}
|
||||||
|
if (!exact) return name;
|
||||||
|
|
||||||
|
if (bits == (uint64_t)-1) {
|
||||||
|
return [name stringByAppendingFormat: @" (%u)", (int)(max + 1)];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
int ix = 0;
|
||||||
|
while (bits & 0x01) {
|
||||||
|
++ix;
|
||||||
|
bits >>= 1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// this doesn't work correctly.
|
||||||
|
int ix = __builtin_ffsll(~bits);
|
||||||
|
#endif
|
||||||
|
return [name stringByAppendingFormat: @" (%u)", ix];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(BOOL)addDiskImage: (NSObject *)pathOrURL {
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
|
||||||
|
NSString *path = nil;
|
||||||
|
NSURL *url = nil;
|
||||||
|
if ([pathOrURL isKindOfClass: [NSString class]]) {
|
||||||
|
path = (NSString *)pathOrURL;
|
||||||
|
} else if ([pathOrURL isKindOfClass: [NSURL class]]){
|
||||||
|
url = (NSURL *)pathOrURL;
|
||||||
|
|
||||||
|
path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||||
|
}
|
||||||
|
if (!path) return NO;
|
||||||
|
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
|
||||||
|
|
||||||
|
NSDictionary *attr = [fm attributesOfItemAtPath: path error: &error];
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"%@ : %@", path, error);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSNumber *size = [attr objectForKey: NSFileSize];
|
||||||
|
|
||||||
|
NSDate *now = [NSDate date];
|
||||||
|
|
||||||
|
NSPredicate *p = [NSPredicate predicateWithFormat: @"path = %@", path];
|
||||||
|
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"DiskImage"];
|
||||||
|
[req setPredicate: p];
|
||||||
|
|
||||||
|
|
||||||
|
NSArray *array = [_moc executeFetchRequest: req error: &error];
|
||||||
|
BOOL found = 0;
|
||||||
|
for (NSManagedObject *o in array) {
|
||||||
|
found = YES;
|
||||||
|
[o setValue: now forKey: @"accessed"];
|
||||||
|
}
|
||||||
|
if (found) return NO;
|
||||||
|
|
||||||
|
DiskImage *o = [NSEntityDescription insertNewObjectForEntityForName: @"DiskImage" inManagedObjectContext: _moc];
|
||||||
|
|
||||||
|
|
||||||
|
[o setPath: path];
|
||||||
|
[o setAdded: now];
|
||||||
|
[o setAccessed: now];
|
||||||
|
[o setSize: [size longLongValue]];
|
||||||
|
[o updatePath];
|
||||||
|
|
||||||
|
if (![_moc save: &error]) {
|
||||||
|
NSLog(@"%@", error);
|
||||||
|
[_moc deleteObject: o];
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)diskImageAdded: (NSNotification *)notification {
|
||||||
|
|
||||||
|
NSURL *url = [notification object];
|
||||||
|
if (url) [self addDiskImage: url];
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString *kMenuContext = @"";
|
||||||
|
|
||||||
|
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
||||||
|
if (context == (__bridge void * _Nullable)(kMenuContext)) {
|
||||||
|
|
||||||
|
//NSLog(@"observeValueForKeyPath %@", keyPath);
|
||||||
|
|
||||||
|
_newMenuGeneration++;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[super observeValueForKeyPath: keyPath ofObject: object change: change context: context];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)initMenus {
|
||||||
|
|
||||||
|
if (!_items) {
|
||||||
|
[self loadBookmarks];
|
||||||
|
[_items addObserver: self forKeyPath: @"arrangedObjects.name" options: 0 context: (__bridge void * _Nullable)(kMenuContext)];
|
||||||
|
[_items addObserver: self forKeyPath: @"arrangedObjects.automatic" options: 0 context: (__bridge void * _Nullable)(kMenuContext)];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)bookmarkMenu:(id)sender
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
-(Bookmark *)currentBookmark {
|
||||||
|
return _currentBookmark;
|
||||||
|
}
|
||||||
|
-(void)setCurrentBookmark:(Bookmark *)currentBookmark {
|
||||||
|
if (currentBookmark == _currentBookmark) return;
|
||||||
|
_currentBookmark = currentBookmark;
|
||||||
|
_newMenuGeneration++;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)menuNeedsUpdate:(NSMenu *)menu {
|
||||||
|
|
||||||
|
if (_currentMenuGeneration == _newMenuGeneration) return;
|
||||||
|
_currentMenuGeneration = _newMenuGeneration;
|
||||||
|
|
||||||
|
if (_currentBookmark && _updateMenuItem) {
|
||||||
|
NSString *title = [NSString stringWithFormat: @"Update “%@”", [_currentBookmark name]];
|
||||||
|
[_updateMenuItem setHidden: NO];
|
||||||
|
[_updateMenuItem setTitle: title];
|
||||||
|
[_updateMenuItem setRepresentedObject: _currentBookmark];
|
||||||
|
} else {
|
||||||
|
[_updateMenuItem setHidden: YES];
|
||||||
|
[_updateMenuItem setRepresentedObject: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NSArray *menus = [menu itemArray];
|
||||||
|
for (NSMenuItem *item in [menus reverseObjectEnumerator]) {
|
||||||
|
if ([item tag] == 0xdeadbeef) [_menu removeItem: item];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSArray *array = [_items arrangedObjects];
|
||||||
|
for (Bookmark *b in array) {
|
||||||
|
|
||||||
|
NSString *title = [b name];
|
||||||
|
NSMenuItem *item = [menu addItemWithTitle: title action: @selector(bookmarkMenu:) keyEquivalent: @""];
|
||||||
|
[item setRepresentedObject: b];
|
||||||
|
[item setTag: 0xdeadbeef];
|
||||||
|
if ([b automatic]) {
|
||||||
|
|
||||||
|
[item setOnStateImage: [NSImage imageNamed: NSImageNameStatusAvailable]];
|
||||||
|
[item setState: NSOnState];
|
||||||
|
}
|
||||||
|
//if ([b automatic]) [item setAttributedTitle: ItalicMenuString([b name])];
|
||||||
|
//[item setState: [b automatic] ? NSMixedState : NSOffState];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
/* MacOS 12.1+ doesn't like class clusters in nibs -
|
||||||
|
|
||||||
|
[General] This coder is expecting the replaced object 0x600000938f60 to be returned from
|
||||||
|
NSClassSwapper.initWithCoder instead of <BookmarkManager: 0x600000905da0>
|
||||||
|
|
||||||
|
*/
|
||||||
|
@interface BookmarkManagerProxy : NSProxy {
|
||||||
|
BookmarkManager *_target;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BookmarkManagerProxy
|
||||||
|
|
||||||
|
-(id)init {
|
||||||
|
_target = [BookmarkManager sharedManager];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSMethodSignature *)methodSignatureForSelector:(SEL)sel {
|
||||||
|
return [_target methodSignatureForSelector: sel];
|
||||||
|
}
|
||||||
|
|
||||||
|
+(BOOL)respondsToSelector:(SEL)aSelector {
|
||||||
|
return [BookmarkManager respondsToSelector: aSelector];
|
||||||
|
}
|
||||||
|
-(void)forwardInvocation:(NSInvocation *)invocation {
|
||||||
|
if ([_target respondsToSelector: [invocation selector]]) {
|
||||||
|
[invocation invokeWithTarget: _target];
|
||||||
|
} else {
|
||||||
|
[super forwardInvocation: invocation];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
19
Ample/BookmarkWindowController.h
Normal file
19
Ample/BookmarkWindowController.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// BookmarkWindowController.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface BookmarkWindowController : NSWindowController
|
||||||
|
|
||||||
|
+(instancetype)sharedInstance;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
170
Ample/BookmarkWindowController.m
Normal file
170
Ample/BookmarkWindowController.m
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
//
|
||||||
|
// BookmarkWindowController.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BookmarkWindowController.h"
|
||||||
|
#import "BookmarkManager.h"
|
||||||
|
#import "Bookmark.h"
|
||||||
|
#import "Ample.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@interface BookmarkWindowController ()
|
||||||
|
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||||
|
@property (strong) IBOutlet BookmarkManager *bookmarkManager;
|
||||||
|
|
||||||
|
@property (weak) IBOutlet NSTableView *tableView;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BookmarkWindowController
|
||||||
|
|
||||||
|
|
||||||
|
+(instancetype)sharedInstance {
|
||||||
|
static BookmarkWindowController *me = nil;
|
||||||
|
if (!me) {
|
||||||
|
me = [self new];
|
||||||
|
}
|
||||||
|
return me;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSString *)windowNibName {
|
||||||
|
return @"BookmarkWindow";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)windowDidLoad {
|
||||||
|
[super windowDidLoad];
|
||||||
|
|
||||||
|
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||||
|
|
||||||
|
[_arrayController setSortDescriptors: @[s]];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)windowShouldClose: (NSWindow *)sender {
|
||||||
|
|
||||||
|
NSManagedObjectContext *moc = [_arrayController managedObjectContext];
|
||||||
|
NSError *error;
|
||||||
|
|
||||||
|
if (![_arrayController commitEditing]) return NO;
|
||||||
|
|
||||||
|
if ([moc save: &error]) return YES;
|
||||||
|
NSLog(@"%@", error);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSDictionary *dict = [error userInfo];
|
||||||
|
NSArray *array = [dict objectForKey: @"conflictList"];
|
||||||
|
for (NSConstraintConflict *c in array) {
|
||||||
|
|
||||||
|
NSArray * arr = [c conflictingObjects];
|
||||||
|
for (NSManagedObject *o in arr) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return YES;
|
||||||
|
|
||||||
|
//[self presentError: error];
|
||||||
|
//return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)keyDown:(NSEvent *)event {
|
||||||
|
/* Carbon/Events.h */
|
||||||
|
enum {
|
||||||
|
kVK_Delete = 0x33,
|
||||||
|
kVK_ForwardDelete = 0x75,
|
||||||
|
|
||||||
|
};
|
||||||
|
unsigned short keyCode = [event keyCode];
|
||||||
|
|
||||||
|
if (keyCode == kVK_Delete || keyCode == kVK_ForwardDelete) {
|
||||||
|
|
||||||
|
// arraycontroller selected object / selected index doesn't work right.
|
||||||
|
|
||||||
|
NSInteger row = [_tableView selectedRow];
|
||||||
|
if (row >= 0)
|
||||||
|
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(Bookmark *)clickedItem {
|
||||||
|
|
||||||
|
NSArray *array = [_arrayController arrangedObjects];
|
||||||
|
NSInteger row = [_tableView clickedRow];
|
||||||
|
if (row < 0 || row >= [array count]) return nil;
|
||||||
|
return [array objectAtIndex: row];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)doubleClick:(id)sender {
|
||||||
|
|
||||||
|
Bookmark *b = [self clickedItem];
|
||||||
|
if (!b) return;
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
[nc postNotificationName: kNotificationBookmarkMagicRoute object: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)toggleDefault:(id)sender {
|
||||||
|
NSLog(@"%@", sender);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)setDefault:(id)sender {
|
||||||
|
|
||||||
|
Bookmark *b = [self clickedItem];
|
||||||
|
if (!b) return;
|
||||||
|
|
||||||
|
[_bookmarkManager setAutomatic: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)clearDefault:(id)sender {
|
||||||
|
|
||||||
|
Bookmark *b = [self clickedItem];
|
||||||
|
if (!b) return;
|
||||||
|
|
||||||
|
[b setAutomatic: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(IBAction)deleteBookmark:(id)sender {
|
||||||
|
|
||||||
|
//Bookmark *b = [self clickedItem];
|
||||||
|
//if (!b) return;
|
||||||
|
|
||||||
|
NSInteger row = [_tableView clickedRow];
|
||||||
|
if (row >= 0)
|
||||||
|
[_arrayController removeObjectAtArrangedObjectIndex: row];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BookmarkWindowController (Menu)
|
||||||
|
|
||||||
|
-(BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
|
|
||||||
|
Bookmark *b = [self clickedItem];
|
||||||
|
|
||||||
|
if (!b) return NO;
|
||||||
|
SEL action = [menuItem action];
|
||||||
|
|
||||||
|
if (action == @selector(clearDefault:)) {
|
||||||
|
return [b automatic];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == @selector(setDefault:)) {
|
||||||
|
return ![b automatic];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -27,6 +27,20 @@
|
|||||||
- (void)windowDidLoad {
|
- (void)windowDidLoad {
|
||||||
[super windowDidLoad];
|
[super windowDidLoad];
|
||||||
|
|
||||||
|
if (!_webView) {
|
||||||
|
WKWebView *webView;
|
||||||
|
NSWindow *window = [self window];
|
||||||
|
CGRect frame = [[window contentView] frame];
|
||||||
|
|
||||||
|
|
||||||
|
webView = [WKWebView new];
|
||||||
|
[webView setFrame: frame];
|
||||||
|
[webView setNavigationDelegate: self];
|
||||||
|
[[window contentView]addSubview: webView];
|
||||||
|
_webView = webView;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[_webView setHidden: YES];
|
[_webView setHidden: YES];
|
||||||
NSBundle *bundle = [NSBundle mainBundle];
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
NSURL *url = [bundle URLForResource: @"CheatSheet" withExtension: @"html"];
|
NSURL *url = [bundle URLForResource: @"CheatSheet" withExtension: @"html"];
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="15702" systemVersion="18G9323" minimumToolsVersion="Automatic" sourceLanguage="Objective-C" userDefinedModelVersionIdentifier="0">
|
||||||
|
<entity name="Bookmark" representedClassName="Bookmark" syncable="YES">
|
||||||
|
<attribute name="automatic" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||||
|
<attribute name="comment" optional="YES" attributeType="String"/>
|
||||||
|
<attribute name="created" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="data" attributeType="Binary"/>
|
||||||
|
<attribute name="machine" optional="YES" attributeType="String"/>
|
||||||
|
<attribute name="modified" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="name" attributeType="String" minValueString="1" maxValueString="32"/>
|
||||||
|
<fetchIndex name="Bookmark_name">
|
||||||
|
<fetchIndexElement property="name" type="Binary" order="ascending"/>
|
||||||
|
</fetchIndex>
|
||||||
|
</entity>
|
||||||
|
<entity name="DiskImage" representedClassName="DiskImage" syncable="YES">
|
||||||
|
<attribute name="accessed" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="added" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="name" optional="YES" transient="YES" attributeType="String"/>
|
||||||
|
<attribute name="path" attributeType="String"/>
|
||||||
|
<attribute name="size" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||||
|
<fetchIndex name="DiskImage_path">
|
||||||
|
<fetchIndexElement property="path" type="Binary" order="ascending"/>
|
||||||
|
</fetchIndex>
|
||||||
|
</entity>
|
||||||
|
<elements>
|
||||||
|
<element name="Bookmark" positionX="994.5546875" positionY="-404.046875" width="128" height="148"/>
|
||||||
|
<element name="DiskImage" positionX="1242" positionY="-333" width="128" height="118"/>
|
||||||
|
</elements>
|
||||||
|
</model>
|
25
Ample/Core Data/Bookmark+CoreDataClass.h
Normal file
25
Ample/Core Data/Bookmark+CoreDataClass.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Bookmark+CoreDataClass.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CoreData/CoreData.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface Bookmark : NSManagedObject
|
||||||
|
|
||||||
|
@property NSDictionary *dictionary;
|
||||||
|
|
||||||
|
+(NSString *)uniqueName: (NSString *)name inContext: (NSManagedObjectContext *)context;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
||||||
|
#import "Bookmark+CoreDataProperties.h"
|
175
Ample/Core Data/Bookmark+CoreDataClass.m
Normal file
175
Ample/Core Data/Bookmark+CoreDataClass.m
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
//
|
||||||
|
// Bookmark+CoreDataClass.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "Bookmark+CoreDataClass.h"
|
||||||
|
|
||||||
|
@implementation Bookmark
|
||||||
|
|
||||||
|
/* extract the number from a trailing " (%d)" */
|
||||||
|
static int extract_number(NSString *s, NSInteger offset) {
|
||||||
|
|
||||||
|
unichar buffer[32];
|
||||||
|
NSInteger len = [s length] - offset;
|
||||||
|
unichar c;
|
||||||
|
int i;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
if (len < 4) return -1; /* " (1)"*/
|
||||||
|
if (len > 6) return -1; /* " (999)" */
|
||||||
|
|
||||||
|
NSRange r = NSMakeRange(offset, len);
|
||||||
|
[s getCharacters: buffer range: r];
|
||||||
|
|
||||||
|
buffer[len] = 0;
|
||||||
|
i = 0;
|
||||||
|
if (buffer[i++] != ' ') return -1;
|
||||||
|
if (buffer[i++] != '(') return -1;
|
||||||
|
|
||||||
|
c = buffer[i++];
|
||||||
|
if (c < '1' || c > '9') return -1;
|
||||||
|
n = c - '0';
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
c = buffer[i];
|
||||||
|
if (c < '0' || c > '9') break;
|
||||||
|
n = n * 10 + (c - '0');
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer[i++] != ')') return -1;
|
||||||
|
if (buffer[i++] != 0) return -1;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSString *)uniqueName: (NSString *)name inContext: (NSManagedObjectContext *)context {
|
||||||
|
|
||||||
|
NSInteger length = [name length];
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
NSPredicate *p = [NSPredicate predicateWithFormat: @"name BEGINSWITH %@", name];
|
||||||
|
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||||
|
[req setPredicate: p];
|
||||||
|
|
||||||
|
NSArray *array = [context executeFetchRequest: req error: &error];
|
||||||
|
if (![array count]) return name;
|
||||||
|
|
||||||
|
uint64_t bits = 1; /* mark 0 as unavailable */
|
||||||
|
NSInteger max = 0;
|
||||||
|
BOOL exact = NO;
|
||||||
|
for (Bookmark *b in array) {
|
||||||
|
NSString *s = [b name];
|
||||||
|
if ([name isEqualToString: s]) {
|
||||||
|
exact = YES;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int n = extract_number(s, length);
|
||||||
|
if (n < 1) continue;
|
||||||
|
if (n > max) max = n;
|
||||||
|
if (n < 64)
|
||||||
|
bits |= (1 << n);
|
||||||
|
}
|
||||||
|
if (!exact) return name;
|
||||||
|
|
||||||
|
if (bits == (uint64_t)-1) {
|
||||||
|
if (max == 999) return nil;
|
||||||
|
return [name stringByAppendingFormat: @" (%u)", (int)(max + 1)];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
int ix = 0;
|
||||||
|
while (bits) {
|
||||||
|
++ix;
|
||||||
|
bits >>= 1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// this doesn't work correctly.
|
||||||
|
int ix = __builtin_ffsll(~bits);
|
||||||
|
#endif
|
||||||
|
return [name stringByAppendingFormat: @" (%u)", ix];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setDictionary:(NSDictionary *)dictionary {
|
||||||
|
|
||||||
|
NSData *data;
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
|
data = [NSPropertyListSerialization dataWithPropertyList: dictionary
|
||||||
|
format: NSPropertyListBinaryFormat_v1_0
|
||||||
|
options: 0
|
||||||
|
error: &error];
|
||||||
|
|
||||||
|
[self setData: data];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSDictionary *)dictionary {
|
||||||
|
|
||||||
|
// NSDictionary *dict;
|
||||||
|
NSData *data = [self data];
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
|
return [NSPropertyListSerialization propertyListWithData: data
|
||||||
|
options: 0
|
||||||
|
format: nil
|
||||||
|
error: &error];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSError *)errorFromOriginalError:(NSError *)originalError error:(NSError*)secondError
|
||||||
|
{
|
||||||
|
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
|
||||||
|
NSMutableArray *errors = [NSMutableArray arrayWithObject:secondError];
|
||||||
|
if ([originalError code] == NSValidationMultipleErrorsError) {
|
||||||
|
[userInfo addEntriesFromDictionary:[originalError userInfo]];
|
||||||
|
[errors addObjectsFromArray:[userInfo objectForKey:NSDetailedErrorsKey]];
|
||||||
|
} else {
|
||||||
|
[errors addObject:originalError];
|
||||||
|
}
|
||||||
|
[userInfo setObject:errors forKey:NSDetailedErrorsKey];
|
||||||
|
return [NSError errorWithDomain:NSCocoaErrorDomain code:NSValidationMultipleErrorsError userInfo:userInfo];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)validateName:(id*)ioValue error:(NSError**)outError {
|
||||||
|
|
||||||
|
if (!ioValue || !*ioValue) return YES;
|
||||||
|
NSString *name = *ioValue;
|
||||||
|
|
||||||
|
NSFetchRequest *frq = [NSFetchRequest fetchRequestWithEntityName: @"Bookmark"];
|
||||||
|
|
||||||
|
NSPredicate *p = [NSPredicate predicateWithFormat: @"name = %@", name];
|
||||||
|
[frq setPredicate: p];
|
||||||
|
|
||||||
|
NSArray * arr = [[self managedObjectContext] executeFetchRequest: frq error: nil];
|
||||||
|
BOOL dupe = NO;
|
||||||
|
for (Bookmark *b in arr) {
|
||||||
|
if (b == self) continue;
|
||||||
|
dupe = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (dupe && outError) {
|
||||||
|
NSDictionary *dict = @{ NSLocalizedFailureReasonErrorKey: @"duplicate name",
|
||||||
|
NSLocalizedDescriptionKey: @"duplicate name",
|
||||||
|
NSValidationKeyErrorKey: @"name",
|
||||||
|
NSValidationValueErrorKey: name,
|
||||||
|
NSValidationObjectErrorKey: self
|
||||||
|
};
|
||||||
|
NSError *e = [NSError errorWithDomain: @"Ample" code: 1 userInfo: dict];
|
||||||
|
|
||||||
|
if (*outError) {
|
||||||
|
*outError = [self errorFromOriginalError: *outError error: e];
|
||||||
|
} else {
|
||||||
|
*outError = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !dupe;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
28
Ample/Core Data/Bookmark+CoreDataProperties.h
Normal file
28
Ample/Core Data/Bookmark+CoreDataProperties.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
//
|
||||||
|
// Bookmark+CoreDataProperties.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "Bookmark+CoreDataClass.h"
|
||||||
|
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface Bookmark (CoreDataProperties)
|
||||||
|
|
||||||
|
+ (NSFetchRequest<Bookmark *> *)fetchRequest;
|
||||||
|
|
||||||
|
@property (nullable, nonatomic, copy) NSString *name;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *machine;
|
||||||
|
@property (nullable, nonatomic, retain) NSData *data;
|
||||||
|
@property (nullable, nonatomic, copy) NSDate *created;
|
||||||
|
@property (nullable, nonatomic, copy) NSDate *modified;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *comment;
|
||||||
|
@property (nonatomic) BOOL automatic;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
26
Ample/Core Data/Bookmark+CoreDataProperties.m
Normal file
26
Ample/Core Data/Bookmark+CoreDataProperties.m
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// Bookmark+CoreDataProperties.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/6/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "Bookmark+CoreDataProperties.h"
|
||||||
|
|
||||||
|
@implementation Bookmark (CoreDataProperties)
|
||||||
|
|
||||||
|
+ (NSFetchRequest<Bookmark *> *)fetchRequest {
|
||||||
|
return [NSFetchRequest fetchRequestWithEntityName:@"Bookmark"];
|
||||||
|
}
|
||||||
|
|
||||||
|
@dynamic name;
|
||||||
|
@dynamic machine;
|
||||||
|
@dynamic data;
|
||||||
|
@dynamic created;
|
||||||
|
@dynamic modified;
|
||||||
|
@dynamic comment;
|
||||||
|
@dynamic automatic;
|
||||||
|
|
||||||
|
@end
|
21
Ample/Core Data/DiskImage+CoreDataClass.h
Normal file
21
Ample/Core Data/DiskImage+CoreDataClass.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//
|
||||||
|
// DiskImage+CoreDataClass.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CoreData/CoreData.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface DiskImage : NSManagedObject
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
||||||
|
#import "DiskImage+CoreDataProperties.h"
|
14
Ample/Core Data/DiskImage+CoreDataClass.m
Normal file
14
Ample/Core Data/DiskImage+CoreDataClass.m
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// DiskImage+CoreDataClass.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "DiskImage+CoreDataClass.h"
|
||||||
|
|
||||||
|
@implementation DiskImage
|
||||||
|
|
||||||
|
@end
|
29
Ample/Core Data/DiskImage+CoreDataProperties.h
Normal file
29
Ample/Core Data/DiskImage+CoreDataProperties.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
//
|
||||||
|
// DiskImage+CoreDataProperties.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "DiskImage+CoreDataClass.h"
|
||||||
|
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface DiskImage (CoreDataProperties)
|
||||||
|
|
||||||
|
+ (NSFetchRequest<DiskImage *> *)fetchRequest;
|
||||||
|
|
||||||
|
@property (nullable, nonatomic, copy) NSString *path;
|
||||||
|
@property (nullable, nonatomic, copy) NSDate *added;
|
||||||
|
@property (nonatomic) int64_t size;
|
||||||
|
@property (nullable, nonatomic, copy) NSDate *accessed;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *name;
|
||||||
|
|
||||||
|
-(void)updatePath;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
52
Ample/Core Data/DiskImage+CoreDataProperties.m
Normal file
52
Ample/Core Data/DiskImage+CoreDataProperties.m
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// DiskImage+CoreDataProperties.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "DiskImage+CoreDataProperties.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
@interface DiskImage () {
|
||||||
|
NSString *_name;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@implementation DiskImage (CoreDataProperties)
|
||||||
|
|
||||||
|
+ (NSFetchRequest<DiskImage *> *)fetchRequest {
|
||||||
|
return [NSFetchRequest fetchRequestWithEntityName:@"DiskImage"];
|
||||||
|
}
|
||||||
|
|
||||||
|
@dynamic path;
|
||||||
|
@dynamic added;
|
||||||
|
@dynamic size;
|
||||||
|
@dynamic accessed;
|
||||||
|
@dynamic name;
|
||||||
|
|
||||||
|
-(void)updatePath {
|
||||||
|
|
||||||
|
NSString *path = [self primitiveValueForKey: @"path"];
|
||||||
|
[self setName: [path lastPathComponent]];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)awakeFromFetch {
|
||||||
|
[super awakeFromFetch];
|
||||||
|
|
||||||
|
[self updatePath];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
-(void)awakeFromInsert {
|
||||||
|
[super awakeFromInsert];
|
||||||
|
|
||||||
|
NSString *path = [self primitiveValueForKey: @"path"];
|
||||||
|
[self setName: [path lastPathComponent]];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@end
|
@ -3,7 +3,7 @@
|
|||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>MameComponentsDate</key>
|
<key>MameComponentsDate</key>
|
||||||
<date>2021-04-28T16:00:00Z</date>
|
<date>2023-04-27T12:00:00Z</date>
|
||||||
<key>UseCustomMame</key>
|
<key>UseCustomMame</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>AutoCloseLogWindow</key>
|
<key>AutoCloseLogWindow</key>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<key>NSQuitAlwaysKeepsWindows</key>
|
<key>NSQuitAlwaysKeepsWindows</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>DefaultDownloadURL</key>
|
<key>DefaultDownloadURL</key>
|
||||||
<string>https://archive.org/download/mame.0229</string>
|
<string>https://archive.org/download/mame-merged/mame-merged</string>
|
||||||
<key>DefaultDownloadExtension</key>
|
<key>DefaultDownloadExtension</key>
|
||||||
<string>zip</string>
|
<string>zip</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
14
Ample/DiskImage.h
Normal file
14
Ample/DiskImage.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// DiskImage.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 2/7/2022.
|
||||||
|
// Copyright © 2022 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DiskImage_h
|
||||||
|
#define DiskImage_h
|
||||||
|
|
||||||
|
#import "DiskImage+CoreDataClass.h"
|
||||||
|
|
||||||
|
#endif /* DiskImage_h */
|
@ -9,19 +9,18 @@
|
|||||||
#import "DiskImagesWindowController.h"
|
#import "DiskImagesWindowController.h"
|
||||||
#import "TableCellView.h"
|
#import "TableCellView.h"
|
||||||
#import "Ample.h"
|
#import "Ample.h"
|
||||||
|
#import "DiskImage.h"
|
||||||
|
|
||||||
|
#import "BookmarkManager.h"
|
||||||
|
|
||||||
@interface DiskImagesWindowController ()
|
@interface DiskImagesWindowController ()
|
||||||
@property (weak) IBOutlet NSTableView *tableView;
|
@property (weak) IBOutlet NSTableView *tableView;
|
||||||
@property (strong) IBOutlet NSArrayController *arrayController;
|
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||||
@property (strong) NSMutableArray *content;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation DiskImagesWindowController {
|
@implementation DiskImagesWindowController {
|
||||||
BOOL _dirty;
|
|
||||||
NSSet *_extensions;
|
NSSet *_extensions;
|
||||||
NSTimer *_timer;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+(instancetype)sharedInstance {
|
+(instancetype)sharedInstance {
|
||||||
@ -44,7 +43,7 @@
|
|||||||
|
|
||||||
if ((self = [super init])) {
|
if ((self = [super init])) {
|
||||||
|
|
||||||
[self loadRecentDiskImages];
|
//[self loadRecentDiskImages];
|
||||||
|
|
||||||
_extensions = [NSSet setWithObjects:
|
_extensions = [NSSet setWithObjects:
|
||||||
@"2img", @"2mg", @"chd", @"dc", @"do", @"dsk", @"hd", @"hdv", @"image", @"nib", @"po", @"wav", @"woz", @"iso", @"raw", nil
|
@"2img", @"2mg", @"chd", @"dc", @"do", @"dsk", @"hd", @"hdv", @"image", @"nib", @"po", @"wav", @"woz", @"iso", @"raw", nil
|
||||||
@ -59,21 +58,25 @@
|
|||||||
|
|
||||||
- (void)windowDidLoad {
|
- (void)windowDidLoad {
|
||||||
|
|
||||||
if (!_content)
|
|
||||||
[self setContent: [NSMutableArray new]];
|
|
||||||
|
|
||||||
[super windowDidLoad];
|
[super windowDidLoad];
|
||||||
NSWindow *window = [self window];
|
NSWindow *window = [self window];
|
||||||
[window setRestorable: YES];
|
[window setRestorable: YES];
|
||||||
[window setRestorationClass: [self class]];
|
[window setRestorationClass: [self class]];
|
||||||
|
|
||||||
|
if (@available(macOS 10.13, *)) {
|
||||||
[_tableView registerForDraggedTypes: @[NSPasteboardTypeFileURL]];
|
[_tableView registerForDraggedTypes: @[NSPasteboardTypeFileURL]];
|
||||||
|
} else {
|
||||||
|
[_tableView registerForDraggedTypes: @[ (NSString *)kUTTypeFileURL ]];
|
||||||
|
}
|
||||||
[_tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal: NO]; // enable drag/drop to othr apps.
|
[_tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal: NO]; // enable drag/drop to othr apps.
|
||||||
|
|
||||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||||
|
|
||||||
|
NSSortDescriptor *s = [NSSortDescriptor sortDescriptorWithKey: @"name" ascending: YES selector: @selector(caseInsensitiveCompare:)];
|
||||||
|
[_arrayController setSortDescriptors: @[ s ]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
-(void)loadRecentDiskImages {
|
-(void)loadRecentDiskImages {
|
||||||
// NSError *error;
|
// NSError *error;
|
||||||
|
|
||||||
@ -90,28 +93,40 @@
|
|||||||
|
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
[nc addObserver: self selector: @selector(diskImageAdded:) name: @"DiskImageAdded" object: nil];
|
[nc addObserver: self selector: @selector(diskImageAdded:) name: kNotificationDiskImageAdded object: nil];
|
||||||
|
|
||||||
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
[nc addObserver: self selector: @selector(willTerminate:) name: NSApplicationWillTerminateNotification object: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)timerCallback: (NSTimer *)timer {
|
||||||
|
_timer = nil;
|
||||||
|
[self saveFile];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
-(void)diskImageAdded: (NSNotification *)notification {
|
-(void)diskImageAdded: (NSNotification *)notification {
|
||||||
|
|
||||||
NSURL *url = [notification object];
|
NSURL *url = [notification object];
|
||||||
if (!url) return;
|
if (!url) return;
|
||||||
|
|
||||||
[self addFile: url];
|
//[self addFile: url];
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
-(void)markDirty {
|
-(void)markDirty {
|
||||||
_dirty = YES;
|
_dirty = YES;
|
||||||
if (_timer) [_timer invalidate];
|
if (_timer) [_timer invalidate];
|
||||||
|
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 target: self selector: @selector(timerCallback:) userInfo: nil repeats: NO];
|
||||||
|
#if 0
|
||||||
|
// 10.12+
|
||||||
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 repeats: NO block: ^(NSTimer *t) {
|
_timer = [NSTimer scheduledTimerWithTimeInterval: 5 * 60 repeats: NO block: ^(NSTimer *t) {
|
||||||
|
|
||||||
self->_timer = nil;
|
self->_timer = nil;
|
||||||
[self saveFile];
|
[self saveFile];
|
||||||
}];
|
}];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-(void)saveFile {
|
-(void)saveFile {
|
||||||
|
|
||||||
[_timer invalidate];
|
[_timer invalidate];
|
||||||
@ -135,10 +150,11 @@
|
|||||||
[self saveFile];
|
[self saveFile];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
-(BOOL)addFile: (NSObject *)pathOrURL {
|
-(BOOL)addFile: (NSObject *)pathOrURL {
|
||||||
|
|
||||||
NSString *path = nil;
|
NSString *path = nil;
|
||||||
@ -186,32 +202,43 @@
|
|||||||
[NSDate new], @"date",
|
[NSDate new], @"date",
|
||||||
nil];
|
nil];
|
||||||
|
|
||||||
|
#if 0
|
||||||
@synchronized (self) {
|
@synchronized (self) {
|
||||||
if (_arrayController)
|
if (_arrayController)
|
||||||
[_arrayController addObject: d];
|
[_arrayController addObject: d];
|
||||||
else
|
else
|
||||||
[_content addObject: d];
|
[_content addObject: d];
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
[self markDirty];
|
[self markDirty];
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
-(DiskImage *)clickedItem {
|
||||||
|
|
||||||
-(NSMutableDictionary *)clickedItem {
|
NSArray *array = [_arrayController arrangedObjects];
|
||||||
|
|
||||||
NSInteger row = [_tableView clickedRow];
|
NSInteger row = [_tableView clickedRow];
|
||||||
if (row < 0) return nil;
|
if (row < 0 || row >= [array count]) return nil;
|
||||||
|
return [array objectAtIndex: row];
|
||||||
NSTableCellView *v = [_tableView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
|
||||||
return [v objectValue];
|
|
||||||
}
|
}
|
||||||
#pragma mark - IBActions
|
#pragma mark - IBActions
|
||||||
|
|
||||||
|
- (IBAction)filter:(id)sender {
|
||||||
|
NSString *text = [sender stringValue];
|
||||||
|
NSPredicate *p = nil;
|
||||||
|
if ([text length]) {
|
||||||
|
p = [NSPredicate predicateWithFormat: @"name CONTAINS[cd] %@",text];
|
||||||
|
}
|
||||||
|
|
||||||
|
[_arrayController setFilterPredicate: p];
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)showInFinder:(id)sender {
|
- (IBAction)showInFinder:(id)sender {
|
||||||
|
|
||||||
NSMutableDictionary *item = [self clickedItem];
|
DiskImage *item = [self clickedItem];
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
NSString *path = [item objectForKey: @"path"];
|
NSString *path = [item path];
|
||||||
|
|
||||||
NSURL *url = [NSURL fileURLWithPath: path];
|
NSURL *url = [NSURL fileURLWithPath: path];
|
||||||
if (!url) return;
|
if (!url) return;
|
||||||
@ -222,46 +249,33 @@
|
|||||||
|
|
||||||
- (IBAction)eject:(id)sender {
|
- (IBAction)eject:(id)sender {
|
||||||
|
|
||||||
NSMutableDictionary *item = [self clickedItem];
|
DiskImage *item = [self clickedItem];
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
|
|
||||||
@synchronized (self) {
|
[_arrayController removeObject: item];
|
||||||
|
}
|
||||||
|
|
||||||
if (_arrayController) {
|
-(IBAction)doubleClick: (id)sender {
|
||||||
[_arrayController removeObject: item];
|
DiskImage *d = [self clickedItem];
|
||||||
} else {
|
|
||||||
[_content removeObject: item];
|
|
||||||
}
|
|
||||||
[self markDirty];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
NSDictionary *userInfo = @{ @"path": [d path] };
|
||||||
|
[nc postNotificationName: kNotificationDiskImageMagicRoute object: nil userInfo: userInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation DiskImagesWindowController (TableView)
|
@implementation DiskImagesWindowController (TableView)
|
||||||
|
|
||||||
#if 0
|
|
||||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
|
||||||
return 5; //[_data count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
|
||||||
|
|
||||||
NSTableCellView *v = [tableView makeViewWithIdentifier: @"PathCell" owner: self];
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
-(id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
|
-(id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
|
||||||
|
|
||||||
id objects = [_arrayController arrangedObjects];
|
id objects = [_arrayController arrangedObjects];
|
||||||
|
|
||||||
NSDictionary *d = [objects objectAtIndex: row];
|
DiskImage *d = [objects objectAtIndex: row];
|
||||||
|
if (!d) return nil;
|
||||||
NSString *path = [d objectForKey: @"path"];
|
NSString *path = [d path];
|
||||||
|
|
||||||
NSURL *url = [NSURL fileURLWithPath: path];
|
NSURL *url = [NSURL fileURLWithPath: path];
|
||||||
return url;
|
return url;
|
||||||
@ -298,6 +312,8 @@
|
|||||||
|
|
||||||
-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
|
||||||
|
|
||||||
|
BookmarkManager *bm = [BookmarkManager sharedManager];
|
||||||
|
|
||||||
if ([info draggingSource] == _tableView) return NO;
|
if ([info draggingSource] == _tableView) return NO;
|
||||||
|
|
||||||
NSPasteboard * pb = [info draggingPasteboard];
|
NSPasteboard * pb = [info draggingPasteboard];
|
||||||
@ -306,12 +322,19 @@
|
|||||||
for (NSPasteboardItem *item in [pb pasteboardItems]) {
|
for (NSPasteboardItem *item in [pb pasteboardItems]) {
|
||||||
|
|
||||||
// need to convert from a string to a url back to a file in case it's a file id url?
|
// need to convert from a string to a url back to a file in case it's a file id url?
|
||||||
NSString *s = [item stringForType: NSPasteboardTypeFileURL];
|
NSString *s;
|
||||||
|
if (@available(macOS 10.13, *)) {
|
||||||
|
s = [item stringForType: NSPasteboardTypeFileURL];
|
||||||
|
} else {
|
||||||
|
// El Capitan still has kUTTypeFileURL aka public.file-url but doesn't have NSPasteboardTypeFileURL
|
||||||
|
s = [item stringForType: (NSString *)kUTTypeFileURL];
|
||||||
|
}
|
||||||
if (!s) continue;
|
if (!s) continue;
|
||||||
NSURL *url = [NSURL URLWithString: s];
|
NSURL *url = [NSURL URLWithString: s];
|
||||||
if (!url) continue;
|
if (!url) continue;
|
||||||
|
|
||||||
ok |= [self addFile: url];
|
ok |= [bm addDiskImage: url];
|
||||||
|
//ok |= [self addFile: url];
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
@ -26,17 +26,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@interface DownloadWindowController (URL) <NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>
|
@interface DownloadWindowController (URL) <NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface DownloadWindowController (Table) <NSTableViewDelegate, NSTableViewDataSource>
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface DownloadWindowController (Menu) <NSMenuDelegate, NSMenuItemValidation>
|
@interface DownloadWindowController (Menu) <NSMenuDelegate, NSMenuItemValidation>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@interface DownloadTableCellView : NSTableCellView
|
|
||||||
@property (weak) IBOutlet NSTextField *statusTextField;
|
|
||||||
@property (weak) IBOutlet NSProgressIndicator *activity;
|
|
||||||
@end
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
#import "Menu.h"
|
#import "Menu.h"
|
||||||
|
|
||||||
|
|
||||||
|
static NSString *Extensions[] = { @"zip", @"7z" };
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
kTagZip = 1,
|
kTagZip = 1,
|
||||||
kTag7z = 2,
|
kTag7z = 2,
|
||||||
@ -81,6 +84,7 @@ enum {
|
|||||||
|
|
||||||
@interface DownloadItem : NSObject
|
@interface DownloadItem : NSObject
|
||||||
|
|
||||||
|
@property NSString *value;
|
||||||
@property NSString *name;
|
@property NSString *name;
|
||||||
@property NSError *error;
|
@property NSError *error;
|
||||||
@property NSString *pathName;
|
@property NSString *pathName;
|
||||||
@ -89,15 +93,36 @@ enum {
|
|||||||
|
|
||||||
@property NSUInteger status;
|
@property NSUInteger status;
|
||||||
@property NSUInteger index;
|
@property NSUInteger index;
|
||||||
|
@property NSUInteger fileSize;
|
||||||
|
|
||||||
|
@property (readonly) NSColor *titleColor;
|
||||||
|
@property (readonly) NSColor *descriptionColor;
|
||||||
|
|
||||||
|
|
||||||
-(void)cancelDownload;
|
-(void)cancelDownload;
|
||||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task;
|
||||||
-(void)completeWithError: (NSError *)error;
|
-(void)completeWithError: (NSError *)error;
|
||||||
-(NSString *)statusDescription;
|
-(NSString *)statusDescription;
|
||||||
|
|
||||||
|
-(void)refresh: (NSURL *)localURL;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface DownloadItemArrayController : NSArrayController
|
||||||
|
|
||||||
|
@property(readonly, copy) NSArray<NSString *> *automaticRearrangementKeyPaths;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation DownloadItemArrayController
|
||||||
|
|
||||||
|
-(NSArray<NSString *> *)automaticRearrangementKeyPaths {
|
||||||
|
return @[@"localURL"]; // , @"error", @"task", @"statusDescription"];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
@interface DownloadWindowController ()
|
@interface DownloadWindowController ()
|
||||||
@property (weak) IBOutlet NSTableView *tableView;
|
@property (weak) IBOutlet NSTableView *tableView;
|
||||||
@ -105,6 +130,14 @@ enum {
|
|||||||
@property (weak) IBOutlet NSTextField *downloadField;
|
@property (weak) IBOutlet NSTextField *downloadField;
|
||||||
@property NSString *downloadExtension;
|
@property NSString *downloadExtension;
|
||||||
|
|
||||||
|
/* filter buttons */
|
||||||
|
@property (weak) IBOutlet NSButton *allFilterButton;
|
||||||
|
@property (weak) IBOutlet NSButton *missingFilterButton;
|
||||||
|
|
||||||
|
@property (strong) IBOutlet NSArrayController *arrayController;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation DownloadWindowController {
|
@implementation DownloadWindowController {
|
||||||
@ -117,6 +150,8 @@ enum {
|
|||||||
NSURLSession *_session;
|
NSURLSession *_session;
|
||||||
NSMutableDictionary *_taskIndex;
|
NSMutableDictionary *_taskIndex;
|
||||||
NSUserDefaults *_defaults;
|
NSUserDefaults *_defaults;
|
||||||
|
|
||||||
|
NSArray<NSButton *> *_filterButtons;
|
||||||
}
|
}
|
||||||
|
|
||||||
+(instancetype)sharedInstance {
|
+(instancetype)sharedInstance {
|
||||||
@ -166,6 +201,12 @@ enum {
|
|||||||
[window setRestorationClass: [self class]];
|
[window setRestorationClass: [self class]];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_filterButtons = @[
|
||||||
|
_allFilterButton,
|
||||||
|
_missingFilterButton
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
@ -174,7 +215,7 @@ enum {
|
|||||||
|
|
||||||
NSURL *url = [bundle URLForResource: @"roms" withExtension: @"plist"];
|
NSURL *url = [bundle URLForResource: @"roms" withExtension: @"plist"];
|
||||||
|
|
||||||
NSDictionary *d = [NSDictionary dictionaryWithContentsOfURL: url];
|
NSArray *roms = [NSArray arrayWithContentsOfURL: url];
|
||||||
|
|
||||||
NSURL *sd = SupportDirectory();
|
NSURL *sd = SupportDirectory();
|
||||||
|
|
||||||
@ -198,7 +239,6 @@ enum {
|
|||||||
[self initializeExtensionMenu];
|
[self initializeExtensionMenu];
|
||||||
|
|
||||||
|
|
||||||
NSArray *roms = [d objectForKey: @"roms"];
|
|
||||||
[self setCurrentROM: @""];
|
[self setCurrentROM: @""];
|
||||||
[self setCurrentCount: 0];
|
[self setCurrentCount: 0];
|
||||||
[self setTotalCount: [roms count]];
|
[self setTotalCount: [roms count]];
|
||||||
@ -207,16 +247,18 @@ enum {
|
|||||||
|
|
||||||
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [roms count]];
|
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity: [roms count]];
|
||||||
unsigned ix = 0;
|
unsigned ix = 0;
|
||||||
for (NSString *name in roms) {
|
for (NSDictionary *d in roms) {
|
||||||
|
|
||||||
DownloadItem *item = [DownloadItem new];
|
DownloadItem *item = [DownloadItem new];
|
||||||
[item setName: name];
|
[item setValue: [d objectForKey: @"value"]];
|
||||||
|
[item setName: [d objectForKey: @"description"]];
|
||||||
[item setIndex: ix++];
|
[item setIndex: ix++];
|
||||||
|
|
||||||
[tmp addObject: item];
|
[tmp addObject: item];
|
||||||
}
|
}
|
||||||
_items = tmp;
|
_items = tmp;
|
||||||
[self refreshROMs: nil];
|
[self refreshROMs: nil];
|
||||||
|
[_arrayController setContent: _items];
|
||||||
|
|
||||||
//[_tableView reloadData];
|
//[_tableView reloadData];
|
||||||
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||||
@ -257,7 +299,7 @@ enum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSURLSessionDownloadTask *task;
|
NSURLSessionDownloadTask *task;
|
||||||
NSString *s = [item name];
|
NSString *s = [item value];
|
||||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||||
|
|
||||||
@ -278,7 +320,7 @@ enum {
|
|||||||
for (DownloadItem *item in _items) {
|
for (DownloadItem *item in _items) {
|
||||||
|
|
||||||
NSURLSessionDownloadTask *task;
|
NSURLSessionDownloadTask *task;
|
||||||
NSString *s = [item name];
|
NSString *s = [item value];
|
||||||
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
NSString *path = [s stringByAppendingPathExtension: _downloadExtension];
|
||||||
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
NSURL *url = [_downloadURL URLByAppendingPathComponent: path];
|
||||||
|
|
||||||
@ -299,8 +341,10 @@ enum {
|
|||||||
-(DownloadItem *)clickedItem {
|
-(DownloadItem *)clickedItem {
|
||||||
NSInteger row = [_tableView clickedRow];
|
NSInteger row = [_tableView clickedRow];
|
||||||
if (row < 0 || row >= [_items count]) return nil;
|
if (row < 0 || row >= [_items count]) return nil;
|
||||||
return [_items objectAtIndex: row];
|
return [[_arrayController arrangedObjects] objectAtIndex: row];
|
||||||
|
//return [_items objectAtIndex: row];
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
-(void)redrawRow: (NSUInteger)row {
|
-(void)redrawRow: (NSUInteger)row {
|
||||||
|
|
||||||
//NSRect r = [_tableView rectOfRow: row];
|
//NSRect r = [_tableView rectOfRow: row];
|
||||||
@ -311,7 +355,7 @@ enum {
|
|||||||
|
|
||||||
[_tableView reloadDataForRowIndexes: rIx columnIndexes: cIx];
|
[_tableView reloadDataForRowIndexes: rIx columnIndexes: cIx];
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
-(void)initializeExtensionMenu {
|
-(void)initializeExtensionMenu {
|
||||||
|
|
||||||
@ -336,6 +380,10 @@ enum {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void) defocus {
|
||||||
|
[[self window] makeFirstResponder: nil];
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - IBActions
|
#pragma mark - IBActions
|
||||||
|
|
||||||
-(IBAction)cancelAll:(id)sender {
|
-(IBAction)cancelAll:(id)sender {
|
||||||
@ -349,13 +397,11 @@ enum {
|
|||||||
[_taskIndex removeAllObjects];
|
[_taskIndex removeAllObjects];
|
||||||
[self setCurrentCount: 0];
|
[self setCurrentCount: 0];
|
||||||
[self setActive: NO];
|
[self setActive: NO];
|
||||||
|
|
||||||
[_tableView reloadData];
|
|
||||||
//[_tableView setNeedsDisplay: YES]; // doesn't work...
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)downloadMissing:(id)sender {
|
- (IBAction)downloadMissing:(id)sender {
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
BOOL delta = NO;
|
BOOL delta = NO;
|
||||||
for (DownloadItem *item in _items) {
|
for (DownloadItem *item in _items) {
|
||||||
NSURL *url = [item localURL];
|
NSURL *url = [item localURL];
|
||||||
@ -368,7 +414,6 @@ enum {
|
|||||||
|
|
||||||
if (delta) {
|
if (delta) {
|
||||||
[self setActive: YES];
|
[self setActive: YES];
|
||||||
[_tableView reloadData];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
- (IBAction)showRomFolder:(id)sender {
|
- (IBAction)showRomFolder:(id)sender {
|
||||||
@ -383,27 +428,27 @@ enum {
|
|||||||
NSFileManager *fm = [NSFileManager defaultManager];
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
|
||||||
for (DownloadItem *item in _items) {
|
for (DownloadItem *item in _items) {
|
||||||
NSString *name = [item name];
|
NSDictionary *attr = nil;
|
||||||
NSString *s = [romdir stringByAppendingPathComponent: name];
|
NSString *value = [item value];
|
||||||
|
NSString *s = [romdir stringByAppendingPathComponent: value];
|
||||||
NSString *path;
|
NSString *path;
|
||||||
path = [s stringByAppendingPathExtension: @"zip"];
|
|
||||||
if ([fm fileExistsAtPath: path]) {
|
for (unsigned i = 0; i < 2; ++i) {
|
||||||
[item setStatus: ItemFound];
|
path = [s stringByAppendingPathExtension: Extensions[i]];
|
||||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
attr = [fm attributesOfItemAtPath: path error: nil];
|
||||||
continue;
|
if (attr) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
path = [s stringByAppendingPathExtension: @"7z"];
|
if (attr) {
|
||||||
if ([fm fileExistsAtPath: path]) {
|
|
||||||
[item setStatus: ItemFound];
|
[item setStatus: ItemFound];
|
||||||
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
[item setLocalURL: [NSURL fileURLWithPath: path]];
|
||||||
continue;
|
[item setFileSize: [attr fileSize]];
|
||||||
|
} else {
|
||||||
|
[item setStatus: ItemMissing];
|
||||||
|
[item setLocalURL: nil];
|
||||||
|
[item setFileSize: 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// only needed if items aren't bound.
|
|
||||||
[_tableView reloadData];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)showInFinder:(id)sender {
|
- (IBAction)showInFinder:(id)sender {
|
||||||
@ -416,20 +461,37 @@ enum {
|
|||||||
[ws activateFileViewerSelectingURLs: @[url]];
|
[ws activateFileViewerSelectingURLs: @[url]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)moveToTrash:(id)sender {
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
|
DownloadItem *item = [self clickedItem];
|
||||||
|
if (!item) return;
|
||||||
|
NSURL *url = [item localURL];
|
||||||
|
if (!url) return;
|
||||||
|
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
if ([fm trashItemAtURL: url resultingItemURL: NULL error: &error]) {
|
||||||
|
[item refresh: nil];
|
||||||
|
} else {
|
||||||
|
[self presentError: error];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)download:(id)sender {
|
- (IBAction)download:(id)sender {
|
||||||
DownloadItem *item = [self clickedItem];
|
DownloadItem *item = [self clickedItem];
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
|
|
||||||
[self downloadItem: item];
|
[self downloadItem: item];
|
||||||
[self setActive: YES];
|
[self setActive: YES];
|
||||||
[self redrawRow: [item index]];
|
|
||||||
}
|
}
|
||||||
- (IBAction)cancel:(id)sender {
|
- (IBAction)cancel:(id)sender {
|
||||||
DownloadItem *item = [self clickedItem];
|
DownloadItem *item = [self clickedItem];
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
|
|
||||||
[item cancelDownload];
|
[item cancelDownload];
|
||||||
[self redrawRow: [item index]];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// binding screws up with placeholder.
|
// binding screws up with placeholder.
|
||||||
@ -449,6 +511,35 @@ enum {
|
|||||||
[_defaults setValue: _downloadExtension forKey: kDownloadExtension];
|
[_defaults setValue: _downloadExtension forKey: kDownloadExtension];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (IBAction)filterButton:(id)sender {
|
||||||
|
|
||||||
|
NSPredicate *p = nil;
|
||||||
|
NSUInteger tag = [sender tag];
|
||||||
|
[sender setState: NSControlStateValueOn];
|
||||||
|
|
||||||
|
|
||||||
|
for (NSButton *b in _filterButtons) {
|
||||||
|
if (b != sender) [b setState: NSControlStateValueOff];
|
||||||
|
}
|
||||||
|
switch (tag) {
|
||||||
|
case 1: // all
|
||||||
|
default:
|
||||||
|
[_arrayController setFilterPredicate: nil];
|
||||||
|
break;
|
||||||
|
case 2: // missing.
|
||||||
|
p = [NSPredicate predicateWithBlock: ^BOOL(DownloadItem *item, NSDictionary *bindings){
|
||||||
|
NSURL *localURL = [item localURL];
|
||||||
|
return localURL == nil;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[_arrayController setFilterPredicate: p];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - NSURLSessionDelegate
|
#pragma mark - NSURLSessionDelegate
|
||||||
|
|
||||||
static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
||||||
@ -495,9 +586,6 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
|||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
[item completeWithError: error];
|
[item completeWithError: error];
|
||||||
NSUInteger row = [item index];
|
|
||||||
|
|
||||||
[self redrawRow: row];
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -521,106 +609,158 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
|||||||
|
|
||||||
[fm moveItemAtURL: location toURL: dest error: &error];
|
[fm moveItemAtURL: location toURL: dest error: &error];
|
||||||
|
|
||||||
DownloadItem *item = [_taskIndex objectForKey: task];
|
|
||||||
[item setLocalURL: dest];
|
|
||||||
|
|
||||||
/*
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||||
|
NSMutableDictionary *taskIndex = self->_taskIndex;
|
||||||
|
DownloadItem *item = [taskIndex objectForKey: task];
|
||||||
|
|
||||||
|
[item refresh: dest];
|
||||||
|
});
|
||||||
|
|
||||||
[item setLocalURL: dest];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
NSLog(@"%@", src);
|
NSLog(@"%@", src);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation DownloadWindowController (Table)
|
|
||||||
|
|
||||||
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
|
-(NSURLCredential *)credentialForChallenge: (NSURLAuthenticationChallenge *)challenge {
|
||||||
return [_items count];
|
|
||||||
|
|
||||||
|
//if ([challenge previousFailureCount]) return nil;
|
||||||
|
|
||||||
|
NSURLCredential *credential = nil;
|
||||||
|
NSURLProtectionSpace *space = [challenge protectionSpace];
|
||||||
|
|
||||||
|
|
||||||
|
OSStatus status;
|
||||||
|
NSDictionary *query;
|
||||||
|
CFTypeRef item = nil;
|
||||||
|
|
||||||
|
|
||||||
|
query = @{
|
||||||
|
(id)kSecClass: (id)kSecClassInternetPassword,
|
||||||
|
(id)kSecReturnData: (id)kCFBooleanTrue,
|
||||||
|
(id)kSecReturnAttributes: (id)kCFBooleanTrue,
|
||||||
|
(id)kSecAttrServer: [space host],
|
||||||
|
//(id)kSecAttrProtocol: [space protocol],
|
||||||
|
(id)kSecMatchLimit: (id)kSecMatchLimitOne,
|
||||||
|
};
|
||||||
|
|
||||||
|
status = SecItemCopyMatching((CFDictionaryRef)query, &item);
|
||||||
|
//NSLog(@"%@", query);
|
||||||
|
if (status != 0) return nil;
|
||||||
|
|
||||||
|
NSDictionary *d = (__bridge NSDictionary *)item;
|
||||||
|
//NSLog(@"%@", d);
|
||||||
|
|
||||||
|
NSString *account = [d objectForKey: (id)kSecAttrAccount];
|
||||||
|
NSData *passwordData = [d objectForKey: (id)kSecValueData];
|
||||||
|
NSString *password = [[NSString alloc] initWithData: passwordData encoding: NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
|
||||||
|
credential = [NSURLCredential credentialWithUser: account password: password persistence: NSURLCredentialPersistenceForSession];
|
||||||
|
|
||||||
|
return credential;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
|
||||||
|
|
||||||
return [_items objectAtIndex: row];
|
NSLog(@"challenge: %@", challenge);
|
||||||
|
|
||||||
|
if ([challenge previousFailureCount]) {
|
||||||
|
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSURLProtectionSpace *space = [challenge protectionSpace];
|
||||||
|
NSString *method = [space authenticationMethod];
|
||||||
|
|
||||||
|
if ([NSURLAuthenticationMethodHTTPBasic isEqualToString: method] ||
|
||||||
|
[NSURLAuthenticationMethodNTLM isEqualToString: method] ||
|
||||||
|
[NSURLAuthenticationMethodHTTPDigest isEqualToString: method]) {
|
||||||
|
|
||||||
|
NSURLCredential *credential = [self credentialForChallenge: challenge];
|
||||||
|
|
||||||
|
if (credential) {
|
||||||
|
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
|
|
||||||
|
|
||||||
DownloadItem *item = [_items objectAtIndex: row];
|
|
||||||
DownloadTableCellView *v = [tableView makeViewWithIdentifier: @"DownloadCell" owner: self];
|
|
||||||
|
|
||||||
NSTextField *tf;
|
|
||||||
NSColor *redColor = [NSColor systemRedColor];
|
|
||||||
|
|
||||||
tf = [v textField];
|
|
||||||
[[v textField] setObjectValue: [item name]];
|
|
||||||
|
|
||||||
if ([item localURL]) {
|
|
||||||
[tf setTextColor: nil];
|
|
||||||
} else {
|
|
||||||
[tf setTextColor: redColor];
|
|
||||||
}
|
|
||||||
|
|
||||||
tf = [v statusTextField];
|
|
||||||
[tf setObjectValue: [item statusDescription]];
|
|
||||||
if ([item error]) {
|
|
||||||
[tf setTextColor: redColor];
|
|
||||||
} else {
|
|
||||||
[tf setTextColor: nil];
|
|
||||||
//if ([tableView isRowSelected: row]){
|
|
||||||
//[tf setTextColor: [NSColor whiteColor]];
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ([item task]) {
|
|
||||||
[[v activity] startAnimation: nil];
|
|
||||||
} else {
|
|
||||||
[[v activity] stopAnimation: nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@implementation DownloadTableCellView
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation DownloadItem
|
@implementation DownloadItem
|
||||||
|
|
||||||
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task {
|
-(void)beginDownloadWithTask:(NSURLSessionDownloadTask *)task {
|
||||||
_task = task;
|
[self setTask: task];
|
||||||
_error = nil;
|
[self setError: nil];
|
||||||
if (task) _status = ItemDownloading;
|
if (task) [self setStatus: ItemDownloading];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)cancelDownload {
|
-(void)cancelDownload {
|
||||||
if (!_task) return;
|
if (!_task) return;
|
||||||
|
|
||||||
[_task cancel];
|
[_task cancel];
|
||||||
_task = nil;
|
[self setTask: nil];
|
||||||
_status = ItemCanceled;
|
[self setStatus: ItemCanceled];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)completeWithError: (NSError *)error {
|
-(void)completeWithError: (NSError *)error {
|
||||||
_task = nil;
|
[self setTask: nil];
|
||||||
if (error) {
|
if (error) {
|
||||||
_error = error;
|
[self setError: error];
|
||||||
_status = ItemError;
|
[self setStatus: ItemError];
|
||||||
} else {
|
} else {
|
||||||
// what if there was an error moving it?
|
// what if there was an error moving it?
|
||||||
_error = nil;
|
[self setError: nil];
|
||||||
_status = ItemDownloaded;
|
[self setStatus: ItemDownloaded];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)refresh: (NSURL *)localURL {
|
||||||
|
NSDictionary *attr = nil;
|
||||||
|
NSError * error = nil;
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
|
||||||
|
if (localURL) {
|
||||||
|
attr = [fm attributesOfItemAtPath: [localURL path] error: &error];
|
||||||
|
} else {
|
||||||
|
NSString *romdir = [SupportDirectoryPath() stringByAppendingPathComponent: @"roms"];
|
||||||
|
NSString *s = [romdir stringByAppendingPathComponent: _value];
|
||||||
|
|
||||||
|
NSString *path = nil;
|
||||||
|
for (unsigned i = 0; i < 2; ++i) {
|
||||||
|
path = [s stringByAppendingPathExtension: Extensions[i]];
|
||||||
|
attr = [fm attributesOfItemAtPath: path error: nil];
|
||||||
|
if (attr) {
|
||||||
|
localURL = [NSURL fileURLWithPath: path];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attr && localURL) {
|
||||||
|
[self setLocalURL: localURL];
|
||||||
|
[self setFileSize: [attr fileSize]];
|
||||||
|
[self setStatus: ItemFound];
|
||||||
|
} else {
|
||||||
|
[self setLocalURL: nil];
|
||||||
|
[self setFileSize: 0];
|
||||||
|
if (_status == ItemFound || _status == ItemDownloaded)
|
||||||
|
[self setStatus: ItemMissing];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSSet *)keyPathsForValuesAffectingStatusDescription {
|
||||||
|
return [NSSet setWithObjects: @"error", @"status", nil];
|
||||||
|
}
|
||||||
-(NSString *)statusDescription {
|
-(NSString *)statusDescription {
|
||||||
|
|
||||||
static NSString *Names[] = {
|
static NSString *Names[] = {
|
||||||
@ -637,6 +777,19 @@ static NSInteger TaskStatusCode(NSURLSessionTask *task) {
|
|||||||
return Names[_status];
|
return Names[_status];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+(NSSet *)keyPathsForValuesAffectingTitleColor {
|
||||||
|
return [NSSet setWithObject: @"localURL"];
|
||||||
|
}
|
||||||
|
-(NSColor *)titleColor {
|
||||||
|
return _localURL ? nil : [NSColor systemRedColor];
|
||||||
|
}
|
||||||
|
+(NSSet *)keyPathsForValuesAffectingDescriptionColor {
|
||||||
|
return [NSSet setWithObject: @"error"];
|
||||||
|
}
|
||||||
|
-(NSColor *)descriptionColor {
|
||||||
|
return _error ? [NSColor systemRedColor] : nil;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@ -651,26 +804,33 @@ enum {
|
|||||||
|
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
||||||
|
|
||||||
if ([menuItem action] == @selector(downloadExtensionChanged:)) return YES;
|
SEL action = [menuItem action];
|
||||||
|
if (action == @selector(downloadExtensionChanged:)) return YES;
|
||||||
|
|
||||||
|
DownloadItem *item = [self clickedItem];
|
||||||
|
if (!item) return NO;
|
||||||
|
#if 0
|
||||||
NSInteger row = [_tableView clickedRow];
|
NSInteger row = [_tableView clickedRow];
|
||||||
if (row < 0) return NO;
|
if (row < 0) return NO;
|
||||||
DownloadItem *item = [_items objectAtIndex: row];
|
DownloadItem *item = [[_arrayController arrangedObjects] objectAtIndex: row]; //[_items objectAtIndex: row];
|
||||||
|
#endif
|
||||||
|
|
||||||
NSUInteger status = [item status];
|
NSUInteger status = [item status];
|
||||||
switch([menuItem tag]) {
|
|
||||||
case kOpenInFinder:
|
|
||||||
return status == ItemFound || status == ItemDownloaded;
|
|
||||||
break;
|
|
||||||
case kDownload:
|
|
||||||
return YES;
|
|
||||||
//return status == ItemMissing || status == ItemError || status == ItemCanceled;
|
|
||||||
break;
|
|
||||||
case kCancel:
|
|
||||||
return status == ItemDownloading;
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
if (action == @selector(moveToTrash:)) {
|
||||||
|
return [item localURL] != nil;
|
||||||
}
|
}
|
||||||
|
if (action == @selector(showInFinder:)) {
|
||||||
|
return [item localURL] != nil;
|
||||||
|
}
|
||||||
|
if (action == @selector(download:)) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if (action == @selector(cancel:)) {
|
||||||
|
return status == ItemDownloading;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,10 +47,12 @@
|
|||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>LSApplicationCategoryType</key>
|
||||||
|
<string>public.app-category.utilities</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2020 Kelvin Sherlock. All rights reserved.</string>
|
<string>Copyright © 2020-2023 Kelvin Sherlock. All rights reserved.</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
@ -58,6 +60,10 @@
|
|||||||
<key>NSSupportsAutomaticTermination</key>
|
<key>NSSupportsAutomaticTermination</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSSupportsSuddenTermination</key>
|
<key>NSSupportsSuddenTermination</key>
|
||||||
<true/>
|
<false/>
|
||||||
|
<key>SUFeedURL</key>
|
||||||
|
<string>https://ample.ksherlock.com/updates/appcast.xml</string>
|
||||||
|
<key>SUPublicEDKey</key>
|
||||||
|
<string>MgYKY5J1nIJ9+C3IabG24ri2M0CuoMqP78fva2GI5BY=</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface LaunchWindowController : NSWindowController <NSBrowserDelegate>
|
@interface LaunchWindowController : NSWindowController <NSBrowserDelegate, NSMenuDelegate>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -9,21 +9,31 @@
|
|||||||
#import "Ample.h"
|
#import "Ample.h"
|
||||||
#import "LaunchWindowController.h"
|
#import "LaunchWindowController.h"
|
||||||
#import "MediaViewController.h"
|
#import "MediaViewController.h"
|
||||||
#import "NewSlotViewController.h"
|
#import "SlotViewController.h"
|
||||||
#import "MachineViewController.h"
|
#import "NewMachineViewController.h"
|
||||||
#import "LogWindowController.h"
|
#import "LogWindowController.h"
|
||||||
|
|
||||||
|
#import "AutocompleteControl.h"
|
||||||
|
#import "SoftwareList.h"
|
||||||
|
#import "BookmarkManager.h"
|
||||||
|
#import "Bookmark.h"
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
|
||||||
static NSString *kMyContext = @"kMyContext";
|
static NSString *kMyContext = @"kMyContext";
|
||||||
static NSString *kContextMachine = @"kContextMachine";
|
static NSString *kContextMachine = @"kContextMachine";
|
||||||
|
|
||||||
|
|
||||||
@interface LaunchWindowController ()
|
@interface LaunchWindowController () {
|
||||||
|
BOOL _loadingBookmark;
|
||||||
|
NSString *_machine;
|
||||||
|
NSDictionary *_machineDescription;
|
||||||
|
BookmarkManager *_manager;
|
||||||
|
}
|
||||||
@property (strong) IBOutlet MediaViewController *mediaController;
|
@property (strong) IBOutlet MediaViewController *mediaController;
|
||||||
@property (strong) IBOutlet NewSlotViewController *slotController;
|
@property (strong) IBOutlet SlotViewController *slotController;
|
||||||
@property (strong) IBOutlet MachineViewController *machineViewController;
|
@property (strong) IBOutlet NewMachineViewController *machineViewController;
|
||||||
|
|
||||||
@property (weak) IBOutlet NSView *machineView;
|
@property (weak) IBOutlet NSView *machineView;
|
||||||
@property (weak) IBOutlet NSView *slotView;
|
@property (weak) IBOutlet NSView *slotView;
|
||||||
@ -33,31 +43,104 @@ static NSString *kContextMachine = @"kContextMachine";
|
|||||||
@property NSString *commandLine;
|
@property NSString *commandLine;
|
||||||
@property NSArray *args;
|
@property NSArray *args;
|
||||||
|
|
||||||
@property NSString *mameMachine;
|
@property NSString *machine;
|
||||||
|
//@property NSString *machineName;
|
||||||
|
|
||||||
@property BOOL mameDebug;
|
@property BOOL mameDebug;
|
||||||
@property BOOL mameSquarePixels;
|
@property BOOL mameSquarePixels;
|
||||||
@property BOOL mameMouse;
|
@property BOOL mameMouse;
|
||||||
@property BOOL mameSamples;
|
@property BOOL mameSamples;
|
||||||
|
@property BOOL mameBGFX;
|
||||||
|
@property BOOL mameRewind;
|
||||||
|
|
||||||
@property BOOL mameAVI;
|
@property BOOL mameAVI;
|
||||||
@property BOOL mameWAV;
|
@property BOOL mameWAV;
|
||||||
@property BOOL mameVGM;
|
@property BOOL mameVGM;
|
||||||
|
@property BOOL mameBitBanger;
|
||||||
|
@property BOOL mameShareDirectory;
|
||||||
|
|
||||||
@property NSString *mameAVIPath;
|
@property NSString *mameAVIPath;
|
||||||
@property NSString *mameWAVPath;
|
@property NSString *mameWAVPath;
|
||||||
@property NSString *mameVGMPath;
|
@property NSString *mameVGMPath;
|
||||||
|
@property NSString *mameShareDirectoryPath;
|
||||||
|
@property NSString *mameBitBangerPath;
|
||||||
|
|
||||||
@property NSInteger mameSpeed;
|
@property NSInteger mameSpeed;
|
||||||
|
|
||||||
@property BOOL mameBGFX;
|
|
||||||
@property NSInteger mameBackend;
|
@property NSInteger mameBackend;
|
||||||
@property NSInteger mameEffects;
|
@property NSInteger mameEffects;
|
||||||
|
|
||||||
|
|
||||||
@property NSInteger mameWindowMode;
|
@property NSInteger mameWindowMode;
|
||||||
|
|
||||||
|
@property (weak) IBOutlet AutocompleteControl *softwareListControl;
|
||||||
|
@property SoftwareSet *softwareSet;
|
||||||
|
@property Software *software;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@property (strong) IBOutlet NSWindow *addBookmarkWindow;
|
||||||
|
@property (strong) NSString *bookmarkName;
|
||||||
|
@property BOOL bookmarkDefault;
|
||||||
|
@property (weak) IBOutlet NSTextField *bookmarkTextField;
|
||||||
|
@property (weak) IBOutlet NSTextField *bookmarkErrorField;
|
||||||
|
|
||||||
|
@property BOOL optionKey;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface LaunchWindowController (SoftwareList)
|
||||||
|
|
||||||
|
-(void)updateSoftwareList;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface LaunchWindowController (Bookmark)
|
||||||
|
|
||||||
|
-(IBAction)addBookmark:(id)sender;
|
||||||
|
|
||||||
|
-(IBAction)defaultLoad:(id)sender;
|
||||||
|
|
||||||
|
-(void)bookmarkNotification: (NSNotification *)notification;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||||
|
static NSString *BackendStrings[] = {
|
||||||
|
@"",
|
||||||
|
@"metal",
|
||||||
|
@"opengl",
|
||||||
|
};
|
||||||
|
|
||||||
|
static NSString *EffectsStrings[] = {
|
||||||
|
@"-",
|
||||||
|
@"unfiltered",
|
||||||
|
@"hlsl",
|
||||||
|
@"crt-geom",
|
||||||
|
@"crt-geom-deluxe",
|
||||||
|
@"lcd-grid",
|
||||||
|
@"Fighters",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int BackEndIndex(NSString *str) {
|
||||||
|
if (!str) return -1;
|
||||||
|
for (int i = 1; i < SIZEOF(BackendStrings); ++i) {
|
||||||
|
if ([str isEqualToString: BackendStrings[i]]) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int EffectsIndex(NSString *str) {
|
||||||
|
if (!str) return -1;
|
||||||
|
for (int i = 1; i < SIZEOF(EffectsStrings); ++i) {
|
||||||
|
if ([str isEqualToString: EffectsStrings[i]]) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@implementation LaunchWindowController
|
@implementation LaunchWindowController
|
||||||
|
|
||||||
@ -65,33 +148,93 @@ static NSString *kContextMachine = @"kContextMachine";
|
|||||||
return @"LaunchWindow";
|
return @"LaunchWindow";
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)windowWillLoad {
|
-(void)reset {
|
||||||
|
// handled elsewhere.
|
||||||
|
//[self setMachine: nil];
|
||||||
|
|
||||||
[self setMameSpeed: 1];
|
[self setMameSpeed: 1];
|
||||||
[self setMameBGFX: YES];
|
[self setMameBGFX: YES];
|
||||||
[self setMameMouse: NO];
|
[self setMameMouse: NO];
|
||||||
[self setMameSamples: YES];
|
[self setMameSamples: NO];
|
||||||
|
[self setMameSquarePixels: NO];
|
||||||
|
[self setMameDebug: NO];
|
||||||
|
[self setMameRewind: NO];
|
||||||
|
[self setMameWindowMode: 1]; // default = 1x window.
|
||||||
|
|
||||||
|
[self setMameBackend: 0];
|
||||||
|
[self setMameEffects: 0];
|
||||||
|
|
||||||
|
[self setMameBitBangerPath: nil];
|
||||||
|
[self setMameShareDirectoryPath: nil];
|
||||||
|
[self setMameAVIPath: nil];
|
||||||
|
[self setMameWAVPath: nil];
|
||||||
|
[self setMameVGMPath: nil];
|
||||||
|
|
||||||
|
[self setMameAVI: NO];
|
||||||
|
[self setMameWAV: NO];
|
||||||
|
[self setMameVGM: NO];
|
||||||
|
[self setMameBitBanger: NO];
|
||||||
|
[self setMameShareDirectory: NO];
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
[self setSoftware: nil];
|
||||||
|
//_softwareSet = nil;
|
||||||
|
[_softwareListControl setObjectValue: nil];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)resetSoftware {
|
||||||
|
[self setSoftware: nil];
|
||||||
|
//_softwareSet = nil;
|
||||||
|
[_softwareListControl setObjectValue: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)windowWillLoad {
|
||||||
|
|
||||||
|
_manager = [BookmarkManager sharedManager];
|
||||||
|
|
||||||
|
// if this calls [self window], it will recurse. that is bad.
|
||||||
|
//[self defaultLoad: nil];
|
||||||
|
[self reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void AddSubview(NSView *parent, NSView *child) {
|
||||||
|
|
||||||
|
[child setFrame: [parent bounds]];
|
||||||
|
[parent addSubview: child];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)windowDidLoad {
|
- (void)windowDidLoad {
|
||||||
[super windowDidLoad];
|
[super windowDidLoad];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||||
|
|
||||||
|
AddSubview(_slotView, [_slotController view]);
|
||||||
|
AddSubview(_mediaView, [_mediaController view]);
|
||||||
|
AddSubview(_machineView, [_machineViewController view]);
|
||||||
|
|
||||||
[_slotView addSubview: [_slotController view]];
|
|
||||||
[_mediaView addSubview: [_mediaController view]];
|
[_softwareListControl setMinWidth: 250];
|
||||||
[_machineView addSubview: [_machineViewController view]];
|
[_softwareListControl setHidden: YES];
|
||||||
|
|
||||||
|
|
||||||
NSArray *keys = @[
|
NSArray *keys = @[
|
||||||
@"mameMachine", @"mameSquarePixels", @"mameWindowMode",
|
//@"mameMachine", // - handled
|
||||||
|
@"mameSquarePixels", @"mameWindowMode",
|
||||||
@"mameMouse", @"mameSamples",
|
@"mameMouse", @"mameSamples",
|
||||||
@"mameDebug",
|
@"mameDebug", @"mameRewind",
|
||||||
@"mameSpeed",
|
@"mameSpeed",
|
||||||
@"mameAVI", @"mameAVIPath",
|
@"mameAVI", @"mameAVIPath",
|
||||||
@"mameWAV", @"mameWAVPath",
|
@"mameWAV", @"mameWAVPath",
|
||||||
@"mameVGM", @"mameVGMPath",
|
@"mameVGM", @"mameVGMPath",
|
||||||
|
@"mameShareDirectory", @"mameShareDirectoryPath",
|
||||||
|
@"mameBitBanger", @"mameBitBangerPath",
|
||||||
@"mameBGFX", @"mameBackend", @"mameEffects",
|
@"mameBGFX", @"mameBackend", @"mameEffects",
|
||||||
|
@"software",
|
||||||
];
|
];
|
||||||
|
|
||||||
for (NSString *key in keys) {
|
for (NSString *key in keys) {
|
||||||
@ -106,17 +249,31 @@ static NSString *kContextMachine = @"kContextMachine";
|
|||||||
|
|
||||||
[_machineViewController addObserver: self forKeyPath: @"machine" options: 0 context: (__bridge void * _Nullable)kContextMachine];
|
[_machineViewController addObserver: self forKeyPath: @"machine" options: 0 context: (__bridge void * _Nullable)kContextMachine];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// can't be done until above views are set up.
|
||||||
|
[self defaultLoad: nil];
|
||||||
|
|
||||||
|
|
||||||
[self buildCommandLine];
|
[self buildCommandLine];
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
[nc addObserver: self selector: @selector(bookmarkNotification:) name: kNotificationBookmarkMagicRoute object: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
|
||||||
|
|
||||||
if (context == (__bridge void *)kMyContext) {
|
if (context == (__bridge void *)kMyContext) {
|
||||||
|
if (_loadingBookmark) return;
|
||||||
[self buildCommandLine];
|
[self buildCommandLine];
|
||||||
} else if (context == (__bridge void *)kContextMachine) {
|
} else if (context == (__bridge void *)kContextMachine) {
|
||||||
|
if (_loadingBookmark) return;
|
||||||
|
|
||||||
NSString *machine = [_machineViewController machine];
|
NSString *machine = [_machineViewController machine];
|
||||||
[self setMameMachine: machine];
|
[self setMachine: machine];
|
||||||
[_slotController setMachine: machine];
|
[_slotController setMachine: machine];
|
||||||
[self buildCommandLine];
|
[self buildCommandLine];
|
||||||
} else {
|
} else {
|
||||||
@ -126,6 +283,35 @@ static NSString *kContextMachine = @"kContextMachine";
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-(NSString *)machine {
|
||||||
|
return _machine;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)setMachine:(NSString *)machine {
|
||||||
|
if (_machine == machine) return;
|
||||||
|
_machine = machine;
|
||||||
|
_machineDescription = MameMachine(machine);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
[self setMachineName: [_machineDescription objectForKey: @"description"]];
|
||||||
|
#else
|
||||||
|
NSString *title = _machineDescription
|
||||||
|
? [NSString stringWithFormat: @"Ample – %@", [_machineDescription objectForKey: @"description"]]
|
||||||
|
: @"Ample";
|
||||||
|
|
||||||
|
[[self window] setTitle: title];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// enable/disable the right-click menu
|
||||||
|
NSWindow *window = [self window];
|
||||||
|
NSView *view = [window contentView];
|
||||||
|
if (_machine) [view setMenu: [window menu]];
|
||||||
|
else [view setMenu: nil];
|
||||||
|
|
||||||
|
|
||||||
|
// software list.
|
||||||
|
[self updateSoftwareList];
|
||||||
|
}
|
||||||
|
|
||||||
static NSString * JoinArguments(NSArray *argv, NSString *argv0) {
|
static NSString * JoinArguments(NSArray *argv, NSString *argv0) {
|
||||||
|
|
||||||
@ -267,7 +453,7 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
|
|
||||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
|
||||||
if (!_mameMachine) {
|
if (!_machine) {
|
||||||
[self setCommandLine: @""];
|
[self setCommandLine: @""];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -275,7 +461,7 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
NSMutableArray *argv = [NSMutableArray new];
|
NSMutableArray *argv = [NSMutableArray new];
|
||||||
|
|
||||||
//[argv addObject: @"mame"];
|
//[argv addObject: @"mame"];
|
||||||
[argv addObject: _mameMachine];
|
[argv addObject: _machine];
|
||||||
|
|
||||||
// -confirm_quit?
|
// -confirm_quit?
|
||||||
[argv addObject: @"-skip_gameinfo"];
|
[argv addObject: @"-skip_gameinfo"];
|
||||||
@ -288,7 +474,7 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
[argv addObject: @"-nosamples"];
|
[argv addObject: @"-nosamples"];
|
||||||
|
|
||||||
if (_mameDebug) [argv addObject: @"-debug"];
|
if (_mameDebug) [argv addObject: @"-debug"];
|
||||||
|
if (_mameRewind) [argv addObject: @"-rewind"];
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -336,26 +522,16 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
|
|
||||||
|
|
||||||
if (_mameBGFX) {
|
if (_mameBGFX) {
|
||||||
|
[argv addObject: @"-video"];
|
||||||
|
[argv addObject: @"bgfx"];
|
||||||
|
|
||||||
if (_mameBackend) {
|
if (_mameBackend) {
|
||||||
static NSString *Names[] = {
|
|
||||||
@"-",
|
|
||||||
@"metal",
|
|
||||||
@"opengl",
|
|
||||||
};
|
|
||||||
[argv addObject: @"-bgfx_backend"];
|
[argv addObject: @"-bgfx_backend"];
|
||||||
[argv addObject: Names[_mameBackend]];
|
[argv addObject: BackendStrings[_mameBackend]];
|
||||||
}
|
}
|
||||||
if (_mameEffects) {
|
if (_mameEffects) {
|
||||||
static NSString *Names[] = {
|
|
||||||
@"-",
|
|
||||||
@"unfiltered",
|
|
||||||
@"hlsl",
|
|
||||||
@"crt-geom",
|
|
||||||
@"crt-geom-deluxe",
|
|
||||||
@"lcd-grid",
|
|
||||||
};
|
|
||||||
[argv addObject: @"-bgfx_screen_chains"];
|
[argv addObject: @"-bgfx_screen_chains"];
|
||||||
[argv addObject: Names[_mameEffects]];
|
[argv addObject: EffectsStrings[_mameEffects]];
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -378,6 +554,12 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
[argv addObjectsFromArray: tmp];
|
[argv addObjectsFromArray: tmp];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// software *AFTER* slots so, eg, apple2ee has access to the superdrive.
|
||||||
|
if (_software) {
|
||||||
|
NSString *name = [_softwareSet nameForSoftware: _software];
|
||||||
|
if (name) [argv addObject: name];
|
||||||
|
}
|
||||||
|
|
||||||
if (_mameSpeed < 0) {
|
if (_mameSpeed < 0) {
|
||||||
[argv addObject: @"-nothrottle"];
|
[argv addObject: @"-nothrottle"];
|
||||||
} else if (_mameSpeed > 1) {
|
} else if (_mameSpeed > 1) {
|
||||||
@ -405,6 +587,16 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_mameShareDirectory && [_mameShareDirectoryPath length]) {
|
||||||
|
[argv addObject: @"-share_directory"];
|
||||||
|
[argv addObject: _mameShareDirectoryPath];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_mameBitBanger && [_mameBitBangerPath length]) {
|
||||||
|
[argv addObject: @"-bitbanger"];
|
||||||
|
[argv addObject: _mameBitBangerPath];
|
||||||
|
}
|
||||||
|
|
||||||
[self setCommandLine: JoinArguments(argv, nil)];
|
[self setCommandLine: JoinArguments(argv, nil)];
|
||||||
[self setArgs: argv];
|
[self setArgs: argv];
|
||||||
}
|
}
|
||||||
@ -415,24 +607,90 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
if (cmd == @selector(exportShellScript:)) {
|
if (cmd == @selector(exportShellScript:)) {
|
||||||
return [_args count] ? YES : NO;
|
return [_args count] ? YES : NO;
|
||||||
}
|
}
|
||||||
return [super validateMenuItem: menuItem];
|
if (cmd == @selector(addBookmark:)) {
|
||||||
|
return _machine ? YES : NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
//return [super validateMenuItem: menuItem]; // not implemented?
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)defocus {
|
||||||
|
[[self window] makeFirstResponder: nil]; // in case text is being edited...
|
||||||
}
|
}
|
||||||
|
|
||||||
# pragma mark - IBActions
|
# pragma mark - IBActions
|
||||||
|
|
||||||
- (IBAction)launchAction:(id)sender {
|
- (IBAction)launchAction:(id)sender {
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
if (![_args count]) return;
|
if (![_args count]) return;
|
||||||
|
|
||||||
[LogWindowController controllerForArgs: _args];
|
[LogWindowController controllerForArgs: _args];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (IBAction)listMedia:(id)sender {
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
|
if (!_machine) return;
|
||||||
|
|
||||||
|
NSMutableArray *argv = [NSMutableArray new];
|
||||||
|
|
||||||
|
[argv addObject: _machine];
|
||||||
|
[argv addObject: @"-listmedia"];
|
||||||
|
|
||||||
|
|
||||||
|
NSArray *tmp;
|
||||||
|
tmp = [_slotController args];
|
||||||
|
if ([tmp count]) {
|
||||||
|
[argv addObjectsFromArray: tmp];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
tmp = [_mediaController args];
|
||||||
|
if ([tmp count]) {
|
||||||
|
[argv addObjectsFromArray: tmp];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[LogWindowController controllerForArgs: argv close: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)listSlots:(id)sender {
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
|
if (!_machine) return;
|
||||||
|
|
||||||
|
NSMutableArray *argv = [NSMutableArray new];
|
||||||
|
|
||||||
|
[argv addObject: _machine];
|
||||||
|
[argv addObject: @"-listslots"];
|
||||||
|
|
||||||
|
|
||||||
|
NSArray *tmp;
|
||||||
|
tmp = [_slotController args];
|
||||||
|
if ([tmp count]) {
|
||||||
|
[argv addObjectsFromArray: tmp];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
tmp = [_mediaController args];
|
||||||
|
if ([tmp count]) {
|
||||||
|
[argv addObjectsFromArray: tmp];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[LogWindowController controllerForArgs: argv close: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
-(IBAction)exportShellScript: (id)sender {
|
-(IBAction)exportShellScript: (id)sender {
|
||||||
|
|
||||||
NSSavePanel *p = [NSSavePanel savePanel];
|
NSSavePanel *p = [NSSavePanel savePanel];
|
||||||
|
|
||||||
NSString *defaultName = [_mameMachine stringByAppendingString: @".sh"];
|
NSString *defaultName = [_machine stringByAppendingString: @".sh"];
|
||||||
|
|
||||||
[p setTitle: @"Export Shell Script"];
|
[p setTitle: @"Export Shell Script"];
|
||||||
[p setExtensionHidden: NO];
|
[p setExtensionHidden: NO];
|
||||||
@ -473,5 +731,333 @@ static NSString *ShellQuote(NSString *s) {
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(IBAction)resetMachine:(id)sender {
|
||||||
|
[self reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)resetAll:(id)sender {
|
||||||
|
|
||||||
|
[_manager setCurrentBookmark: nil];
|
||||||
|
[self reset];
|
||||||
|
[self resetSoftware];
|
||||||
|
[_slotController resetSlots: sender];
|
||||||
|
[_mediaController resetMedia: sender];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)resetMedia:(id)sender {
|
||||||
|
[_mediaController resetMedia: sender];
|
||||||
|
[_softwareListControl setObjectValue: nil];
|
||||||
|
[self setSoftware: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation LaunchWindowController (SoftwareList)
|
||||||
|
|
||||||
|
-(void)updateSoftwareList {
|
||||||
|
|
||||||
|
_softwareSet = [SoftwareSet softwareSetForMachine: _machine];
|
||||||
|
|
||||||
|
[_softwareListControl setAutocompleteDelegate: _softwareSet];
|
||||||
|
|
||||||
|
if (_softwareSet) {
|
||||||
|
[_softwareListControl invalidate];
|
||||||
|
[_softwareListControl setHidden: NO];
|
||||||
|
} else {
|
||||||
|
_software = nil;
|
||||||
|
[_softwareListControl setHidden: YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (IBAction)softwareChanged:(id)sender {
|
||||||
|
|
||||||
|
id o = [(NSControl *)sender objectValue];
|
||||||
|
//NSLog(@"%@", o);
|
||||||
|
[self setSoftware: o];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation LaunchWindowController (Bookmark)
|
||||||
|
|
||||||
|
-(IBAction)defaultSave:(id)sender {
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSDictionary *d = [self makeBookmark];
|
||||||
|
|
||||||
|
[_manager saveDefault: d];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)defaultLoad:(id)sender {
|
||||||
|
|
||||||
|
Bookmark *b = [_manager defaultBookmark];
|
||||||
|
|
||||||
|
if (!b) {
|
||||||
|
[self resetAll: sender];
|
||||||
|
[self setMachine: nil];
|
||||||
|
[_machineViewController reset];
|
||||||
|
[_slotController setMachine: nil];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
[self loadBookmark: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)updateBookmark: (id)sender {
|
||||||
|
|
||||||
|
Bookmark *b = [sender representedObject];
|
||||||
|
if (!b) return;
|
||||||
|
|
||||||
|
NSDictionary *d = [self makeBookmark];
|
||||||
|
[b setDictionary: d];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)addBookmark:(id)sender {
|
||||||
|
|
||||||
|
if (!_machine) return;
|
||||||
|
|
||||||
|
NSString *name = nil;
|
||||||
|
if (_machineDescription) name = [_machineDescription objectForKey:@"description"];
|
||||||
|
if (!name) name = _machine;
|
||||||
|
|
||||||
|
|
||||||
|
if (_software) {
|
||||||
|
name = [name stringByAppendingFormat: @" - %@", [_software title]];
|
||||||
|
}
|
||||||
|
|
||||||
|
name = [_manager uniqueBookmarkName: name];
|
||||||
|
|
||||||
|
[self setBookmarkName: name];
|
||||||
|
[self setBookmarkDefault: NO];
|
||||||
|
[_bookmarkTextField selectText: nil];
|
||||||
|
[_bookmarkErrorField setStringValue: @""];
|
||||||
|
|
||||||
|
[[self window] beginSheet: _addBookmarkWindow completionHandler: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)bookmarkCancel:(id)sender {
|
||||||
|
[[self window] endSheet: _addBookmarkWindow];
|
||||||
|
[_addBookmarkWindow orderOut: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)bookmarkSave:(id)sender {
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (![_manager validateName: _bookmarkName]) {
|
||||||
|
[_bookmarkTextField selectText: nil];
|
||||||
|
NSBeep();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
NSDictionary *d = [self makeBookmark];
|
||||||
|
NSError *e;
|
||||||
|
|
||||||
|
if (( e = [_manager saveBookmark: d name: _bookmarkName automatic: _bookmarkDefault])) {
|
||||||
|
// probably a duplicate name...
|
||||||
|
[_bookmarkTextField selectText: nil];
|
||||||
|
[_bookmarkErrorField setStringValue: [e localizedDescription]];
|
||||||
|
NSBeep();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[self window] endSheet: _addBookmarkWindow];
|
||||||
|
[_addBookmarkWindow orderOut: nil];
|
||||||
|
[self setBookmarkName: nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)bookmarkNotification: (NSNotification *)notification {
|
||||||
|
|
||||||
|
Bookmark *b = [notification object];
|
||||||
|
[self loadBookmark: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)bookmarkMenu:(id)sender {
|
||||||
|
|
||||||
|
// represented object is a Bookmark.
|
||||||
|
Bookmark *b = [sender representedObject];
|
||||||
|
[self loadBookmark: b];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)loadBookmark: (Bookmark *)b {
|
||||||
|
Class StringClass = [NSString class];
|
||||||
|
Class NumberClass = [NSNumber class];
|
||||||
|
|
||||||
|
NSDictionary *d = [b dictionary];
|
||||||
|
|
||||||
|
[_manager setCurrentBookmark: b];
|
||||||
|
|
||||||
|
NSString *machine = [d objectForKey: @"machine"];
|
||||||
|
if (!machine) return;
|
||||||
|
|
||||||
|
_loadingBookmark = YES;
|
||||||
|
[_machineViewController willLoadBookmark: d];
|
||||||
|
[_slotController willLoadBookmark: d];
|
||||||
|
[_mediaController willLoadBookmark: d];
|
||||||
|
|
||||||
|
[self reset];
|
||||||
|
[self resetSoftware];
|
||||||
|
|
||||||
|
[self setMachine: machine];
|
||||||
|
[self updateSoftwareList];
|
||||||
|
[_softwareListControl setObjectValue: nil]; // will reload the completion list.
|
||||||
|
|
||||||
|
NSString *str;
|
||||||
|
|
||||||
|
str = [d objectForKey: @"software"];
|
||||||
|
if ([str isKindOfClass: StringClass]) {
|
||||||
|
Software *s = [_softwareSet softwareForName: str];
|
||||||
|
if (s) {
|
||||||
|
[_softwareListControl setObjectValue: s];
|
||||||
|
[self setSoftware: s];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Boolean values.
|
||||||
|
NSNumber *n;
|
||||||
|
#undef _
|
||||||
|
#define _(a,b) n = [d objectForKey: a]; if ([n isKindOfClass: NumberClass]) [self b : [n boolValue]]
|
||||||
|
|
||||||
|
_(@"debug", setMameDebug);
|
||||||
|
_(@"rewind", setMameRewind);
|
||||||
|
_(@"squarePixels", setMameSquarePixels);
|
||||||
|
_(@"mouse", setMameMouse);
|
||||||
|
_(@"samples", setMameSamples);
|
||||||
|
_(@"bgfx", setMameBGFX);
|
||||||
|
|
||||||
|
// numeric values
|
||||||
|
// check if in range?
|
||||||
|
#undef _
|
||||||
|
#define _(a,b) n = [d objectForKey: a]; if ([n isKindOfClass: NumberClass]) [self b : [n intValue]]
|
||||||
|
|
||||||
|
_(@"windowMode", setMameWindowMode);
|
||||||
|
_(@"speed", setMameSpeed);
|
||||||
|
|
||||||
|
|
||||||
|
// string values
|
||||||
|
#undef _
|
||||||
|
#define _(a,b) str = [d objectForKey: a]; if ([str isKindOfClass: StringClass]) [self b : str]
|
||||||
|
|
||||||
|
_(@"shareDirectory", setMameShareDirectoryPath);
|
||||||
|
_(@"bitBanger", setMameBitBangerPath);
|
||||||
|
if ([_mameShareDirectoryPath length]) [self setMameShareDirectory: YES];
|
||||||
|
if ([_mameBitBangerPath length]) [self setMameBitBanger: YES];
|
||||||
|
|
||||||
|
_(@"AVIPath", setMameAVIPath);
|
||||||
|
_(@"WAVPath", setMameWAVPath);
|
||||||
|
_(@"VGMPath", setMameVGMPath);
|
||||||
|
if ([_mameAVIPath length]) [self setMameAVI: YES];
|
||||||
|
if ([_mameVGMPath length]) [self setMameVGM: YES];
|
||||||
|
if ([_mameWAVPath length]) [self setMameWAV: YES];
|
||||||
|
|
||||||
|
|
||||||
|
str = [d objectForKey: @"backend"];
|
||||||
|
if ([str isKindOfClass: [NSString class]]) {
|
||||||
|
int ix = BackEndIndex(str);
|
||||||
|
if (ix >= 0) [self setMameBackend: ix];
|
||||||
|
}
|
||||||
|
|
||||||
|
str = [d objectForKey: @"effects"];
|
||||||
|
if ([str isKindOfClass: [NSString class]]) {
|
||||||
|
int ix = EffectsIndex(str);
|
||||||
|
if (ix >= 0) [self setMameEffects: ix];
|
||||||
|
}
|
||||||
|
|
||||||
|
[_machineViewController loadBookmark: d];
|
||||||
|
[_slotController loadBookmark: d];
|
||||||
|
[_mediaController loadBookmark: d];
|
||||||
|
|
||||||
|
[_machineViewController didLoadBookmark: d];
|
||||||
|
[_slotController didLoadBookmark: d];
|
||||||
|
[_mediaController didLoadBookmark: d];
|
||||||
|
|
||||||
|
_loadingBookmark = NO;
|
||||||
|
|
||||||
|
[self buildCommandLine];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSDictionary *)makeBookmark {
|
||||||
|
|
||||||
|
[self defocus];
|
||||||
|
|
||||||
|
NSMutableDictionary *dict = [NSMutableDictionary new];
|
||||||
|
|
||||||
|
[dict setObject: _machine forKey: @"machine"];
|
||||||
|
[dict setObject: @232 forKey: @"version"];
|
||||||
|
[_machineViewController saveBookmark: dict];
|
||||||
|
[_slotController saveBookmark: dict];
|
||||||
|
[_mediaController saveBookmark: dict];
|
||||||
|
|
||||||
|
|
||||||
|
// Boolean values
|
||||||
|
#undef _
|
||||||
|
#define _(v,k) [dict setObject: v ? (NSObject *)kCFBooleanTrue : (NSObject *)kCFBooleanFalse forKey: k]
|
||||||
|
|
||||||
|
_(_mameDebug, @"debug");
|
||||||
|
_(_mameRewind, @"rewind");
|
||||||
|
_(_mameSquarePixels, @"squarePixels");
|
||||||
|
_(_mameMouse, @"mouse");
|
||||||
|
_(_mameSamples, @"samples");
|
||||||
|
_(_mameBGFX, @"bgfx");
|
||||||
|
|
||||||
|
// numeric values
|
||||||
|
#undef _
|
||||||
|
#define _(v,k) [dict setObject: @(v) forKey: k]
|
||||||
|
_(_mameWindowMode, @"windowMode");
|
||||||
|
_(_mameSpeed, @"speed");
|
||||||
|
|
||||||
|
// String values
|
||||||
|
#undef _
|
||||||
|
#define _(v,k) [dict setObject: v forKey: k]
|
||||||
|
|
||||||
|
if (_mameAVI && [_mameAVIPath length]) _(_mameAVIPath, @"AVIPath");
|
||||||
|
if (_mameWAV && [_mameWAVPath length]) _(_mameWAVPath, @"WAVPath");
|
||||||
|
if (_mameVGM && [_mameVGMPath length]) _(_mameVGMPath, @"VGMPath");
|
||||||
|
|
||||||
|
if (_mameShareDirectory && [_mameShareDirectoryPath length]) _(_mameShareDirectoryPath, @"shareDirectory");
|
||||||
|
if (_mameBitBanger && [_mameBitBangerPath length]) _(_mameBitBangerPath, @"bitBanger");
|
||||||
|
|
||||||
|
|
||||||
|
if (_software) _([_software fullName], @"software");
|
||||||
|
|
||||||
|
|
||||||
|
if (_mameBackend) _(BackendStrings[_mameBackend], @"backend");
|
||||||
|
if (_mameEffects) _(EffectsStrings[_mameEffects], @"effects");
|
||||||
|
|
||||||
|
|
||||||
|
return dict;
|
||||||
|
|
||||||
|
#undef _
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - NSMenuDelegate
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
-(void)menuNeedsUpdate:(NSMenu *)menu {
|
||||||
|
NSEventModifierFlags modifiers = [NSEvent modifierFlags];
|
||||||
|
|
||||||
|
[self setOptionKey: modifiers & NSEventModifierFlagOption ? YES : NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* doesn't trigger when menu is the first responder. */
|
||||||
|
-(void)flagsChanged:(NSEvent *)event {
|
||||||
|
NSEventModifierFlags modifiers = [event modifierFlags];
|
||||||
|
|
||||||
|
[self setOptionKey: modifiers & NSEventModifierFlagOption ? YES : NO];
|
||||||
|
|
||||||
|
[super flagsChanged: event];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@end
|
||||||
|
@ -12,8 +12,13 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
@interface LogWindowController : NSWindowController <NSWindowDelegate>
|
@interface LogWindowController : NSWindowController <NSWindowDelegate>
|
||||||
|
|
||||||
|
#if 0
|
||||||
+(id)controllerForTask: (NSTask *)task;
|
+(id)controllerForTask: (NSTask *)task;
|
||||||
|
+(id)controllerForTask: (NSTask *)task close: (BOOL)close;
|
||||||
|
#endif
|
||||||
|
|
||||||
+(id)controllerForArgs: (NSArray *)args;
|
+(id)controllerForArgs: (NSArray *)args;
|
||||||
|
+(id)controllerForArgs: (NSArray *)args close: (BOOL)close;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@ -19,6 +19,10 @@ static NSMutableSet *LogWindows;
|
|||||||
@implementation LogWindowController {
|
@implementation LogWindowController {
|
||||||
NSTask *_task;
|
NSTask *_task;
|
||||||
NSFileHandle *_handle;
|
NSFileHandle *_handle;
|
||||||
|
NSFont *_font;
|
||||||
|
|
||||||
|
BOOL _close;
|
||||||
|
BOOL _eof;
|
||||||
}
|
}
|
||||||
|
|
||||||
+(void)initialize {
|
+(void)initialize {
|
||||||
@ -30,17 +34,14 @@ static NSMutableSet *LogWindows;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
+(id)controllerForTask: (NSTask *)task {
|
+(id)controllerForTask: (NSTask *)task close: (BOOL)close{
|
||||||
LogWindowController *controller = [[LogWindowController alloc] initWithWindowNibName: @"LogWindow"];
|
LogWindowController *controller = [[LogWindowController alloc] initWithWindowNibName: @"LogWindow"];
|
||||||
[controller runTask: task];
|
[controller runTask: task close: close];
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+(id)controllerForArgs: (NSArray *)args close: (BOOL)close {
|
||||||
+(id)controllerForArgs: (NSArray *)args {
|
|
||||||
|
|
||||||
// NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
|
||||||
|
|
||||||
NSURL *url = MameURL();
|
NSURL *url = MameURL();
|
||||||
|
|
||||||
@ -53,11 +54,26 @@ static NSMutableSet *LogWindows;
|
|||||||
}
|
}
|
||||||
|
|
||||||
NSTask *task = [NSTask new];
|
NSTask *task = [NSTask new];
|
||||||
[task setExecutableURL: url];
|
|
||||||
[task setArguments: args];
|
|
||||||
[task setCurrentDirectoryURL: MameWorkingDirectory()];
|
|
||||||
|
|
||||||
return [LogWindowController controllerForTask: task];
|
if (@available(macOS 10.13, *)) {
|
||||||
|
[task setExecutableURL: url];
|
||||||
|
[task setCurrentDirectoryURL: MameWorkingDirectory()];
|
||||||
|
} else {
|
||||||
|
[task setLaunchPath: MamePath()];
|
||||||
|
[task setCurrentDirectoryPath: MameWorkingDirectoryPath()];
|
||||||
|
}
|
||||||
|
|
||||||
|
[task setArguments: args];
|
||||||
|
|
||||||
|
return [LogWindowController controllerForTask: task close: close];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
+(id)controllerForArgs: (NSArray *)args {
|
||||||
|
|
||||||
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
BOOL close = [defaults boolForKey: kAutoCloseLogWindow];
|
||||||
|
return [self controllerForArgs: args close: close];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)windowDidLoad {
|
- (void)windowDidLoad {
|
||||||
@ -65,7 +81,8 @@ static NSMutableSet *LogWindows;
|
|||||||
|
|
||||||
[LogWindows addObject: self];
|
[LogWindows addObject: self];
|
||||||
|
|
||||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
_font = [NSFont userFixedPitchFontOfSize: 0];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)appendString: (NSString *)string
|
-(void)appendString: (NSString *)string
|
||||||
@ -73,39 +90,61 @@ static NSMutableSet *LogWindows;
|
|||||||
if ([string length])
|
if ([string length])
|
||||||
{
|
{
|
||||||
// needs explicit color attribute for proper dark mode support.
|
// needs explicit color attribute for proper dark mode support.
|
||||||
NSDictionary *attr = @{ NSForegroundColorAttributeName: [NSColor textColor] };
|
NSDictionary *attr = @{
|
||||||
|
NSForegroundColorAttributeName: [NSColor textColor],
|
||||||
|
NSFontAttributeName: _font,
|
||||||
|
};
|
||||||
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||||
[[_textView textStorage] appendAttributedString: astr];
|
[[_textView textStorage] appendAttributedString: astr];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(NSError *)runTask: (NSTask *)task {
|
-(void)appendAttributedString: (NSAttributedString *)string {
|
||||||
|
|
||||||
|
if ([string length]) {
|
||||||
|
[[_textView textStorage] appendAttributedString: string];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSError *)runTask: (NSTask *)task close: (BOOL)close {
|
||||||
|
|
||||||
|
|
||||||
if (_task) return nil;
|
if (_task) return nil;
|
||||||
|
_close = close;
|
||||||
|
_eof = NO;
|
||||||
|
|
||||||
NSError *error = nil;
|
|
||||||
NSPipe *pipe = [NSPipe pipe];
|
NSPipe *pipe = [NSPipe pipe];
|
||||||
|
|
||||||
// window not yet loaded until [self window] called.
|
// window not yet loaded until [self window] called.
|
||||||
const char *path = [[task executableURL] fileSystemRepresentation];
|
|
||||||
// if (cp) [self appendString: [NSString stringWithFormat: @"MAME path: %s", cp]];
|
const char *path = nil;
|
||||||
const char *wd = [[task currentDirectoryURL] fileSystemRepresentation];
|
const char *wd = nil;
|
||||||
// if (cp) [self appendString: [NSString stringWithFormat: @"Working Directory: %s", cp]];
|
|
||||||
|
|
||||||
[task setStandardError: pipe];
|
[task setStandardError: pipe];
|
||||||
[task setStandardOutput: pipe];
|
[task setStandardOutput: pipe];
|
||||||
[task launchAndReturnError: &error];
|
if (@available(macOS 10.13, *)) {
|
||||||
|
NSError *error = nil;
|
||||||
|
path = [[task executableURL] fileSystemRepresentation];
|
||||||
|
wd = [[task currentDirectoryURL] fileSystemRepresentation];
|
||||||
|
|
||||||
|
[task launchAndReturnError: &error];
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"NSTask error. Path = %s error = %@", path, error);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
path = [[task launchPath] fileSystemRepresentation];
|
||||||
|
wd = [[task currentDirectoryPath] fileSystemRepresentation];
|
||||||
|
@try {
|
||||||
|
[task launch];
|
||||||
|
} @catch (NSException *exception) {
|
||||||
|
|
||||||
if (error) {
|
NSLog(@"NSTask exception. Path = %s exception = %@", path, exception);
|
||||||
// NSURL *url = [task executableURL];
|
return nil; // ?
|
||||||
// NSString *path = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
}
|
||||||
NSLog(@"NSTask error. Path = %s error = %@", path, error);
|
|
||||||
// [self appendString: path];
|
|
||||||
// [self appendString: [error description]];
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_task = task;
|
_task = task;
|
||||||
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
NSString *title = [NSString stringWithFormat: @"Ample Log - %u", [task processIdentifier]];
|
||||||
[[self window] setTitle: title];
|
[[self window] setTitle: title];
|
||||||
@ -116,6 +155,7 @@ static NSMutableSet *LogWindows;
|
|||||||
|
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
|
||||||
[nc addObserver: self
|
[nc addObserver: self
|
||||||
selector: @selector(taskComplete:)
|
selector: @selector(taskComplete:)
|
||||||
name: NSTaskDidTerminateNotification
|
name: NSTaskDidTerminateNotification
|
||||||
@ -126,6 +166,7 @@ static NSMutableSet *LogWindows;
|
|||||||
object: _handle];
|
object: _handle];
|
||||||
|
|
||||||
[_handle readInBackgroundAndNotify];
|
[_handle readInBackgroundAndNotify];
|
||||||
|
|
||||||
[[self window] setDocumentEdited: YES];
|
[[self window] setDocumentEdited: YES];
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
@ -141,18 +182,30 @@ static NSMutableSet *LogWindows;
|
|||||||
|
|
||||||
if ([data length])
|
if ([data length])
|
||||||
{
|
{
|
||||||
|
|
||||||
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
|
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
|
||||||
|
|
||||||
[self appendString: string];
|
[self appendString: string];
|
||||||
|
|
||||||
[_handle readInBackgroundAndNotify];
|
[_handle readInBackgroundAndNotify];
|
||||||
|
} else {
|
||||||
|
[self appendString: @"\n"]; // -listmedia sometimes causes display issues.
|
||||||
|
_eof = YES;
|
||||||
|
//[_textView setNeedsDisplay: YES]; // -listmedia sometimes weird.
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)taskCompleteHack {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* hask! task complete may occur while output still being processed. add a delay to compensate. */
|
||||||
-(void)taskComplete: (NSNotification *)notification
|
-(void)taskComplete: (NSNotification *)notification
|
||||||
{
|
{
|
||||||
|
if (!_eof) {
|
||||||
|
[self performSelector: @selector(taskComplete:) withObject: notification afterDelay: 0.5];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL ok = NO;
|
BOOL ok = NO;
|
||||||
NSTaskTerminationReason reason;
|
NSTaskTerminationReason reason;
|
||||||
int status;
|
int status;
|
||||||
@ -166,7 +219,7 @@ static NSMutableSet *LogWindows;
|
|||||||
|
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
{
|
{
|
||||||
string = @"\n\n[Success]\n\n";
|
//string = @"\n\n[Success]\n\n";
|
||||||
ok = YES;
|
ok = YES;
|
||||||
}
|
}
|
||||||
else string = @"\n\n[An error occurred]\n\n";
|
else string = @"\n\n[An error occurred]\n\n";
|
||||||
@ -175,18 +228,22 @@ static NSMutableSet *LogWindows;
|
|||||||
{
|
{
|
||||||
string = [NSString stringWithFormat: @"\n\n[Caught signal %d (%s)]\n\n", status, strsignal(status)];
|
string = [NSString stringWithFormat: @"\n\n[Caught signal %d (%s)]\n\n", status, strsignal(status)];
|
||||||
}
|
}
|
||||||
|
if (string) {
|
||||||
[self appendString: string];
|
NSDictionary *attr = @{
|
||||||
|
NSForegroundColorAttributeName: [NSColor systemRedColor],
|
||||||
|
NSFontAttributeName: _font,
|
||||||
|
};
|
||||||
|
NSAttributedString *astr = [[NSAttributedString alloc] initWithString: string attributes: attr];
|
||||||
|
[self appendAttributedString: astr];
|
||||||
|
}
|
||||||
|
|
||||||
_handle = nil;
|
_handle = nil;
|
||||||
_task = nil;
|
_task = nil;
|
||||||
|
|
||||||
[[self window] setDocumentEdited: NO];
|
[[self window] setDocumentEdited: NO];
|
||||||
|
|
||||||
if (ok && [[NSUserDefaults standardUserDefaults] boolForKey: kAutoCloseLogWindow]) {
|
if (ok && _close) {
|
||||||
|
|
||||||
[[self window] close];
|
[[self window] close];
|
||||||
//[LogWindows removeObject: self]; // close sends WindowWillClose notification.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,4 +254,12 @@ static NSMutableSet *LogWindows;
|
|||||||
[LogWindows removeObject: self];
|
[LogWindows removeObject: self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - IBActions
|
||||||
|
|
||||||
|
- (IBAction)clearLog:(id)sender {
|
||||||
|
NSAttributedString *empty = [NSAttributedString new];
|
||||||
|
[[_textView textStorage] setAttributedString: empty];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "Ample.h"
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@ -17,4 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface MachineViewController (Bookmark) <Bookmark>
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@ -110,5 +110,67 @@
|
|||||||
return [data count];
|
return [data count];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MachineViewController (Bookmark)
|
||||||
|
|
||||||
|
-(BOOL)loadBookmark: (NSDictionary *)bookmark {
|
||||||
|
|
||||||
|
NSBrowser *browser = (NSBrowser *)[self view];
|
||||||
|
NSString *machine = [bookmark objectForKey: @"machine"];
|
||||||
|
|
||||||
|
NSIndexPath *path = nil;
|
||||||
|
NSUInteger ix[2] = {0, 0 };
|
||||||
|
for (NSDictionary *d in _data) {
|
||||||
|
|
||||||
|
NSArray *children = [d objectForKey: @"children"];
|
||||||
|
|
||||||
|
for (NSDictionary *dd in children) {
|
||||||
|
NSString *value = [dd objectForKey: @"value"];
|
||||||
|
|
||||||
|
if ([machine isEqualToString: value]) {
|
||||||
|
path = [NSIndexPath indexPathWithIndexes: ix length: 2];
|
||||||
|
[browser selectRow: ix[0] inColumn: 0];
|
||||||
|
[browser selectRow: ix[1] inColumn: 1];
|
||||||
|
|
||||||
|
//[browser setSelectionIndexPath: path];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
++ix[1];
|
||||||
|
}
|
||||||
|
ix[1] = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// check parent after.
|
||||||
|
NSString *value = [d objectForKey: @"value"];
|
||||||
|
if ([machine isEqualToString: value]) {
|
||||||
|
path = [NSIndexPath indexPathWithIndexes: ix length: 1];
|
||||||
|
[browser selectRow: ix[0] inColumn: 0];
|
||||||
|
// "setSelectionIndexPath: is not supported for browsers with matrix delegates."
|
||||||
|
//[browser setSelectionIndexPath: path];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
++ix[0];
|
||||||
|
|
||||||
|
}
|
||||||
|
NSLog(@"MachineViewController: Unable to find %@", machine);
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark {
|
||||||
|
// machine saved in parent.
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -17,8 +17,26 @@ typedef struct Media {
|
|||||||
unsigned floppy_5_25;
|
unsigned floppy_5_25;
|
||||||
unsigned floppy_3_5;
|
unsigned floppy_3_5;
|
||||||
unsigned pseudo_disk;
|
unsigned pseudo_disk;
|
||||||
|
unsigned bitbanger;
|
||||||
|
unsigned midiin;
|
||||||
|
unsigned midiout;
|
||||||
|
unsigned picture;
|
||||||
|
uint64_t floppy_mask;
|
||||||
} Media;
|
} Media;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MediaTypeError = -1,
|
||||||
|
MediaTypeUnknown = 0,
|
||||||
|
MediaType_5_25,
|
||||||
|
MediaType_3_5,
|
||||||
|
MediaType_HardDisk,
|
||||||
|
MediaType_CDROM,
|
||||||
|
MediaType_Cassette,
|
||||||
|
MediaType_Picture,
|
||||||
|
MediaType_MIDI,
|
||||||
|
} MediaType;
|
||||||
|
|
||||||
struct Media MediaFromDictionary(NSDictionary *);
|
struct Media MediaFromDictionary(NSDictionary *);
|
||||||
|
|
||||||
void MediaAdd(Media *dest, const Media *src);
|
void MediaAdd(Media *dest, const Media *src);
|
||||||
@ -27,4 +45,6 @@ BOOL MediaEqual(const Media *lhs, const Media *rhs);
|
|||||||
|
|
||||||
extern const Media EmptyMedia;
|
extern const Media EmptyMedia;
|
||||||
|
|
||||||
|
MediaType ClassifyMediaFile(id file);
|
||||||
|
|
||||||
#endif /* Media_h */
|
#endif /* Media_h */
|
||||||
|
247
Ample/Media.m
247
Ample/Media.m
@ -22,6 +22,10 @@ struct Media MediaFromDictionary(NSDictionary *dict) {
|
|||||||
_(floppy_3_5);
|
_(floppy_3_5);
|
||||||
_(floppy_5_25);
|
_(floppy_5_25);
|
||||||
_(pseudo_disk);
|
_(pseudo_disk);
|
||||||
|
_(bitbanger);
|
||||||
|
_(midiin);
|
||||||
|
_(midiout);
|
||||||
|
_(picture);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
#undef _
|
#undef _
|
||||||
@ -31,6 +35,12 @@ void MediaAdd(Media *dest, const Media *src) {
|
|||||||
|
|
||||||
if (!src || !dest) return;
|
if (!src || !dest) return;
|
||||||
|
|
||||||
|
// could merge from src media but not currently set there.
|
||||||
|
|
||||||
|
unsigned count;
|
||||||
|
unsigned flops = dest->floppy_5_25 + dest->floppy_3_5;
|
||||||
|
|
||||||
|
|
||||||
#define _(name) dest->name += src->name;
|
#define _(name) dest->name += src->name;
|
||||||
_(cass);
|
_(cass);
|
||||||
_(cdrom);
|
_(cdrom);
|
||||||
@ -38,7 +48,21 @@ void MediaAdd(Media *dest, const Media *src) {
|
|||||||
_(floppy_3_5);
|
_(floppy_3_5);
|
||||||
_(floppy_5_25);
|
_(floppy_5_25);
|
||||||
_(pseudo_disk);
|
_(pseudo_disk);
|
||||||
|
_(bitbanger);
|
||||||
|
_(midiin);
|
||||||
|
_(midiout);
|
||||||
|
_(picture);
|
||||||
#undef _
|
#undef _
|
||||||
|
|
||||||
|
|
||||||
|
if ((count = src->floppy_5_25)) {
|
||||||
|
uint64_t bits = (1 << count) - 1;
|
||||||
|
//dest->floppy_mask <<= count;
|
||||||
|
bits <<= flops;
|
||||||
|
dest->floppy_mask |= bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
||||||
@ -53,6 +77,229 @@ BOOL MediaEqual(const Media *lhs, const Media *rhs) {
|
|||||||
_(floppy_3_5);
|
_(floppy_3_5);
|
||||||
_(floppy_5_25);
|
_(floppy_5_25);
|
||||||
_(pseudo_disk);
|
_(pseudo_disk);
|
||||||
|
_(bitbanger);
|
||||||
|
_(midiin);
|
||||||
|
_(midiout);
|
||||||
|
_(picture);
|
||||||
|
|
||||||
|
_(floppy_mask);
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
#undef _
|
#undef _
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define _x2(a,b) (a | (b << 8))
|
||||||
|
#define _x3(a,b,c) (a | (b << 8) | (c << 16))
|
||||||
|
#define _x4(a,b,c, d) (a | (b << 8) | (c << 16) | (d << 24))
|
||||||
|
static unsigned hash(const char *cp) {
|
||||||
|
unsigned rv = 0;
|
||||||
|
int i, shift;
|
||||||
|
if (!cp) return 0;
|
||||||
|
for (i = 0, shift = 0; i < 4; ++i, shift += 8) {
|
||||||
|
unsigned c = cp[i];
|
||||||
|
if (!c) break;
|
||||||
|
c = tolower(c);
|
||||||
|
rv |= (c << shift);
|
||||||
|
}
|
||||||
|
//if (i > 4) return 0; // .image is 5....
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *extname(const char *path) {
|
||||||
|
|
||||||
|
const char *rv = NULL;
|
||||||
|
if (!path) return path;
|
||||||
|
for(unsigned i = 0; ; ++i) {
|
||||||
|
unsigned c = path[i];
|
||||||
|
if (c == 0) break;
|
||||||
|
if (c == '/') rv = NULL;
|
||||||
|
if (c == '.') rv = path + i + 1;
|
||||||
|
}
|
||||||
|
if (rv && !*rv) rv = NULL;
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MAME cares deeply about file extensions. LIST NOT EXHAUSTIVE
|
||||||
|
*
|
||||||
|
* Hard Disk: .chd .hd .hdv .2mg .hdi
|
||||||
|
* CD-ROM: .chd .cue .toc .nrg .gdi .iso .cdr
|
||||||
|
* 5.25: .dsk .do .po .edd .woz .nib .mfi .dfi .rti
|
||||||
|
* 3.5: .dc42 .woz .2mg .mfi .dfi .hfe .mfm .td0 .imd
|
||||||
|
.d77 .d88 .1dd .cqm .cqi .dsk .ima .img .ufi
|
||||||
|
.360 .ipf [also .po and .hdv]
|
||||||
|
* Midi in: .mid
|
||||||
|
* Midi out: .mid
|
||||||
|
* Picture: .png
|
||||||
|
* Cassette: .wav
|
||||||
|
*/
|
||||||
|
|
||||||
|
static bool is_raw_525(size_t disk_size) {
|
||||||
|
if (disk_size & 255) return NO;
|
||||||
|
size_t blocks = disk_size >> 8;
|
||||||
|
|
||||||
|
return blocks == 560 || blocks == 640;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL is_raw_35(size_t disk_size) {
|
||||||
|
if (disk_size & 511) return NO;
|
||||||
|
size_t blocks = disk_size >> 9;
|
||||||
|
|
||||||
|
return blocks == 800 || blocks == 1600 || blocks == 1440 || blocks == 2880;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MediaType is_woz(const uint8_t *buffer, size_t file_size) {
|
||||||
|
|
||||||
|
/* woz 1/2 ? */
|
||||||
|
if (!memcmp(buffer, "WOZ1\xff\x0a\x0d\x0a", 8) || !memcmp(buffer, "WOZ2\xff\x0a\x0d\x0a", 8)) {
|
||||||
|
|
||||||
|
if (!memcmp(buffer + 12, "INFO", 4)) {
|
||||||
|
unsigned type = buffer[21]; // 1 = 5.25, 2 = 3.5
|
||||||
|
if (type == 1) return MediaType_5_25;
|
||||||
|
if (type == 2) return MediaType_3_5;
|
||||||
|
}
|
||||||
|
return MediaTypeUnknown;
|
||||||
|
}
|
||||||
|
return MediaTypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MediaType is_dc42(const uint8_t *buffer, size_t file_size) {
|
||||||
|
|
||||||
|
if (buffer[0x52] == 0x01 && buffer[0x53] == 0x00 && buffer[0] >= 1 && buffer[0] <= 0x3f) {
|
||||||
|
int dsize = OSReadBigInt32(buffer, 0x40);
|
||||||
|
int tsize = OSReadBigInt32(buffer, 0x44);
|
||||||
|
if (dsize + tsize + 0x54 == file_size) {
|
||||||
|
if (is_raw_35(dsize)) return MediaType_3_5;
|
||||||
|
return MediaType_HardDisk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MediaTypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MediaType is_2img(const uint8_t *buffer, size_t file_size) {
|
||||||
|
|
||||||
|
if (!memcmp(buffer, "2IMG", 4)) {
|
||||||
|
int format = OSReadLittleInt32(buffer, 0x0c); // 0 - dos order, 1 = prodos order, 2 = nib data
|
||||||
|
int blocks = OSReadLittleInt32(buffer, 0x14); // prodos only.
|
||||||
|
//int bytes = OSReadLittleInt32(buffer, 0x1c);
|
||||||
|
|
||||||
|
if (format == 2 || format == 0) return MediaType_5_25; // nib and dos order
|
||||||
|
if (is_raw_525(blocks * 512)) return MediaType_5_25;
|
||||||
|
if (is_raw_35(blocks * 512)) return MediaType_3_5;
|
||||||
|
return MediaType_HardDisk; //
|
||||||
|
//return MediaTypeUnknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MediaTypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MediaType is_chd(const uint8_t *buffer, size_t file_size) {
|
||||||
|
if (!memcmp(buffer, "MComprHD", 8)) {
|
||||||
|
static int offsets[] = { 0, 0, 0, 28, 28, 32}; // offset for logival bytes.
|
||||||
|
int version = OSReadBigInt32(buffer, 12);
|
||||||
|
|
||||||
|
if (version >= 3 && version <= 5) {
|
||||||
|
long bytes = OSReadBigInt64(buffer, offsets[version]);
|
||||||
|
if (is_raw_525(bytes)) return MediaType_5_25;
|
||||||
|
if (is_raw_35(bytes)) return MediaType_3_5;
|
||||||
|
return MediaType_HardDisk; // iso?
|
||||||
|
}
|
||||||
|
return MediaTypeUnknown;
|
||||||
|
}
|
||||||
|
return MediaTypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MediaType ClassifyMediaFile(id file) {
|
||||||
|
|
||||||
|
struct stat st;
|
||||||
|
ssize_t size;
|
||||||
|
unsigned char buffer[128];
|
||||||
|
int fd;
|
||||||
|
const char *path = [file fileSystemRepresentation]; // or URL
|
||||||
|
const char *ext = extname(path);
|
||||||
|
unsigned ext_hash = hash(ext);
|
||||||
|
|
||||||
|
memset(&st, 0, sizeof(st));
|
||||||
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
|
||||||
|
fd = open(path, O_RDONLY);
|
||||||
|
if (fd < 0) return MediaTypeError;
|
||||||
|
fstat(fd, &st);
|
||||||
|
|
||||||
|
size = read(fd, buffer, sizeof(buffer));
|
||||||
|
close(fd);
|
||||||
|
if (size <= 0) return MediaTypeError;
|
||||||
|
|
||||||
|
// 13 sector support ? not on an event 512 block boundary.
|
||||||
|
// = 116480 bytes.
|
||||||
|
|
||||||
|
switch(ext_hash) {
|
||||||
|
case _x3('w', 'o', 'z'):
|
||||||
|
return is_woz(buffer, st.st_size);
|
||||||
|
|
||||||
|
case _x3('2', 'm', 'g'):
|
||||||
|
case _x4('2', 'i', 'm', 'g'):
|
||||||
|
return is_2img(buffer, st.st_size);
|
||||||
|
|
||||||
|
case _x3('c', 'h', 'd'):
|
||||||
|
return is_chd(buffer, st.st_size);
|
||||||
|
|
||||||
|
// dc42 - dc,dc42,dsk,img,image
|
||||||
|
case _x2('d', 'c'): // n.b. as of .233, allowed for mac, not for apple2
|
||||||
|
case _x4('d', 'c', '4', '2'):
|
||||||
|
return is_dc42(buffer, st.st_size);
|
||||||
|
|
||||||
|
// dsk, image, img may also be raw or disk copy.
|
||||||
|
case _x3('d', 's', 'k'):
|
||||||
|
case _x3('i', 'm', 'g'):
|
||||||
|
case _x4('i', 'm', 'a', 'g'):
|
||||||
|
|
||||||
|
if (is_raw_525(st.st_size)) return MediaType_5_25;
|
||||||
|
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||||
|
return is_dc42(buffer, st.st_size);
|
||||||
|
|
||||||
|
case _x2('d', 'o'):
|
||||||
|
case _x2('p', 'o'):
|
||||||
|
if (is_raw_525(st.st_size)) return MediaType_5_25;
|
||||||
|
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||||
|
return MediaTypeUnknown;
|
||||||
|
|
||||||
|
// hdv - 3.5 or hard drive.
|
||||||
|
case _x3('h', 'd', 'v'):
|
||||||
|
case _x3('r', 'a', 'w'):
|
||||||
|
if (is_raw_35(st.st_size)) return MediaType_3_5;
|
||||||
|
if ((st.st_size & 511) == 0) return MediaType_HardDisk;
|
||||||
|
return MediaTypeUnknown;
|
||||||
|
|
||||||
|
case _x3('n', 'i', 'b'):
|
||||||
|
return MediaType_5_25;
|
||||||
|
|
||||||
|
case _x3('w', 'a', 'v'):
|
||||||
|
return MediaType_Cassette;
|
||||||
|
|
||||||
|
// cd-rom
|
||||||
|
case _x3('i', 's', 'o'):
|
||||||
|
case _x3('c', 'u', 'e'):
|
||||||
|
case _x3('c', 'd', 'r'):
|
||||||
|
return MediaType_CDROM;
|
||||||
|
|
||||||
|
case _x3('p', 'n', 'g'):
|
||||||
|
return MediaType_Picture;
|
||||||
|
|
||||||
|
case _x3('m', 'i', 'd'):
|
||||||
|
return MediaType_MIDI;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return MediaTypeUnknown;
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import "Media.h"
|
#import "Media.h"
|
||||||
|
#import "Ample.h"
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@ -20,8 +21,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
- (IBAction)ejectAction:(id)sender;
|
- (IBAction)ejectAction:(id)sender;
|
||||||
- (IBAction)pathAction:(id)sender;
|
- (IBAction)pathAction:(id)sender;
|
||||||
|
|
||||||
|
-(IBAction)resetMedia:(id)sender;
|
||||||
|
|
||||||
//-(void)setMedia: (NSDictionary *)media;
|
-(BOOL)smartRouteURL: (NSURL *)url;
|
||||||
|
-(BOOL)smartRouteFile: (NSString *)file;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MediaViewController (Bookmark) <Bookmark>
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -9,11 +9,14 @@
|
|||||||
#import "MediaViewController.h"
|
#import "MediaViewController.h"
|
||||||
#import "TableCellView.h"
|
#import "TableCellView.h"
|
||||||
|
|
||||||
|
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
||||||
|
|
||||||
|
|
||||||
@protocol MediaNode
|
@protocol MediaNode
|
||||||
-(BOOL)isGroupItem;
|
-(BOOL)isGroupItem;
|
||||||
-(BOOL)isExpandable;
|
-(BOOL)isExpandable;
|
||||||
-(NSInteger) count;
|
-(NSInteger)count;
|
||||||
|
-(NSInteger)category;
|
||||||
|
|
||||||
-(NSString *)viewIdentifier;
|
-(NSString *)viewIdentifier;
|
||||||
-(void)prepareView: (NSTableCellView *)view;
|
-(void)prepareView: (NSTableCellView *)view;
|
||||||
@ -28,6 +31,8 @@
|
|||||||
@property NSMutableArray *children; // URLs?
|
@property NSMutableArray *children; // URLs?
|
||||||
@property NSString *title;
|
@property NSString *title;
|
||||||
@property NSInteger index;
|
@property NSInteger index;
|
||||||
|
@property NSInteger category;
|
||||||
|
@property (weak)NSOutlineView *view;
|
||||||
|
|
||||||
-(NSInteger)count;
|
-(NSInteger)count;
|
||||||
-(id)objectAtIndex:(NSInteger)index;
|
-(id)objectAtIndex:(NSInteger)index;
|
||||||
@ -36,9 +41,13 @@
|
|||||||
|
|
||||||
@interface MediaItem : NSObject <MediaNode>
|
@interface MediaItem : NSObject <MediaNode>
|
||||||
|
|
||||||
|
@property NSString *string;
|
||||||
@property NSURL *url;
|
@property NSURL *url;
|
||||||
@property BOOL valid;
|
@property BOOL valid;
|
||||||
@property NSInteger index;
|
@property NSInteger index;
|
||||||
|
@property NSInteger category;
|
||||||
|
|
||||||
|
@property (readonly) BOOL occupied;
|
||||||
|
|
||||||
-(NSInteger)count;
|
-(NSInteger)count;
|
||||||
-(id)objectAtIndex:(NSInteger)index;
|
-(id)objectAtIndex:(NSInteger)index;
|
||||||
@ -81,8 +90,6 @@
|
|||||||
|
|
||||||
-(void)prepareView: (NSTableCellView *)view {
|
-(void)prepareView: (NSTableCellView *)view {
|
||||||
|
|
||||||
[view setObjectValue: self];
|
|
||||||
[[view textField] setStringValue: _title];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-(CGFloat)height {
|
-(CGFloat)height {
|
||||||
@ -104,6 +111,7 @@
|
|||||||
for (unsigned i = count; i < newCount; ++i) {
|
for (unsigned i = count; i < newCount; ++i) {
|
||||||
MediaItem *item = [MediaItem new];
|
MediaItem *item = [MediaItem new];
|
||||||
[item setIndex: i];
|
[item setIndex: i];
|
||||||
|
[item setCategory: _category];
|
||||||
[_children addObject: item];
|
[_children addObject: item];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +123,7 @@
|
|||||||
|
|
||||||
for (unsigned i = newCount; i < count; ++i) {
|
for (unsigned i = newCount; i < count; ++i) {
|
||||||
MediaItem *item = [_children lastObject];
|
MediaItem *item = [_children lastObject];
|
||||||
if ([item url]) break;
|
if ([item occupied]) break;
|
||||||
|
|
||||||
[_children removeLastObject];
|
[_children removeLastObject];
|
||||||
}
|
}
|
||||||
@ -123,7 +131,36 @@
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(BOOL)pruneChildrenWithOutlineView: (NSOutlineView *)view {
|
-(BOOL)addURL: (NSURL *)url {
|
||||||
|
|
||||||
|
for (MediaItem *item in _children) {
|
||||||
|
if (![item occupied]) {
|
||||||
|
[item setUrl: url];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add an extra item...
|
||||||
|
|
||||||
|
if (!_children) _children = [NSMutableArray new];
|
||||||
|
NSUInteger ix = [_children count];
|
||||||
|
|
||||||
|
MediaItem *item = [MediaItem new];
|
||||||
|
[item setIndex: ix];
|
||||||
|
[item setCategory: _category];
|
||||||
|
[item setUrl: url];
|
||||||
|
[item setValid: ix < _validCount];
|
||||||
|
[_children addObject: item];
|
||||||
|
if (_view) {
|
||||||
|
NSIndexSet *set = [NSIndexSet indexSetWithIndex: ix];
|
||||||
|
[_view insertItemsAtIndexes: set
|
||||||
|
inParent: self
|
||||||
|
withAnimation: NSTableViewAnimationEffectFade];
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)pruneChildren {
|
||||||
NSUInteger count = [_children count];
|
NSUInteger count = [_children count];
|
||||||
BOOL delta = NO;
|
BOOL delta = NO;
|
||||||
if (_validCount == count) return NO;
|
if (_validCount == count) return NO;
|
||||||
@ -131,7 +168,7 @@
|
|||||||
|
|
||||||
for (NSInteger i = _validCount; i < count; ++i) {
|
for (NSInteger i = _validCount; i < count; ++i) {
|
||||||
MediaItem *item = [_children lastObject];
|
MediaItem *item = [_children lastObject];
|
||||||
if ([item url]) break;
|
if ([item occupied]) break;
|
||||||
|
|
||||||
[_children removeLastObject];
|
[_children removeLastObject];
|
||||||
[set addIndex: [_children count]];
|
[set addIndex: [_children count]];
|
||||||
@ -140,15 +177,15 @@
|
|||||||
}
|
}
|
||||||
if (delta) {
|
if (delta) {
|
||||||
|
|
||||||
if (view)
|
if (_view)
|
||||||
[view removeItemsAtIndexes: set inParent: self withAnimation: NSTableViewAnimationEffectFade];
|
[_view removeItemsAtIndexes: set inParent: self withAnimation: NSTableViewAnimationEffectFade];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(BOOL)moveItemFrom: (NSInteger)oldIndex to: (NSInteger)newIndex outlineView: (NSOutlineView *)view {
|
-(BOOL)moveItemFrom: (NSInteger)oldIndex to: (NSInteger)newIndex {
|
||||||
if (newIndex == oldIndex) return NO;
|
if (newIndex == oldIndex) return NO;
|
||||||
NSUInteger count = [_children count];
|
NSUInteger count = [_children count];
|
||||||
if (oldIndex >= count) return NO;
|
if (oldIndex >= count) return NO;
|
||||||
@ -161,7 +198,7 @@
|
|||||||
} else {
|
} else {
|
||||||
[_children insertObject: item atIndex: newIndex];
|
[_children insertObject: item atIndex: newIndex];
|
||||||
}
|
}
|
||||||
if (view) [view moveItemAtIndex: oldIndex inParent: self toIndex: newIndex inParent: self];
|
if (_view) [_view moveItemAtIndex: oldIndex inParent: self toIndex: newIndex inParent: self];
|
||||||
|
|
||||||
// re-index and re-validate.
|
// re-index and re-validate.
|
||||||
unsigned ix = 0;
|
unsigned ix = 0;
|
||||||
@ -173,7 +210,7 @@
|
|||||||
|
|
||||||
++ix;
|
++ix;
|
||||||
}
|
}
|
||||||
[self pruneChildrenWithOutlineView: view];
|
[self pruneChildren];
|
||||||
//[view reloadItem: self reloadChildren: YES];
|
//[view reloadItem: self reloadChildren: YES];
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
@ -181,11 +218,37 @@
|
|||||||
|
|
||||||
@implementation MediaItem
|
@implementation MediaItem
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-(instancetype)initWithURL: (NSURL *)url {
|
-(instancetype)initWithURL: (NSURL *)url {
|
||||||
[self setUrl: url];
|
_url = url;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(instancetype)initWithString: (NSString *)string {
|
||||||
|
_string = string;
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSString *)argument {
|
||||||
|
if (_string)
|
||||||
|
return _string;
|
||||||
|
|
||||||
|
// todo -- have setURL also update _string?
|
||||||
|
if (_url)
|
||||||
|
return [NSString stringWithCString: [_url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
+(NSSet *)keyPathsForValuesAffectingOccupied {
|
||||||
|
return [NSSet setWithObjects: @"url", @"string", nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)occupied {
|
||||||
|
return _url || _string;
|
||||||
|
}
|
||||||
|
|
||||||
-(NSInteger) count {
|
-(NSInteger) count {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -203,38 +266,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
-(NSString *)viewIdentifier {
|
-(NSString *)viewIdentifier {
|
||||||
|
if (_category == kIndexBitBanger) return @"BBItemView";
|
||||||
|
if (_category == kIndexMidiOut) return @"MidiItemView";
|
||||||
|
if (_category == kIndexMidiIn) return @"MidiItemView";
|
||||||
return @"ItemView";
|
return @"ItemView";
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)prepareView: (TablePathView *)view {
|
-(void)prepareView: (MediaTableCellView *)view {
|
||||||
|
/* set the path tag = category. */
|
||||||
|
|
||||||
NSValueTransformer *t;
|
[view prepareView: _category];
|
||||||
NSDictionary *options;
|
#if 0
|
||||||
|
if (_category == kIndexMidiIn || _category == kIndexMidiOut || _category == kIndexBitBanger) {
|
||||||
[view setObjectValue: self];
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
NSPathControl *pc = [view pathControl];
|
NSPathControl *pc = [view pathControl];
|
||||||
NSButton *button = [view ejectButton];
|
[pc setTag: _category + 1]; // to differentiate 0 / no path control.
|
||||||
|
|
||||||
[pc unbind: @"value"];
|
|
||||||
[pc unbind: @"enabled"];
|
|
||||||
[pc bind: @"value" toObject: self withKeyPath: @"url" options: nil];
|
|
||||||
[pc bind: @"enabled" toObject: self withKeyPath: @"valid" options: options];
|
|
||||||
|
|
||||||
[button unbind: @"enabled"];
|
|
||||||
[button unbind: @"contentTintColor"];
|
|
||||||
t = [NSValueTransformer valueTransformerForName: NSIsNotNilTransformerName];
|
|
||||||
options = @{ NSValueTransformerBindingOption: t};
|
|
||||||
[button bind: @"enabled" toObject: self withKeyPath: @"url" options: options];
|
|
||||||
|
|
||||||
t = [NSValueTransformer valueTransformerForName: @"ValidColorTransformer"];
|
|
||||||
options = @{ NSValueTransformerBindingOption: t};
|
|
||||||
[button bind: @"contentTintColor" toObject: self withKeyPath: @"valid" options: options];
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
NSColor *tintColor = nil;
|
|
||||||
if (!_valid) tintColor = [NSColor systemRedColor];
|
|
||||||
[button setContentTintColor: tintColor];
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,28 +297,21 @@
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
#define CATEGORY_COUNT 6
|
|
||||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
|
||||||
|
|
||||||
@interface MediaViewController () {
|
@interface MediaViewController () {
|
||||||
|
|
||||||
MediaCategory *_data[CATEGORY_COUNT];
|
MediaCategory *_data[CATEGORY_COUNT];
|
||||||
NSArray *_root;
|
NSMutableArray *_root;
|
||||||
Media _media;
|
Media _media;
|
||||||
|
|
||||||
|
BOOL _loadingBookmark;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation MediaViewController
|
@implementation MediaViewController
|
||||||
|
|
||||||
enum {
|
|
||||||
kIndexFloppy525 = 0,
|
|
||||||
kIndexFloppy35,
|
|
||||||
kIndexHardDrive,
|
|
||||||
kIndexCDROM,
|
|
||||||
kIndexCassette,
|
|
||||||
kIndexDiskImage,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
-(void)awakeFromNib {
|
-(void)awakeFromNib {
|
||||||
@ -286,8 +327,18 @@ enum {
|
|||||||
_data[kIndexCDROM] = [MediaCategory categoryWithTitle: @"CD-ROMs"];
|
_data[kIndexCDROM] = [MediaCategory categoryWithTitle: @"CD-ROMs"];
|
||||||
_data[kIndexCassette] = [MediaCategory categoryWithTitle: @"Cassettes"];
|
_data[kIndexCassette] = [MediaCategory categoryWithTitle: @"Cassettes"];
|
||||||
_data[kIndexDiskImage] = [MediaCategory categoryWithTitle: @"Hard Disk Images"]; // Mac Nubus psuedo image device
|
_data[kIndexDiskImage] = [MediaCategory categoryWithTitle: @"Hard Disk Images"]; // Mac Nubus psuedo image device
|
||||||
|
_data[kIndexBitBanger] = [MediaCategory categoryWithTitle: @"Serial Bit Banger"]; // null_modem
|
||||||
|
|
||||||
_root = @[];
|
_data[kIndexMidiIn] = [MediaCategory categoryWithTitle: @"MIDI (In)"];
|
||||||
|
_data[kIndexMidiOut] = [MediaCategory categoryWithTitle: @"MIDI (Out)"];
|
||||||
|
_data[kIndexPicture] = [MediaCategory categoryWithTitle: @"Picture"];
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < CATEGORY_COUNT; ++i) {
|
||||||
|
[_data[i] setCategory: i];
|
||||||
|
[_data[i] setIndex: -1];
|
||||||
|
}
|
||||||
|
|
||||||
|
_root = [NSMutableArray new];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,35 +347,55 @@ enum {
|
|||||||
-(void)rebuildArgs {
|
-(void)rebuildArgs {
|
||||||
|
|
||||||
static char* prefix[] = {
|
static char* prefix[] = {
|
||||||
"flop", "flop", "hard", "cdrm", "cass", "disk"
|
"flop", "flop", "hard", "cdrm", "cass", "disk", "bitb", "min", "mout", "pic"
|
||||||
};
|
};
|
||||||
static_assert(SIZEOF(prefix) == CATEGORY_COUNT, "Missing item");
|
static_assert(SIZEOF(prefix) == CATEGORY_COUNT, "Missing item");
|
||||||
NSMutableArray *args = [NSMutableArray new];
|
NSMutableArray *args = [NSMutableArray new];
|
||||||
|
|
||||||
unsigned counts[CATEGORY_COUNT] = { 0 };
|
//unsigned counts[CATEGORY_COUNT] = { 0 };
|
||||||
|
|
||||||
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||||
|
|
||||||
|
uint64_t floppy_mask = _media.floppy_mask;
|
||||||
|
unsigned index = 0;
|
||||||
|
|
||||||
MediaCategory *cat = _data[j];
|
MediaCategory *cat = _data[j];
|
||||||
NSInteger valid = [cat validCount];
|
NSInteger valid = [cat validCount];
|
||||||
for (NSInteger i = 0; i < valid; ++i) {
|
for (NSInteger i = 0; i < valid; ++i) {
|
||||||
counts[j]++;
|
|
||||||
|
|
||||||
MediaItem *item = [cat objectAtIndex: i];
|
MediaItem *item = [cat objectAtIndex: i];
|
||||||
NSURL *url = [item url];
|
NSString *arg = [item argument];
|
||||||
if (!url) continue;
|
|
||||||
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], counts[j]]];
|
|
||||||
NSString *s = [NSString stringWithCString: [url fileSystemRepresentation] encoding: NSUTF8StringEncoding];
|
|
||||||
|
|
||||||
[args addObject: s];
|
|
||||||
|
if (j == kIndexFloppy525) {
|
||||||
|
// assumes < 64 floppies....
|
||||||
|
// infinite loop if no floppy device...
|
||||||
|
if (floppy_mask == 0) break;
|
||||||
|
while ((floppy_mask & 0x01) == 0) {
|
||||||
|
floppy_mask >>= 1;
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
} else if (j == kIndexFloppy35) {
|
||||||
|
while ((floppy_mask & 0x01)) {
|
||||||
|
floppy_mask >>= 1;
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++index;
|
||||||
|
floppy_mask >>= 1;
|
||||||
|
if (!arg) continue;
|
||||||
|
|
||||||
|
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], index]];
|
||||||
|
[args addObject: arg];
|
||||||
}
|
}
|
||||||
if (j == 0) counts[1] = counts[0]; // 3.5/5.25
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[self setArgs: args];
|
[self setArgs: args];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)rebuildRoot {
|
-(void)rebuildRoot {
|
||||||
|
|
||||||
NSMutableArray *tmp = [NSMutableArray new];
|
NSMutableArray *tmp = [NSMutableArray new];
|
||||||
int ix = 0;
|
int ix = 0;
|
||||||
for (unsigned j = 0 ; j < CATEGORY_COUNT; ++j) {
|
for (unsigned j = 0 ; j < CATEGORY_COUNT; ++j) {
|
||||||
@ -340,12 +411,16 @@ enum {
|
|||||||
// todo - switch this to use removeItemsAtIndexes:inParent:withAnimation:
|
// todo - switch this to use removeItemsAtIndexes:inParent:withAnimation:
|
||||||
// and insertItemsAtIndexes:inParent:withAnimation:
|
// and insertItemsAtIndexes:inParent:withAnimation:
|
||||||
|
|
||||||
[_outlineView reloadData];
|
if (!_loadingBookmark) {
|
||||||
[_outlineView expandItem: nil expandChildren: YES];
|
[_outlineView reloadData];
|
||||||
|
[_outlineView expandItem: nil expandChildren: YES];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)setMedia: (Media)media {
|
-(void)setMedia: (Media)media {
|
||||||
|
|
||||||
|
// todo -- fancy diff algorithm to animate changes.
|
||||||
|
|
||||||
MediaCategory *cat;
|
MediaCategory *cat;
|
||||||
BOOL delta = NO;
|
BOOL delta = NO;
|
||||||
unsigned x;
|
unsigned x;
|
||||||
@ -353,6 +428,8 @@ enum {
|
|||||||
if (MediaEqual(&_media, &media)) return;
|
if (MediaEqual(&_media, &media)) return;
|
||||||
_media = media;
|
_media = media;
|
||||||
|
|
||||||
|
[_outlineView beginUpdates];
|
||||||
|
|
||||||
|
|
||||||
#undef _
|
#undef _
|
||||||
#define _(name, index) \
|
#define _(name, index) \
|
||||||
@ -363,17 +440,55 @@ x = media.name; cat = _data[index]; delta |= [cat setItemCount: x]
|
|||||||
_(floppy_3_5, kIndexFloppy35);
|
_(floppy_3_5, kIndexFloppy35);
|
||||||
_(floppy_5_25, kIndexFloppy525);
|
_(floppy_5_25, kIndexFloppy525);
|
||||||
_(pseudo_disk, kIndexDiskImage);
|
_(pseudo_disk, kIndexDiskImage);
|
||||||
|
_(bitbanger, kIndexBitBanger);
|
||||||
|
// disable midi for now - it's either a midi file (which auto-plays too soon to be useful)
|
||||||
|
// or a midi device ("default" for first one).
|
||||||
|
// So we should build a device list (and pre-populate the default one)
|
||||||
|
// another approach is a separate utility to act as a midi/serial input converter
|
||||||
|
// and midi file / serial converter so the modem/serial port could be used.
|
||||||
|
#if 1
|
||||||
|
_(midiin, kIndexMidiIn);
|
||||||
|
_(midiout, kIndexMidiOut);
|
||||||
|
#endif
|
||||||
|
_(picture, kIndexPicture);
|
||||||
|
|
||||||
|
|
||||||
if (delta) {
|
if (delta) {
|
||||||
[self rebuildRoot];
|
[self rebuildRoot];
|
||||||
[self rebuildArgs];
|
if (!_loadingBookmark) [self rebuildArgs];
|
||||||
|
}
|
||||||
|
|
||||||
|
[_outlineView endUpdates];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)resetDiskImages {
|
||||||
|
|
||||||
|
BOOL delta = NO;
|
||||||
|
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||||
|
|
||||||
|
MediaCategory *cat = _data[j];
|
||||||
|
NSInteger count = [cat count];
|
||||||
|
for (NSInteger i = 0; i < count; ++i) {
|
||||||
|
|
||||||
|
MediaItem *item = [cat objectAtIndex: i];
|
||||||
|
if (![item occupied]) continue;
|
||||||
|
[item setUrl: nil];
|
||||||
|
[item setString: nil];
|
||||||
|
delta = YES;
|
||||||
|
}
|
||||||
|
if ([cat pruneChildren]) delta = YES;
|
||||||
|
}
|
||||||
|
if (delta) {
|
||||||
|
[self rebuildRoot];
|
||||||
|
if (!_loadingBookmark) [self rebuildArgs];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSString *kDragType = @"private.ample.media";
|
static NSString *kDragType = @"private.ample.media";
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
|
|
||||||
//NSOutlineView *view = [self view];
|
//NSOutlineView *view = [self view];
|
||||||
@ -384,6 +499,21 @@ static NSString *kDragType = @"private.ample.media";
|
|||||||
[_outlineView expandItem: nil expandChildren: YES];
|
[_outlineView expandItem: nil expandChildren: YES];
|
||||||
|
|
||||||
[_outlineView registerForDraggedTypes: @[kDragType]];
|
[_outlineView registerForDraggedTypes: @[kDragType]];
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < CATEGORY_COUNT; ++i)
|
||||||
|
[_data[i] setView: _outlineView];
|
||||||
|
|
||||||
|
|
||||||
|
[nc addObserver: self selector: @selector(magicRouteNotification:) name: kNotificationDiskImageMagicRoute object: nil];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)viewWillDisappear {
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
[nc removeObserver: self];
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < CATEGORY_COUNT; ++i)
|
||||||
|
[_data[i] setView: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - NSOutlineViewDelegate
|
#pragma mark - NSOutlineViewDelegate
|
||||||
@ -397,15 +527,14 @@ static NSString *kDragType = @"private.ample.media";
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//- (NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item;
|
|
||||||
|
|
||||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id<MediaNode>)item {
|
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id<MediaNode>)item {
|
||||||
|
|
||||||
NSString *ident = [item viewIdentifier];
|
NSString *ident = [item viewIdentifier];
|
||||||
if (!ident) return nil;
|
if (!ident) return nil;
|
||||||
NSTableCellView *v = [outlineView makeViewWithIdentifier: ident owner: self];
|
NSTableCellView *v = [outlineView makeViewWithIdentifier: ident owner: self];
|
||||||
[(id<MediaNode>)item prepareView: v];
|
|
||||||
[v setObjectValue: item];
|
[v setObjectValue: item];
|
||||||
|
|
||||||
|
[(id<MediaNode>)item prepareView: v];
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,12 +566,6 @@ static NSString *kDragType = @"private.ample.media";
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSCell *)outlineView:(NSOutlineView *)outlineView dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
|
|
||||||
//return nil;
|
|
||||||
return [[item cellClass] new];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - NSOutlineViewDataSource
|
#pragma mark - NSOutlineViewDataSource
|
||||||
@ -587,7 +710,7 @@ static NSString *kDragType = @"private.ample.media";
|
|||||||
NSInteger oldIndex = indexes[1];
|
NSInteger oldIndex = indexes[1];
|
||||||
|
|
||||||
[_outlineView beginUpdates];
|
[_outlineView beginUpdates];
|
||||||
[cat moveItemFrom: oldIndex to: index outlineView: _outlineView];
|
[cat moveItemFrom: oldIndex to: index];
|
||||||
[_outlineView endUpdates];
|
[_outlineView endUpdates];
|
||||||
[self rebuildArgs];
|
[self rebuildArgs];
|
||||||
|
|
||||||
@ -605,35 +728,272 @@ static NSString *kDragType = @"private.ample.media";
|
|||||||
NSInteger row = [_outlineView rowForView: sender];
|
NSInteger row = [_outlineView rowForView: sender];
|
||||||
if (row < 0) return;
|
if (row < 0) return;
|
||||||
|
|
||||||
//TablePathView *pv = [_outlineView viewAtColumn: 0 row: row makeIfNecessary: NO];
|
|
||||||
MediaItem *item = [_outlineView itemAtRow: row];
|
MediaItem *item = [_outlineView itemAtRow: row];
|
||||||
[item setUrl: nil];
|
[item setUrl: nil];
|
||||||
//[[pv pathControl] setURL: nil];
|
[item setString: nil];
|
||||||
|
|
||||||
// if item is invalid, should attempt to remove...
|
// if item is invalid, should attempt to remove...
|
||||||
if (![item valid]) {
|
if (![item valid]) {
|
||||||
MediaCategory *cat = [_outlineView parentForItem: item];
|
MediaCategory *cat = [_outlineView parentForItem: item];
|
||||||
[_outlineView beginUpdates];
|
[_outlineView beginUpdates];
|
||||||
[cat pruneChildrenWithOutlineView: _outlineView];
|
[cat pruneChildren];
|
||||||
|
|
||||||
|
// remove the entire category??
|
||||||
|
if (![cat validCount] && ![cat count]) {
|
||||||
|
NSUInteger ix = [_root indexOfObject: cat];
|
||||||
|
if (ix != NSNotFound) {
|
||||||
|
NSIndexSet *set = [NSIndexSet indexSetWithIndex: ix];
|
||||||
|
[_outlineView removeItemsAtIndexes: set
|
||||||
|
inParent: nil
|
||||||
|
withAnimation: NSTableViewAnimationEffectFade];
|
||||||
|
|
||||||
|
[_root removeObjectAtIndex: ix];
|
||||||
|
[cat setIndex: -1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[_outlineView endUpdates];
|
[_outlineView endUpdates];
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo -- if this eliminates a category completely, it will still be included
|
|
||||||
// since we're now using animaations instead of reloading.
|
|
||||||
|
|
||||||
[self rebuildArgs];
|
[self rebuildArgs];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)pathAction:(id)sender {
|
- (IBAction)pathAction:(id)sender {
|
||||||
// need to update the eject button...
|
|
||||||
|
|
||||||
NSURL *url = [(NSPathControl *)sender URL];
|
NSURL *url = [(NSPathControl *)sender URL];
|
||||||
|
NSInteger tag = [sender tag] - 1;
|
||||||
|
|
||||||
if (url) {
|
switch(tag) {
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
|
||||||
[nc postNotificationName: @"DiskImageAdded" object: url];
|
case kIndexFloppy525:
|
||||||
|
case kIndexFloppy35:
|
||||||
|
case kIndexHardDrive:
|
||||||
|
case kIndexCDROM:
|
||||||
|
case kIndexCassette:
|
||||||
|
case kIndexDiskImage:
|
||||||
|
if (url) {
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
[nc postNotificationName: kNotificationDiskImageAdded object: url];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// not disk images or don't use a path control.
|
||||||
|
case kIndexPicture:
|
||||||
|
case kIndexMidiIn:
|
||||||
|
case kIndexMidiOut:
|
||||||
|
case kIndexBitBanger:
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self rebuildArgs];
|
[self rebuildArgs];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(IBAction)textAction: (id)sender {
|
||||||
|
[self rebuildArgs];
|
||||||
|
}
|
||||||
|
- (IBAction)midiAction:(id)sender {
|
||||||
|
[self rebuildArgs];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(IBAction)resetMedia:(id)sender {
|
||||||
|
[self resetDiskImages];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-(void)magicRouteNotification: (NSNotification *)notification {
|
||||||
|
NSDictionary *userInfo = [notification userInfo];
|
||||||
|
id path = [userInfo objectForKey: @"path"];
|
||||||
|
|
||||||
|
if ([path isKindOfClass: [NSURL class]]) {
|
||||||
|
[self smartRouteURL: path];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([path isKindOfClass: [NSString class]]) {
|
||||||
|
NSURL *url = [NSURL fileURLWithPath: path];
|
||||||
|
[self smartRouteURL: url];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* given a file, add it to the media list.
|
||||||
|
* TODO - how to handle if full or media type missing?
|
||||||
|
*/
|
||||||
|
-(BOOL)smartRouteURL: (NSURL *)url {
|
||||||
|
|
||||||
|
if (!url) return NO;
|
||||||
|
|
||||||
|
MediaType mt = ClassifyMediaFile(url);
|
||||||
|
if (mt < 1) return NO; // unknown / error.
|
||||||
|
|
||||||
|
unsigned ix = 0;
|
||||||
|
switch(mt) {
|
||||||
|
case MediaType_3_5: ix = kIndexFloppy35; break;
|
||||||
|
case MediaType_5_25: ix = kIndexFloppy525; break;
|
||||||
|
case MediaType_Cassette: ix = kIndexCassette; break;
|
||||||
|
case MediaType_HardDisk: ix = kIndexHardDrive; break;
|
||||||
|
case MediaType_CDROM: ix = kIndexCDROM; break;
|
||||||
|
|
||||||
|
case MediaType_Picture: ix = kIndexPicture; break;
|
||||||
|
case MediaType_MIDI: // ix = kIndexMidiIn; break;
|
||||||
|
case MediaTypeError:
|
||||||
|
case MediaTypeUnknown:
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
[_outlineView beginUpdates];
|
||||||
|
// todo -- check root, insert if necessary?
|
||||||
|
MediaCategory *cat = _data[ix];
|
||||||
|
[cat addURL: url];
|
||||||
|
[_outlineView endUpdates];
|
||||||
|
|
||||||
|
[self rebuildArgs];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)smartRouteFile: (NSString *)file {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MediaViewController (Bookmark)
|
||||||
|
|
||||||
|
-(void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
_loadingBookmark = YES;
|
||||||
|
[self resetDiskImages];
|
||||||
|
}
|
||||||
|
-(void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
_loadingBookmark = NO;
|
||||||
|
|
||||||
|
|
||||||
|
[self rebuildRoot];
|
||||||
|
[self rebuildArgs];
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString * BookmarkStrings[] = {
|
||||||
|
@"flop_525", @"flop_35", @"hard", @"cdrm", @"cass", @"disk", @"bitb", @"midiin", @"midiout", @"pic"
|
||||||
|
};
|
||||||
|
static_assert(SIZEOF(BookmarkStrings) == CATEGORY_COUNT, "Missing item");
|
||||||
|
|
||||||
|
static int BookmarkIndex(NSString *str) {
|
||||||
|
if (!str) return -1;
|
||||||
|
for (int i = 0; i < SIZEOF(BookmarkStrings); ++i) {
|
||||||
|
if ([str isEqualToString: BookmarkStrings[i]]) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(BOOL)loadBookmark: (NSDictionary *)bookmark {
|
||||||
|
|
||||||
|
// fragile - depends on order
|
||||||
|
id media = [bookmark objectForKey: @"media"];
|
||||||
|
|
||||||
|
if ([media isKindOfClass: [NSArray class]]) {
|
||||||
|
unsigned ix = 0;
|
||||||
|
for (NSArray *a in (NSArray *)media) {
|
||||||
|
if (ix >= CATEGORY_COUNT) {
|
||||||
|
NSLog(@"MediaViewController: too many categories.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
MediaCategory *cat = _data[ix];
|
||||||
|
NSInteger count = [cat count];
|
||||||
|
unsigned i = 0;
|
||||||
|
for (NSString *path in a) {
|
||||||
|
if (i >= count) {
|
||||||
|
NSLog(@"MediaViewController: too many files.");
|
||||||
|
break; //
|
||||||
|
}
|
||||||
|
MediaItem *item = [cat objectAtIndex: i++];
|
||||||
|
if (![path length]) continue;
|
||||||
|
|
||||||
|
if (ix == kIndexBitBanger || ix == kIndexMidiOut || ix == kIndexMidiIn) {
|
||||||
|
[item setString: path];
|
||||||
|
} else {
|
||||||
|
NSURL *url = [NSURL fileURLWithPath: path];
|
||||||
|
[item setUrl: url];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
++ix;
|
||||||
|
}
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
if ([media isKindOfClass: [NSDictionary class]]) {
|
||||||
|
|
||||||
|
for (NSString *key in (NSDictionary *)media) {
|
||||||
|
NSInteger ix = BookmarkIndex(key);
|
||||||
|
if (ix < 0) {
|
||||||
|
NSLog(@"MediaViewController: unrecognized category: %@", key);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
MediaCategory *cat = _data[ix];
|
||||||
|
NSInteger count = [cat count];
|
||||||
|
NSArray *a = [(NSDictionary *)media objectForKey: key];
|
||||||
|
unsigned i = 0;
|
||||||
|
|
||||||
|
for (NSString *path in a) {
|
||||||
|
if (i >= count) {
|
||||||
|
NSLog(@"MediaViewController: too many files.");
|
||||||
|
break; //
|
||||||
|
}
|
||||||
|
MediaItem *item = [cat objectAtIndex: i++];
|
||||||
|
if (![path length]) continue;
|
||||||
|
|
||||||
|
if (ix == kIndexBitBanger || ix == kIndexMidiOut || ix == kIndexMidiIn) {
|
||||||
|
[item setString: path];
|
||||||
|
} else {
|
||||||
|
NSURL *url = [NSURL fileURLWithPath: path];
|
||||||
|
[item setUrl: url];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CompressArray(NSMutableArray *array) {
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
NSString *s = [array lastObject];
|
||||||
|
if (!s) return;
|
||||||
|
if ([s length]) return;
|
||||||
|
[array removeLastObject];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(BOOL)saveBookmark: (NSMutableDictionary *)bookmark {
|
||||||
|
|
||||||
|
|
||||||
|
NSMutableDictionary *media = [NSMutableDictionary new];
|
||||||
|
|
||||||
|
for (unsigned ix = 0; ix < CATEGORY_COUNT; ++ix) {
|
||||||
|
|
||||||
|
MediaCategory *cat = _data[ix];
|
||||||
|
NSInteger count = [cat validCount];
|
||||||
|
if (!count) continue;
|
||||||
|
|
||||||
|
NSMutableArray *array = [NSMutableArray new];
|
||||||
|
for (NSInteger i = 0; i < count; ++i) {
|
||||||
|
|
||||||
|
MediaItem *item = [cat objectAtIndex: i];
|
||||||
|
NSString *s = [item argument];
|
||||||
|
if (!s) s = @"";
|
||||||
|
[array addObject: s];
|
||||||
|
}
|
||||||
|
|
||||||
|
CompressArray(array);
|
||||||
|
|
||||||
|
if ([array count])
|
||||||
|
[media setObject: array forKey: BookmarkStrings[ix]];
|
||||||
|
}
|
||||||
|
|
||||||
|
[bookmark setObject: media forKey: @"media"];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
25
Ample/MidiManager.h
Normal file
25
Ample/MidiManager.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// MidiManager.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 8/6/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef MidiManager_h
|
||||||
|
#define MidiManager_h
|
||||||
|
|
||||||
|
|
||||||
|
extern NSString *kMidiSourcesChangedNotification;
|
||||||
|
extern NSString *kMidiDestinationsChangedNotification;
|
||||||
|
|
||||||
|
@interface MidiManager : NSObject
|
||||||
|
|
||||||
|
@property NSArray *sources;
|
||||||
|
@property NSArray *destinations;
|
||||||
|
|
||||||
|
+(instancetype)sharedManager;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* MidiManager_h */
|
153
Ample/MidiManager.m
Normal file
153
Ample/MidiManager.m
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
//
|
||||||
|
// Midi.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 8/6/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CoreMIDI/CoreMIDI.h>
|
||||||
|
|
||||||
|
#import "MidiManager.h"
|
||||||
|
|
||||||
|
static NSArray *MidiSources(void) {
|
||||||
|
|
||||||
|
ItemCount count = MIDIGetNumberOfSources();
|
||||||
|
if (count <= 0) return @[];
|
||||||
|
|
||||||
|
NSMutableArray *rv = [NSMutableArray arrayWithCapacity: count + 1];
|
||||||
|
|
||||||
|
MIDIEndpointRef ep;
|
||||||
|
for(int i = 0; i < count; ++i) {
|
||||||
|
ep = MIDIGetSource(i);
|
||||||
|
if (!ep) continue;
|
||||||
|
|
||||||
|
// https://developer.apple.com/library/archive/qa/qa1374/_index.html
|
||||||
|
CFStringRef str = NULL;
|
||||||
|
MIDIObjectGetStringProperty(ep, kMIDIPropertyDisplayName, &str);
|
||||||
|
|
||||||
|
if (str) {
|
||||||
|
[rv addObject: (__bridge id _Nonnull)(str)];
|
||||||
|
CFRelease(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static NSArray *MidiDestinations(void) {
|
||||||
|
|
||||||
|
ItemCount count = MIDIGetNumberOfDestinations();
|
||||||
|
if (count <= 0) return @[];
|
||||||
|
|
||||||
|
NSMutableArray *rv = [NSMutableArray arrayWithCapacity: count + 1];
|
||||||
|
|
||||||
|
MIDIEndpointRef ep;
|
||||||
|
for(int i = 0; i < count; ++i) {
|
||||||
|
ep = MIDIGetDestination(i);
|
||||||
|
if (!ep) continue;
|
||||||
|
|
||||||
|
// https://developer.apple.com/library/archive/qa/qa1374/_index.html
|
||||||
|
CFStringRef str = NULL;
|
||||||
|
MIDIObjectGetStringProperty(ep, kMIDIPropertyDisplayName, &str);
|
||||||
|
|
||||||
|
if (str) {
|
||||||
|
[rv addObject: (__bridge id _Nonnull)(str)];
|
||||||
|
CFRelease(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *kMidiSourcesChangedNotification = @"Midi Sources Changed";
|
||||||
|
NSString *kMidiDestinationsChangedNotification = @"Midi Destinations Changed";
|
||||||
|
|
||||||
|
|
||||||
|
@interface MidiManager () {
|
||||||
|
MIDIClientRef _client;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)objectAddRemove: (const MIDIObjectAddRemoveNotification *)message;
|
||||||
|
-(void)objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
static MidiManager *singleton = nil;
|
||||||
|
@implementation MidiManager
|
||||||
|
|
||||||
|
-(void)awakeFromNib {
|
||||||
|
if (!singleton) singleton = self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+(instancetype)sharedManager {
|
||||||
|
if (!singleton) singleton = [MidiManager new];
|
||||||
|
return singleton;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(instancetype)init {
|
||||||
|
|
||||||
|
if (singleton) return singleton;
|
||||||
|
|
||||||
|
OSStatus status;
|
||||||
|
|
||||||
|
|
||||||
|
status = MIDIClientCreateWithBlock(
|
||||||
|
CFSTR("serial_midi"),
|
||||||
|
&_client,
|
||||||
|
^(const MIDINotification *message){
|
||||||
|
switch(message->messageID) {
|
||||||
|
case kMIDIMsgObjectAdded:
|
||||||
|
case kMIDIMsgObjectRemoved:
|
||||||
|
[self objectAddRemove: (const MIDIObjectAddRemoveNotification *)message];
|
||||||
|
break;
|
||||||
|
case kMIDIMsgPropertyChanged:
|
||||||
|
[self objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message];
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
_sources = MidiSources();
|
||||||
|
_destinations = MidiDestinations();
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)objectAddRemove: (const MIDIObjectAddRemoveNotification *)message {
|
||||||
|
|
||||||
|
const MIDIObjectAddRemoveNotification *m = (const MIDIObjectAddRemoveNotification *)message;
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
if (m->childType == kMIDIObjectType_Source) {
|
||||||
|
[self setSources: MidiSources()];
|
||||||
|
[nc postNotificationName: kMidiSourcesChangedNotification object: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m->childType == kMIDIObjectType_Destination) {
|
||||||
|
[self setDestinations: MidiDestinations()];
|
||||||
|
[nc postNotificationName: kMidiDestinationsChangedNotification object: self];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
-(void)objectPropertyChanged: (const MIDIObjectPropertyChangeNotification *)message {
|
||||||
|
|
||||||
|
const MIDIObjectPropertyChangeNotification *m = (const MIDIObjectPropertyChangeNotification *)message;
|
||||||
|
if (m->propertyName == kMIDIPropertyDisplayName) {
|
||||||
|
[self setSources: MidiSources()];
|
||||||
|
[self setDestinations: MidiDestinations()];
|
||||||
|
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
[nc postNotificationName: kMidiSourcesChangedNotification object: self];
|
||||||
|
[nc postNotificationName: kMidiDestinationsChangedNotification object: self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-(void)dealloc {
|
||||||
|
|
||||||
|
if (_client)
|
||||||
|
MIDIClientDispose(_client);
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
30
Ample/NewMachineViewController.h
Normal file
30
Ample/NewMachineViewController.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
//
|
||||||
|
// NewMachineViewController.h
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 6/8/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import "Ample.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface NewMachineViewController : NSViewController
|
||||||
|
|
||||||
|
@property (nullable) NSString *machine;
|
||||||
|
|
||||||
|
-(void)reset;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NewMachineViewController (Table) <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface NewMachineViewController (Bookmark) <Bookmark>
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
234
Ample/NewMachineViewController.m
Normal file
234
Ample/NewMachineViewController.m
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
//
|
||||||
|
// NewMachineViewController.m
|
||||||
|
// Ample
|
||||||
|
//
|
||||||
|
// Created by Kelvin Sherlock on 6/8/2021.
|
||||||
|
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NewMachineViewController.h"
|
||||||
|
|
||||||
|
@interface NewMachineViewController () {
|
||||||
|
|
||||||
|
NSArray *_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (weak) IBOutlet NSOutlineView *outlineView;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NewMachineViewController
|
||||||
|
|
||||||
|
-(void)awakeFromNib {
|
||||||
|
|
||||||
|
static unsigned first = 0;
|
||||||
|
|
||||||
|
if (first) return;
|
||||||
|
first++;
|
||||||
|
|
||||||
|
NSBundle *bundle = [NSBundle mainBundle];
|
||||||
|
NSString *path = [bundle pathForResource: @"models" ofType: @"plist"];
|
||||||
|
_data = [NSArray arrayWithContentsOfFile: path];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)viewDidLoad {
|
||||||
|
[super viewDidLoad];
|
||||||
|
|
||||||
|
//[_outlineView reloadData];
|
||||||
|
//[_outlineView setAutosaveExpandedItems: YES];
|
||||||
|
//[_outlineView expandItem: nil expandChildren: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - IBActions
|
||||||
|
- (IBAction)clickAction:(id)sender {
|
||||||
|
|
||||||
|
NSInteger row = [_outlineView clickedRow];
|
||||||
|
if (row < 0) return;
|
||||||
|
NSDictionary *item = [_outlineView itemAtRow: row];
|
||||||
|
if (!item) return;
|
||||||
|
|
||||||
|
NSString *value = [item objectForKey: @"value"];
|
||||||
|
NSArray *children = [item objectForKey: @"children"];
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
[self setMachine: value];
|
||||||
|
} else if (children) {
|
||||||
|
id ap = [_outlineView animator];
|
||||||
|
[_outlineView isItemExpanded: item] ? [ap collapseItem: item] : [ap expandItem: item];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)reset {
|
||||||
|
|
||||||
|
[_outlineView deselectAll: nil];
|
||||||
|
[self setMachine: nil];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NewMachineViewController (Table)
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item {
|
||||||
|
// disclosure triangle.
|
||||||
|
if (!item) return YES;
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
return [children count] > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
||||||
|
if (!item) return YES;
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
return [children count] > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
return [children count] > 0;
|
||||||
|
#else
|
||||||
|
return NO;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
if ([children count]) {
|
||||||
|
return [outlineView makeViewWithIdentifier: @"HeaderCell" owner: self];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
NSTableCellView *v = [outlineView makeViewWithIdentifier: @"DataCell" owner: self];
|
||||||
|
//[v setObjectValue: item];
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
||||||
|
if (!item) return [_data count];
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
return [children count];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
||||||
|
|
||||||
|
if (item == nil) {
|
||||||
|
return [_data objectAtIndex: index];
|
||||||
|
}
|
||||||
|
NSArray *children = [(NSDictionary *)item objectForKey: @"children"];
|
||||||
|
return [children objectAtIndex: index];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item {
|
||||||
|
if (!item) return NO;
|
||||||
|
return [(NSDictionary *)item objectForKey: @"value"] != nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// saving/restoring expanded items
|
||||||
|
- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item {
|
||||||
|
|
||||||
|
return [item objectForKey: @"description"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object {
|
||||||
|
|
||||||
|
if ([object isKindOfClass: [NSString class]]) {
|
||||||
|
|
||||||
|
for(NSDictionary *d in _data) {
|
||||||
|
if ([(NSString *)object isEqualToString: [d objectForKey: @"description"]])
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
//return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NewMachineViewController (Bookmark)
|
||||||
|
|
||||||
|
|
||||||
|
- (void)didLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)loadBookmark:(NSDictionary *)bookmark {
|
||||||
|
NSString *machine = [bookmark objectForKey: @"machine"];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//NSInteger row = [_outlineView selectedRow];
|
||||||
|
if (!machine) {
|
||||||
|
[self setMachine: nil];
|
||||||
|
[_outlineView deselectAll: nil];
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (NSDictionary *parent in _data) {
|
||||||
|
NSArray *children = [parent objectForKey: @"children"];
|
||||||
|
|
||||||
|
for (NSDictionary *child in children) {
|
||||||
|
if ([machine isEqualToString: [child objectForKey: @"value"]]) {
|
||||||
|
|
||||||
|
id ap = [_outlineView animator];
|
||||||
|
[ap expandItem: parent];
|
||||||
|
NSInteger row = [_outlineView rowForItem: child];
|
||||||
|
if (row >= 0) {
|
||||||
|
NSIndexSet *set = [NSIndexSet indexSetWithIndex: row];
|
||||||
|
[_outlineView selectRowIndexes: set byExtendingSelection: NO];
|
||||||
|
[_outlineView scrollRowToVisible: row];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// could also match parent.
|
||||||
|
if ([machine isEqualToString: [parent objectForKey: @"value"]]) {
|
||||||
|
NSInteger row = [_outlineView rowForItem: parent];
|
||||||
|
if (row >= 0) {
|
||||||
|
NSIndexSet *set = [NSIndexSet indexSetWithIndex: row];
|
||||||
|
[_outlineView selectRowIndexes: set byExtendingSelection: NO];
|
||||||
|
[_outlineView scrollRowToVisible: row];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)saveBookmark:(NSMutableDictionary *)bookmark {
|
||||||
|
// machine saved in parent.
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)willLoadBookmark:(NSDictionary *)bookmark {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -1,29 +0,0 @@
|
|||||||
//
|
|
||||||
// NewSlotViewController.h
|
|
||||||
// Ample
|
|
||||||
//
|
|
||||||
// Created by Kelvin Sherlock on 9/9/2020.
|
|
||||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
#import "Media.h"
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
|
||||||
|
|
||||||
@interface NewSlotViewController : NSViewController
|
|
||||||
|
|
||||||
@property NSArray *args;
|
|
||||||
@property Media media;
|
|
||||||
@property NSSize resolution;
|
|
||||||
@property (nonatomic) NSString *machine;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface NewSlotViewController (OutlineView) <NSOutlineViewDelegate, NSOutlineViewDataSource>
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
|
@ -1,342 +0,0 @@
|
|||||||
//
|
|
||||||
// NewSlotViewController.m
|
|
||||||
// Ample
|
|
||||||
//
|
|
||||||
// Created by Kelvin Sherlock on 9/9/2020.
|
|
||||||
// Copyright © 2020 Kelvin Sherlock. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#import "Ample.h"
|
|
||||||
#import "NewSlotViewController.h"
|
|
||||||
#import "Menu.h"
|
|
||||||
#import "Slot.h"
|
|
||||||
#import "Media.h"
|
|
||||||
|
|
||||||
|
|
||||||
#import <objc/runtime.h>
|
|
||||||
|
|
||||||
/* number of slot types. bitmask used so should be < sizeof(unsigned *8) */
|
|
||||||
#define SLOT_COUNT 22
|
|
||||||
static_assert(SLOT_COUNT <= sizeof(unsigned) * 8, "too many slot types");
|
|
||||||
|
|
||||||
#define SIZEOF(x) (sizeof(x) / sizeof(x[0]))
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned RootKey = 0;
|
|
||||||
|
|
||||||
|
|
||||||
@interface NewSlotViewController ()
|
|
||||||
@property (weak) IBOutlet NSOutlineView *outlineView;
|
|
||||||
@property (weak) IBOutlet NSOutlineView *childOutlineView;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NewSlotViewController {
|
|
||||||
NSArray *_root;
|
|
||||||
|
|
||||||
unsigned _slots_explicit;
|
|
||||||
unsigned _slots_valid;
|
|
||||||
unsigned _slots_default;
|
|
||||||
|
|
||||||
Slot *_slot_object[SLOT_COUNT];
|
|
||||||
NSString *_slot_value[SLOT_COUNT]; // when explicitely set.
|
|
||||||
|
|
||||||
Media _slot_media[SLOT_COUNT];
|
|
||||||
Media _machine_media;
|
|
||||||
|
|
||||||
NSDictionary *_machine_data;
|
|
||||||
|
|
||||||
IBOutlet NSPopover *_popover;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
|
||||||
[super viewDidLoad];
|
|
||||||
// Do view setup here.
|
|
||||||
|
|
||||||
_root = @[];
|
|
||||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
|
||||||
|
|
||||||
|
|
||||||
//[_outlineView setIndentationPerLevel: 2.0];
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)resetMachine {
|
|
||||||
|
|
||||||
_root = @[];
|
|
||||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
|
||||||
|
|
||||||
[_outlineView reloadData];
|
|
||||||
|
|
||||||
_slots_valid = 0;
|
|
||||||
_slots_explicit = 0;
|
|
||||||
_slots_default = 0;
|
|
||||||
_machine_media = EmptyMedia;
|
|
||||||
_machine_data = nil;
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
|
||||||
_slot_media[i] = EmptyMedia;
|
|
||||||
_slot_object[i] = nil;
|
|
||||||
_slot_value[i] = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setResolution: NSMakeSize(0, 0)];
|
|
||||||
[self setArgs: @[]];
|
|
||||||
[self setMedia: EmptyMedia];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-(void)loadMachine {
|
|
||||||
|
|
||||||
|
|
||||||
NSDictionary *d = MameMachine(_machine);
|
|
||||||
|
|
||||||
|
|
||||||
if (!d) {
|
|
||||||
[self resetMachine];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSArray *r = [d objectForKey: @"resolution"];
|
|
||||||
NSSize res = NSMakeSize(0, 0);
|
|
||||||
if (r) {
|
|
||||||
res.width = [(NSNumber *)[r objectAtIndex: 0 /*@"width"*/] doubleValue];
|
|
||||||
res.height = [(NSNumber *)[r objectAtIndex: 1 /*@"height"*/] doubleValue];
|
|
||||||
}
|
|
||||||
[self setResolution: res];
|
|
||||||
|
|
||||||
_slots_valid = 0;
|
|
||||||
//_slots_explicit = 0;
|
|
||||||
_slots_default = 0;
|
|
||||||
|
|
||||||
_machine_media = MediaFromDictionary([d objectForKey: @"media"]);
|
|
||||||
|
|
||||||
_machine_data = d;
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
|
||||||
_slot_media[i] = EmptyMedia;
|
|
||||||
_slot_object[i] = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern NSArray *BuildSlots(NSString *name, NSDictionary *data);
|
|
||||||
_root = BuildSlots(_machine, d);
|
|
||||||
objc_setAssociatedObject(_outlineView, &RootKey, _root, OBJC_ASSOCIATION_RETAIN);
|
|
||||||
|
|
||||||
for (Slot *item in _root) {
|
|
||||||
NSInteger index = [item index];
|
|
||||||
if (index < 0) continue;
|
|
||||||
unsigned mask = 1 << index;
|
|
||||||
|
|
||||||
_slots_valid |= mask;
|
|
||||||
if ([item defaultIndex] >= 0)
|
|
||||||
_slots_default |= mask;
|
|
||||||
|
|
||||||
if (_slot_value[index])
|
|
||||||
[item selectValue: _slot_value[index]];
|
|
||||||
|
|
||||||
_slot_media[index] = [item selectedMedia];
|
|
||||||
_slot_object[index] = item;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[_outlineView reloadData];
|
|
||||||
[self rebuildMedia];
|
|
||||||
[self rebuildArgs];
|
|
||||||
}
|
|
||||||
|
|
||||||
-(void)setMachine: (NSString *)machine {
|
|
||||||
if (_machine == machine) return;
|
|
||||||
if (_machine && machine && [machine compare: _machine] == NSOrderedSame) return;
|
|
||||||
_machine = machine;
|
|
||||||
|
|
||||||
if (!machine) {
|
|
||||||
[self resetMachine];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
[self loadMachine];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-(void)rebuildMedia {
|
|
||||||
|
|
||||||
|
|
||||||
Media media = _machine_media;
|
|
||||||
|
|
||||||
unsigned mask = 1;
|
|
||||||
for (unsigned i = 0; i < SLOT_COUNT; ++i, mask <<= 1) {
|
|
||||||
|
|
||||||
if (_slots_valid & mask) {
|
|
||||||
MediaAdd(&media, &_slot_media[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setMedia: media];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-(void)rebuildArgs {
|
|
||||||
|
|
||||||
NSMutableArray *args = [NSMutableArray new];
|
|
||||||
|
|
||||||
for (Slot *item in _root) {
|
|
||||||
|
|
||||||
NSArray *x = [item args];
|
|
||||||
if (x) [args addObjectsFromArray: x];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setArgs: args];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)menuChanged:(NSPopUpButton *)sender {
|
|
||||||
|
|
||||||
BOOL direct = YES;
|
|
||||||
NSInteger index = [sender tag];
|
|
||||||
if (index < 0) return; //
|
|
||||||
|
|
||||||
if (index >= 0 && index < SLOT_COUNT) {
|
|
||||||
direct = YES;
|
|
||||||
} else {
|
|
||||||
direct = NO;
|
|
||||||
index &= ~0x10000;
|
|
||||||
}
|
|
||||||
if (index >= SLOT_COUNT) return; //
|
|
||||||
unsigned mask = 1 << index;
|
|
||||||
|
|
||||||
|
|
||||||
// index 0 = ram = special case...
|
|
||||||
|
|
||||||
SlotOption *o = [[sender selectedItem] representedObject];
|
|
||||||
Slot *item = _slot_object[index];
|
|
||||||
|
|
||||||
if (direct) {
|
|
||||||
_slots_explicit |= mask;
|
|
||||||
_slot_value[index] = [o value];
|
|
||||||
//_slots_default &= ~mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
Media media = [item selectedMedia];
|
|
||||||
if (!MediaEqual(&media, &_slot_media[index])) {
|
|
||||||
_slot_media[index] = media;
|
|
||||||
[self rebuildMedia];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// needs to reload children if expanded.
|
|
||||||
#ifdef SLOT_TREE
|
|
||||||
if (direct) {
|
|
||||||
BOOL rc = ([_outlineView isItemExpanded: item]);
|
|
||||||
[_outlineView reloadItem: item reloadChildren: rc];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
[self rebuildArgs];
|
|
||||||
}
|
|
||||||
- (IBAction)hamburger:(id)sender {
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if ([_popover isShown]) {
|
|
||||||
[_popover close];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NSInteger index = [sender tag];
|
|
||||||
if (index < 0 || index >= SLOT_COUNT) return;
|
|
||||||
|
|
||||||
Slot *item = _slot_object[index];
|
|
||||||
|
|
||||||
NSArray *children = [item selectedChildren];
|
|
||||||
objc_setAssociatedObject(_childOutlineView, &RootKey, children, OBJC_ASSOCIATION_RETAIN);
|
|
||||||
if (!children) return;
|
|
||||||
|
|
||||||
[_childOutlineView reloadData];
|
|
||||||
NSSize size = [_popover contentSize];
|
|
||||||
if (size.width < 200) size.width = 250;
|
|
||||||
size = [_childOutlineView sizeThatFits: size];
|
|
||||||
size.height += 40;
|
|
||||||
[_popover setContentSize: size];
|
|
||||||
|
|
||||||
[_popover showRelativeToRect: [sender bounds]
|
|
||||||
ofView: sender
|
|
||||||
preferredEdge: NSRectEdgeMaxY];
|
|
||||||
}
|
|
||||||
|
|
||||||
-(IBAction)resetSlots:(id)sender {
|
|
||||||
|
|
||||||
_slots_explicit = 0;
|
|
||||||
for (unsigned i = 0; i < SLOT_COUNT; ++i) {
|
|
||||||
_slot_media[i] = EmptyMedia;
|
|
||||||
_slot_value[i] = nil;
|
|
||||||
}
|
|
||||||
for (Slot *item in _root) {
|
|
||||||
[item reset];
|
|
||||||
// if children, reset them too...
|
|
||||||
NSInteger index = [item index];
|
|
||||||
if (index < 0) continue;
|
|
||||||
_slot_media[index] = [item selectedMedia];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SLOT_TREE
|
|
||||||
[_outlineView reloadData];
|
|
||||||
#endif
|
|
||||||
[self rebuildMedia];
|
|
||||||
[self rebuildArgs];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
|
|
||||||
@implementation NewSlotViewController (OutlineView)
|
|
||||||
|
|
||||||
|
|
||||||
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
|
||||||
|
|
||||||
NSArray *root = objc_getAssociatedObject(outlineView, &RootKey);
|
|
||||||
if (!item) return [root count];
|
|
||||||
|
|
||||||
#ifdef SLOT_TREE
|
|
||||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
|
||||||
return [tmp count];
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
|
||||||
NSArray *root = objc_getAssociatedObject(outlineView, &RootKey);
|
|
||||||
|
|
||||||
if (!item) return [root objectAtIndex: index];
|
|
||||||
#ifdef SLOT_TREE
|
|
||||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
|
||||||
return [tmp objectAtIndex: index];
|
|
||||||
#endif
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
|
||||||
|
|
||||||
#ifdef SLOT_TREE
|
|
||||||
if (!item) return NO;
|
|
||||||
NSArray *tmp = [(Slot *)item selectedChildren];
|
|
||||||
return [tmp count] > 0;
|
|
||||||
#else
|
|
||||||
return NO;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(Slot *)item {
|
|
||||||
|
|
||||||
SlotTableCellView *v = [outlineView makeViewWithIdentifier: @"MenuCell" owner: self];
|
|
||||||
|
|
||||||
[item prepareView: v];
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
|
@ -56,20 +56,25 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function macbook(onoff) {
|
/* os x 10.11 */
|
||||||
|
if (window.NodeList && !NodeList.prototype.forEach) {
|
||||||
|
NodeList.prototype.forEach = Array.prototype.forEach;
|
||||||
|
}
|
||||||
|
|
||||||
|
function macbook(onoff) {
|
||||||
var nodes = document.querySelectorAll("[data-macbook]");
|
var nodes = document.querySelectorAll("[data-macbook]");
|
||||||
nodes.forEach( (e) => {
|
nodes.forEach( function(e) {
|
||||||
var m = (e.dataset.macbook == "true");
|
var m = (e.dataset.macbook == "true");
|
||||||
e.hidden = m ^ onoff;
|
e.hidden = m ^ onoff;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
window.addEventListener('load', (event)=> {
|
window.addEventListener('load', function(event) {
|
||||||
macbook(false);
|
macbook(false);
|
||||||
|
|
||||||
var e = document.getElementById('macbook');
|
var e = document.getElementById('macbook');
|
||||||
if (e) {
|
if (e) {
|
||||||
e.checked = false;
|
e.checked = false;
|
||||||
e.addEventListener('click', (event) => {
|
e.addEventListener('click', function (event) {
|
||||||
macbook(e.checked);
|
macbook(e.checked);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -99,7 +104,10 @@
|
|||||||
<td>Toggle full screen mode</td>
|
<td>Toggle full screen mode</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><kbd>F12</kbd></td>
|
<td>
|
||||||
|
<span data-macbook=false><kbd>F12</kbd></span>
|
||||||
|
<span data-macbook=true><kbd>Fn</kbd>+<kbd>F12</kbd></span>
|
||||||
|
</td>
|
||||||
<td>Reset Key</td>
|
<td>Reset Key</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
6617
Ample/Resources/ace2200.plist
Normal file
6617
Ample/Resources/ace2200.plist
Normal file
File diff suppressed because it is too large
Load Diff
543
Ample/Resources/ace500.plist
Normal file
543
Ample/Resources/ace500.plist
Normal file
@ -0,0 +1,543 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ace500</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Franklin ACE 500</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
</dict>
|
||||||
|
<key>resolution</key>
|
||||||
|
<array>
|
||||||
|
<integer>560</integer>
|
||||||
|
<integer>384</integer>
|
||||||
|
</array>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>ramsize</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RAM</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>intValue</key>
|
||||||
|
<integer>131072</integer>
|
||||||
|
<key>description</key>
|
||||||
|
<string>128K</string>
|
||||||
|
<key>value</key>
|
||||||
|
<string>128K</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Disk Drives</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string></string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>gameio</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Game I/O</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>joy</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple II analog joysticks</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2joy</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>paddles</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple II paddles</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2pdls</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>compeyes</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Digital Vision ComputerEyes</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2ceyes</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>picture</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>gizmo</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>HAL Labs Gizmo</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2gizmo</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Modem</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>ie15_terminal</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>pty</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Pseudo terminal</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>pseudo_terminal</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs_printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs_serial_printer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_loopback</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>dec_rs232_loopback</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>serial_keyboard</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>serial_printer</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>serial_terminal</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>sunkbd_adaptor</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>swtpc8212_terminal</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>devices</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>sl6:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>sl6:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:dce</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>pty</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Pseudo terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs_printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>sunkbd_adaptor</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:keyboard</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type3hle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 3 Keyboard (HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type4hle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 4 Keyboard (HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type5gbhle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 5 Keyboard (Great Britain - HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type5jphle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 5 Keyboard (Japan - HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type5sehle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 5 Keyboard (Sweden - HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>type5hle</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Type 5 Keyboard (U.S.A. - HLE)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>software</key>
|
||||||
|
<array>
|
||||||
|
<string>apple2_flop_clcracked.xml</string>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>apple2_flop_orig.xml</string>
|
||||||
|
<key>filter</key>
|
||||||
|
<string>A2C</string>
|
||||||
|
</dict>
|
||||||
|
<string>apple2_flop_misc.xml</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -37,6 +37,41 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>bios</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>ROM</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—Default—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>v1</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Version 1</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>v2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Version 2</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>debug</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Debug</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>sl2</string>
|
<string>sl2</string>
|
||||||
@ -75,11 +110,6 @@
|
|||||||
<string>Agat-7 140K floppy card</string>
|
<string>Agat-7 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat7_flop</string>
|
<string>agat7_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -149,11 +179,6 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat7_flop</string>
|
<string>agat7_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -219,11 +244,6 @@
|
|||||||
<string>Agat-7 140K floppy card</string>
|
<string>Agat-7 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat7_flop</string>
|
<string>agat7_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -291,11 +311,6 @@
|
|||||||
<string>Agat-7 140K floppy card</string>
|
<string>Agat-7 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat7_flop</string>
|
<string>agat7_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -361,11 +376,6 @@
|
|||||||
<string>Agat-7 140K floppy card</string>
|
<string>Agat-7 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat7_flop</string>
|
<string>agat7_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -448,6 +458,14 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>digiblst</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Digiblaster (DIY)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>ap2000</string>
|
<string>ap2000</string>
|
||||||
@ -476,7 +494,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>lx810l</string>
|
<string>lx810l</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Espon LX-810L</string>
|
<string>Epson LX-810L</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
@ -496,6 +514,14 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>nlq401</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Schneider NLQ 401 Matrix Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>chessmec</string>
|
<string>chessmec</string>
|
||||||
@ -516,6 +542,69 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>agat7_flop</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>agat_fdc</string>
|
<string>agat_fdc</string>
|
||||||
|
@ -37,6 +37,35 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>bios</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>ROM</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—Default—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>v1</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Version 1</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>v2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Version 2</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>sl1</string>
|
<string>sl1</string>
|
||||||
@ -83,24 +112,14 @@
|
|||||||
<string>Agat-9 140K floppy card</string>
|
<string>Agat-9 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -158,24 +177,14 @@
|
|||||||
<string>Agat-9 140K floppy card</string>
|
<string>Agat-9 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -233,24 +242,14 @@
|
|||||||
<string>Agat-9 140K floppy card</string>
|
<string>Agat-9 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -308,24 +307,14 @@
|
|||||||
<string>Agat-9 140K floppy card</string>
|
<string>Agat-9 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -385,24 +374,14 @@
|
|||||||
<string>Agat-9 140K floppy card</string>
|
<string>Agat-9 140K floppy card</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -462,24 +441,14 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>agat9_flop</string>
|
<string>agat9_flop</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>diskii</string>
|
<string>diskiing</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Apple Disk II controller</string>
|
<string>Apple Disk II NG controller (16-sector)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2diskii</string>
|
<string>a2diskiing</string>
|
||||||
<key>media</key>
|
|
||||||
<dict>
|
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -494,6 +463,69 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>devices</key>
|
<key>devices</key>
|
||||||
<array>
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>a2diskiing</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>a7ports</string>
|
<string>a7ports</string>
|
||||||
@ -544,6 +576,14 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>digiblst</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Digiblaster (DIY)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>ap2000</string>
|
<string>ap2000</string>
|
||||||
@ -572,7 +612,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>lx810l</string>
|
<string>lx810l</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Espon LX-810L</string>
|
<string>Epson LX-810L</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
@ -592,6 +632,14 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>nlq401</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Schneider NLQ 401 Matrix Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>chessmec</string>
|
<string>chessmec</string>
|
||||||
@ -612,6 +660,69 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>agat9_flop</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>agat_fdc</string>
|
<string>agat_fdc</string>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -92,6 +92,11 @@
|
|||||||
<string>Digital Vision ComputerEyes</string>
|
<string>Digital Vision ComputerEyes</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2ceyes</string>
|
<string>a2ceyes</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>picture</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -142,6 +147,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -165,6 +178,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -173,6 +191,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -206,6 +229,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -255,6 +286,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -278,6 +317,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -286,6 +330,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -319,6 +368,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -395,6 +452,150 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:dce</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>pty</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Pseudo terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs_printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
@ -469,7 +670,12 @@
|
|||||||
<key>software</key>
|
<key>software</key>
|
||||||
<array>
|
<array>
|
||||||
<string>apple2_flop_clcracked.xml</string>
|
<string>apple2_flop_clcracked.xml</string>
|
||||||
<string>apple2_flop_orig.xml</string>
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>apple2_flop_orig.xml</string>
|
||||||
|
<key>filter</key>
|
||||||
|
<string>A2C</string>
|
||||||
|
</dict>
|
||||||
<string>apple2_flop_misc.xml</string>
|
<string>apple2_flop_misc.xml</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
@ -8,10 +8,6 @@
|
|||||||
<string>Apple //c Plus</string>
|
<string>Apple //c Plus</string>
|
||||||
<key>media</key>
|
<key>media</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
<key>floppy_3_5</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
</dict>
|
||||||
<key>resolution</key>
|
<key>resolution</key>
|
||||||
<array>
|
<array>
|
||||||
@ -79,6 +75,25 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Disk Drives</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string></string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>gameio</string>
|
<string>gameio</string>
|
||||||
@ -117,6 +132,11 @@
|
|||||||
<string>Digital Vision ComputerEyes</string>
|
<string>Digital Vision ComputerEyes</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2ceyes</string>
|
<string>a2ceyes</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>picture</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -167,6 +187,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -190,6 +218,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -198,6 +231,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -231,6 +269,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -280,6 +326,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -303,6 +357,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -311,6 +370,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -344,6 +408,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -357,6 +429,321 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>devices</key>
|
<key>devices</key>
|
||||||
<array>
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:2</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35dd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" DD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35hd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" HD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35sd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" SD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:3</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35dd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" DD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35hd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" HD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>35sd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>3.5" SD</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_3_5</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:dce</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>pty</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Pseudo terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs_printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
@ -431,7 +818,12 @@
|
|||||||
<key>software</key>
|
<key>software</key>
|
||||||
<array>
|
<array>
|
||||||
<string>apple2_flop_clcracked.xml</string>
|
<string>apple2_flop_clcracked.xml</string>
|
||||||
<string>apple2_flop_orig.xml</string>
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>apple2_flop_orig.xml</string>
|
||||||
|
<key>filter</key>
|
||||||
|
<string>A2C</string>
|
||||||
|
</dict>
|
||||||
<string>apple2_flop_misc.xml</string>
|
<string>apple2_flop_misc.xml</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -55,6 +55,35 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>bios</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>ROM</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—Default—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>original</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple /// boot ROM</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>soshd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Rob Justice SOSHDBOOT</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>smartport</string>
|
<string>smartport</string>
|
||||||
@ -101,7 +130,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cffa2</string>
|
<string>cffa2</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2cffa02</string>
|
<string>a2cffa02</string>
|
||||||
</dict>
|
</dict>
|
||||||
@ -113,6 +142,22 @@
|
|||||||
<key>disabled</key>
|
<key>disabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>grafex</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Grafex-32</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2grafex</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Microsoft SoftCard ///</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>focusdrive</string>
|
<string>focusdrive</string>
|
||||||
@ -129,6 +174,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2aplcrd</string>
|
<string>a2aplcrd</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2mockbd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>thclock</string>
|
<string>thclock</string>
|
||||||
@ -137,6 +190,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2thunpl</string>
|
<string>a2thunpl</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>titan3plus2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Titan /// Plus //</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>titan3p2</string>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -166,7 +227,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cffa2</string>
|
<string>cffa2</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2cffa02</string>
|
<string>a2cffa02</string>
|
||||||
</dict>
|
</dict>
|
||||||
@ -178,6 +239,22 @@
|
|||||||
<key>disabled</key>
|
<key>disabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>grafex</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Grafex-32</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2grafex</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Microsoft SoftCard ///</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>focusdrive</string>
|
<string>focusdrive</string>
|
||||||
@ -194,6 +271,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2aplcrd</string>
|
<string>a2aplcrd</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2mockbd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>thclock</string>
|
<string>thclock</string>
|
||||||
@ -202,6 +287,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2thunpl</string>
|
<string>a2thunpl</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>titan3plus2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Titan /// Plus //</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>titan3p2</string>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -231,7 +324,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cffa2</string>
|
<string>cffa2</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2cffa02</string>
|
<string>a2cffa02</string>
|
||||||
</dict>
|
</dict>
|
||||||
@ -243,6 +336,22 @@
|
|||||||
<key>disabled</key>
|
<key>disabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>grafex</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Grafex-32</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2grafex</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Microsoft SoftCard ///</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>focusdrive</string>
|
<string>focusdrive</string>
|
||||||
@ -259,6 +368,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2aplcrd</string>
|
<string>a2aplcrd</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2mockbd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>thclock</string>
|
<string>thclock</string>
|
||||||
@ -267,6 +384,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2thunpl</string>
|
<string>a2thunpl</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>titan3plus2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Titan /// Plus //</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>titan3p2</string>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -296,7 +421,7 @@
|
|||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cffa2</string>
|
<string>cffa2</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>CFFA 2.0 Compact Flash (6502 firmware, www.dreher.net)</string>
|
<string>CFFA 2.0 Compact Flash (6502 firmware)</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2cffa02</string>
|
<string>a2cffa02</string>
|
||||||
</dict>
|
</dict>
|
||||||
@ -308,6 +433,22 @@
|
|||||||
<key>disabled</key>
|
<key>disabled</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>grafex</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Grafex-32</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2grafex</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Microsoft SoftCard ///</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>softcard3</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>focusdrive</string>
|
<string>focusdrive</string>
|
||||||
@ -324,6 +465,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2aplcrd</string>
|
<string>a2aplcrd</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard Sound/Speech I</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>a2mockbd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>thclock</string>
|
<string>thclock</string>
|
||||||
@ -332,6 +481,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2thunpl</string>
|
<string>a2thunpl</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>titan3plus2</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Titan /// Plus //</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>titan3p2</string>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -373,6 +530,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -396,6 +561,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -404,6 +574,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -437,6 +612,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -765,6 +948,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -791,30 +987,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -830,6 +1002,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -856,30 +1041,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -895,6 +1056,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -921,30 +1095,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -960,6 +1110,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -986,30 +1149,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -1025,6 +1164,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -1051,30 +1203,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -1090,6 +1218,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -1116,30 +1257,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu415</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU415 CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu561_25</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony CDU561-25</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
<dict>
|
|
||||||
<key>value</key>
|
|
||||||
<string>cdu75s</string>
|
|
||||||
<key>description</key>
|
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
|
||||||
<key>default</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
@ -1155,6 +1272,19 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>aplcdsc</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple SCSI CD-ROM</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>cdrom</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdrom</string>
|
<string>cdrom</string>
|
||||||
@ -1181,27 +1311,147 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:dce</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdu415</string>
|
<string></string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Sony CDU415 CD-R</string>
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdu561_25</string>
|
<string>pty</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Sony CDU561-25</string>
|
<string>Pseudo terminal</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>cdu75s</string>
|
<string>rs_printer</string>
|
||||||
<key>description</key>
|
<key>description</key>
|
||||||
<string>Sony/Apple CDU75S CD-R</string>
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<false/>
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
@ -1279,6 +1529,65 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>titan3p2</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:gameio</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>joy</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple II analog joysticks</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>paddles</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Apple II paddles</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>compeyes</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Digital Vision ComputerEyes</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>picture</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>gizmo</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>HAL Labs Gizmo</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>software</key>
|
<key>software</key>
|
||||||
<array>
|
<array>
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -8,8 +8,6 @@
|
|||||||
<string>Laser 128ex2 (version 6.1)</string>
|
<string>Laser 128ex2 (version 6.1)</string>
|
||||||
<key>media</key>
|
<key>media</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>floppy_5_25</key>
|
|
||||||
<integer>2</integer>
|
|
||||||
</dict>
|
</dict>
|
||||||
<key>resolution</key>
|
<key>resolution</key>
|
||||||
<array>
|
<array>
|
||||||
@ -77,6 +75,25 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Disk Drives</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string></string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>gameio</string>
|
<string>gameio</string>
|
||||||
@ -115,6 +132,11 @@
|
|||||||
<string>Digital Vision ComputerEyes</string>
|
<string>Digital Vision ComputerEyes</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>a2ceyes</string>
|
<string>a2ceyes</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>picture</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -165,6 +187,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -188,6 +218,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -196,6 +231,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -229,6 +269,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -278,6 +326,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs_serial_printer</string>
|
<string>rs_serial_printer</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>loopback</string>
|
<string>loopback</string>
|
||||||
@ -301,6 +357,11 @@
|
|||||||
<string>RS232 Null Modem</string>
|
<string>RS232 Null Modem</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>null_modem</string>
|
<string>null_modem</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -309,6 +370,11 @@
|
|||||||
<string>RS232 Synchronous I/O</string>
|
<string>RS232 Synchronous I/O</string>
|
||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>rs232_sync_io</string>
|
<string>rs232_sync_io</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
@ -342,6 +408,14 @@
|
|||||||
<key>devname</key>
|
<key>devname</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>devname</key>
|
||||||
|
<string>mockingboardd</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>value</key>
|
<key>value</key>
|
||||||
<string>swtpc8212</string>
|
<string>swtpc8212</string>
|
||||||
@ -355,6 +429,213 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>devices</key>
|
<key>devices</key>
|
||||||
<array>
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>smartport</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:0</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>fdc:1</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>525</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>5.25"</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>floppy_5_25</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>rs232_patch_box</string>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>:dce</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string></string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>—None—</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>ie15</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>IE15 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>pty</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Pseudo terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs_printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Radio Shack Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>patch</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS-232 Patch Box</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>dec_loopback</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Loopback (DEC 12-15336-00)</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>null_modem</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Null Modem</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>rs232_sync_io</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RS232 Synchronous I/O</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
<key>bitbanger</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>keyboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Keyboard</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>printer</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Printer</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>terminal</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Serial Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>sunkbd</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sun Keyboard Adaptor</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>mockingboard</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Sweet Micro Systems Mockingboard D</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>swtpc8212</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>SWTPC8212 Terminal</string>
|
||||||
|
<key>default</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>sunkbd_adaptor</string>
|
<string>sunkbd_adaptor</string>
|
||||||
@ -429,7 +710,12 @@
|
|||||||
<key>software</key>
|
<key>software</key>
|
||||||
<array>
|
<array>
|
||||||
<string>apple2_flop_clcracked.xml</string>
|
<string>apple2_flop_clcracked.xml</string>
|
||||||
<string>apple2_flop_orig.xml</string>
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>apple2_flop_orig.xml</string>
|
||||||
|
<key>filter</key>
|
||||||
|
<string>A2C</string>
|
||||||
|
</dict>
|
||||||
<string>apple2_flop_misc.xml</string>
|
<string>apple2_flop_misc.xml</string>
|
||||||
</array>
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
|
File diff suppressed because it is too large
Load Diff
46
Ample/Resources/las3000.plist
Normal file
46
Ample/Resources/las3000.plist
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>value</key>
|
||||||
|
<string>las3000</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>Laser 3000</string>
|
||||||
|
<key>media</key>
|
||||||
|
<dict>
|
||||||
|
</dict>
|
||||||
|
<key>resolution</key>
|
||||||
|
<array>
|
||||||
|
<integer>560</integer>
|
||||||
|
<integer>384</integer>
|
||||||
|
</array>
|
||||||
|
<key>slots</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>name</key>
|
||||||
|
<string>ramsize</string>
|
||||||
|
<key>description</key>
|
||||||
|
<string>RAM</string>
|
||||||
|
<key>options</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>intValue</key>
|
||||||
|
<integer>192</integer>
|
||||||
|
<key>description</key>
|
||||||
|
<string>192K</string>
|
||||||
|
<key>value</key>
|
||||||
|
<string>192K</string>
|
||||||
|
<key>default</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>devices</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
<key>software</key>
|
||||||
|
<array>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user