- rewrite of the win32 dialog handling based on the "overwrite ask" example
- user shortcut dialog string limit fixed - fixed keyboard focus in user shortcut and cdrom dialog
This commit is contained in:
parent
3658399a4a
commit
9b4db66efd
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: sdl.cc,v 1.60 2005-10-21 18:00:17 vruppert Exp $
|
// $Id: sdl.cc,v 1.61 2005-10-22 11:00:00 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -42,6 +42,9 @@
|
|||||||
|
|
||||||
#include "icon_bochs.h"
|
#include "icon_bochs.h"
|
||||||
#include "sdl.h"
|
#include "sdl.h"
|
||||||
|
#ifdef WIN32
|
||||||
|
#include "win32dialog.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class bx_sdl_gui_c : public bx_gui_c {
|
class bx_sdl_gui_c : public bx_gui_c {
|
||||||
public:
|
public:
|
||||||
@ -298,6 +301,7 @@ void bx_sdl_gui_c::specific_init(
|
|||||||
|
|
||||||
new_gfx_api = 1;
|
new_gfx_api = 1;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
win32_init_notify_callback();
|
||||||
user_dialog = 1;
|
user_dialog = 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: textconfig.cc,v 1.30 2005-06-06 20:14:50 vruppert Exp $
|
// $Id: textconfig.cc,v 1.31 2005-10-22 11:00:00 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// This is code for a text-mode configuration interface. Note that this file
|
// This is code for a text-mode configuration interface. Note that this file
|
||||||
@ -644,11 +644,6 @@ int log_action_n_choices = 4 + (BX_DEBUGGER||BX_GDBSTUB?1:0);
|
|||||||
BxEvent *
|
BxEvent *
|
||||||
config_interface_notify_callback (void *unused, BxEvent *event)
|
config_interface_notify_callback (void *unused, BxEvent *event)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
|
||||||
int opts;
|
|
||||||
bx_param_c *param;
|
|
||||||
bx_param_string_c *sparam;
|
|
||||||
#endif
|
|
||||||
event->retcode = -1;
|
event->retcode = -1;
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
@ -656,34 +651,10 @@ config_interface_notify_callback (void *unused, BxEvent *event)
|
|||||||
event->retcode = 0;
|
event->retcode = 0;
|
||||||
return event;
|
return event;
|
||||||
case BX_SYNC_EVT_ASK_PARAM:
|
case BX_SYNC_EVT_ASK_PARAM:
|
||||||
#ifdef WIN32
|
|
||||||
param = event->u.param.param;
|
|
||||||
if (param->get_type() == BXT_PARAM_STRING) {
|
|
||||||
sparam = (bx_param_string_c *)param;
|
|
||||||
opts = sparam->get_options()->get();
|
|
||||||
if (opts & sparam->IS_FILENAME) {
|
|
||||||
if (param->get_id() == BXP_NULL) {
|
|
||||||
event->retcode = AskFilename(GetBochsWindow(), (bx_param_filename_c *)sparam, "txt");
|
|
||||||
} else {
|
|
||||||
event->retcode = FloppyDialog((bx_param_filename_c *)sparam);
|
|
||||||
}
|
|
||||||
return event;
|
|
||||||
} else {
|
|
||||||
event->retcode = AskString(sparam);
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
} else if (param->get_type() == BXT_LIST) {
|
|
||||||
event->retcode = Cdrom1Dialog();
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
event->u.param.param->text_ask (stdin, stderr);
|
event->u.param.param->text_ask (stdin, stderr);
|
||||||
return event;
|
return event;
|
||||||
case BX_SYNC_EVT_LOG_ASK:
|
case BX_SYNC_EVT_LOG_ASK:
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
|
||||||
LogAskDialog(event);
|
|
||||||
#else
|
|
||||||
int level = event->u.logmsg.level;
|
int level = event->u.logmsg.level;
|
||||||
fprintf (stderr, "========================================================================\n");
|
fprintf (stderr, "========================================================================\n");
|
||||||
fprintf (stderr, "Event type: %s\n", SIM->get_log_level_name (level));
|
fprintf (stderr, "Event type: %s\n", SIM->get_log_level_name (level));
|
||||||
@ -713,7 +684,6 @@ ask:
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
event->retcode = choice;
|
event->retcode = choice;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return event;
|
return event;
|
||||||
case BX_ASYNC_EVT_REFRESH:
|
case BX_ASYNC_EVT_REFRESH:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: win32.cc,v 1.97 2005-10-21 18:00:17 vruppert Exp $
|
// $Id: win32.cc,v 1.98 2005-10-22 11:00:00 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -38,6 +38,7 @@
|
|||||||
#if BX_WITH_WIN32
|
#if BX_WITH_WIN32
|
||||||
|
|
||||||
#include "zmouse.h"
|
#include "zmouse.h"
|
||||||
|
#include "win32dialog.h"
|
||||||
#include "win32res.h"
|
#include "win32res.h"
|
||||||
#include "font/vga.bitmap.h"
|
#include "font/vga.bitmap.h"
|
||||||
// windows.h is included by bochs.h
|
// windows.h is included by bochs.h
|
||||||
@ -680,6 +681,7 @@ void bx_win32_gui_c::specific_init(int argc, char **argv, unsigned
|
|||||||
bx_keymap.loadKeymap(NULL); // I have no function to convert X windows symbols
|
bx_keymap.loadKeymap(NULL); // I have no function to convert X windows symbols
|
||||||
}
|
}
|
||||||
|
|
||||||
|
win32_init_notify_callback();
|
||||||
user_dialog = 1;
|
user_dialog = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: win32dialog.cc,v 1.25 2005-10-07 23:28:43 vruppert Exp $
|
// $Id: win32dialog.cc,v 1.26 2005-10-22 11:00:00 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -7,6 +7,7 @@
|
|||||||
#if BX_USE_TEXTCONFIG && defined(WIN32)
|
#if BX_USE_TEXTCONFIG && defined(WIN32)
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
@ -18,6 +19,10 @@ extern "C" {
|
|||||||
|
|
||||||
const char log_choices[5][16] = {"ignore", "log", "ask user", "end simulation", "no change"};
|
const char log_choices[5][16] = {"ignore", "log", "ask user", "end simulation", "no change"};
|
||||||
static int retcode = 0;
|
static int retcode = 0;
|
||||||
|
static bxevent_handler old_callback = NULL;
|
||||||
|
static void *old_callback_arg = NULL;
|
||||||
|
|
||||||
|
int AskFilename(HWND hwnd, bx_param_filename_c *param, const char *ext);
|
||||||
|
|
||||||
HWND GetBochsWindow()
|
HWND GetBochsWindow()
|
||||||
{
|
{
|
||||||
@ -97,21 +102,23 @@ static BOOL CALLBACK LogAskProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lPara
|
|||||||
static BOOL CALLBACK StringParamProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
static BOOL CALLBACK StringParamProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
static bx_param_string_c *param;
|
static bx_param_string_c *param;
|
||||||
char buffer[20];
|
char buffer[512];
|
||||||
|
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
param = (bx_param_string_c *)lParam;
|
param = (bx_param_string_c *)lParam;
|
||||||
SetWindowText(hDlg, param->get_name());
|
SetWindowText(hDlg, param->get_name());
|
||||||
SetWindowText(GetDlgItem(hDlg, IDSTRING), param->getptr());
|
SetWindowText(GetDlgItem(hDlg, IDSTRING), param->getptr());
|
||||||
return FALSE;
|
SendMessage(GetDlgItem(hDlg, IDSTRING), EM_SETLIMITTEXT, param->get_maxsize(), 0);
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
EndDialog(hDlg, -1);
|
EndDialog(hDlg, -1);
|
||||||
break;
|
break;
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
case IDOK:
|
case IDOK:
|
||||||
GetDlgItemText(hDlg, IDSTRING, buffer, 20);
|
GetDlgItemText(hDlg, IDSTRING, buffer, param->get_maxsize() + 1);
|
||||||
param->set(buffer);
|
param->set(buffer);
|
||||||
EndDialog(hDlg, 1);
|
EndDialog(hDlg, 1);
|
||||||
break;
|
break;
|
||||||
@ -233,6 +240,7 @@ static BOOL CALLBACK Cdrom1DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP
|
|||||||
if (cdromop.Ostatus->get() == BX_INSERTED) {
|
if (cdromop.Ostatus->get() == BX_INSERTED) {
|
||||||
SendMessage(GetDlgItem(hDlg, IDSTATUS1), BM_SETCHECK, BST_CHECKED, 0);
|
SendMessage(GetDlgItem(hDlg, IDSTATUS1), BM_SETCHECK, BST_CHECKED, 0);
|
||||||
}
|
}
|
||||||
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
if (lstrcmp(cdromop.Opath->getptr(), origpath)) {
|
if (lstrcmp(cdromop.Opath->getptr(), origpath)) {
|
||||||
@ -742,4 +750,51 @@ int RuntimeOptionsDialog()
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BxEvent* win32_notify_callback(void *unused, BxEvent *event)
|
||||||
|
{
|
||||||
|
int opts;
|
||||||
|
bx_param_c *param;
|
||||||
|
bx_param_string_c *sparam;
|
||||||
|
|
||||||
|
event->retcode = -1;
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case BX_SYNC_EVT_LOG_ASK:
|
||||||
|
LogAskDialog(event);
|
||||||
|
return event;
|
||||||
|
case BX_SYNC_EVT_ASK_PARAM:
|
||||||
|
param = event->u.param.param;
|
||||||
|
if (param->get_type() == BXT_PARAM_STRING) {
|
||||||
|
sparam = (bx_param_string_c *)param;
|
||||||
|
opts = sparam->get_options()->get();
|
||||||
|
if (opts & sparam->IS_FILENAME) {
|
||||||
|
if (param->get_id() == BXP_NULL) {
|
||||||
|
event->retcode = AskFilename(GetBochsWindow(), (bx_param_filename_c *)sparam, "txt");
|
||||||
|
} else {
|
||||||
|
event->retcode = FloppyDialog((bx_param_filename_c *)sparam);
|
||||||
|
}
|
||||||
|
return event;
|
||||||
|
} else {
|
||||||
|
event->retcode = AskString(sparam);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
} else if (param->get_type() == BXT_LIST) {
|
||||||
|
event->retcode = Cdrom1Dialog();
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
case BX_SYNC_EVT_TICK: // called periodically by siminterface.
|
||||||
|
case BX_ASYNC_EVT_REFRESH: // called when some bx_param_c parameters have changed.
|
||||||
|
// fall into default case
|
||||||
|
default:
|
||||||
|
return (*old_callback)(old_callback_arg, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void win32_init_notify_callback()
|
||||||
|
{
|
||||||
|
SIM->get_notify_callback(&old_callback, &old_callback_arg);
|
||||||
|
assert (old_callback != NULL);
|
||||||
|
SIM->set_notify_callback(win32_notify_callback, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // BX_USE_TEXTCONFIG && defined(WIN32)
|
#endif // BX_USE_TEXTCONFIG && defined(WIN32)
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: win32dialog.h,v 1.7 2004-02-01 01:40:14 vruppert Exp $
|
// $Id: win32dialog.h,v 1.8 2005-10-22 11:00:00 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#if BX_USE_TEXTCONFIG && defined(WIN32)
|
#if BX_USE_TEXTCONFIG && defined(WIN32)
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <windows.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND GetBochsWindow();
|
|
||||||
void LogAskDialog(BxEvent *event);
|
|
||||||
int AskFilename(HWND hwnd, bx_param_filename_c *param, const char *ext);
|
|
||||||
int AskString(bx_param_string_c *param);
|
|
||||||
int FloppyDialog(bx_param_filename_c *param);
|
|
||||||
int Cdrom1Dialog();
|
|
||||||
int RuntimeOptionsDialog();
|
int RuntimeOptionsDialog();
|
||||||
|
void win32_init_notify_callback();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user