ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/MacOSX/PrefsEditor.mm
Revision: 1.17
Committed: 2005-09-19T06:02:47Z (19 years, 2 months ago) by nigel
Branch: MAIN
Changes since 1.16: +10 -11 lines
Log Message:
Some more 10.4 fixes by Kirk Kerekes

File Contents

# Content
1 /*
2 * PrefsEditor.m - GUI stuff for Basilisk II preferences
3 * (which is a text file in the user's home directory)
4 *
5 * $Id: PrefsEditor.mm,v 1.16 2005/08/09 03:28:53 nigel Exp $
6 *
7 * Basilisk II (C) 1997-2005 Christian Bauer
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24 #import "PrefsEditor.h"
25
26 @implementation TableDS
27
28 - (TableDS *) init
29 {
30 self = [super init];
31
32 numItems = 0;
33 col1 = [NSMutableArray new];
34 col2 = [NSMutableArray new];
35
36 return self;
37 }
38
39 - (void) dealloc
40 {
41 [col1 dealloc];
42 [col2 dealloc];
43 [super dealloc];
44 }
45
46 - (void) addInt: (int)target
47 withPath: (NSString *)path
48 {
49 [col1 addObject: [NSNumber numberWithInt: target]];
50 [col2 addObject: path];
51 ++numItems;
52 }
53
54 - (void) addObject: (NSObject *)obj
55 withPath: (NSString *)path
56 {
57 [col1 addObject: obj];
58 [col2 addObject: path];
59 ++numItems;
60 }
61
62 - (void) deleteAll
63 {
64 numItems = 0;
65 [col1 removeAllObjects];
66 [col2 removeAllObjects];
67 }
68
69 - (BOOL) deleteRow: (int)row
70 {
71 if ( row > numItems )
72 return NO;
73
74 [col1 removeObjectAtIndex: row];
75 [col2 removeObjectAtIndex: row];
76 -- numItems;
77
78 return YES;
79 }
80
81 - (int)intAtRow: (int)row
82 {
83 return [[col1 objectAtIndex: row] intValue];
84 }
85
86 - (int) numberOfRowsInTableView: (NSTableView *)tView
87 {
88 return numItems;
89 }
90
91 - (NSString *)pathAtRow: (int)row
92 {
93 return (NSString *) [col2 objectAtIndex: row];
94 }
95
96 - (id) tableView: (NSTableView *)tView
97 objectValueForTableColumn: (NSTableColumn *)tColumn
98 row: (int)row
99 {
100 if ( [[tColumn identifier] isEqualToString:@"path"] )
101 return [col2 objectAtIndex: row];
102 else
103 return [col1 objectAtIndex: row];
104 }
105
106 @end
107
108 #import <AppKit/NSImage.h> // For [NSBundle pathForImageResource:] proto
109
110 #include <string>
111 using std::string;
112 extern string UserPrefsPath; // from prefs_unix.cpp
113
114 #import "sysdeps.h" // Types used in Basilisk C++ code
115 #import "video_macosx.h" // some items that we edit here
116 #import "misc_macosx.h" // WarningSheet() prototype
117 #import "main_macosx.h" // ChoiceAlert() prototype
118
119
120 #import <prefs.h>
121
122 #define DEBUG 0
123 #import <debug.h>
124
125 @implementation PrefsEditor
126
127 - (PrefsEditor *) init
128 {
129 self = [super init];
130
131 edited = NO;
132
133 devs = @"/dev";
134 home = [NSHomeDirectory() retain];
135 volsDS = [TableDS new];
136 SCSIds = [TableDS new];
137
138 lockCell = [NSImageCell new];
139 if ( lockCell == nil )
140 NSLog (@"%s - Can't create NSImageCell?", __PRETTY_FUNCTION__);
141
142 blank = [NSImage new];
143 locked = [[NSImage alloc] initWithContentsOfFile:
144 [[NSBundle mainBundle] pathForImageResource: @"nowrite.icns"]];
145 if (locked == nil )
146 NSLog(@"%s - Couldn't open write protection image", __PRETTY_FUNCTION__);
147
148 return self;
149 }
150
151 - (void) dealloc
152 {
153 [volsDS release];
154 [SCSIds release];
155 [lockCell release];
156 [blank release];
157 [locked release];
158 [super dealloc];
159 }
160
161 - (void) awakeFromNib
162 {
163 emuFreq = [theEmulator speed];
164 #if DEBUG
165 [self ShowPrefs: self]; // For testing
166 #endif
167 }
168
169 - (BOOL) hasEdited
170 {
171 return edited;
172 }
173
174 - (NSWindow *) window
175 {
176 return panel;
177 }
178
179 - (IBAction) AddSCSI: (id)sender
180 {
181 NSOpenPanel *oP = [NSOpenPanel openPanel];
182
183 if ( [oP runModalForDirectory:home file:nil types:nil] == NSOKButton )
184 {
185 [SCSIds addInt: -1
186 withPath: [oP filename] ];
187 [SCSIdisks reloadData];
188 edited = YES;
189 }
190 }
191
192 - (IBAction) AddVolume: (id)sender
193 {
194 NSOpenPanel *oP = [NSOpenPanel openPanel];
195
196 if ( [oP runModalForDirectory:home file:nil types:nil] == NSOKButton )
197 {
198 [volsDS addObject: (NSObject *) locked
199 withPath: [oP filename] ];
200 PrefsAddString("disk", [[oP filename] UTF8String]);
201 [diskImages reloadData];
202 edited = YES;
203 }
204 }
205
206 - (IBAction) BrowseExtFS: (id)sender
207 {
208 NSOpenPanel *oP = [NSOpenPanel openPanel];
209
210 [oP setCanChooseDirectories: YES];
211 [oP setCanChooseFiles: NO];
212 [oP setPrompt: @"Select"];
213 [oP setTitle: @"Select a directory to mount"];
214 D(NSLog(@"%s - home = %@, [extFS stringValue] = %@",
215 __PRETTY_FUNCTION__, home, [extFS stringValue]));
216 if ( [oP runModalForDirectory: ([extFS stringValue] ? [extFS stringValue] : home)
217 file:nil
218 types:nil] == NSOKButton )
219 {
220 [extFS setStringValue: [oP directory] ];
221 PrefsReplaceString("extfs", [[oP directory] UTF8String]);
222 edited = YES;
223 }
224 }
225
226 - (IBAction) BrowsePrefs: (id)sender
227 {
228 NSOpenPanel *oP = [NSOpenPanel openPanel];
229
230 [oP setCanChooseFiles: YES];
231 [oP setTitle: @"Select a Preferences file"];
232 D(NSLog(@"%s - home = %@", __PRETTY_FUNCTION__, home));
233 if ( [oP runModalForDirectory: ([prefsFile stringValue] ? [prefsFile stringValue] : home)
234 file:nil
235 types:nil] == NSOKButton )
236 {
237 [prefsFile setStringValue: [oP filename] ];
238 UserPrefsPath = [[oP filename] UTF8String];
239 }
240 }
241
242 - (IBAction) BrowseROM: (id)sender
243 {
244 NSOpenPanel *oP = [NSOpenPanel openPanel];
245
246 [oP setCanChooseFiles: YES];
247 [oP setTitle: @"Open a ROM file"];
248 D(NSLog(@"%s - home = %@", __PRETTY_FUNCTION__, home));
249 if ( [oP runModalForDirectory: ([ROMfile stringValue] ? [ROMfile stringValue] : home)
250 file:nil
251 types:nil] == NSOKButton )
252 {
253 [ROMfile setStringValue: [oP filename] ];
254 PrefsReplaceString("rom", [[oP filename] UTF8String]);
255 edited = YES;
256 }
257 }
258
259 #include <cdrom.h> // for CDROMRefNum
260
261 - (IBAction) ChangeBootFrom: (NSMatrix *)sender
262 {
263 if ( [sender selectedCell] == (id)bootFromCD )
264 PrefsReplaceInt32("bootdriver", CDROMRefNum);
265 else
266 PrefsReplaceInt32("bootdriver", 0);
267 edited = YES;
268 }
269
270 - (IBAction) ChangeCPU: (NSMatrix *)sender
271 {
272 PrefsReplaceInt32("cpu", [[sender selectedCell] tag]);
273 edited = YES;
274 }
275
276 - (IBAction) ChangeDisableCD: (NSButton *)sender
277 {
278 PrefsReplaceBool("nocdrom", [disableCD state]);
279 edited = YES;
280 }
281
282 - (IBAction) ChangeDisableSound: (NSButton *)sender
283 {
284 BOOL noSound = [disableSound state];
285
286 if ( ! noSound )
287 WarningSheet(@"Sound is currently unimplemented", panel);
288
289 PrefsReplaceBool("nosound", noSound);
290 edited = YES;
291 }
292
293 - (IBAction) ChangeFPU: (NSButton *)sender
294 {
295 PrefsReplaceBool("fpu", [FPU state]);
296 edited = YES;
297 }
298
299 - (IBAction) ChangeKeyboard: (NSPopUpButton *)sender
300 {
301 // Deselest current item
302 int current = [keyboard indexOfItemWithTag: PrefsFindInt32("keyboardtype")];
303 if ( current != -1 )
304 [[keyboard itemAtIndex: current] setState: FALSE];
305
306 PrefsReplaceInt32("keyboardtype", [[sender selectedItem] tag]);
307 edited = YES;
308 }
309
310 - (IBAction) ChangeModel: (NSMatrix *)sender
311 {
312 PrefsReplaceInt32("modelid", [[sender selectedCell] tag]);
313 edited = YES;
314 }
315
316
317 // If we are not using the CGIMAGEREF drawing strategy,
318 // then source bitmaps must be 32bits deep.
319
320 - (short) testWinDepth: (int) newbpp
321 {
322 #ifdef CGIMAGEREF
323 return newbpp;
324 #else
325 if ( newbpp != 32 )
326 WarningSheet(@"Sorry - In windowed mode, depth must be 32", panel);
327 return 32
328 #endif
329 }
330
331 // This is called when the screen/window,
332 // width, height or depth is clicked.
333 //
334 // Note that sender may not actually be an NSMatrix.
335
336 - (IBAction) ChangeScreen: (NSMatrix *)sender
337 {
338 NSButton *cell = [sender selectedCell];
339
340 short newx = [width intValue];
341 short newy = [height intValue];
342 short newbpp = [depth intValue];
343 short newtype;
344 char str[20];
345
346 if ( cell == screen )
347 newtype = DISPLAY_SCREEN;
348 else if ( cell == window )
349 newtype = DISPLAY_WINDOW;
350 else
351 newtype = display_type;
352
353 // Check that a field actually changed
354 if ( newbpp == init_depth && newx == init_width &&
355 newy == init_height && newtype == display_type )
356 {
357 D(NSLog(@"No changed GUI items in ChangeScreen"));
358 return;
359 }
360
361 // If we are changing type, supply some sensible defaults
362
363 short screenx = CGDisplayPixelsWide(kCGDirectMainDisplay),
364 screeny = CGDisplayPixelsHigh(kCGDirectMainDisplay),
365 screenb = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
366
367 if ( newtype != display_type )
368 {
369 D(NSLog(@"Changing display type in ChangeScreen"));
370
371 // If changing to full screen, supply main screen dimensions as a default
372 if ( newtype == DISPLAY_SCREEN )
373 newx = screenx, newy = screeny, newbpp = screenb;
374
375 // If changing from full screen, use minimum screen resolutions
376 if ( display_type == DISPLAY_SCREEN )
377 {
378 newx = MIN_WIDTH, newy = MIN_HEIGHT;
379 newbpp = [self testWinDepth: newbpp];
380 }
381 }
382 else
383 {
384 newbpp = [self testWinDepth: newbpp];
385
386 // Check size is within ranges of MIN_WIDTH ... MAX_WIDTH
387 // and MIN_HEIGHT ... MAX_HEIGHT
388 // ???
389 }
390
391 [width setIntValue: newx];
392 [height setIntValue: newy];
393 [depth setIntValue: newbpp];
394
395
396 // Store new prefs
397 *str = '\0';
398 switch ( newtype )
399 {
400 case DISPLAY_WINDOW:
401 if ( newbpp )
402 sprintf(str, "win/%hd/%hd/%hd", newx, newy, newbpp);
403 else
404 sprintf(str, "win/%hd/%hd", newx, newy);
405 break;
406 case DISPLAY_SCREEN:
407 if ( newbpp )
408 sprintf(str, "full/%hd/%hd/%hd", newx, newy, newbpp);
409 else
410 sprintf(str, "full/%hd/%hd", newx, newy);
411 break;
412 };
413 PrefsReplaceString("screen", str);
414
415 parse_screen_prefs(str);
416
417 edited = YES;
418
419 if ( display_type != DISPLAY_SCREEN )
420 {
421 D(NSLog(@"Display type is not SCREEN (%d), resizing window",
422 display_type));
423 resizeWinTo(newx, newy);
424 }
425 }
426
427 - (IBAction) CreateVolume: (id)sender
428 {
429 NSSavePanel *sP = [NSSavePanel savePanel];
430
431 [sP setAccessoryView: newVolumeView];
432 [sP setPrompt: @"Create"];
433 [sP setTitle: @"Create new volume as"];
434
435 if ( [sP runModalForDirectory:NSHomeDirectory() file:@"basilisk-II.vol"] == NSOKButton )
436 {
437 char cmd[1024];
438 const char *filename = [[sP filename] UTF8String];
439 int retVal,
440 size = [newVolumeSize intValue];
441
442 sprintf(cmd, "dd if=/dev/zero \"of=%s\" bs=1024k count=%d", filename, size);
443
444 retVal = system(cmd);
445 if (retVal != 0)
446 {
447 NSString *details = [NSString stringWithFormat:
448 @"The dd command failed.\nReturn status %d (%s)",
449 retVal, strerror(errno)];
450 WarningSheet(@"Unable to create volume", details, nil, panel);
451 }
452 else
453 {
454 [volsDS addObject: (NSObject *) blank
455 withPath: [sP filename] ];
456 PrefsAddString("disk", filename);
457 [diskImages reloadData];
458 }
459 }
460 }
461
462 - (BOOL) fileManager: (NSFileManager *) manager
463 shouldProceedAfterError: (NSDictionary *) errorDict
464 {
465 NSRunAlertPanel(@"File operation error",
466 @"%@ %@, toPath %@",
467 @"Bugger!", nil, nil,
468 [errorDict objectForKey:@"Error"],
469 [errorDict objectForKey:@"Path"],
470 [errorDict objectForKey:@"ToPath"]);
471 return NO;
472 }
473
474 - (IBAction) DeleteVolume: (id)sender
475 {
476 NSString *Path = [self RemoveVolumeEntry];
477
478 if ( ! Path )
479 return;
480
481 if ( ! [[NSFileManager defaultManager] removeFileAtPath: Path
482 handler: self] )
483 {
484 WarningSheet(@"Unable to delete volume", panel);
485 NSLog(@"%s unlink(%s) failed - %s", __PRETTY_FUNCTION__,
486 [Path cString], strerror(errno));
487 }
488 }
489
490 - (IBAction) EditDelay: (NSTextField *)sender
491 {
492 int ticks = [delay intValue];
493 float freq;
494
495 if ( ticks )
496 freq = 60.0 / ticks;
497 else
498 freq = 60.0;
499
500 [frequency setFloatValue: freq];
501 [emuFreq setFloatValue: freq];
502 PrefsReplaceInt32("frameskip", ticks);
503 edited = YES;
504 }
505
506 - (IBAction) EditBytes: (NSTextField *)sender
507 {
508 int B = (int) [bytes floatValue];
509 float M = B / 1024 / 1024;
510
511 D(NSLog(@"%s = %f %d", __PRETTY_FUNCTION__, M, B));
512 PrefsReplaceInt32("ramsize", B);
513 [MB setFloatValue: M];
514 edited = YES;
515 }
516
517 - (IBAction) EditEtherNetDevice: (NSTextField *)sender
518 {
519 NSString *path = [etherNet stringValue];
520
521 PrefsReplaceString("ether", [path UTF8String]);
522 edited = YES;
523 }
524
525 - (IBAction) EditExtFS: (NSTextField *)sender
526 {
527 NSString *path = [extFS stringValue];
528
529 PrefsReplaceString("extfs", [path UTF8String]);
530 edited = YES;
531 }
532
533 - (IBAction) EditFrequency: (NSTextField *)sender
534 {
535 float freq = [frequency floatValue];
536
537 [delay setIntValue: frequencyToTickDelay(freq)];
538 [emuFreq setFloatValue: freq];
539 edited = YES;
540 }
541
542 - (IBAction) EditModemDevice: (NSTextField *)sender
543 {
544 NSString *path = [modem stringValue];
545
546 PrefsReplaceString("seriala", [path UTF8String]);
547 edited = YES;
548 }
549
550 - (IBAction) EditMB: (NSTextField *)sender
551 {
552 float M = [MB floatValue];
553 int B = (int) (M * 1024 * 1024);
554
555 D(NSLog(@"%s = %f %d", __PRETTY_FUNCTION__, M, B));
556 PrefsReplaceInt32("ramsize", B);
557 [bytes setIntValue: B];
558 edited = YES;
559 }
560
561 - (IBAction) EditPrinterDevice: (NSTextField *)sender
562 {
563 NSString *path = [printer stringValue];
564
565 PrefsReplaceString("serialb", [path UTF8String]);
566 edited = YES;
567 }
568
569 - (IBAction) EditROMpath: (NSTextField *)sender
570 {
571 NSString *path = [ROMfile stringValue];
572
573 PrefsReplaceString("rom", [path UTF8String]);
574 }
575
576 - (IBAction) RemoveSCSI: (id)sender
577 {
578 char pref[6];
579 int row = [SCSIdisks selectedRow],
580 SCSIid = [SCSIds intAtRow: row];
581
582 if ( ! [SCSIds deleteRow: row] )
583 NSLog (@"%s - [SCSIds deleteRow: %d] failed", __PRETTY_FUNCTION__, row);
584 [SCSIdisks reloadData];
585 sprintf(pref, "scsi%d", SCSIid);
586 //PrefsRemoveItem(pref,0);
587 PrefsRemoveItem(pref, 1);
588 }
589
590 - (NSString *) RemoveVolumeEntry
591 {
592 int row = [diskImages selectedRow];
593
594 if ( row != -1 )
595 {
596 NSString *Path = [volsDS pathAtRow: row];
597 const char *path = [Path UTF8String],
598 *str;
599 int tmp = 0;
600
601 NSString *prompt = [NSString stringWithFormat: @"%s\n%s",
602 "Are you sure you want to delete the file",
603 path];
604
605 if ( ! ChoiceAlert([prompt cString], "Delete", "Cancel") )
606 return NULL;
607
608 while ( (str = PrefsFindString("disk", tmp) ) != NULL )
609 {
610 if ( strcmp(str, path) == 0 )
611 {
612 PrefsRemoveItem("disk", tmp);
613 D(NSLog(@"%s - Deleted prefs entry \"disk\", %d",
614 __PRETTY_FUNCTION__, tmp));
615 edited = YES;
616 break;
617 }
618 ++tmp;
619 }
620
621 if ( str == NULL )
622 {
623 NSLog(@"%s - Couldn't find any disk preference to match %s",
624 __PRETTY_FUNCTION__, path);
625 return NULL;
626 }
627
628 if ( ! [volsDS deleteRow: row] )
629 NSLog (@"%s - RemoveVolume %d failed", __PRETTY_FUNCTION__, tmp);
630 [diskImages reloadData];
631 // return path;
632 return Path;
633 }
634 else
635 {
636 WarningSheet(@"Please select a volume first", panel);
637 return NULL;
638 }
639 }
640
641 - (IBAction) RemoveVolume: (id)sender
642 {
643 [self RemoveVolumeEntry];
644 }
645
646 - (void) loadPrefs: (int) argc
647 args: (char **) argv
648 {
649 [panel close]; // Temporarily hide preferences panel
650
651 PrefsExit(); // Purge all the old pref values
652
653 PrefsInit(argc, argv);
654 AddPrefsDefaults();
655 AddPlatformPrefsDefaults(); // and only create basic ones
656
657 [SCSIds deleteAll]; // Clear out datasources for the tables
658 [volsDS deleteAll];
659
660 [self ShowPrefs: self]; // Reset items in panel, and redisplay
661 edited = NO;
662 }
663
664 - (IBAction) LoadPrefs: (id)sender
665 {
666 int argc = 2;
667 char *argv[2];
668
669 argv[0] = "--prefs",
670 argv[1] = (char *) [[prefsFile stringValue] UTF8String];
671
672 [self loadPrefs: argc
673 args: argv];
674 }
675
676 - (IBAction) ResetPrefs: (id)sender
677 {
678 [self loadPrefs: 0
679 args: NULL];
680 }
681
682 - (void) setStringOf: (NSTextField *) field
683 fromPref: (const char *) prefName
684 {
685 const char *value = PrefsFindString(prefName, 0);
686
687 if ( value )
688 [field setStringValue: [NSString stringWithUTF8String: value] ];
689 }
690
691 - (IBAction) SavePrefs: (id)sender
692 {
693 SavePrefs();
694 edited = NO;
695 }
696
697 - (IBAction) ShowPrefs: (id)sender
698 {
699 NSTableColumn *locks;
700 const char *str;
701 int cpu, tmp, val;
702
703
704 // Set simple single field items
705
706 val = PrefsFindInt32("frameskip");
707 [delay setIntValue: val];
708 if ( val )
709 [frequency setFloatValue: 60.0 / val];
710 else
711 [frequency setFloatValue: 60.0];
712
713 val = PrefsFindInt32("ramsize");
714 [bytes setIntValue: val];
715 [MB setFloatValue: val / (1024.0 * 1024.0)];
716
717 [disableCD setState: PrefsFindBool("nocdrom")];
718 [disableSound setState: PrefsFindBool("nosound")];
719 [FPU setState: PrefsFindBool("fpu") ];
720
721 [self setStringOf: etherNet fromPref: "ether" ];
722 [self setStringOf: extFS fromPref: "extfs" ];
723 [self setStringOf: modem fromPref: "seriala"];
724 [self setStringOf: printer fromPref: "serialb"];
725 [self setStringOf: ROMfile fromPref: "rom"];
726
727 [prefsFile setStringValue: [NSString stringWithUTF8String: UserPrefsPath.c_str()] ];
728
729
730 parse_screen_prefs(PrefsFindString("screen"));
731
732 [width setIntValue: init_width];
733 [height setIntValue: init_height];
734 [depth setIntValue: init_depth];
735
736 [screen setState: NO];
737 switch ( display_type )
738 {
739 case DISPLAY_WINDOW: [window setState: YES]; break;
740 case DISPLAY_SCREEN: [screen setState: YES]; break;
741 }
742
743 [newVolumeSize setIntValue: 10];
744
745 // Radio button groups:
746
747 val = PrefsFindInt32("bootdriver");
748 [bootFromAny setState: val != CDROMRefNum];
749 [bootFromCD setState: val == CDROMRefNum];
750
751 cpu = PrefsFindInt32("cpu");
752 val = PrefsFindInt32("modelid");
753
754 #if REAL_ADDRESSING || DIRECT_ADDRESSING
755 puts("Current memory model does not support 24bit addressing");
756 if ( val == [classic tag] )
757 {
758 // Window already created by NIB file, just display
759 [panel makeKeyAndOrderFront:self];
760 WarningSheet(@"Compiled-in memory model does not support 24bit",
761 @"Disabling Mac Classic emulation", nil, panel);
762 cpu = [CPU68030 tag];
763 PrefsReplaceInt32("cpu", cpu);
764 val = [IIci tag];
765 PrefsReplaceInt32("modelid", val);
766 }
767
768 puts("Disabling 68000 & Mac Classic buttons");
769 [CPU68000 setEnabled:FALSE];
770 [classic setEnabled:FALSE];
771 #endif
772
773 [CPU68000 setState: [CPU68000 tag] == cpu];
774 [CPU68020 setState: [CPU68020 tag] == cpu];
775 [CPU68030 setState: [CPU68030 tag] == cpu];
776 [CPU68040 setState: [CPU68040 tag] == cpu];
777
778 [classic setState: [classic tag] == val];
779 [IIci setState: [IIci tag] == val];
780 [quadra900 setState: [quadra900 tag] == val];
781
782
783 // Lists of thingies:
784
785 val = PrefsFindInt32("keyboardtype");
786 tmp = [keyboard indexOfItemWithTag: val];
787 if ( tmp != -1 )
788 [keyboard selectItemAtIndex: tmp];
789 for ( tmp = 0; tmp < [keyboard numberOfItems]; ++tmp )
790 {
791 NSMenuItem *type = [keyboard itemAtIndex: tmp];
792 [type setState: [type tag] == val];
793 }
794
795
796 for ( tmp = 0; tmp < 7; ++tmp)
797 {
798 char pref[6];
799
800 pref[0] = '\0';
801
802 sprintf (pref, "scsi%d", tmp);
803 if ( (str = PrefsFindString(pref, 0) ) )
804 [SCSIds addInt: tmp
805 withPath: [NSString stringWithCString: str] ];
806 }
807
808 [SCSIdisks setDataSource: SCSIds];
809
810 locks = [diskImages tableColumnWithIdentifier: @"locked"];
811 if ( locks == nil )
812 NSLog (@"%s - Can't find column for lock images", __PRETTY_FUNCTION__);
813 [locks setDataCell: lockCell];
814
815 tmp = 0;
816 while ( (str = PrefsFindString("disk", tmp++) ) != NULL )
817 {
818 if ( *str == '*' )
819 [volsDS addObject: (NSObject *) locked
820 withPath: [NSString stringWithUTF8String: str+1]];
821 else
822 [volsDS addObject: (NSObject *) blank
823 withPath: [NSString stringWithUTF8String: str]];
824 }
825
826 [diskImages setDataSource: volsDS];
827
828
829 [panel makeKeyAndOrderFront:self]; // Window already created by NIB file, just display
830 }
831
832 @end