void winfripp_general_config_panel(struct controlbox *b) { struct controlset *s; WINFRIPP_DEBUG_ASSERT(b); /* * The Frippery: general panel. */ ctrl_settitle(b, "Frippery", "Configure pointless frippery: general frippery"); s = ctrl_getset(b, "Frippery", "frip", "General pointless frippery"); ctrl_radiobuttons(s, "Always on top:", NO_SHORTCUT, 4, P(WINFRIPP_HELP_CTX), conf_radiobutton_handler, I(CONF_frip_general_always_on_top), "Never", NO_SHORTCUT, I(WINFRIPP_GENERAL_ALWAYS_ON_TOP_NEVER), "Always", NO_SHORTCUT, I(WINFRIPP_GENERAL_ALWAYS_ON_TOP_ALWAYS), NULL); ctrl_radiobuttons(s, "Storage backend:", NO_SHORTCUT, 2, P(WINFRIPP_HELP_CTX), conf_radiobutton_handler, I(CONF_frip_general_store_backend), "Registry", NO_SHORTCUT, I(WINFRIP_GENERAL_STORE_BACKEND_REGISTRY), "Ephemeral", NO_SHORTCUT, I(WINFRIP_GENERAL_STORE_BACKEND_EPHEMERAL), "File", NO_SHORTCUT, I(WINFRIP_GENERAL_STORE_BACKEND_FILE), NULL); }
void setup_config_box(controlbox * b) { controlset *s; control *c; /* * The standard panel that appears at the bottom of all panels: * Open, Cancel, Apply etc. */ s = ctrl_getset(b, "", "", ""); ctrl_columns(s, 5, 20, 20, 20, 20, 20); c = ctrl_pushbutton(s, "About...", 0, P(0), about_handler, P(0)); c->column = 0; c = ctrl_pushbutton(s, "OK", 0, P(0), ok_handler, P(0)); c->button.isdefault = true; c->column = 2; c = ctrl_pushbutton(s, "Cancel", 0, P(0), cancel_handler, P(0)); c->button.iscancel = true; c->column = 3; c = ctrl_pushbutton(s, "Apply", 0, P(0), apply_handler, P(0)); c->column = 4; /* * The Looks panel. */ ctrl_settitle(b, "Looks", "Looks"); s = ctrl_getset(b, "Looks", "colours", "Colours"); ctrl_columns(s, 3, 33, 33, 33); ctrl_pushbutton( s, "Foreground...", 'f', P(0), colour_handler, P(&new_cfg.fg_colour) )->column = 0; ctrl_pushbutton( s, "Background...", 'b', P(0), colour_handler, P(&new_cfg.bg_colour) )->column = 1; ctrl_pushbutton( s, "Cursor...", 'c', P(0), colour_handler, P(&new_cfg.cursor_colour) )->column = 2; //ctrl_columns(s, 1, 100); ctrl_checkbox( s, "Use system colours instead", 's', P(0), dlg_stdcheckbox_handler, I(offcfg(use_system_colours)) ); s = ctrl_getset(b, "Looks", "trans", "Transparency"); bool with_glass = win_is_glass_available(); ctrl_radiobuttons( s, null, '\0', 4 + with_glass, P(0), dlg_stdradiobutton_handler, I(offcfg(transparency)), "Off", 'o', I(0), "Low", 'l', I(1), with_glass ? "Med." : "Medium", 'm', I(2), "High", 'h', I(3), with_glass ? "Glass" : null, 'g', I(-1), null ); ctrl_checkbox( s, "Opaque when focused", 'p', P(0), dlg_stdcheckbox_handler, I(offcfg(opaque_when_focused)) ); s = ctrl_getset(b, "Looks", "curtype", "Cursor"); ctrl_columns(s, 2, 80, 20); ctrl_radiobuttons( s, null, '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(cursor_type)), "Line", 'n', I(CUR_LINE), "Block", 'k', I(CUR_BLOCK), "Underscore", 'u', I(CUR_UNDERSCORE), null )->column = 0; ctrl_checkbox( s, "Blink", 'e', P(0), dlg_stdcheckbox_handler, I(offcfg(cursor_blinks)) )->column = 1; /* * The Text panel. */ ctrl_settitle(b, "Text", "Text"); s = ctrl_getset(b, "Text", "font", "Font"); ctrl_fontsel( s, null, '\0', P(0), dlg_stdfontsel_handler, I(offcfg(font)) ); ctrl_radiobuttons( s, "Smoothing", '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(font_quality)), "Default", 'd', I(FQ_DEFAULT), "None", 'n', I(FQ_NONANTIALIASED), "Partial", 'p', I(FQ_ANTIALIASED), "Full", 'f', I(FQ_CLEARTYPE), null ); s = ctrl_getset(b, "Text", "effects", null); ctrl_columns(s, 2, 50, 50); ctrl_checkbox( s, "Show bold as bright", 'b', P(0), dlg_stdcheckbox_handler, I(offcfg(bold_as_bright)) )->column = 0; ctrl_checkbox( s, "Allow blinking", 'a', P(0), dlg_stdcheckbox_handler, I(offcfg(allow_blinking)) )->column = 1; s = ctrl_getset(b, "Text", "locale", null); ctrl_columns(s, 2, 29, 71); (locale_box = ctrl_combobox( s, "Locale", 'l', 100, P(0), locale_handler, P(0), P(0) ))->column = 0; (charset_box = ctrl_combobox( s, "Character set", 'c', 100, P(0), charset_handler, P(0), P(0) ))->column = 1; /* * The Keys panel. */ ctrl_settitle(b, "Keys", "Keys"); s = ctrl_getset(b, "Keys", "keys", null); ctrl_columns(s, 2, 50, 50); ctrl_checkbox( s, "Ctrl+LeftAlt is AltGr", 'g', P(0), dlg_stdcheckbox_handler, I(offcfg(ctrl_alt_is_altgr)) )->column = 0; ctrl_checkbox( s, "Backspace sends ^H", 'b', P(0), dlg_stdcheckbox_handler, I(offcfg(backspace_sends_bs)) )->column = 1; s = ctrl_getset(b, "Keys", "shortcuts", "Shortcuts"); ctrl_checkbox( s, "Menu and Full Screen (Alt+Space/Enter)", 'm', P(0), dlg_stdcheckbox_handler, I(offcfg(window_shortcuts)) ); ctrl_checkbox( s, "Switch window (Ctrl+[Shift+]Tab)", 'w', P(0), dlg_stdcheckbox_handler, I(offcfg(switch_shortcuts)) ); ctrl_checkbox( s, "Zoom (Ctrl+plus/minus/zero)", 'z', P(0), dlg_stdcheckbox_handler, I(offcfg(zoom_shortcuts)) ); s = ctrl_getset(b, "Keys", "scroll", "Modifier for scrolling"); ctrl_radiobuttons( s, null, '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(scroll_mod)), "Off", 'o', I(0), "Shift", 's', I(MDK_SHIFT), "Ctrl", 'c', I(MDK_CTRL), "Alt", 'a', I(MDK_ALT), null ); ctrl_checkbox( s, "Page Up/Down scroll without modifier", 'p', P(0), dlg_stdcheckbox_handler, I(offcfg(pgupdn_scroll)) ); /* * The Mouse panel. */ ctrl_settitle(b, "Mouse", "Mouse"); s = ctrl_getset(b, "Mouse", "mouseopts", null); ctrl_columns(s, 2, 50, 50); ctrl_checkbox( s, "Copy on select", 'y', P(0), dlg_stdcheckbox_handler, I(offcfg(copy_on_select)) )->column = 0; ctrl_checkbox( s, "Copy as rich text", 'r', P(0), dlg_stdcheckbox_handler, I(offcfg(copy_as_rtf)) )->column = 1; ctrl_checkbox( s, "Clicks place command line cursor", 'k', P(0), dlg_stdcheckbox_handler, I(offcfg(clicks_place_cursor)) ); s = ctrl_getset(b, "Mouse", "rightclick", "Right click action"); ctrl_radiobuttons( s, null, '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(right_click_action)), "Paste", 'p', I(RC_PASTE), "Extend", 'x', I(RC_EXTEND), "Show menu", 'm', I(RC_SHOWMENU), null ); s = ctrl_getset(b, "Mouse", "mousemode", "Application mouse mode"); ctrl_radiobuttons( s, "Default click target", '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(clicks_target_app)), "Window", 'w', I(0), "Application", 'n', I(1), null ); ctrl_radiobuttons( s, "Modifier for overriding default", '\0', 4, P(0), dlg_stdradiobutton_handler, I(offcfg(click_target_mod)), "Off", 'o', I(0), "Shift", 's', I(MDK_SHIFT), "Ctrl", 'c', I(MDK_CTRL), "Alt", 'a', I(MDK_ALT), null ); /* * The Output panel. */ ctrl_settitle(b, "Output", "Output"); s = ctrl_getset(b, "Output", "printer", "Printer"); ctrl_combobox( s, null, '\0', 100, P(0), printerbox_handler, P(0), P(0) ); s = ctrl_getset(b, "Output", "bell", "Bell"); ctrl_checkbox( s, "Play sound", 'p', P(0), dlg_stdcheckbox_handler, I(offcfg(bell_sound)) ); ctrl_checkbox( s, "Flash screen", 'f', P(0), dlg_stdcheckbox_handler, I(offcfg(bell_flash)) ); ctrl_checkbox( s, "Highlight in taskbar", 'h', P(0), dlg_stdcheckbox_handler, I(offcfg(bell_taskbar)) ); s = ctrl_getset(b, "Output", "ids", null); ctrl_columns(s, 2, 50, 50); ctrl_combobox( s, "TERM (at startup)", 't', 100, P(0), term_handler, P(0), P(0) )->column = 0; ctrl_editbox( s, "Answerback", 'a', 100, P(0), string_handler, I(offcfg(answerback)), I(sizeof cfg.answerback) )->column = 1; /* * The Window panel. */ ctrl_settitle(b, "Window", "Window"); s = ctrl_getset(b, "Window", "size", "Default size"); ctrl_columns(s, 5, 35, 3, 28, 4, 30); (cols_box = ctrl_editbox( s, "Columns", 'c', 44, P(0), int_handler, I(offcfg(cols)), I(256) ))->column = 0; (rows_box = ctrl_editbox( s, "Rows", 'w', 55, P(0), int_handler, I(offcfg(rows)), I(256) ))->column = 2; ctrl_pushbutton( s, "Current size", 'u', P(0), current_size_handler, P(0) )->column = 4; s = ctrl_getset(b, "Window", "scroll", "Scrollback"); ctrl_columns(s, 2, 45, 55); ctrl_editbox( s, "Lines", 's', 57, P(0), int_handler, I(offcfg(scrollback_lines)), I(1000000) )->column = 0; ctrl_radiobuttons( s, "Scrollbar", '\0', 5, P(0), dlg_stdradiobutton_handler, I(offcfg(scrollbar)), "Left", 'l', I(-1), "None", 'n', I(0), "Right", 'r', I(1), null ); s = ctrl_getset(b, "Window", "options", null); ctrl_checkbox( s, "Ask for exit confirmation", 'x', P(0), dlg_stdcheckbox_handler, I(offcfg(confirm_exit)) ); }
void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help, int midsession, int protocol) { struct controlset *s; union control *c; char *str; BOOL with_glass; if (!midsession) { /* * Add the About and Help buttons to the standard panel. */ s = ctrl_getset(b, "", "", ""); c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help), about_handler, P(hwndp)); c->generic.column = 0; if (has_help) { c = ctrl_pushbutton(s, "Help", 'h', HELPCTX(no_help), help_handler, P(hwndp)); c->generic.column = 1; } } /* * Full-screen mode is a Windows peculiarity; hence * scrollbar_in_fullscreen is as well. */ s = ctrl_getset(b, "Window", "scrollback", "Control the scrollback in the window"); ctrl_checkbox(s, "Display scrollbar in full screen mode", 'i', HELPCTX(window_scrollback), dlg_stdcheckbox_handler, I(offsetof(Config,scrollbar_in_fullscreen))); /* * Really this wants to go just after `Display scrollbar'. See * if we can find that control, and do some shuffling. */ { int i; for (i = 0; i < s->ncontrols; i++) { c = s->ctrls[i]; if (c->generic.type == CTRL_CHECKBOX && c->generic.context.i == offsetof(Config,scrollbar)) { /* * Control i is the scrollbar checkbox. * Control s->ncontrols-1 is the scrollbar-in-FS one. */ if (i < s->ncontrols-2) { c = s->ctrls[s->ncontrols-1]; memmove(s->ctrls+i+2, s->ctrls+i+1, (s->ncontrols-i-2)*sizeof(union control *)); s->ctrls[i+1] = c; } break; } } } s = ctrl_getset(b, "Window/Appearance", "trans", "Transparency"); with_glass = is_glass_available(); ctrl_radiobuttons(s, NULL, NO_SHORTCUT, with_glass ? 5 : 4, HELPCTX(appearance_transparency), dlg_stdradiobutton_handler, I(offsetof(Config,transparency)), "Off", NO_SHORTCUT, I(0), "Low", NO_SHORTCUT, I(1), with_glass ? "Med." : "Medium", NO_SHORTCUT, I(2), "High", NO_SHORTCUT, I(3), with_glass ? "Glass" : NULL, NO_SHORTCUT, I(-1), NULL); ctrl_checkbox(s, "Opaque when focused", NO_SHORTCUT, HELPCTX(appearance_opaquefocus), dlg_stdcheckbox_handler, I(offsetof(Config,opaque_when_focused))); /* * Windows has the AltGr key, which has various Windows- * specific options. */ s = ctrl_getset(b, "Terminal/Keyboard", "features", "Enable extra keyboard features:"); ctrl_checkbox(s, "AltGr acts as Compose key", 't', HELPCTX(keyboard_compose), dlg_stdcheckbox_handler, I(offsetof(Config,compose_key))); ctrl_checkbox(s, "Control-Alt is different from AltGr", 'd', HELPCTX(keyboard_ctrlalt), dlg_stdcheckbox_handler, I(offsetof(Config,ctrlaltkeys))); ctrl_checkbox(s, "Set meta bit on alt (instead of escape)", 'm', HELPCTX(no_help), dlg_stdcheckbox_handler, I(offsetof(Config,alt_metabit))); /* * Windows allows an arbitrary .WAV to be played as a bell, and * also the use of the PC speaker. For this we must search the * existing controlset for the radio-button set controlling the * `beep' option, and add extra buttons to it. * * Note that although this _looks_ like a hideous hack, it's * actually all above board. The well-defined interface to the * per-platform dialog box code is the _data structures_ `union * control', `struct controlset' and so on; so code like this * that reaches into those data structures and changes bits of * them is perfectly legitimate and crosses no boundaries. All * the ctrl_* routines that create most of the controls are * convenient shortcuts provided on the cross-platform side of * the interface, and template creation code is under no actual * obligation to use them. */ s = ctrl_getset(b, "Terminal/Bell", "style", "Set the style of bell"); { int i; for (i = 0; i < s->ncontrols; i++) { c = s->ctrls[i]; if (c->generic.type == CTRL_RADIO && c->generic.context.i == offsetof(Config, beep)) { assert(c->generic.handler == dlg_stdradiobutton_handler); c->radio.nbuttons += 2; c->radio.buttons = sresize(c->radio.buttons, c->radio.nbuttons, char *); c->radio.buttons[c->radio.nbuttons-1] = dupstr("Play a custom sound file"); c->radio.buttons[c->radio.nbuttons-2] = dupstr("Beep using the PC speaker"); c->radio.buttondata = sresize(c->radio.buttondata, c->radio.nbuttons, intorptr); c->radio.buttondata[c->radio.nbuttons-1] = I(BELL_WAVEFILE); c->radio.buttondata[c->radio.nbuttons-2] = I(BELL_PCSPEAKER); if (c->radio.shortcuts) { c->radio.shortcuts = sresize(c->radio.shortcuts, c->radio.nbuttons, char); c->radio.shortcuts[c->radio.nbuttons-1] = NO_SHORTCUT; c->radio.shortcuts[c->radio.nbuttons-2] = NO_SHORTCUT; } break; } }