Source to src/gui-sdl/dlgMain.c


Enter a symbol's name here to quickly find it.

/*
  Hatari - dlgMain.c

  This file is distributed under the GNU Public License, version 2 or at
  your option any later version. Read the file gpl.txt for details.

  The main dialog.
*/
const char DlgMain_fileid[] = "Hatari dlgMain.c : " __DATE__ " " __TIME__;

#include "main.h"
#include "configuration.h"
#include "dialog.h"
#include "sdlgui.h"
#include "screen.h"
#include "dimension.hpp"


#define MAINDLG_ABOUT    2
#define MAINDLG_SYSTEM   3
#define MAINDLG_ROM      4
#define MAINDLG_GRAPH    5
#define MAINDLG_ENET     6
#define MAINDLG_BOOT     7
#define MAINDLG_SCSI     8
#define MAINDLG_MO       9
#define MAINDLG_FLOPPY   10
#define MAINDLG_KEYBD    11
#define MAINDLG_MOUSE    12
#define MAINDLG_SOUND    13
#define MAINDLG_PRINTER  14
#define MAINDLG_LOADCFG  15
#define MAINDLG_SAVECFG  16
#define MAINDLG_RESET    17
#define MAINDLG_SHOW     18
#define MAINDLG_OK       19
#define MAINDLG_QUIT     20
#define MAINDLG_CANCEL   21


/* The main dialog: */
static SGOBJ maindlg[] =
{
	{ SGBOX, 0, 0, 0,0, 50,19, NULL },
	{ SGTEXT, 0, 0, 15,1, 20,1, "Previous - Main menu" },
    { SGHIDDEN, 0, 0, 15,1, 8,1, "Previous" },
	{ SGBUTTON, 0, 0, 2,4, 13,1, "System" },
	{ SGBUTTON, 0, 0, 2,6, 13,1, "ROM" },
	{ SGBUTTON, 0, 0, 2,8, 13,1, "Graphics" },
	{ SGBUTTON, 0, 0, 2,10, 13,1, "Ethernet" },
	{ SGBUTTON, 0, 0, 17,4, 16,1, "Boot options" },
	{ SGBUTTON, 0, 0, 17,6, 16,1, "SCSI disks" },
	{ SGBUTTON, 0, 0, 17,8, 16,1, "MO disks" },
	{ SGBUTTON, 0, 0, 17,10, 16,1, "Floppy disks" },
	{ SGBUTTON, 0, 0, 35,4, 13,1, "Keyboard" },
	{ SGBUTTON, 0, 0, 35,6, 13,1, "Mouse" },
	{ SGBUTTON, 0, 0, 35,8, 13,1, "Sound" },
	{ SGBUTTON, 0, 0, 35,10, 13,1, "Printer" },
	{ SGBUTTON, 0, 0, 7,13, 16,1, "Load config." },
	{ SGBUTTON, 0, 0, 27,13, 16,1, "Save config." },
	{ SGCHECKBOX, 0, 0, 3,15, 15,1, "Reset machine" },
    { SGCHECKBOX, 0, 0, 3,17, 15,1, "Show at startup" },
	{ SGBUTTON, SG_DEFAULT, 0, 21,15, 8,3, "OK" },
	{ SGBUTTON, 0, 0, 36,15, 10,1, "Quit" },
	{ SGBUTTON, SG_CANCEL, 0, 36,17, 10,1, "Cancel" },
	{ -1, 0, 0, 0,0, 0,0, NULL }
};


/**
 * This functions sets up the actual font and then displays the main dialog.
 */
int Dialog_MainDlg(bool *bReset, bool *bLoadedSnapshot)
{
	int retbut;
	bool bOldMouseVisibility;
	int nOldMouseX, nOldMouseY;
	char *psNewCfg;

	*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_RESET].state &= ~SG_SELECTED;
    
    if(ConfigureParams.ConfigDialog.bShowConfigDialogAtStartup) {
        maindlg[MAINDLG_SHOW].state |= SG_SELECTED;		
	}
    else {
        maindlg[MAINDLG_SHOW].state &= ~SG_SELECTED;		
	}

	do
	{
		retbut = SDLGui_DoDialog(maindlg, NULL);
		switch (retbut)
		{
		 case MAINDLG_ABOUT:
			Dialog_AboutDlg();
			break;
		 case MAINDLG_GRAPH:
			Dialog_GraphicsDlg();
			break;
		 case MAINDLG_ENET:
			DlgEthernet_Main();
			break;
		 case MAINDLG_SCSI:
			DlgSCSI_Main();
			break;
		 case MAINDLG_ROM:
			DlgRom_Main();
			break;
		 case MAINDLG_MO:
            DlgOptical_Main();
			break;
		 case MAINDLG_FLOPPY:
			DlgFloppy_Main();
			break;
		 case MAINDLG_SYSTEM:
			Dialog_SystemDlg();
			break;
		 case MAINDLG_PRINTER:
			DlgPrinter_Main();
			break;
		 case MAINDLG_BOOT:
			DlgBoot_Main();
			break;
		 case MAINDLG_KEYBD:
			Dialog_KeyboardDlg();
			break;
		 case MAINDLG_MOUSE:
			Dialog_MouseDlg();
			break;
		 case MAINDLG_SOUND:
			DlgSound_Main();
			break;
		 case MAINDLG_LOADCFG:
			psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, false);
			if (psNewCfg)
			{
				strcpy(sConfigFileName, psNewCfg);
				Configuration_Load(NULL);
				free(psNewCfg);
			}
			break;
		 case MAINDLG_SAVECFG:
			psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, true);
			if (psNewCfg)
			{
				strcpy(sConfigFileName, psNewCfg);
				Configuration_Save();
				free(psNewCfg);
			}
			break;
         case MAINDLG_SHOW:
            if (maindlg[MAINDLG_SHOW].state & SG_SELECTED)
                ConfigureParams.ConfigDialog.bShowConfigDialogAtStartup = true;
            else
                ConfigureParams.ConfigDialog.bShowConfigDialogAtStartup = false;
            break;
		 case MAINDLG_QUIT:
			bQuitProgram = true;
			break;
		}
	}
	while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT
	        && retbut != SDLGUI_ERROR && !bQuitProgram);

    
	if (maindlg[MAINDLG_RESET].state & SG_SELECTED)
		*bReset = true;

	SDL_ShowCursor(bOldMouseVisibility);
	Main_WarpMouse(nOldMouseX, nOldMouseY);

	return (retbut == MAINDLG_OK);
}