예제 #1
0
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);
}
예제 #2
0
파일: config.c 프로젝트: B-Rich/mintty
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))
  );
}
예제 #3
0
파일: wincfg.c 프로젝트: eis/FuTTY-nodialog
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;
	    }
	}