static void roms_done( HWND hwndDlg, LONG lParam ) { size_t i; int error; TCHAR **setting; const TCHAR *string; size_t string_len; struct callback_info *info = ( struct callback_info * ) lParam; for( i = 0; i < info->n; i++ ) { setting = settings_get_rom_setting( &settings_current, info->start + i ); string_len = SendMessage( rom[i], WM_GETTEXTLENGTH, 0, 0 ); string = malloc( sizeof( TCHAR ) * ( string_len + 1 ) ); SendMessage( rom[i], WM_GETTEXT, string_len + 1, ( LPARAM ) string ); error = settings_set_string( setting, string ); if( error ) return; /* FIXME: do I need to free string? free( string ); */ } }
static void add_rom( HWND hwndDlg, size_t start, size_t row ) { RECT rect; HFONT font; HWND hgroup, hedit, hbutton; TCHAR buffer[ 80 ], **setting; _sntprintf( buffer, 80, "ROM %d", row ); font = ( HFONT ) SendMessage( hwndDlg, WM_GETFONT, 0, 0 ); /* create a groupbox */ rect.left = 0; rect.top = ( row * 30 ); rect.right = 160; rect.bottom = ( row * 30 ) + 30; MapDialogRect( hwndDlg, &rect ); hgroup = CreateWindowEx( 0, WC_BUTTON, buffer, WS_VISIBLE | WS_CHILD | BS_GROUPBOX, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hwndDlg, 0, fuse_hInstance, 0 ); SendMessage( hgroup, WM_SETFONT, ( WPARAM ) font, FALSE ); /* create an edit */ setting = settings_get_rom_setting( &settings_current, start + row ); rect.left = 5; rect.top = ( row * 30 ) + 10; rect.right = 5 + 110; rect.bottom = ( row * 30 ) + 10 + 14; MapDialogRect( hwndDlg, &rect ); hedit = CreateWindowEx( 0, WC_EDIT, *setting, WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_BORDER | ES_AUTOHSCROLL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hwndDlg, 0, fuse_hInstance, 0 ); SendMessage( hedit, WM_SETFONT, ( WPARAM ) font, FALSE ); rom[ row ] = hedit; /* create a select... button */ rect.left = 120; rect.top = ( row * 30 ) + 10; rect.right = 120 + 35; rect.bottom = ( row * 30 ) + 10 + 14; MapDialogRect( hwndDlg, &rect ); hbutton = CreateWindowEx( 0, WC_BUTTON, TEXT( "Select..." ), WS_VISIBLE | WS_CHILD | WS_TABSTOP, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hwndDlg, 0, fuse_hInstance, 0 ); SendMessage( hbutton, WM_SETFONT, ( WPARAM ) font, FALSE ); /* associate handle to the edit box with each Select button as user data */ SetWindowLong( hbutton, GWL_USERDATA, ( LONG ) hedit ); }
void widget_roms_keyhandler( input_key key ) { switch( key ) { #if 0 case INPUT_KEY_Resize: /* Fake keypress used on window resize */ widget_roms_draw( NULL ); break; #endif case INPUT_KEY_Escape: widget_end_widget( WIDGET_FINISHED_CANCEL ); return; case INPUT_KEY_Return: case INPUT_KEY_KP_Enter: widget_end_all( WIDGET_FINISHED_OK ); return; default: /* Keep gcc happy */ break; } if( key >= INPUT_KEY_a && key <= INPUT_KEY_z && key - INPUT_KEY_a < (ptrdiff_t)rom_count ) { char **setting; char buf[32]; widget_filesel_data data; key -= INPUT_KEY_a; snprintf( buf, sizeof( buf ), "%s - ROM %d", info->title, key ); data.exit_all_widgets = 0; data.title = buf; widget_do_fileselector( &data ); if( !widget_filesel_name ) return; setting = settings_get_rom_setting( widget_settings, key + first_rom, is_peripheral ); settings_set_string( setting, widget_filesel_name ); print_rom( key ); } }
static void print_rom( int which ) { const char *setting; setting = *( settings_get_rom_setting( widget_settings, which + first_rom, is_peripheral ) ); while( widget_stringwidth( setting ) >= 232 - 68 ) ++setting; widget_rectangle( 68, which * 8 + 24, 232 - 68, 8, WIDGET_COLOUR_BACKGROUND ); widget_printstring (68, which * 8 + 24, WIDGET_COLOUR_FOREGROUND, setting ); widget_display_rasters( which * 8 + 24, 8 ); }