* Close On Exit behaviours. (cfg.close_on_exit)
*/
COE_NEVER, /* Never close the window */
- COE_ALWAYS, /* Always close the window */
- COE_NORMAL /* Close window on "normal" (non-error) exits only */
+ COE_NORMAL, /* Close window on "normal" (non-error) exits only */
+ COE_ALWAYS /* Always close the window */
};
typedef struct {
* (you might want this not to equal the number of buttons if you
* needed to line up some 2s and some 3s to look good in the same
* panel).
+ *
+ * There's a bit of a hack in here to ensure that if nacross
+ * exceeds the actual number of buttons, the rightmost button
+ * really does get all the space right to the edge of the line, so
+ * you can do things like
+ *
+ * (*) Button1 (*) Button2 (*) ButtonWithReallyLongTitle
*/
void radioline(struct ctlpos *cp,
char *text, int id, int nacross, ...) {
va_list ap;
int group;
int i;
+ char *btext;
r.left = GAPBETWEEN; r.top = cp->ypos;
r.right = cp->width; r.bottom = STATICHEIGHT;
va_start(ap, nacross);
group = WS_GROUP;
i = 0;
+ btext = va_arg(ap, char *);
while (1) {
- char *btext;
+ char *nextbtext;
int bid;
- btext = va_arg(ap, char *);
if (!btext)
break;
bid = va_arg(ap, int);
+ nextbtext = va_arg(ap, char *);
r.left = GAPBETWEEN + i * (cp->width+GAPBETWEEN)/nacross;
- r.right = (i+1) * (cp->width+GAPBETWEEN)/nacross - r.left;
+ if (nextbtext)
+ r.right = (i+1) * (cp->width+GAPBETWEEN)/nacross - r.left;
+ else
+ r.right = cp->width - r.left;
r.top = cp->ypos; r.bottom = RADIOHEIGHT;
doctl(cp, r, "BUTTON",
BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP | group,
btext, bid);
group = 0;
i++;
+ btext = nextbtext;
}
va_end(ap);
cp->ypos += r.bottom + GAPBETWEEN;
IDC_SESSDEL,
IDC_CLOSEEXIT,
IDC_COEALWAYS,
- IDC_COENORMAL,
IDC_COENEVER,
+ IDC_COENORMAL,
sessionpanelend,
loggingpanelstart,
CheckDlgButton (hwnd, IDC_BLINKCUR, cfg.blink_cur);
CheckDlgButton (hwnd, IDC_SCROLLBAR, cfg.scrollbar);
CheckDlgButton (hwnd, IDC_LOCKSIZE, cfg.locksize);
- CheckRadioButton (hwnd, IDC_COEALWAYS, IDC_COENEVER,
- cfg.close_on_exit==COE_NEVER ? IDC_COENEVER :
- cfg.close_on_exit==COE_NORMAL ? IDC_COENORMAL : IDC_COEALWAYS);
+ CheckRadioButton (hwnd, IDC_COEALWAYS, IDC_COENORMAL,
+ cfg.close_on_exit==COE_NORMAL ? IDC_COENORMAL :
+ cfg.close_on_exit==COE_NEVER ? IDC_COENEVER : IDC_COEALWAYS);
CheckDlgButton (hwnd, IDC_CLOSEWARN, cfg.warn_on_close);
SetDlgItemText (hwnd, IDC_TTEDIT, cfg.termtype);
endbox(&cp);
}
beginbox(&cp, NULL, IDC_BOX_SESSION3);
- radioline(&cp, "At session end, close &window:", IDC_CLOSEEXIT, 3,
+ radioline(&cp, "Close &window on exit:", IDC_CLOSEEXIT, 4,
"Always", IDC_COEALWAYS,
- "On clean exit", IDC_COENORMAL,
- "Never", IDC_COENEVER, NULL);
+ "Never", IDC_COENEVER,
+ "Only on clean exit", IDC_COENORMAL, NULL);
endbox(&cp);
}
sizeof(cfg.wintitle)-1);
break;
case IDC_COEALWAYS:
- case IDC_COENORMAL:
case IDC_COENEVER:
+ case IDC_COENORMAL:
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
cfg.close_on_exit = IsDlgButtonChecked (hwnd, IDC_COEALWAYS) ? COE_ALWAYS :
- IsDlgButtonChecked (hwnd, IDC_COENORMAL) ? COE_NORMAL :
- COE_NEVER;
+ IsDlgButtonChecked (hwnd, IDC_COENEVER) ? COE_NEVER :
+ COE_NORMAL;
}
break;
case IDC_CLOSEWARN: