/*
* aboutdlg.cpp
* np2x
*
* Created by tk800 on Tue Nov 11 2003.
*
*/
#include "compiler.h"
#include "dialogutils.h"
#include "np2opening.h"
#include "np2ver.h"
#include "np2info.h"
#include "aboutdlg.h"
static WindowRef aboutWin;
static PicHandle pict;
const EventTypeSpec list[]={ { kEventClassCommand, kEventCommandProcess },
{ kEventClassWindow, kEventWindowShowing },
};
static const char np2infostr[] = \
"CPU: !CPU !CLOCK\r" \
"MEM: !MEM1\r" \
"GDC: !GDC\r" \
"TEXT: !TEXT\r" \
"GRPH: !GRPH\r" \
"SOUND: !EXSND\r" \
"\r" \
"BIOS: !BIOS\r" \
"RHYTHM: !RHYTHM\r"
;
static void closeAboutDialog(void) {
QuitAppModalLoopForWindow(aboutWin);
HideWindow(aboutWin);
DisposeWindow(aboutWin);
KillPicture(pict);
}
static pascal OSStatus cfWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) {
OSStatus err = eventNotHandledErr;
HICommand cmd;
ControlRef image, version, more;
Rect bounds, winrect;
char infostr[1024];
if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) {
GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
switch (cmd.commandID)
{
case 'detl':
GetWindowBounds(aboutWin, kWindowContentRgn, &winrect);
more = getControlRefByID('more',0,aboutWin);
if (winrect.bottom - winrect.top == 441) {
SetControl32BitValue(getControlRefByID('detl',0,aboutWin),0);
HideControl(more);
SizeWindow(aboutWin, 292, 230, true);
}
else {
ZeroMemory(infostr, sizeof(infostr));
np2info(infostr, np2infostr, sizeof(infostr));
SetControlData(more,kControlNoPart,kControlEditTextTextTag,sizeof(infostr), infostr);
SetControl32BitValue(getControlRefByID('detl',0,aboutWin),3);
SizeWindow(aboutWin, 292, 441, true);
ShowControl(more);
}
err=noErr;
break;
case kHICommandOK:
closeAboutDialog();
err=noErr;
break;
default:
break;
}
}
else if (GetEventClass(event)==kEventClassWindow) {
switch (GetEventKind(event))
{
case kEventWindowShowing:
image = getControlRefByID('logo', 0, aboutWin);
pict = getBMPfromResource("np2logo.tiff", &bounds);
SetControlData(image, kControlNoPart, kControlPictureHandleTag, sizeof(PicHandle), &pict);
version = getControlRefByID('vers', 0, aboutWin);
SetControlData(version, kControlNoPart, kControlStaticTextTextTag, sizeof(NP2VER_CORE), NP2VER_CORE);
err=noErr;
break;
default:
break;
}
}
(void)myHandler;
(void)userData;
return err;
}
static void makeNibWindow (IBNibRef nibRef) {
OSStatus err;
EventHandlerRef ref;
err = CreateWindowFromNib(nibRef, CFSTR("AboutDialog"), &aboutWin);
if (err == noErr) {
InstallWindowEventHandler (aboutWin, NewEventHandlerUPP(cfWinproc), GetEventTypeCount(list), list, (void *)aboutWin, &ref);
ShowWindow(aboutWin);
RunAppModalLoopForWindow(aboutWin);
}
return;
}
void AboutDialogProc( void ) {
OSStatus err;
IBNibRef nibRef;
err = CreateNibReference(CFSTR("np2"), &nibRef);
if (err ==noErr ) {
makeNibWindow (nibRef);
DisposeNibReference ( nibRef);
}
else {
return;
}
}
RetroPC.NET-CVS <cvs@retropc.net>