124
130
{ "Sound", IDM_TOGGLE_SOUND },
125
131
{ "DriveTrueEmulation", IDM_TOGGLE_DRIVE_TRUE_EMULATION },
126
132
{ "WarpMode", IDM_TOGGLE_WARP_MODE },
127
{ "WarpMode", IDM_TOGGLE_WARP_MODE|0x00010000 },
128
133
{ "VirtualDevices", IDM_TOGGLE_VIRTUAL_DEVICES },
129
134
{ "SaveResourcesOnExit", IDM_TOGGLE_SAVE_SETTINGS_ON_EXIT },
130
135
{ "ConfirmOnExit", IDM_TOGGLE_CONFIRM_ON_EXIT },
131
136
{ "FullScreenEnabled", IDM_TOGGLE_FULLSCREEN },
132
137
{ "AlwaysOnTop", IDM_TOGGLE_ALWAYSONTOP },
138
{ "KeySetEnable", IDM_JOYKEYS_TOGGLE },
134
140
{ "MainCPU_TRACE", IDM_TOGGLE_MAINCPU_TRACE },
135
{ "MainCPU_TRACE", IDM_TOGGLE_MAINCPU_TRACE|0x00010000 },
136
141
{ "Drive0CPU_TRACE", IDM_TOGGLE_DRIVE0CPU_TRACE },
137
{ "Drive0CPU_TRACE", IDM_TOGGLE_DRIVE0CPU_TRACE|0x00010000 },
138
142
{ "Drive1CPU_TRACE", IDM_TOGGLE_DRIVE1CPU_TRACE },
139
{ "Drive1CPU_TRACE", IDM_TOGGLE_DRIVE1CPU_TRACE|0x00010000 },
225
ui_menu_translation_table_t monitor_trans_popup_table[] = {
229
{ 1, IDS_MP_WINDOW },
233
ui_popup_translation_table_t monitor_trans_item_table[] = {
234
{ IDM_MON_OPEN, IDS_MI_MON_OPEN },
235
{ IDM_MON_SAVE, IDS_MI_MON_SAVE },
236
{ IDM_MON_PRINT, IDS_MI_MON_PRINT },
237
{ IDM_EXIT, IDS_MI_MON_EXIT },
238
{ IDM_MON_STOP_DEBUG, IDS_MI_MON_STOP_DEBUG },
239
{ IDM_MON_STOP_EXEC, IDS_MI_MON_STOP_EXEC },
240
{ IDM_MON_STEP_INTO, IDS_MI_MON_STEP_INTO },
241
{ IDM_MON_STEP_OVER, IDS_MI_MON_STEP_OVER },
242
{ IDM_MON_SKIP_RETURN, IDS_MI_MON_SKIP_RETURN },
243
{ IDM_MON_GOTO_CURSOR, IDS_MI_MON_GOTO_CURSOR },
244
{ IDM_MON_EVAL, IDS_MI_MON_EVAL },
245
{ IDM_MON_CURRENT, IDS_MI_MON_CURRENT },
246
{ IDM_MON_WND_EVAL, IDS_MI_MON_WND_EVAL },
247
{ IDM_MON_WND_REG, IDS_MI_MON_WND_REG },
248
{ IDM_MON_WND_MEM, IDS_MI_MON_WND_MEM },
249
{ IDM_MON_WND_DIS, IDS_MI_MON_WND_DIS },
250
{ IDM_MON_WND_CONSOLE, IDS_MI_MON_WND_CONSOLE },
251
{ IDM_MON_COMPUTER, IDS_MI_MON_COMPUTER },
252
{ IDM_MON_DRIVE8, IDS_MI_MON_DRIVE8 },
253
{ IDM_MON_DRIVE9, IDS_MI_MON_DRIVE9 },
254
{ IDM_MON_CASCADE, IDS_MI_MON_CASCADE },
255
{ IDM_MON_TILE_VERT, IDS_MI_MON_TILE_VERT },
256
{ IDM_MON_TILE_HORIZ, IDS_MI_MON_TILE_HORIZ },
257
{ IDM_MON_ARRANGE_ICONS, IDS_MI_MON_ARRANGE_ICONS },
222
261
/* ------------------------------------------------------------------------ */
224
#define UI_DEBUG_HOTKEYS \
225
{ FVIRTKEY | FALT | FNOINVERT, VK_F10, IDM_TOGGLE_MAINCPU_TRACE }, \
226
{ FVIRTKEY | FALT | FNOINVERT, VK_F11, IDM_TOGGLE_DRIVE0CPU_TRACE }, \
227
{ FVIRTKEY | FALT | FNOINVERT, VK_F12, IDM_TOGGLE_DRIVE1CPU_TRACE },
229
#define UI_DEBUG_HOTKEYS
232
#define UI_COMMON_HOTKEYS \
233
{ FVIRTKEY | FCONTROL | FALT | FNOINVERT, 'R', IDM_RESET_HARD }, \
234
{ FVIRTKEY | FALT | FNOINVERT, 'R', IDM_RESET_SOFT }, \
235
{ FVIRTKEY | FALT | FNOINVERT, '4', IDM_FORMFEED_PRINTERIEC4 }, \
236
{ FVIRTKEY | FALT | FNOINVERT, '5', IDM_FORMFEED_PRINTERIEC5 }, \
237
{ FVIRTKEY | FALT | FNOINVERT, '8', IDM_ATTACH_8 }, \
238
{ FVIRTKEY | FALT | FNOINVERT, '9', IDM_ATTACH_9 }, \
239
{ FVIRTKEY | FALT | FNOINVERT, '0', IDM_ATTACH_10 }, \
240
{ FVIRTKEY | FALT | FNOINVERT, '1', IDM_ATTACH_11 }, \
241
{ FVIRTKEY | FALT | FNOINVERT, 'A', IDM_DETACH_ALL }, \
242
{ FVIRTKEY | FALT | FNOINVERT, 'T', IDM_ATTACH_TAPE }, \
243
{ FVIRTKEY | FALT | FNOINVERT, 'L', IDM_LOADQUICK }, \
244
{ FVIRTKEY | FALT | FNOINVERT, 'S', IDM_SAVEQUICK }, \
245
{ FVIRTKEY | FALT | FNOINVERT, 'M', IDM_MONITOR }, \
246
{ FVIRTKEY | FALT | FNOINVERT, 'X', IDM_EXIT }, \
247
{ FVIRTKEY | FALT | FNOINVERT, 'W', IDM_TOGGLE_WARP_MODE }, \
248
{ FVIRTKEY | FALT | FNOINVERT, 'I', IDM_FLIP_ADD }, \
249
{ FVIRTKEY | FALT | FNOINVERT, 'K', IDM_FLIP_REMOVE }, \
250
{ FVIRTKEY | FALT | FNOINVERT, 'N', IDM_FLIP_NEXT }, \
251
{ FVIRTKEY | FALT | FNOINVERT, 'B', IDM_FLIP_PREVIOUS }, \
252
{ FVIRTKEY | FALT | FNOINVERT, 'J', IDM_SWAP_JOYSTICK }, \
253
{ FVIRTKEY | FALT | FNOINVERT, 'C', IDM_MEDIAFILE }, \
254
{ FVIRTKEY | FALT | FNOINVERT, 'G', IDM_EVENT_SETMILESTONE }, \
255
{ FVIRTKEY | FALT | FNOINVERT, 'H', IDM_EVENT_RESETMILESTONE }, \
256
{ FVIRTKEY | FALT | FNOINVERT, 'D', IDM_TOGGLE_FULLSCREEN }, \
257
{ FVIRTKEY | FALT | FNOINVERT, VK_RETURN, IDM_TOGGLE_FULLSCREEN }, \
258
{ FVIRTKEY | FALT | FNOINVERT, VK_PAUSE, IDM_PAUSE }, \
259
{ FVIRTKEY | FALT | FNOINVERT, VK_OEM_PLUS, IDM_SINGLE_FRAME_ADVANCE }, \
260
{ FVIRTKEY | FALT | FNOINVERT, VK_ADD, IDM_SINGLE_FRAME_ADVANCE }
262
static ACCEL c64_accel[] = {
263
{ FVIRTKEY | FALT | FNOINVERT, 'Z', IDM_CART_FREEZE },
264
{ FVIRTKEY | FALT | FNOINVERT, 'Q', IDM_MOUSE },
269
static ACCEL c128_accel[] = {
270
{ FVIRTKEY | FALT | FNOINVERT, 'Q', IDM_MOUSE },
275
static ACCEL cbm2_accel[] = {
280
static ACCEL vic_accel[] = {
285
static ACCEL pet_accel[] = {
290
static ACCEL plus4_accel[] = {
295
/*static HBRUSH led_red;
296
static HBRUSH led_green;
297
static HBRUSH led_black;
298
static HBRUSH tape_motor_on_brush;
299
static HBRUSH tape_motor_off_brush;
301
262
static HWND main_hwnd;
302
static HWND slider_hwnd;
304
264
static int emu_menu;
306
266
static int pause_pending;
268
static ui_menu_translation_table_t *menu_translation_table;
269
static ui_popup_translation_table_t *popup_translation_table;
271
void ui_register_translation_tables(ui_menu_translation_table_t *menu_table, ui_popup_translation_table_t *popup_table)
273
menu_translation_table = menu_table;
274
popup_translation_table = popup_table;
308
278
/* Initialize the UI before setting all the resource values. */
309
279
int ui_init(int *argc, char **argv)
441
400
uilib_shutdown();
403
static void ui_translate_menu_popups(HMENU menu, ui_popup_translation_table_t *trans_table)
415
if (trans_table == NULL)
418
while (trans_table[i].level != 0)
420
switch (trans_table[i].level)
424
while (menu1 == NULL)
427
menu1 = GetSubMenu(menu, pos1);
429
if (trans_table[i].ids != 0)
430
ModifyMenu(menu, (UINT)pos1, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)menu1, translate_text(trans_table[i].ids));
436
while (menu2 == NULL)
439
menu2 = GetSubMenu(menu1, pos2);
441
ModifyMenu(menu1, (UINT)pos2, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)menu2, translate_text(trans_table[i].ids));
446
while (menu3 == NULL)
449
menu3 = GetSubMenu(menu2, pos3);
451
ModifyMenu(menu2, (UINT)pos3, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)menu3, translate_text(trans_table[i].ids));
458
static void ui_translate_menu_items(HMENU menu, ui_menu_translation_table_t *trans_table)
462
if (trans_table == NULL)
465
while (trans_table[i].idm != 0)
467
ModifyMenu(menu, trans_table[i].idm, MF_BYCOMMAND | MF_STRING, trans_table[i].idm, translate_text(trans_table[i].ids));
472
void ui_translate_monitor_menu(HMENU menu)
474
ui_translate_menu_popups(menu, (ui_popup_translation_table_t *)monitor_trans_popup_table);
475
ui_translate_menu_items(menu, (ui_menu_translation_table_t *)monitor_trans_item_table);
444
478
/* Create a Window for the emulation. */
445
479
HWND ui_open_canvas_window(const char *title, unsigned int width,
446
unsigned int height, int fullscreen)
1066
1134
/* ------------------------------------------------------------------------ */
1136
static void ui_copy_clipboard(HWND window)
1138
BOOL clipboard_is_open = FALSE;
1140
HGLOBAL globaltext = NULL;
1145
if ( ! OpenClipboard(window) ) {
1148
clipboard_is_open = TRUE;
1150
if ( ! EmptyClipboard() ) {
1154
text = clipboard_read_screen_output("\r\n");
1159
globaltext = GlobalAlloc(GMEM_DDESHARE, strlen(text) + 1);
1160
if (globaltext == NULL) {
1164
p = GlobalLock(globaltext);
1167
SetClipboardData(CF_TEXT, globaltext);
1172
GlobalUnlock(globaltext);
1179
if (clipboard_is_open) {
1184
static void ui_paste_clipboard_text(HWND window)
1187
BOOL clipboard_is_open = FALSE;
1189
char * text_in_petscii = NULL;
1194
if ( ! OpenClipboard(window) ) {
1198
clipboard_is_open = TRUE;
1200
hdata = GetClipboardData(CF_TEXT);
1206
text = GlobalLock(hdata);
1212
size = GlobalSize(hdata);
1219
* Allocate memmory for the string to convert in petscii.
1220
* Note: As we are not sure if the original text is null-terminated,
1221
* do *not* use lib_stralloc()!
1223
text_in_petscii = lib_malloc(size + 1);
1225
if (text_in_petscii == NULL) {
1229
memcpy(text_in_petscii, text, size);
1230
text_in_petscii[size] = 0;
1232
charset_petconvstring(text_in_petscii, 0);
1234
kbdbuf_feed(text_in_petscii);
1238
if (text_in_petscii) {
1239
lib_free(text_in_petscii);
1246
if (clipboard_is_open) {
1252
/* ------------------------------------------------------------------------ */
1068
1254
/* FIXME: tmp hack. */
1069
1255
int syscolorchanged, displaychanged, querynewpalette, palettechanged;
1261
1443
case IDM_RAM_SETTINGS:
1262
1444
ui_ram_settings_dialog(hwnd);
1264
case IDM_TOGGLE_FULLSCREEN | 0x00010000:
1265
1446
case IDM_TOGGLE_FULLSCREEN:
1266
1447
vsync_suspend_speed_eval();
1267
1448
SwitchFullscreenMode(hwnd);
1450
case IDM_SETTINGS_SAVE_FILE:
1451
if ((st_name = uilib_select_file(hwnd, translate_text(IDS_SAVE_CONFIG_FILE),
1452
UILIB_FILTER_ALL, UILIB_SELECTOR_TYPE_FILE_SAVE,
1453
UILIB_SELECTOR_STYLE_DEFAULT)) != NULL)
1457
name = system_wcstombs_alloc(st_name);
1459
if (resources_save(st_name) < 0)
1461
ui_error(translate_text(IDS_CANNOT_SAVE_SETTINGS));
1465
ui_message(translate_text(IDS_SETTINGS_SAVED_SUCCESS));
1467
uifliplist_save_settings();
1468
system_wcstombs_free(name);
1472
case IDM_SETTINGS_LOAD_FILE:
1473
if ((st_name = uilib_select_file(hwnd, translate_text(IDS_LOAD_CONFIG_FILE),
1474
UILIB_FILTER_ALL, UILIB_SELECTOR_TYPE_FILE_LOAD,
1475
UILIB_SELECTOR_STYLE_DEFAULT)) != NULL)
1479
name = system_wcstombs_alloc(st_name);
1481
if (resources_load(st_name) < 0)
1483
ui_error(translate_text(IDS_CANNOT_LOAD_SETTINGS));
1487
ui_message(translate_text(IDS_SETTINGS_LOADED_SUCCESS));
1489
uifliplist_save_settings();
1490
system_wcstombs_free(name);
1269
1494
case IDM_SETTINGS_SAVE:
1270
1495
if (resources_save(NULL) < 0)
1271
1496
ui_error(translate_text(IDS_CANNOT_SAVE_SETTINGS));