File:
[RetroPC.NET] /
np2 /
macosx /
dialog /
macnewdisk.cpp
Revision
1.7:
download - view:
text,
annotated -
select for diffs
Thu Feb 26 02:16:31 2004 JST (21 years, 8 months ago) by
tk800
Branches:
MAIN
CVS tags:
VER_0_82_x64,
VER_0_82,
VER_0_81A,
VER_0_81,
VER_0_80,
VER_0_79,
VER_0_78,
VER_0_77,
VER_0_76,
VER_0_75,
HEAD
fix fullscreen and newdisk[MacOSX] (tk800)
#include "compiler.h"
#include "resource.h"
#include "np2.h"
#include "newdisk.h"
#include "dialog.h"
#include "dialogutils.h"
#include "macnewdisk.h"
static WindowRef diskWin;
static SInt32 targetDisk, media, hdsize, hddtype;
static char disklabel[256];
enum {kTabMasterSig = 'ScrT',kTabMasterID = 1000,kTabPaneSig= 'ScTb'};
#define kMaxNumTabs 4
static UInt16 lastPaneSelected = 1;
#define getControlValue(a,b) GetControl32BitValue(getControlRefByID(a,b,diskWin))
const int defaultsize[5] = {20, 41, 65, 80, 128};
const EventTypeSpec tabControlEvents[] ={ { kEventClassControl, kEventControlHit }};
const EventTypeSpec hicommandEvents[]={ { kEventClassCommand, kEventCommandProcess },};
static pascal OSStatus cfWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) {
OSStatus err = eventNotHandledErr;
HICommand cmd;
SINT32 data;
char outstr[16];
if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) {
GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
switch (cmd.commandID)
{
case 'hds2':
data = getControlValue('hdsz', 3)-1;
sprintf(outstr, "%d", defaultsize[data]);
SetControlData(getControlRefByID('hdsz',2,diskWin),kControlNoPart,kControlStaticTextTextTag,strlen(outstr),outstr);
Draw1Control(getControlRefByID('hdsz',2,diskWin));
break;
case 'hds4':
data = getControlValue('hdsz', 5)-1;
sprintf(outstr, "%d", defaultsize[data]);
SetControlData(getControlRefByID('hdsz',4,diskWin),kControlNoPart,kControlStaticTextTextTag,strlen(outstr),outstr);
Draw1Control(getControlRefByID('hdsz',4,diskWin));
break;
case kHICommandOK:
targetDisk = getControlValue(kTabMasterSig, kTabMasterID);
getFieldText(getControlRefByID('fdlb', 0, diskWin), disklabel);
media = getControlValue('fdty', 0);
if (targetDisk==2 || targetDisk==4) {
data = getFieldValue(getControlRefByID('hdsz', targetDisk, diskWin));
if (data < 0) {
data = 0;
}
else if (data > 512) {
data = 512;
}
hdsize = data;
}
else if (targetDisk==3) {
hdsize = getControlValue('hdsz', 20)-1;
}
QuitAppModalLoopForWindow(diskWin);
err=noErr;
break;
case kHICommandCancel:
QuitAppModalLoopForWindow(diskWin);
err=noErr;
break;
default:
break;
}
}
(void)myHandler;
(void)userData;
return err;
}
static pascal OSStatus PrefsTabEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData )
{
WindowRef theWindow = (WindowRef)inUserData; // get the windowRef, passed around as userData
short ret;
ControlRef focus = NULL;
ret = changeTab(theWindow, lastPaneSelected);
if (ret) {
if (ret == 1) {
focus = getControlRefByID('fdlb', 0, theWindow);
}
else if (ret == 2 || ret == 4) {
focus = getControlRefByID('hdsz', ret, theWindow);
}
SetKeyboardFocus(theWindow, focus, kControlFocusNextPart);
lastPaneSelected = ret;
}
return( eventNotHandledErr );
}
static void makeNibWindow (IBNibRef nibRef) {
OSStatus err;
EventHandlerRef ref;
err = CreateWindowFromNib(nibRef, CFSTR("NewDiskDialog"), &diskWin);
if (err == noErr) {
SetInitialTabState(diskWin, lastPaneSelected, kMaxNumTabs);
InstallControlEventHandler( getControlRefByID(kTabMasterSig,kTabMasterID,diskWin), PrefsTabEventHandlerProc , GetEventTypeCount(tabControlEvents), tabControlEvents, diskWin, NULL );
InstallWindowEventHandler (diskWin, NewEventHandlerUPP(cfWinproc), GetEventTypeCount(hicommandEvents), hicommandEvents, (void *)diskWin, &ref);
ShowWindow(diskWin);
RunAppModalLoopForWindow(diskWin);
}
return;
}
static SInt32 initNewDisk( void ) {
OSStatus err;
IBNibRef nibRef;
err = CreateNibReference(CFSTR("np2"), &nibRef);
if (err ==noErr ) {
makeNibWindow (nibRef);
DisposeNibReference ( nibRef);
}
return(err);
}
// とりあえずモーダルで
void newdisk(void) {
FSSpec fss;
char fname[MAX_PATH];
initNewDisk();
if (targetDisk == 1) {
if (dialog_filewriteselect('.D88', "Newdisk.d88", &fss, diskWin)) {
fsspec2path(&fss, fname, sizeof(fname));
newdisk_fdd(fname, media << 4, disklabel);
}
}
else if (targetDisk == 2) {
if (dialog_filewriteselect('.THD', "Newdisk.thd", &fss, diskWin)) {
fsspec2path(&fss, fname, sizeof(fname));
newdisk_thd(fname, hdsize);
}
}
else if (targetDisk == 3) {
if (dialog_filewriteselect('.HDI', "Newdisk.hdi", &fss, diskWin)) {
fsspec2path(&fss, fname, sizeof(fname));
newdisk_hdi(fname, hddtype);
}
}
else if (targetDisk == 4) {
if (dialog_filewriteselect('.HDD', "Newdisk.hdd", &fss, diskWin)) {
fsspec2path(&fss, fname, sizeof(fname));
newdisk_vhd(fname, hdsize);
}
}
HideWindow(diskWin);
DisposeWindow(diskWin);
}
RetroPC.NET-CVS <cvs@retropc.net>