options_iterate(curr_options, poption) { switch (option_type(poption)) { case OT_BOOLEAN: option_bool_set(poption, get_bool(poption)); break; case OT_INTEGER: option_int_set(poption, get_int(poption)); break; case OT_STRING: option_str_set(poption, get_string(poption)); break; case OT_ENUM: option_enum_set_int(poption, get_enum(poption)); break; case OT_BITWISE: option_bitwise_set(poption, get_bitwise(poption)); break; case OT_FONT: option_font_set(poption, get_button_font(poption)); break; case OT_COLOR: option_color_set(poption, get_color(poption)); break; case OT_VIDEO_MODE: log_error("Option type %s (%d) not supported yet.", option_type_name(option_type(poption)), option_type(poption)); break; } } options_iterate_end;
static LONG CALLBACK option_proc(HWND dlg,UINT message, WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CREATE: case WM_SIZE: case WM_GETMINMAXINFO: break; case WM_DESTROY: option_dialog=NULL; break; case WM_COMMAND: if (LOWORD(wParam)==IDOK) { void *gui_data; char dp[512]; int val; client_options_iterate(poption) { gui_data = option_get_gui_data(poption); switch (option_type(poption)) { case COT_BOOLEAN: (void) option_bool_set(poption, Button_GetCheck((HWND)(gui_data)) == BST_CHECKED); break; case COT_INTEGER: GetWindowText((HWND)(gui_data),dp,sizeof(dp)); if (str_to_int(dp, &val)) { (void) option_int_set(poption, val); } break; case COT_STRING: if (!gui_data) { break; } GetWindowText((HWND) (gui_data), dp, sizeof(dp)); (void) option_str_set(poption, dp); break; case COT_FONT: /* FIXME: */ break; } } client_options_iterate_end; DestroyWindow(dlg); } break; case WM_CLOSE: DestroyWindow(dlg); break; default: return DefWindowProc(dlg,message,wParam,lParam); }