This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
VARCem/src/win/win_settings_input.h

195 lines
5.6 KiB
C

/*
* VARCem Virtual ARchaeological Computer EMulator.
* An emulator of (mostly) x86-based PC systems and devices,
* using the ISA,EISA,VLB,MCA and PCI system buses, roughly
* spanning the era between 1981 and 1995.
*
* This file is part of the VARCem Project.
*
* Implementation of the Settings dialog.
*
* Version: @(#)win_settings_input.h 1.0.7 2018/05/02
*
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2017,2018 Fred N. van Kempen.
* Copyright 2016-2018 Miran Grca.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the:
*
* Free Software Foundation, Inc.
* 59 Temple Place - Suite 330
* Boston, MA 02111-1307
* USA.
*/
/************************************************************************
* *
* Input Dialog *
* *
************************************************************************/
static int mouse_to_list[20],
list_to_mouse[20];
static int
mouse_valid(int num, int m)
{
const device_t *dev;
if ((num == MOUSE_INTERNAL) &&
!(machines[m].flags & MACHINE_MOUSE)) return(0);
dev = mouse_get_device(num);
return(device_is_valid(dev, machines[m].flags));
}
#ifdef __amd64__
static LRESULT CALLBACK
#else
static BOOL CALLBACK
#endif
input_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
WCHAR temp[128];
const char *stransi;
HWND h;
int c;
int d = 0;
switch (message) {
case WM_INITDIALOG:
h = GetDlgItem(hdlg, IDC_COMBO_MOUSE);
d = 0;
for (c = 0; c < mouse_get_ndev(); c++) {
mouse_to_list[c] = d;
if (mouse_valid(c, temp_machine)) {
stransi = mouse_get_name(c);
mbstowcs(temp, stransi, sizeof_w(temp));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)temp);
list_to_mouse[d] = c;
d++;
}
}
SendMessage(h, CB_SETCURSEL, mouse_to_list[temp_mouse], 0);
h = GetDlgItem(hdlg, IDC_CONFIGURE_MOUSE);
if (mouse_has_config(temp_mouse))
EnableWindow(h, TRUE);
else
EnableWindow(h, FALSE);
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
c = 0;
while ((stransi = gamedev_get_name(c)) != NULL) {
mbstowcs(temp, stransi, sizeof_w(temp));
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)temp);
c++;
}
SendMessage(h, CB_SETCURSEL, temp_joystick, 0);
EnableWindow(h, (temp_game)?TRUE:FALSE);
h = GetDlgItem(hdlg, IDC_JOY1);
EnableWindow(h, (temp_game && (gamedev_get_max_joysticks(temp_joystick) >= 1)) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY2);
EnableWindow(h, (temp_game && (gamedev_get_max_joysticks(temp_joystick) >= 2)) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY3);
EnableWindow(h, (temp_game && (gamedev_get_max_joysticks(temp_joystick) >= 3)) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY4);
EnableWindow(h, (temp_game && (gamedev_get_max_joysticks(temp_joystick) >= 4)) ? TRUE : FALSE);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_COMBO_MOUSE:
h = GetDlgItem(hdlg, IDC_COMBO_MOUSE);
temp_mouse = list_to_mouse[SendMessage(h, CB_GETCURSEL, 0, 0)];
h = GetDlgItem(hdlg, IDC_CONFIGURE_MOUSE);
if (mouse_has_config(temp_mouse))
EnableWindow(h, TRUE);
else
EnableWindow(h, FALSE);
break;
case IDC_CONFIGURE_MOUSE:
h = GetDlgItem(hdlg, IDC_COMBO_MOUSE);
temp_mouse = list_to_mouse[SendMessage(h, CB_GETCURSEL, 0, 0)];
temp_deviceconfig |= dlg_devconf(hdlg, (void *)mouse_get_device(temp_mouse));
break;
case IDC_COMBO_JOYSTICK:
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
h = GetDlgItem(hdlg, IDC_JOY1);
EnableWindow(h, (gamedev_get_max_joysticks(temp_joystick) >= 1) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY2);
EnableWindow(h, (gamedev_get_max_joysticks(temp_joystick) >= 2) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY3);
EnableWindow(h, (gamedev_get_max_joysticks(temp_joystick) >= 3) ? TRUE : FALSE);
h = GetDlgItem(hdlg, IDC_JOY4);
EnableWindow(h, (gamedev_get_max_joysticks(temp_joystick) >= 4) ? TRUE : FALSE);
break;
case IDC_JOY1:
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
temp_deviceconfig |= dlg_jsconf(hdlg, 0, temp_joystick);
break;
case IDC_JOY2:
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
temp_deviceconfig |= dlg_jsconf(hdlg, 1, temp_joystick);
break;
case IDC_JOY3:
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
temp_deviceconfig |= dlg_jsconf(hdlg, 2, temp_joystick);
break;
case IDC_JOY4:
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
temp_deviceconfig |= dlg_jsconf(hdlg, 3, temp_joystick);
break;
}
return FALSE;
case WM_SAVESETTINGS:
h = GetDlgItem(hdlg, IDC_COMBO_MOUSE);
temp_mouse = list_to_mouse[SendMessage(h, CB_GETCURSEL, 0, 0)];
h = GetDlgItem(hdlg, IDC_COMBO_JOYSTICK);
temp_joystick = SendMessage(h, CB_GETCURSEL, 0, 0);
return FALSE;
default:
break;
}
return FALSE;
}