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 gtk_setup_config_box(struct controlbox *b, int midsession, void *win) { struct controlset *s, *s2; union control *c; int i; if (!midsession) { /* * Add the About button to the standard panel. */ s = ctrl_getset(b, "", "", ""); c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help), about_handler, P(win)); c->generic.column = 0; } /* * GTK makes it rather easier to put the scrollbar on the left * than Windows does! */ s = ctrl_getset(b, "Window", "scrollback", "Control the scrollback in the window"); ctrl_checkbox(s, "Scrollbar on left", NO_SHORTCUT, HELPCTX(no_help), conf_checkbox_handler, I(CONF_scrollbar_on_left)); /* * Really this wants to go just after `Display scrollbar'. See * if we can find that control, and do some shuffling. */ for (i = 0; i < s->ncontrols; i++) { c = s->ctrls[i]; if (c->generic.type == CTRL_CHECKBOX && c->generic.context.i == CONF_scrollbar) { /* * Control i is the scrollbar checkbox. * Control s->ncontrols-1 is the scrollbar-on-left 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; } } /* * X requires three more fonts: bold, wide, and wide-bold; also * we need the fiddly shadow-bold-offset control. This would * make the Window/Appearance panel rather unwieldy and large, * so I think the sensible thing here is to _move_ this * controlset into a separate Window/Fonts panel! */ s2 = ctrl_getset(b, "Window/Appearance", "font", "Font settings"); /* Remove this controlset from b. */ for (i = 0; i < b->nctrlsets; i++) { if (b->ctrlsets[i] == s2) { memmove(b->ctrlsets+i, b->ctrlsets+i+1, (b->nctrlsets-i-1) * sizeof(*b->ctrlsets)); b->nctrlsets--; break; } } ctrl_settitle(b, "Window/Fonts", "Options controlling font usage"); s = ctrl_getset(b, "Window/Fonts", "font", "Fonts for displaying non-bold text"); ctrl_fontsel(s, "Font used for ordinary text", 'f', HELPCTX(no_help), conf_fontsel_handler, I(CONF_font)); ctrl_fontsel(s, "Font used for wide (CJK) text", 'w', HELPCTX(no_help), conf_fontsel_handler, I(CONF_widefont)); s = ctrl_getset(b, "Window/Fonts", "fontbold", "Fonts for displaying bolded text"); ctrl_fontsel(s, "Font used for bolded text", 'b', HELPCTX(no_help), conf_fontsel_handler, I(CONF_boldfont)); ctrl_fontsel(s, "Font used for bold wide text", 'i', HELPCTX(no_help), conf_fontsel_handler, I(CONF_wideboldfont)); ctrl_checkbox(s, "Use shadow bold instead of bold fonts", 'u', HELPCTX(no_help), conf_checkbox_handler, I(CONF_shadowbold)); ctrl_text(s, "(Note that bold fonts or shadow bolding are only" " used if you have not requested bolding to be done by" " changing the text colour.)", HELPCTX(no_help)); ctrl_editbox(s, "Horizontal offset for shadow bold:", 'z', 20, HELPCTX(no_help), conf_editbox_handler, I(CONF_shadowboldoffset), I(-1)); /* * Markus Kuhn feels, not totally unreasonably, that it's good * for all applications to shift into UTF-8 mode if they notice * that they've been started with a LANG setting dictating it, * so that people don't have to keep remembering a separate * UTF-8 option for every application they use. Therefore, * here's an override option in the Translation panel. */ s = ctrl_getset(b, "Window/Translation", "trans", "Character set translation on received data"); ctrl_checkbox(s, "Override with UTF-8 if locale says so", 'l', HELPCTX(translation_utf8_override), conf_checkbox_handler, I(CONF_utf8_override)); if (!midsession) { /* * Allow the user to specify the window class as part of the saved * configuration, so that they can have their window manager treat * different kinds of PuTTY and pterm differently if they want to. */ s = ctrl_getset(b, "Window/Behaviour", "x11", "X Window System settings"); ctrl_editbox(s, "Window class name:", 'z', 50, HELPCTX(no_help), conf_editbox_handler, I(CONF_winclass), I(1)); } }
void unix_setup_config_box(struct controlbox *b, int midsession, void *win) { struct controlset *s, *s2; union control *c; int i; if (!midsession) { /* * Add the About button to the standard panel. */ s = ctrl_getset(b, "", "", ""); c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help), about_handler, P(win)); c->generic.column = 0; } /* * The Config structure contains two Unix-specific elements * which are not configured in here: stamp_utmp and * login_shell. This is because pterm does not put up a * configuration box right at the start, which is the only time * when these elements would be useful to configure. */ /* * On Unix, we don't have a drop-down list for the printer * control. */ s = ctrl_getset(b, "Terminal", "printing", "Remote-controlled printing"); assert(s->ncontrols == 1 && s->ctrls[0]->generic.type == CTRL_EDITBOX); s->ctrls[0]->editbox.has_list = 0; /* * GTK makes it rather easier to put the scrollbar on the left * than Windows does! */ s = ctrl_getset(b, "Window", "scrollback", "Control the scrollback in the window"); ctrl_checkbox(s, "Scrollbar on left", 'l', HELPCTX(no_help), dlg_stdcheckbox_handler, I(offsetof(Config,scrollbar_on_left))); /* * Really this wants to go just after `Display scrollbar'. See * if we can find that control, and do some shuffling. */ 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-on-left 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; } } /* * X requires three more fonts: bold, wide, and wide-bold; also * we need the fiddly shadow-bold-offset control. This would * make the Window/Appearance panel rather unwieldy and large, * so I think the sensible thing here is to _move_ this * controlset into a separate Window/Fonts panel! */ s2 = ctrl_getset(b, "Window/Appearance", "font", "Font settings"); /* Remove this controlset from b. */ for (i = 0; i < b->nctrlsets; i++) { if (b->ctrlsets[i] == s2) { memmove(b->ctrlsets+i, b->ctrlsets+i+1, (b->nctrlsets-i-1) * sizeof(*b->ctrlsets)); b->nctrlsets--; break; } } ctrl_settitle(b, "Window/Fonts", "Options controlling font usage"); s = ctrl_getset(b, "Window/Fonts", "font", "Fonts for displaying non-bold text"); ctrl_fontsel(s, "Font used for ordinary text", 'f', HELPCTX(no_help), dlg_stdfontsel_handler, I(offsetof(Config,font))); ctrl_fontsel(s, "Font used for wide (CJK) text", 'w', HELPCTX(no_help), dlg_stdfontsel_handler, I(offsetof(Config,widefont))); s = ctrl_getset(b, "Window/Fonts", "fontbold", "Fonts for displaying bolded text"); ctrl_fontsel(s, "Font used for bolded text", 'b', HELPCTX(no_help), dlg_stdfontsel_handler, I(offsetof(Config,boldfont))); ctrl_fontsel(s, "Font used for bold wide text", 'i', HELPCTX(no_help), dlg_stdfontsel_handler, I(offsetof(Config,wideboldfont))); ctrl_checkbox(s, "Use shadow bold instead of bold fonts", 'u', HELPCTX(no_help), dlg_stdcheckbox_handler, I(offsetof(Config,shadowbold))); ctrl_text(s, "(Note that bold fonts or shadow bolding are only" " used if you have not requested bolding to be done by" " changing the text colour.)", HELPCTX(no_help)); ctrl_editbox(s, "Horizontal offset for shadow bold:", 'z', 20, HELPCTX(no_help), dlg_stdeditbox_handler, I(offsetof(Config,shadowboldoffset)), I(-1)); /* * Unix supports a local-command proxy. This also means we must * adjust the text on the `Telnet command' control. */ if (!midsession) { int i; s = ctrl_getset(b, "Connection/Proxy", "basics", NULL); for (i = 0; i < s->ncontrols; i++) { c = s->ctrls[i]; if (c->generic.type == CTRL_RADIO && c->generic.context.i == offsetof(Config, proxy_type)) { assert(c->generic.handler == dlg_stdradiobutton_handler); c->radio.nbuttons++; c->radio.buttons = sresize(c->radio.buttons, c->radio.nbuttons, char *); c->radio.buttons[c->radio.nbuttons-1] = dupstr("Local"); c->radio.buttondata = sresize(c->radio.buttondata, c->radio.nbuttons, intorptr); c->radio.buttondata[c->radio.nbuttons-1] = I(PROXY_CMD); break; } }