--- hatari/src/gui-sdl/dlgMain.c 2019/04/01 07:11:38 1.1 +++ hatari/src/gui-sdl/dlgMain.c 2019/04/01 07:15:41 1.1.1.8 @@ -6,7 +6,7 @@ The main dialog. */ -char DlgMain_rcsid[] = "Hatari $Id: dlgMain.c,v 1.1 2019/04/01 07:11:38 root Exp $"; +const char DlgMain_fileid[] = "Hatari dlgMain.c : " __DATE__ " " __TIME__; #include "main.h" #include "configuration.h" @@ -14,22 +14,10 @@ char DlgMain_rcsid[] = "Hatari $Id: dlgM #include "sdlgui.h" #include "screen.h" -/* Prototypes of the dialog functions: */ -void Dialog_AboutDlg(void); -void Dialog_DiscDlg(void); -void Dialog_TosGemDlg(void); -void Dialog_ScreenDlg(void); -void Dialog_SoundDlg(void); -void Dialog_SystemDlg(void); -void Dialog_MemDlg(void); -void Dialog_JoyDlg(void); -void Dialog_KeyboardDlg(void); -void Dialog_DeviceDlg(void); - #define MAINDLG_ABOUT 2 -#define MAINDLG_DISCS 3 -#define MAINDLG_TOSGEM 4 +#define MAINDLG_DISKS 3 +#define MAINDLG_ROM 4 #define MAINDLG_SCREEN 5 #define MAINDLG_SOUND 6 #define MAINDLG_CPU 7 @@ -49,26 +37,26 @@ void Dialog_DeviceDlg(void); /* The main dialog: */ static SGOBJ maindlg[] = { - { SGBOX, 0, 0, 0,0, 36,22, NULL }, - { SGTEXT, 0, 0, 10,1, 16,1, "Hatari main menu" }, - { SGBUTTON, 0, 0, 4,4, 12,1, "About" }, - { SGBUTTON, 0, 0, 4,6, 12,1, "Discs" }, - { SGBUTTON, 0, 0, 4,8, 12,1, "TOS/GEM" }, - { SGBUTTON, 0, 0, 4,10, 12,1, "Screen" }, - { SGBUTTON, 0, 0, 4,12, 12,1, "Sound" }, - { SGBUTTON, 0, 0, 20,4, 12,1, "System" }, - { SGBUTTON, 0, 0, 20,6, 12,1, "Memory" }, - { SGBUTTON, 0, 0, 20,8, 12,1, "Joysticks" }, - { SGBUTTON, 0, 0, 20,10, 12,1, "Keyboard" }, - { SGBUTTON, 0, 0, 20,12, 12,1, "Devices" }, - { SGBUTTON, 0, 0, 3,15, 14,1, "Load config." }, - { SGBUTTON, 0, 0, 19,15, 14,1, "Save config." }, - { SGRADIOBUT, 0, 0, 2,18, 10,1, "No Reset" }, - { SGRADIOBUT, 0, 0, 2,20, 10,1, "Reset ST" }, - { SGBUTTON, 0, 0, 14,18, 8,3, "Okay" }, - { SGBUTTON, 0, 0, 25,20, 8,1, "Cancel" }, - { SGBUTTON, 0, 0, 25,18, 8,1, "Quit" }, - { -1, 0, 0, 0,0, 0,0, NULL } + { SGBOX, 0, 0, 0,0, 36,22, NULL }, + { SGTEXT, 0, 0, 10,1, 16,1, "Hatari main menu" }, + { SGBUTTON, 0, 0, 4,4, 12,1, "About" }, + { SGBUTTON, 0, 0, 4,6, 12,1, "Disks" }, + { SGBUTTON, 0, 0, 4,8, 12,1, "ROM" }, + { SGBUTTON, 0, 0, 4,10, 12,1, "Screen" }, + { SGBUTTON, 0, 0, 4,12, 12,1, "Sound" }, + { SGBUTTON, 0, 0, 20,4, 12,1, "System" }, + { SGBUTTON, 0, 0, 20,6, 12,1, "Memory" }, + { SGBUTTON, 0, 0, 20,8, 12,1, "Joysticks" }, + { SGBUTTON, 0, 0, 20,10, 12,1, "Keyboard" }, + { SGBUTTON, 0, 0, 20,12, 12,1, "Devices" }, + { SGBUTTON, 0, 0, 3,15, 14,1, "Load config." }, + { SGBUTTON, 0, 0, 19,15, 14,1, "Save config." }, + { SGRADIOBUT, 0, 0, 2,18, 10,1, "No Reset" }, + { SGRADIOBUT, 0, 0, 2,20, 10,1, "Reset ST" }, + { SGBUTTON, SG_DEFAULT, 0, 14,18, 8,3, "Okay" }, + { SGBUTTON, SG_CANCEL, 0, 25,20, 8,1, "Cancel" }, + { SGBUTTON, 0, 0, 25,18, 8,1, "Quit" }, + { -1, 0, 0, 0,0, 0,0, NULL } }; @@ -76,91 +64,87 @@ static SGOBJ maindlg[] = /* This functions sets up the actual font and then displays the main dialog. */ -int Dialog_MainDlg(BOOL *bReset) +int Dialog_MainDlg(bool *bReset, bool *bLoadedSnapshot) { - int retbut; + int retbut; + bool bOldMouseVisibility; + int nOldMouseX, nOldMouseY; + + *bReset = false; + *bLoadedSnapshot = false; + + if (SDLGui_SetScreen(sdlscrn)) + return false; + + SDL_GetMouseState(&nOldMouseX, &nOldMouseY); + bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY); + SDL_ShowCursor(SDL_ENABLE); + + SDLGui_CenterDlg(maindlg); + + maindlg[MAINDLG_NORESET].state |= SG_SELECTED; + maindlg[MAINDLG_RESET].state &= ~SG_SELECTED; + + do + { + retbut = SDLGui_DoDialog(maindlg, NULL); + switch (retbut) + { + case MAINDLG_ABOUT: + Dialog_AboutDlg(); + break; + case MAINDLG_DISKS: + Dialog_DiskDlg(); + break; + case MAINDLG_ROM: + DlgRom_Main(); + break; + case MAINDLG_SCREEN: + Dialog_ScreenDlg(); + break; + case MAINDLG_SOUND: + Dialog_SoundDlg(); + break; + case MAINDLG_CPU: + Dialog_SystemDlg(); + break; + case MAINDLG_MEMORY: + if (Dialog_MemDlg()) + { + /* Memory snapshot has been loaded - leave GUI immediately */ + *bLoadedSnapshot = true; + return true; + } + break; + case MAINDLG_JOY: + Dialog_JoyDlg(); + break; + case MAINDLG_KEYBD: + Dialog_KeyboardDlg(); + break; + case MAINDLG_DEVICES: + Dialog_DeviceDlg(); + break; + case MAINDLG_LOADCFG: + Configuration_Load(NULL); + break; + case MAINDLG_SAVECFG: + Configuration_Save(); + break; + case MAINDLG_QUIT: + bQuitProgram = true; + break; + } + } + while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT + && retbut != SDLGUI_ERROR && !bQuitProgram); - if(SDLGui_PrepareFont()) - return FALSE; - SDLGui_CenterDlg(maindlg); - SDL_ShowCursor(SDL_ENABLE); + if (maindlg[MAINDLG_RESET].state & SG_SELECTED) + *bReset = true; - maindlg[MAINDLG_NORESET].state |= SG_SELECTED; - maindlg[MAINDLG_RESET].state &= ~SG_SELECTED; - - do - { - retbut = SDLGui_DoDialog(maindlg); - switch(retbut) - { - case MAINDLG_ABOUT: - Dialog_AboutDlg(); - break; - case MAINDLG_DISCS: - Dialog_DiscDlg(); - break; - case MAINDLG_TOSGEM: - Dialog_TosGemDlg(); - break; - case MAINDLG_SCREEN: - Dialog_ScreenDlg(); - break; - case MAINDLG_SOUND: - Dialog_SoundDlg(); - break; - case MAINDLG_CPU: - Dialog_SystemDlg(); - break; - case MAINDLG_MEMORY: - Dialog_MemDlg(); - break; - case MAINDLG_JOY: - Dialog_JoyDlg(); - break; - case MAINDLG_KEYBD: - Dialog_KeyboardDlg(); - break; - case MAINDLG_DEVICES: - Dialog_DeviceDlg(); - break; - case MAINDLG_LOADCFG: - { - CNF_PARAMS tmpParams; - /* Configuration_Load uses the variables from ConfigureParams. - * That's why we have to temporarily back it up here */ - tmpParams = ConfigureParams; - Configuration_Load(); - DialogParams = ConfigureParams; - ConfigureParams = tmpParams; - } - break; - case MAINDLG_SAVECFG: - { - CNF_PARAMS tmpParams; - /* Configuration_Save uses the variables from ConfigureParams. - * That's why we have to temporarily back it up here */ - tmpParams = ConfigureParams; - ConfigureParams = DialogParams; - Configuration_Save(); - ConfigureParams = tmpParams; - } - break; - case MAINDLG_QUIT: - bQuitProgram = TRUE; - break; - } - - SDL_UpdateRect(sdlscrn, 0,0,0,0); - } - while(retbut!=MAINDLG_OK && retbut!=MAINDLG_CANCEL && !bQuitProgram); - - SDL_ShowCursor(SDL_DISABLE); - - if( maindlg[MAINDLG_RESET].state & SG_SELECTED ) - *bReset = TRUE; - else - *bReset = FALSE; + SDL_ShowCursor(bOldMouseVisibility); + Main_WarpMouse(nOldMouseX, nOldMouseY); - return(retbut == MAINDLG_OK); + return (retbut == MAINDLG_OK); }