Beispiel #1
0
/**
 * Show the "alert" dialog. Return true if user pressed "OK".
 */
static int DlgAlert_ShowDlg(const char *text)
{
	static int maxlen = sizeof(dlglines[0])-1;
	char *t = (char *)malloc(strlen(text)+1);
	char *orig_t = t;
	int lines, i, len, offset;
	bool bOldMouseVisibility;
	int nOldMouseX, nOldMouseY;

	strcpy(t, text);
	lines = DlgAlert_FormatTextToBox(t, maxlen, &len);
	offset = (maxlen-len)/2;

	for(i=0; i<MAX_LINES; i++)
	{
		if (i < lines)
		{
			/* center text to current dlgline */
			memset(dlglines[i], ' ', offset);
			strcpy(dlglines[i] + offset, t);
			t += strlen(t)+1;
		}
		else
		{
			dlglines[i][0] = '\0';
		}
	}

	free(orig_t);

	if (SDLGui_SetScreen(sdlscrn))
		return false;
	SDLGui_CenterDlg(alertdlg);

	SDL_GetMouseState(&nOldMouseX, &nOldMouseY);
	bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY);
	SDL_ShowCursor(SDL_ENABLE);

	i = SDLGui_DoDialog(alertdlg, NULL);

	SDL_UpdateRect(sdlscrn, 0,0, 0,0);
	SDL_ShowCursor(bOldMouseVisibility);
	Main_WarpMouse(nOldMouseX, nOldMouseY);

	return (i == DLGALERT_OK);
}
Beispiel #2
0
/**
 * Show the "alert" dialog. Return true if user pressed "OK".
 */
static int DlgAlert_ShowDlg(const char *text)
{
	static int maxlen = sizeof(dlglines[0])-1;
	char *t = (char *)malloc(strlen(text)+1);
	char *orig_t = t;
	int lines, i, len, offset;
	bool bOldMouseVisibility;
	int nOldMouseX, nOldMouseY;

	strcpy(t, text);
	lines = DlgAlert_FormatTextToBox(t, maxlen, &len);
	offset = (maxlen-len)/2;

	for(i=0; i<MAX_LINES; i++)
	{
		if (i < lines)
		{
			/* center text to current dlgline */
			memset(dlglines[i], ' ', offset);
			strcpy(dlglines[i] + offset, t);
			t += strlen(t)+1;
		}
		else
		{
			dlglines[i][0] = '\0';
		}
	}

	free(orig_t);

	if (SDLGui_SetScreen(/*sdlscrn*/))
		return false;
	SDLGui_CenterDlg(alertdlg);

        do
	{
	       i = SDLGui_DoDialog(alertdlg, NULL);
               gui_poll_events();

	}
	while (i != DLGALERT_OK && i != DLGALERT_CANCEL && i != SDLGUI_QUIT
	        && i != SDLGUI_ERROR && !bQuitProgram);

	return (i == DLGALERT_OK);
}
Beispiel #3
0
/**
 * Shorcut to load a disk image
 */
static void ShortCut_InsertDisk(int drive)
{
    char *selname, *zip_path = NULL;
    const char *tmpname;
    char FileNameB[ FILENAME_MAX ];
    char ZipPathB[ FILENAME_MAX ];

    if (SDLGui_SetScreen(sdlscrn))
        return;

    /* Save current names for drive 1 before checking autoinsert */
    strcpy ( FileNameB , ConfigureParams.DiskImage.szDiskFileName[ 1 ] );
    strcpy ( ZipPathB , ConfigureParams.DiskImage.szDiskZipPath[ 1 ] );

    if (ConfigureParams.DiskImage.szDiskFileName[drive][0])
        tmpname = ConfigureParams.DiskImage.szDiskFileName[drive];
    else
        tmpname = ConfigureParams.DiskImage.szDiskImageDirectory;

    Main_PauseEmulation(true);
    selname = SDLGui_FileSelect("Floppy image:", tmpname, &zip_path, false);
    if (selname)
    {
        if (File_Exists(selname))
            Floppy_SetDiskFileName(drive, selname, zip_path);
        else
            Floppy_SetDiskFileNameNone(drive);

        if (zip_path)
            free(zip_path);
        free(selname);

        Floppy_InsertDiskIntoDrive(0);

        /* Check if inserting into drive 0 also changed drive 1 with autoinsert */
        if ( ( strcmp ( FileNameB , ConfigureParams.DiskImage.szDiskFileName[ 1 ] ) != 0 )
                || ( strcmp ( FileNameB , ConfigureParams.DiskImage.szDiskZipPath[ 1 ] ) != 0 ) )
            Floppy_InsertDiskIntoDrive(1);

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

    *bReset = false;
    *bLoadedSnapshot = false;

    if (SDLGui_SetScreen())
        return false;

    SDLGui_CenterDlg(maindlg);

    maindlg[MAINDLG_NORESET].state |= SG_SELECTED;
    maindlg[MAINDLG_RESET].state &= ~SG_SELECTED;

//	prefs = new Prefs(ThePrefs);

    do
    {
        retbut = SDLGui_DoDialog(maindlg, NULL);
        switch (retbut)
        {
        case MAINDLG_ABOUT:
            Dialog_AboutDlg();
            break;

        case MAINDLG_FLOPPYS:
            DlgFloppy_Main();
            break;

        case MAINDLG_VIDEO:
            Dialog_VideoDlg();
            break;

        case MAINDLG_MISC:
            Dialog_MiscDlg();
            break;

        case MAINDLG_JOYSTICK:
            Dialog_JoyDlg();
            break;

        case MAINDLG_SOUND:
            Dialog_SoundDlg();
            break;

        case MAINDLG_LOADCFG:
            /*
            			strcpy(sConfigFileName, ".frodorc");
            			psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, false);

            			if (psNewCfg)
            			{
            				prefs->Load(psNewCfg);
                         	TheC64->NewPrefs(prefs);
                         	ThePrefs = *prefs;

            				strcpy(sConfigFileName, psNewCfg);
            				free(psNewCfg);
            			}
            */
            break;

        case MAINDLG_SAVECFG:
            /*
            			strcpy(sConfigFileName, ".frodorc");
            			psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, true);

            			if (psNewCfg)
            			{
            				strcpy(sConfigFileName, psNewCfg);
            				prefs->Save(sConfigFileName);
            				free(psNewCfg);
            			}
            */
            break;

        case MAINDLG_SNAPSHOT:
            Dialog_SnapshotDlg();
            break;

        case MAINDLG_QUIT:
            bQuitProgram = true;
            break;
        }
        /*
        		if(ThePrefs!=*prefs){
        			printf("pref change \n");
        			TheC64->NewPrefs(prefs);
        			ThePrefs = *prefs;
        		}
        */
        gui_poll_events();

    }
    while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT
            && retbut != SDLGUI_ERROR && !bQuitProgram);


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

    //delete prefs;

    return (retbut == MAINDLG_OK);
}
Beispiel #5
0
/**
 * 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_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_FLOPPYS:
			DlgFloppy_Main();
			break;
		 case MAINDLG_HARDDISK:
			DlgHardDisk_Main();
			break;
		 case MAINDLG_ROM:
			DlgRom_Main();
			break;
		 case MAINDLG_MONITOR:
			Dialog_MonitorDlg();
			break;
		 case MAINDLG_WINDOW:
			Dialog_WindowDlg();
			break;
		 case MAINDLG_SYSTEM:
			Dialog_SystemDlg();
			break;
		 case MAINDLG_MEMORY:
			if (Dialog_MemDlg())
			{
				/* Memory snapshot has been loaded - leave GUI immediately */
				*bLoadedSnapshot = true;
				SDL_ShowCursor(bOldMouseVisibility);
				Main_WarpMouse(nOldMouseX, nOldMouseY);
				return true;
			}
			break;
		 case MAINDLG_JOY:
			Dialog_JoyDlg();
			break;
		 case MAINDLG_KEYBD:
			Dialog_KeyboardDlg();
			break;
		 case MAINDLG_DEVICES:
			Dialog_DeviceDlg();
			break;
		 case MAINDLG_SOUND:
			Dialog_SoundDlg();
			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_QUIT:
			bQuitProgram = true;
			break;
		}
                gui_poll_events();

	}
	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);
}
Beispiel #6
0
/**
 * This functions sets up the actual font and then displays the main dialog.
 */
int Dialog_MainDlg(bool *bReset, bool *bLoadedSnapshot)
{
	int retbut=0;
	bool bOldMouseVisibility;
	int nOldMouseX, nOldMouseY;
	char *psNewCfg;

	*bReset = false;
	*bLoadedSnapshot = false;

	if (SDLGui_SetScreen(/*sdlscrn*/))
		return false;

	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_FLOPPYS:
			DlgFloppy_Main();
			break;

		 case MAINDLG_HARDDISK:
			DlgHardDisk_Main();
			break;

		 case MAINDLG_ROM:
			DlgRom_Main();
			break;

		 case MAINDLG_VIDEO:
			Dialog_VideoDlg();
			break;

		 case MAINDLG_SYSTEM:
			Dialog_SystemDlg();
			break;

		 case MAINDLG_MEMORY:
			if (Dialog_MemDlg())
			{
				/* Memory snapshot has been loaded - leave GUI immediately */
				*bLoadedSnapshot = true;
				//Main_WarpMouse(nOldMouseX, nOldMouseY);
				return true;
			}
			break;

		 case MAINDLG_MISC:
			Dialog_MiscDlg();
			break;

		 case MAINDLG_JOYSTICK:
			Dialog_JoyDlg();
			break;

		 case MAINDLG_SOUND:
			Dialog_SoundDlg();
			break;

		 case MAINDLG_LOADCFG:
			strcpy(sConfigFileName, ".uaerc");
			psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, false);
			if (psNewCfg)
			{
					default_prefs(& changed_prefs, 0);
					changed_prefs.chipmem_size = 0;
					changed_prefs.bogomem_size = 0;
					unmount_all_hdfs();
					int ret = cfgfile_load (& changed_prefs, psNewCfg, NULL,1,0);
					if (ret) {

						check_prefs_changed_cpu();
						check_prefs_changed_audio();
						check_prefs_changed_custom();

						MUSTRESET_CFG=1;
					}


				strcpy(sConfigFileName, psNewCfg);

			}
			break;

		 case MAINDLG_QUIT:
			bQuitProgram = true;
			break;
		}
                gui_poll_events();
	}
	while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT
	        && retbut != SDLGUI_ERROR && !bQuitProgram);


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

	return (retbut == MAINDLG_OK);
}
Beispiel #7
0
/**
 * (re-)initialize statusbar internal variables for given screen surface
 * (sizes&colors may need to be re-calculated for the new SDL surface)
 * and draw the statusbar background.
 */
void Statusbar_Init(SDL_Surface *surf)
{
	msg_item_t *item;
	SDL_Rect ledbox, sbarbox;
	int i, fontw, fonth, offset;
	const char *text[NUM_DEVICE_LEDS] = { "EN:", "MO:", "SD:", "FD:" };

	assert(surf);

	/* dark green and light green for leds themselves */
	LedColorOff = SDL_MapRGB(surf->format, 0x00, 0x40, 0x00);
	LedColorOn  = SDL_MapRGB(surf->format, 0x00, 0xe0, 0x00);
	LedColorBg  = SDL_MapRGB(surf->format, 0x00, 0x00, 0x00);
	SysColorOff = SDL_MapRGB(surf->format, 0x40, 0x00, 0x00);
	SysColorOn  = SDL_MapRGB(surf->format, 0xe0, 0x00, 0x00);
	DspColorOff = SDL_MapRGB(surf->format, 0x00, 0x00, 0x40);
	DspColorOn  = SDL_MapRGB(surf->format, 0x00, 0x00, 0xe0);
	GrayBg      = SDL_MapRGB(surf->format, 0xb5, 0xb7, 0xaa);

	/* disable leds */
	for (i = 0; i < NUM_DEVICE_LEDS; i++) {
		Led[i].state = Led[i].oldstate = false;
		Led[i].expire = 0;
	}
	Statusbar_OverlayInit(surf);
	
	/* disable statusbar if it doesn't fit to video mode */
	if (surf->h < ScreenHeight + StatusbarHeight) {
		StatusbarHeight = 0;
	}
	if (!StatusbarHeight) {
		return;
	}

	/* prepare fonts */
	SDLGui_Init();
	SDLGui_SetScreen(surf);
	SDLGui_GetFontSize(&fontw, &fonth);

	/* video mode didn't match, need to recalculate sizes */
	if (surf->h > ScreenHeight + StatusbarHeight) {
		StatusbarHeight = fonth + 2;
		/* actually statusbar vertical offset */
		ScreenHeight = surf->h - StatusbarHeight;
	} else {
		assert(fonth+2 < StatusbarHeight);
	}

	/* draw statusbar background gray so that text shows */
	sbarbox.x = 0;
	sbarbox.y = surf->h - StatusbarHeight;
	sbarbox.w = surf->w;
	sbarbox.h = StatusbarHeight;
	SDL_FillRect(surf, &sbarbox, GrayBg);

	/* led size */
	LedRect.w = fonth/2;
	LedRect.h = fonth - 4;
	LedRect.y = ScreenHeight + StatusbarHeight/2 - LedRect.h/2;

	/* black box for the leds */
	ledbox = LedRect;
	ledbox.y -= 1;
	ledbox.w += 2;
	ledbox.h += 2;

	offset = fontw;
	MessageRect.y = LedRect.y - 2;
	/* draw led texts and boxes + calculate box offsets */
	for (i = 0; i < NUM_DEVICE_LEDS; i++) {
		SDLGui_Text(offset, MessageRect.y, text[i]);
		offset += strlen(text[i]) * fontw;
		offset += fontw/2;

		ledbox.x = offset - 1;
		SDL_FillRect(surf, &ledbox, LedColorBg);

		LedRect.x = offset;
		SDL_FillRect(surf, &LedRect, LedColorOff);

		Led[i].offset = offset;
		offset += LedRect.w + fontw;
	}
#if 0
	/* draw frameskip */
	FrameSkipsRect.x = offset;
	FrameSkipsRect.y = MessageRect.y;
	SDLGui_Text(FrameSkipsRect.x, FrameSkipsRect.y, "FS:");
	FrameSkipsRect.x += 3 * fontw + fontw/2;
	FrameSkipsRect.w = 4 * fontw;
	FrameSkipsRect.h = fonth;

	if(ConfigureParams.System.bFastForward) {
		SDLGui_Text(FrameSkipsRect.x, FrameSkipsRect.y, "0 >>");
	} else {
		SDLGui_Text(FrameSkipsRect.x, FrameSkipsRect.y, "0");
	}

	nOldFrameSkips = 0;

	/* intialize messages */
	MessageRect.x = FrameSkipsRect.x + FrameSkipsRect.w + fontw;
#else
    MessageRect.x = offset + fontw;
#endif
	MessageRect.w = MAX_MESSAGE_LEN * fontw;
	MessageRect.h = fonth;
	for (item = MessageList; item; item = item->next) {
		item->shown = false;
	}
	
	/* draw dsp led box */
	DspLedRect = LedRect;
	DspLedRect.x = surf->w - 8*fontw - DspLedRect.w;
	ledbox.x = DspLedRect.x - 1;
	SDLGui_Text(ledbox.x - 4*fontw - fontw/2, MessageRect.y, "DSP:");
	SDL_FillRect(surf, &ledbox, LedColorBg);
	SDL_FillRect(surf, &DspLedRect, DspColorOff);
	bOldSystemLed = false;

	/* draw system led box */
	SystemLedRect = LedRect;
	SystemLedRect.x = surf->w - fontw - SystemLedRect.w;
	ledbox.x = SystemLedRect.x - 1;
	SDLGui_Text(ledbox.x - 4*fontw - fontw/2, MessageRect.y, "LED:");
	SDL_FillRect(surf, &ledbox, LedColorBg);
	SDL_FillRect(surf, &SystemLedRect, SysColorOff);
	bOldSystemLed = false;

	/* and blit statusbar on screen */
	SDL_UpdateRects(surf, 1, &sbarbox);
	DEBUGPRINT(("Draw statusbar\n"));
}