mirror of
https://github.com/mlaux/gb6.git
synced 2025-01-02 16:29:34 +00:00
show state dialog when selected from menu
This commit is contained in:
parent
698cc17030
commit
e00b998024
@ -28,185 +28,212 @@ emu_state theState;
|
||||
|
||||
void InitEverything(void)
|
||||
{
|
||||
Handle mbar;
|
||||
|
||||
InitGraf(&qd.thePort);
|
||||
InitFonts();
|
||||
InitWindows();
|
||||
InitMenus();
|
||||
TEInit();
|
||||
InitDialogs(0L);
|
||||
InitCursor();
|
||||
|
||||
mbar = GetNewMBar(MBAR_DEFAULT);
|
||||
SetMenuBar(mbar);
|
||||
DrawMenuBar();
|
||||
|
||||
g_running = 1;
|
||||
Handle mbar;
|
||||
|
||||
InitGraf(&qd.thePort);
|
||||
InitFonts();
|
||||
InitWindows();
|
||||
InitMenus();
|
||||
TEInit();
|
||||
InitDialogs(0L);
|
||||
InitCursor();
|
||||
|
||||
mbar = GetNewMBar(MBAR_DEFAULT);
|
||||
SetMenuBar(mbar);
|
||||
DrawMenuBar();
|
||||
|
||||
g_running = 1;
|
||||
}
|
||||
|
||||
void Render(void)
|
||||
{
|
||||
MoveTo(10, 10);
|
||||
DrawString("\pTest 123");
|
||||
MoveTo(10, 10);
|
||||
DrawString("\pTest 123");
|
||||
}
|
||||
|
||||
void StartEmulation(void)
|
||||
{
|
||||
g_wp = NewWindow(0, &windowBounds, WINDOW_TITLE, true,
|
||||
noGrowDocProc, (WindowPtr) -1, true, 0);
|
||||
SetPort(g_wp);
|
||||
g_wp = NewWindow(0, &windowBounds, WINDOW_TITLE, true,
|
||||
noGrowDocProc, (WindowPtr) -1, true, 0);
|
||||
SetPort(g_wp);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool LoadRom(StrFileName fileName, short vRefNum)
|
||||
{
|
||||
int err;
|
||||
short fileNo;
|
||||
long amtRead;
|
||||
|
||||
if(theState.rom != NULL) {
|
||||
// unload existing ROM
|
||||
free((char *) theState.rom);
|
||||
theState.romLength = 0;
|
||||
}
|
||||
|
||||
int err;
|
||||
short fileNo;
|
||||
long amtRead;
|
||||
|
||||
if(theState.rom != NULL) {
|
||||
// unload existing ROM
|
||||
free((char *) theState.rom);
|
||||
theState.romLength = 0;
|
||||
}
|
||||
|
||||
|
||||
err = FSOpen(fileName, vRefNum, &fileNo);
|
||||
|
||||
if(err != noErr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GetEOF(fileNo, (long *) &theState.romLength);
|
||||
theState.rom = (unsigned char *) malloc(theState.romLength);
|
||||
if(theState.rom == NULL) {
|
||||
Alert(ALRT_NOT_ENOUGH_RAM, NULL);
|
||||
return false;
|
||||
}
|
||||
|
||||
amtRead = theState.romLength;
|
||||
|
||||
FSRead(fileNo, &amtRead, theState.rom);
|
||||
return true;
|
||||
err = FSOpen(fileName, vRefNum, &fileNo);
|
||||
|
||||
if(err != noErr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GetEOF(fileNo, (long *) &theState.romLength);
|
||||
theState.rom = (unsigned char *) malloc(theState.romLength);
|
||||
if(theState.rom == NULL) {
|
||||
Alert(ALRT_NOT_ENOUGH_RAM, NULL);
|
||||
return false;
|
||||
}
|
||||
|
||||
amtRead = theState.romLength;
|
||||
|
||||
FSRead(fileNo, &amtRead, theState.rom);
|
||||
return true;
|
||||
}
|
||||
|
||||
// -- DIALOG BOX FUNCTIONS --
|
||||
|
||||
bool ShowOpenBox(void)
|
||||
{
|
||||
SFReply reply;
|
||||
Point pt = { 0, 0 };
|
||||
const int stdWidth = 348;
|
||||
Rect rect;
|
||||
|
||||
pt.h = qd.screenBits.bounds.right / 2 - stdWidth / 2;
|
||||
|
||||
SFGetFile(pt, NULL, NULL, -1, NULL, NULL, &reply);
|
||||
|
||||
if(reply.good) {
|
||||
return LoadRom(reply.fName, reply.vRefNum);
|
||||
}
|
||||
|
||||
return false;
|
||||
SFReply reply;
|
||||
Point pt = { 0, 0 };
|
||||
const int stdWidth = 348;
|
||||
Rect rect;
|
||||
|
||||
pt.h = qd.screenBits.bounds.right / 2 - stdWidth / 2;
|
||||
|
||||
SFGetFile(pt, NULL, NULL, -1, NULL, NULL, &reply);
|
||||
|
||||
if(reply.good) {
|
||||
return LoadRom(reply.fName, reply.vRefNum);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
DialogPtr stateDialog;
|
||||
void ShowStateDialog(void)
|
||||
{
|
||||
DialogPtr dp;
|
||||
|
||||
if (!stateDialog) {
|
||||
stateDialog = GetNewDialog(DLOG_STATE, 0L, (WindowPtr) -1L);
|
||||
}
|
||||
|
||||
ShowWindow(stateDialog);
|
||||
SelectWindow(stateDialog);
|
||||
}
|
||||
|
||||
void ShowAboutBox(void)
|
||||
{
|
||||
DialogPtr dp;
|
||||
EventRecord e;
|
||||
|
||||
dp = GetNewDialog(DLOG_ABOUT, 0L, (WindowPtr) -1L);
|
||||
|
||||
DrawDialog(dp);
|
||||
|
||||
while(!GetNextEvent(mDownMask, &e));
|
||||
while(WaitMouseUp());
|
||||
|
||||
DisposeDialog(dp);
|
||||
DialogPtr dp;
|
||||
EventRecord e;
|
||||
DialogItemIndex hitItem;
|
||||
|
||||
dp = GetNewDialog(DLOG_ABOUT, 0L, (WindowPtr) -1L);
|
||||
|
||||
ModalDialog(NULL, &hitItem);
|
||||
|
||||
// DrawDialog(dp);
|
||||
// while(!GetNextEvent(mDownMask, &e));
|
||||
// while(WaitMouseUp());
|
||||
|
||||
DisposeDialog(dp);
|
||||
}
|
||||
|
||||
// -- EVENT FUNCTIONS --
|
||||
|
||||
void OnMenuAction(long action)
|
||||
{
|
||||
short menu, item;
|
||||
|
||||
if(action <= 0)
|
||||
return;
|
||||
short menu, item;
|
||||
|
||||
if(action <= 0)
|
||||
return;
|
||||
|
||||
HiliteMenu(0);
|
||||
|
||||
menu = HiWord(action);
|
||||
item = LoWord(action);
|
||||
|
||||
if(menu == MENU_APPLE) {
|
||||
if(item == APPLE_ABOUT) {
|
||||
ShowAboutBox();
|
||||
}
|
||||
}
|
||||
|
||||
else if(menu == MENU_FILE) {
|
||||
if(item == FILE_OPEN) {
|
||||
if(ShowOpenBox())
|
||||
StartEmulation();
|
||||
}
|
||||
else if(item == FILE_QUIT) {
|
||||
g_running = 0;
|
||||
}
|
||||
}
|
||||
HiliteMenu(0);
|
||||
|
||||
menu = HiWord(action);
|
||||
item = LoWord(action);
|
||||
|
||||
if(menu == MENU_APPLE) {
|
||||
if(item == APPLE_ABOUT) {
|
||||
ShowAboutBox();
|
||||
}
|
||||
}
|
||||
|
||||
else if(menu == MENU_FILE) {
|
||||
if(item == FILE_OPEN) {
|
||||
if(ShowOpenBox())
|
||||
StartEmulation();
|
||||
}
|
||||
else if(item == FILE_QUIT) {
|
||||
g_running = 0;
|
||||
}
|
||||
}
|
||||
|
||||
else if (menu == MENU_EMULATION) {
|
||||
if (item == EMULATION_STATE) {
|
||||
ShowStateDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnMouseDown(EventRecord *pEvt)
|
||||
{
|
||||
short part;
|
||||
WindowPtr clicked;
|
||||
long action;
|
||||
|
||||
part = FindWindow(pEvt->where, &clicked);
|
||||
|
||||
switch(part) {
|
||||
case inDrag:
|
||||
DragWindow(clicked, pEvt->where, &qd.screenBits.bounds);
|
||||
break;
|
||||
case inGoAway:
|
||||
if(TrackGoAway(clicked, pEvt->where))
|
||||
DisposeWindow(clicked);
|
||||
break;
|
||||
case inContent:
|
||||
if(clicked != FrontWindow())
|
||||
SelectWindow(clicked);
|
||||
break;
|
||||
case inMenuBar:
|
||||
action = MenuSelect(pEvt->where);
|
||||
OnMenuAction(action);
|
||||
break;
|
||||
}
|
||||
short part;
|
||||
WindowPtr clicked;
|
||||
long action;
|
||||
|
||||
part = FindWindow(pEvt->where, &clicked);
|
||||
|
||||
switch(part) {
|
||||
case inDrag:
|
||||
DragWindow(clicked, pEvt->where, &qd.screenBits.bounds);
|
||||
break;
|
||||
case inGoAway:
|
||||
if(TrackGoAway(clicked, pEvt->where))
|
||||
DisposeWindow(clicked);
|
||||
break;
|
||||
case inContent:
|
||||
if(clicked != FrontWindow())
|
||||
SelectWindow(clicked);
|
||||
break;
|
||||
case inMenuBar:
|
||||
action = MenuSelect(pEvt->where);
|
||||
OnMenuAction(action);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// -- ENTRY POINT --
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
EventRecord evt;
|
||||
|
||||
InitEverything();
|
||||
|
||||
while(g_running) {
|
||||
if(WaitNextEvent(everyEvent, &evt, 10, 0) != nullEvent) {
|
||||
switch(evt.what) {
|
||||
case mouseDown:
|
||||
OnMouseDown(&evt);
|
||||
break;
|
||||
case updateEvt:
|
||||
BeginUpdate((WindowPtr) evt.message);
|
||||
Render();
|
||||
EndUpdate((WindowPtr) evt.message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
EventRecord evt;
|
||||
|
||||
InitEverything();
|
||||
|
||||
while(g_running) {
|
||||
if(WaitNextEvent(everyEvent, &evt, 10, 0) != nullEvent) {
|
||||
if (IsDialogEvent(&evt)) {
|
||||
DialogRef hitBox;
|
||||
DialogItemIndex hitItem;
|
||||
if (DialogSelect(&evt, &hitBox, &hitItem)) {
|
||||
stateDialog = NULL;
|
||||
}
|
||||
} else switch(evt.what) {
|
||||
case mouseDown:
|
||||
OnMouseDown(&evt);
|
||||
break;
|
||||
case updateEvt:
|
||||
BeginUpdate((WindowPtr) evt.message);
|
||||
Render();
|
||||
EndUpdate((WindowPtr) evt.message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#define ALRT_4_LINE 129
|
||||
|
||||
#define DLOG_ABOUT 128
|
||||
#define DLOG_STATE 129
|
||||
|
||||
#define MBAR_DEFAULT 128
|
||||
|
||||
@ -35,8 +36,9 @@
|
||||
#define FILE_QUIT 4
|
||||
|
||||
#define EMULATION_PAUSE 1
|
||||
#define EMULATION_PREFERENCES 3
|
||||
#define EMULATION_KEY_MAPPINGS 4
|
||||
#define EMULATION_STATE 2
|
||||
#define EMULATION_PREFERENCES 4
|
||||
#define EMULATION_KEY_MAPPINGS 5
|
||||
|
||||
typedef unsigned char bool;
|
||||
#define true 1
|
||||
|
Loading…
Reference in New Issue
Block a user