break;
}
}
- dlg_listbox_addwithindex(ctrl, dlg, cstr, c);
+ dlg_listbox_addwithid(ctrl, dlg, cstr, c);
}
dlg_update_done(ctrl, dlg);
if (event == EVENT_REFRESH) {
dlg_update_start(ctrl, dlg);
dlg_listbox_clear(ctrl, dlg);
- dlg_listbox_addwithindex(ctrl, dlg, "Auto", AUTO);
- dlg_listbox_addwithindex(ctrl, dlg, "Off", FORCE_OFF);
- dlg_listbox_addwithindex(ctrl, dlg, "On", FORCE_ON);
+ dlg_listbox_addwithid(ctrl, dlg, "Auto", AUTO);
+ dlg_listbox_addwithid(ctrl, dlg, "Off", FORCE_OFF);
+ dlg_listbox_addwithid(ctrl, dlg, "On", FORCE_ON);
switch (*(int *)ATOFFSET(data, ctrl->listbox.context.i)) {
case AUTO: dlg_listbox_select(ctrl, dlg, 0); break;
case FORCE_OFF: dlg_listbox_select(ctrl, dlg, 1); break;
}
}
+#define SAVEDSESSION_LEN 2048
+
struct sessionsaver_data {
union control *editbox, *listbox, *loadbutton, *savebutton, *delbutton;
union control *okbutton, *cancelbutton;
- char savedsession[2048];
struct sesslist *sesslist;
};
* failure.
*/
static int load_selected_session(struct sessionsaver_data *ssd,
+ char *savedsession,
void *dlg, Config *cfg)
{
int i = dlg_listbox_index(ssd->listbox, dlg);
isdef = !strcmp(ssd->sesslist->sessions[i], "Default Settings");
load_settings(ssd->sesslist->sessions[i], !isdef, cfg);
if (!isdef) {
- strncpy(ssd->savedsession, ssd->sesslist->sessions[i],
- sizeof(ssd->savedsession));
- ssd->savedsession[sizeof(ssd->savedsession)-1] = '\0';
+ strncpy(savedsession, ssd->sesslist->sessions[i],
+ SAVEDSESSION_LEN);
+ savedsession[SAVEDSESSION_LEN-1] = '\0';
} else {
- ssd->savedsession[0] = '\0';
+ savedsession[0] = '\0';
}
dlg_refresh(NULL, dlg);
/* Restore the selection, which might have been clobbered by
Config *cfg = (Config *)data;
struct sessionsaver_data *ssd =
(struct sessionsaver_data *)ctrl->generic.context.p;
+ char *savedsession;
+
+ /*
+ * The first time we're called in a new dialog, we must
+ * allocate space to store the current contents of the saved
+ * session edit box (since it must persist even when we switch
+ * panels, but is not part of the Config).
+ */
+ if (!dlg_get_privdata(ssd->editbox, dlg)) {
+ savedsession = (char *)
+ dlg_alloc_privdata(ssd->editbox, dlg, SAVEDSESSION_LEN);
+ savedsession[0] = '\0';
+ } else {
+ savedsession = dlg_get_privdata(ssd->editbox, dlg);
+ }
if (event == EVENT_REFRESH) {
if (ctrl == ssd->editbox) {
- dlg_editbox_set(ctrl, dlg, ssd->savedsession);
+ dlg_editbox_set(ctrl, dlg, savedsession);
} else if (ctrl == ssd->listbox) {
int i;
dlg_update_start(ctrl, dlg);
}
} else if (event == EVENT_VALCHANGE) {
if (ctrl == ssd->editbox) {
- dlg_editbox_get(ctrl, dlg, ssd->savedsession,
- sizeof(ssd->savedsession));
+ dlg_editbox_get(ctrl, dlg, savedsession,
+ SAVEDSESSION_LEN);
}
} else if (event == EVENT_ACTION) {
if (ctrl == ssd->listbox || ctrl == ssd->loadbutton) {
* double-click on the list box _and_ that session
* contains a hostname.
*/
- if (load_selected_session(ssd, dlg, cfg) &&
+ if (load_selected_session(ssd, savedsession, dlg, cfg) &&
(ctrl == ssd->listbox && cfg->host[0])) {
dlg_end(dlg, 1); /* it's all over, and succeeded */
}
} else if (ctrl == ssd->savebutton) {
- int isdef = !strcmp(ssd->savedsession, "Default Settings");
- if (!ssd->savedsession[0]) {
- int i = dlg_listbox_index(ctrl, dlg);
+ int isdef = !strcmp(savedsession, "Default Settings");
+ if (!savedsession[0]) {
+ int i = dlg_listbox_index(ssd->listbox, dlg);
if (i < 0) {
dlg_beep(dlg);
return;
}
isdef = !strcmp(ssd->sesslist->sessions[i], "Default Settings");
if (!isdef) {
- strncpy(ssd->savedsession, ssd->sesslist->sessions[i],
- sizeof(ssd->savedsession));
- ssd->savedsession[sizeof(ssd->savedsession)-1] = '\0';
+ strncpy(savedsession, ssd->sesslist->sessions[i],
+ SAVEDSESSION_LEN);
+ savedsession[SAVEDSESSION_LEN-1] = '\0';
} else {
- ssd->savedsession[0] = '\0';
+ savedsession[0] = '\0';
}
}
- save_settings(ssd->savedsession, isdef, cfg);
+ save_settings(savedsession, !isdef, cfg);
get_sesslist(ssd->sesslist, FALSE);
get_sesslist(ssd->sesslist, TRUE);
dlg_refresh(ssd->editbox, dlg);
* there was a session selected in that which had a
* valid host name in it, then load it and go.
*/
- if (dlg_last_focused(dlg) == ssd->listbox && !*cfg->host) {
+ if (dlg_last_focused(ctrl, dlg) == ssd->listbox && !*cfg->host) {
Config cfg2;
- if (!load_selected_session(ssd, dlg, &cfg2)) {
+ if (!load_selected_session(ssd, savedsession, dlg, &cfg2)) {
dlg_beep(dlg);
return;
}
}
struct colour_data {
- union control *listbox, *rgbtext, *button;
+ union control *listbox, *redit, *gedit, *bedit, *button;
};
static const char *const colours[] = {
for (i = 0; i < lenof(colours); i++)
dlg_listbox_add(ctrl, dlg, colours[i]);
dlg_update_done(ctrl, dlg);
- dlg_text_set(cd->rgbtext, dlg, "");
+ dlg_editbox_set(cd->redit, dlg, "");
+ dlg_editbox_set(cd->gedit, dlg, "");
+ dlg_editbox_set(cd->bedit, dlg, "");
}
} else if (event == EVENT_SELCHANGE) {
if (ctrl == cd->listbox) {
b = cfg->colours[i][2];
update = TRUE;
}
+ } else if (event == EVENT_VALCHANGE) {
+ if (ctrl == cd->redit || ctrl == cd->gedit || ctrl == cd->bedit) {
+ /* The user has changed the colour using the edit boxes. */
+ char buf[80];
+ int i, cval;
+
+ dlg_editbox_get(ctrl, dlg, buf, lenof(buf));
+ cval = atoi(buf) & 255;
+
+ i = dlg_listbox_index(cd->listbox, dlg);
+ if (i >= 0) {
+ if (ctrl == cd->redit)
+ cfg->colours[i][0] = cval;
+ else if (ctrl == cd->gedit)
+ cfg->colours[i][1] = cval;
+ else if (ctrl == cd->bedit)
+ cfg->colours[i][2] = cval;
+ }
+ }
} else if (event == EVENT_ACTION) {
if (ctrl == cd->button) {
int i = dlg_listbox_index(cd->listbox, dlg);
if (update) {
char buf[40];
- sprintf(buf, "%02x/%02x/%02x", r, g, b);
- dlg_text_set(cd->rgbtext, dlg, buf);
+ sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf);
+ sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf);
+ sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf);
}
}
p += strlen(p) + 1;
}
dlg_update_done(ctrl, dlg);
+ } else if (ctrl == pfd->direction) {
+ /*
+ * Default is Local.
+ */
+ dlg_radiobutton_set(ctrl, dlg, 0);
}
} else if (event == EVENT_ACTION) {
if (ctrl == pfd->addbutton) {
ssd->okbutton->generic.column = 3;
ssd->cancelbutton = ctrl_pushbutton(s, "Cancel", 'c', HELPCTX(no_help),
sessionsaver_handler, P(ssd));
+ ssd->cancelbutton->button.iscancel = TRUE;
ssd->cancelbutton->generic.column = 4;
/* We carefully don't close the 5-column part, so that platform-
* specific add-ons can put extra buttons alongside Open and Cancel. */
I(offsetof(Config,port)), I(-1));
c->generic.column = 1;
ctrl_columns(s, 1, 100);
- if (backends[3].backend == NULL) {
+ if (backends[3].name == NULL) {
ctrl_radiobuttons(s, "Protocol:", NO_SHORTCUT, 3,
HELPCTX(session_hostname),
protocolbuttons_handler, P(c),
s = ctrl_getset(b, "Session", "savedsessions",
"Load, save or delete a stored session");
ctrl_columns(s, 2, 75, 25);
- ssd->savedsession[0] = '\0';
ssd->sesslist = sesslist;
ssd->editbox = ctrl_editbox(s, "Saved Sessions", 'e', 100,
HELPCTX(session_saved),
* than alongside that edit box. */
ctrl_columns(s, 1, 100);
ctrl_columns(s, 2, 75, 25);
+ ssd->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT,
+ HELPCTX(session_saved),
+ sessionsaver_handler, P(ssd));
+ ssd->listbox->generic.column = 0;
+ ssd->listbox->listbox.height = 7;
ssd->loadbutton = ctrl_pushbutton(s, "Load", 'l',
HELPCTX(session_saved),
sessionsaver_handler, P(ssd));
HELPCTX(session_saved),
sessionsaver_handler, P(ssd));
ssd->delbutton->generic.column = 1;
- ssd->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT,
- HELPCTX(session_saved),
- sessionsaver_handler, P(ssd));
- ssd->listbox->generic.column = 0;
- ssd->listbox->listbox.height = 7;
ctrl_columns(s, 1, 100);
}
ctrl_editbox(s, "... in this many seconds", 't', 20,
HELPCTX(bell_overload),
dlg_stdeditbox_handler, I(offsetof(Config,bellovl_t)),
- I(-1000));
+ I(-TICKSPERSEC));
ctrl_text(s, "The bell is re-enabled after a few seconds of silence.",
HELPCTX(bell_overload));
ctrl_editbox(s, "Seconds of silence required", 's', 20,
HELPCTX(bell_overload),
dlg_stdeditbox_handler, I(offsetof(Config,bellovl_s)),
- I(-1000));
+ I(-TICKSPERSEC));
/*
* The Terminal/Features panel.
ctrl_checkbox(s, "Display scrollbar", 'd',
HELPCTX(window_scrollback),
dlg_stdcheckbox_handler, I(offsetof(Config,scrollbar)));
- ctrl_checkbox(s, "Display scrollbar in full screen mode", 'i',
- HELPCTX(window_scrollback),
- dlg_stdcheckbox_handler,
- I(offsetof(Config,scrollbar_in_fullscreen)));
ctrl_checkbox(s, "Reset scrollback on keypress", 'k',
HELPCTX(window_scrollback),
dlg_stdcheckbox_handler, I(offsetof(Config,scroll_on_key)));
cd->listbox = ctrl_listbox(s, "Select a colour to adjust:", 'u',
HELPCTX(colours_config), colour_handler, P(cd));
cd->listbox->generic.column = 0;
+ cd->listbox->listbox.height = 7;
c = ctrl_text(s, "RGB value:", HELPCTX(colours_config));
c->generic.column = 1;
- cd->rgbtext = ctrl_text(s, "00/00/00", HELPCTX(colours_config));
- cd->rgbtext->generic.column = 1;
+ cd->redit = ctrl_editbox(s, "Red", 'r', 50, HELPCTX(colours_config),
+ colour_handler, P(cd), P(NULL));
+ cd->redit->generic.column = 1;
+ cd->gedit = ctrl_editbox(s, "Green", 'n', 50, HELPCTX(colours_config),
+ colour_handler, P(cd), P(NULL));
+ cd->gedit->generic.column = 1;
+ cd->bedit = ctrl_editbox(s, "Blue", 'e', 50, HELPCTX(colours_config),
+ colour_handler, P(cd), P(NULL));
+ cd->bedit->generic.column = 1;
cd->button = ctrl_pushbutton(s, "Modify", 'm', HELPCTX(colours_config),
colour_handler, P(cd));
cd->button->generic.column = 1;
HELPCTX(telnet_environ),
environ_handler, P(ed));
ed->listbox->listbox.height = 3;
+ ed->listbox->listbox.ncols = 2;
+ ed->listbox->listbox.percentages = smalloc(2*sizeof(int));
+ ed->listbox->listbox.percentages[0] = 30;
+ ed->listbox->listbox.percentages[1] = 70;
}
s = ctrl_getset(b, "Connection/Telnet", "protocol",
* All the SSH stuff is omitted in PuTTYtel.
*/
- if (!midsession && backends[3].backend != NULL) {
+ if (!midsession && backends[3].name != NULL) {
/*
* The Connection/SSH panel.
"2 only", 'n', I(3), NULL);
s = ctrl_getset(b, "Connection/SSH", "encryption", "Encryption options");
- ctrl_draglist(s, "Encryption cipher selection policy:", 's',
- HELPCTX(ssh_ciphers),
- cipherlist_handler, P(NULL));
+ c = ctrl_draglist(s, "Encryption cipher selection policy:", 's',
+ HELPCTX(ssh_ciphers),
+ cipherlist_handler, P(NULL));
+ c->listbox.height = 6;
+
ctrl_checkbox(s, "Enable non-standard use of single-DES in SSH 2", 'i',
HELPCTX(ssh_ciphers),
dlg_stdcheckbox_handler,
HELPCTX(ssh_tunnels_portfwd),
portfwd_handler, P(pfd));
pfd->listbox->listbox.height = 3;
+ pfd->listbox->listbox.ncols = 2;
+ pfd->listbox->listbox.percentages = smalloc(2*sizeof(int));
+ pfd->listbox->listbox.percentages[0] = 20;
+ pfd->listbox->listbox.percentages[1] = 80;
ctrl_tabdelay(s, pfd->rembutton);
ctrl_text(s, "Add new forwarded port:", HELPCTX(ssh_tunnels_portfwd));
/* You want to enter source, destination and type, _then_ hit Add.