Added new GUI based on wxWidgets. Patch from bit.
This commit is contained in:
parent
a2f44b8ea7
commit
7fe91626d6
60 changed files with 11647 additions and 78 deletions
268
src/wx-deviceconfig.cc
Normal file
268
src/wx-deviceconfig.cc
Normal file
|
|
@ -0,0 +1,268 @@
|
|||
#include "wx-deviceconfig.h"
|
||||
|
||||
#include "wx-utils.h"
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#include "wx-dialogbox.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "wx/xrc/xmlres.h"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "config.h"
|
||||
void saveconfig(char*);
|
||||
void resetpchard();
|
||||
int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam);
|
||||
device_t *config_device;
|
||||
int confirm();
|
||||
}
|
||||
#define IDC_CONFIG_BASE 1000
|
||||
|
||||
|
||||
int deviceconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) {
|
||||
switch (message) {
|
||||
case WX_INITDIALOG: {
|
||||
int id = IDC_CONFIG_BASE;
|
||||
device_config_t *config = config_device->config;
|
||||
int c;
|
||||
|
||||
while (config->type != -1) {
|
||||
device_config_selection_t *selection = config->selection;
|
||||
void* h = 0;
|
||||
int val_int;
|
||||
char *val_string;
|
||||
int num;
|
||||
char s[80];
|
||||
|
||||
switch (config->type) {
|
||||
case CONFIG_BINARY:
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
val_int = config_get_int(CFG_MACHINE, config_device->name, config->name,
|
||||
config->default_int);
|
||||
|
||||
wx_sendmessage(h, WX_BM_SETCHECK, val_int, 0);
|
||||
|
||||
id++;
|
||||
break;
|
||||
|
||||
case CONFIG_SELECTION:
|
||||
h = wx_getdlgitem(hdlg, id+1);
|
||||
val_int = config_get_int(CFG_MACHINE, config_device->name, config->name,
|
||||
config->default_int);
|
||||
|
||||
c = 0;
|
||||
while (selection->description[0]) {
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0,
|
||||
(LONG_PARAM) selection->description);
|
||||
if (val_int == selection->value)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, c, 0);
|
||||
selection++;
|
||||
c++;
|
||||
}
|
||||
|
||||
id += 2;
|
||||
break;
|
||||
|
||||
case CONFIG_MIDI:
|
||||
// midi ignored
|
||||
// val_int = config_get_int(CFG_MACHINE, NULL, config->name, config->default_int);
|
||||
//
|
||||
// num = midi_get_num_devs();
|
||||
// for (c = 0; c < num; c++)
|
||||
// {
|
||||
// midi_get_dev_name(c, s);
|
||||
// SendMessage(h, CB_ADDSTRING, 0, (LONG_PARAM)s);
|
||||
// if (val_int == c)
|
||||
// SendMessage(h, CB_SETCURSEL, c, 0);
|
||||
// }
|
||||
//
|
||||
// id += 2;
|
||||
break;
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case WX_COMMAND:
|
||||
switch (wParam) {
|
||||
case wxID_OK: {
|
||||
int id = IDC_CONFIG_BASE;
|
||||
device_config_t *config = config_device->config;
|
||||
int c;
|
||||
int changed = 0;
|
||||
|
||||
while (config->type != -1) {
|
||||
device_config_selection_t *selection = config->selection;
|
||||
void* h = 0;
|
||||
int val_int;
|
||||
char *val_string;
|
||||
|
||||
switch (config->type) {
|
||||
case CONFIG_BINARY:
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
val_int = config_get_int(CFG_MACHINE, config_device->name, config->name,
|
||||
config->default_int);
|
||||
|
||||
if (val_int != wx_sendmessage(h, WX_BM_GETCHECK, 0, 0))
|
||||
changed = 1;
|
||||
|
||||
id++;
|
||||
break;
|
||||
|
||||
case CONFIG_SELECTION:
|
||||
h = wx_getdlgitem(hdlg, id+1);
|
||||
val_int = config_get_int(CFG_MACHINE, config_device->name, config->name,
|
||||
config->default_int);
|
||||
|
||||
c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
for (; c > 0; c--)
|
||||
selection++;
|
||||
|
||||
if (val_int != selection->value)
|
||||
changed = 1;
|
||||
|
||||
id += 2;
|
||||
break;
|
||||
|
||||
case CONFIG_MIDI:
|
||||
// midi ignored
|
||||
// val_int = config_get_int(CFG_MACHINE, NULL, config->name,
|
||||
// config->default_int);
|
||||
//
|
||||
// c = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||
//
|
||||
// if (val_int != c)
|
||||
// changed = 1;
|
||||
//
|
||||
// id += 2;
|
||||
break;
|
||||
}
|
||||
config++;
|
||||
}
|
||||
|
||||
if (!changed) {
|
||||
wx_enddialog(hdlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (has_been_inited && !confirm()) {
|
||||
wx_enddialog(hdlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
id = IDC_CONFIG_BASE;
|
||||
config = config_device->config;
|
||||
|
||||
while (config->type != -1) {
|
||||
device_config_selection_t *selection = config->selection;
|
||||
void* h = 0;
|
||||
int val_int;
|
||||
char *val_string;
|
||||
|
||||
switch (config->type) {
|
||||
case CONFIG_BINARY:
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
config_set_int(CFG_MACHINE, config_device->name, config->name,
|
||||
wx_sendmessage(h, WX_BM_GETCHECK, 0, 0));
|
||||
|
||||
id++;
|
||||
break;
|
||||
|
||||
case CONFIG_SELECTION:
|
||||
h = wx_getdlgitem(hdlg, id+1);
|
||||
c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
for (; c > 0; c--)
|
||||
selection++;
|
||||
config_set_int(CFG_MACHINE, config_device->name, config->name,
|
||||
selection->value);
|
||||
|
||||
id += 2;
|
||||
break;
|
||||
|
||||
case CONFIG_MIDI:
|
||||
// midi ignored
|
||||
// c = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||
// config_set_int(CFG_MACHINE, NULL, config->name, c);
|
||||
//
|
||||
// id += 2;
|
||||
break;
|
||||
}
|
||||
config++;
|
||||
}
|
||||
|
||||
if (has_been_inited)
|
||||
{
|
||||
saveconfig(NULL);
|
||||
resetpchard();
|
||||
}
|
||||
|
||||
wx_enddialog(hdlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
case wxID_CANCEL:
|
||||
wx_enddialog(hdlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void deviceconfig_open(void* hwnd, device_t *device) {
|
||||
config_device = device;
|
||||
|
||||
PCemDialogBox dialog((wxWindow*) hwnd, deviceconfig_dlgproc);
|
||||
// dialog.SetWindowStyle(wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
|
||||
|
||||
device_config_t *config = device->config;
|
||||
|
||||
dialog.SetTitle("Device Configuration");
|
||||
|
||||
wxBoxSizer* root = new wxBoxSizer(wxVERTICAL);
|
||||
dialog.SetSizer(root);
|
||||
|
||||
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||
root->Add(sizer, 0, wxALL, 5);
|
||||
|
||||
int id = IDC_CONFIG_BASE;
|
||||
|
||||
while (config->type != -1) {
|
||||
switch (config->type) {
|
||||
case CONFIG_BINARY:
|
||||
sizer->Add(new wxCheckBox(&dialog, id++, config->description), 0, wxALL);
|
||||
break;
|
||||
|
||||
case CONFIG_SELECTION: {
|
||||
sizer->Add(new wxStaticText(&dialog, id++, config->description), 0, wxALL);
|
||||
wxComboBox* cb = new wxComboBox(&dialog, id++);
|
||||
cb->SetEditable(false);
|
||||
sizer->Add(cb, 0, wxALL);
|
||||
} break;
|
||||
case CONFIG_MIDI:
|
||||
// midi ignored
|
||||
break;
|
||||
}
|
||||
|
||||
config++;
|
||||
}
|
||||
|
||||
wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
okCancelSizer->Add(new wxButton(&dialog, wxID_OK));
|
||||
okCancelSizer->Add(new wxButton(&dialog, wxID_CANCEL));
|
||||
|
||||
sizer->Add(okCancelSizer);
|
||||
|
||||
dialog.Fit();
|
||||
dialog.OnInit();
|
||||
dialog.ShowModal();
|
||||
dialog.Destroy();
|
||||
}
|
||||
Loading…
Reference in a new issue