X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/2b241edd864cdbb600444b9482daac97ac9bde3d..2dc6356a02ebe2e5c0428cefc18e64882d85b4a6:/winctrls.c?ds=sidebyside diff --git a/winctrls.c b/winctrls.c index df0edce7..53228236 100644 --- a/winctrls.c +++ b/winctrls.c @@ -448,6 +448,40 @@ void staticpassedit(struct ctlpos *cp, char *stext, } /* + * A drop-down list box on the right hand side, with a static to + * its left. + */ +void staticddl(struct ctlpos *cp, char *stext, + int sid, int lid, int percentlist) +{ + const int height = (COMBOHEIGHT > STATICHEIGHT ? + COMBOHEIGHT : STATICHEIGHT); + RECT r; + int lwid, rwid, rpos; + + rpos = + GAPBETWEEN + (100 - percentlist) * (cp->width + GAPBETWEEN) / 100; + lwid = rpos - 2 * GAPBETWEEN; + rwid = cp->width + GAPBETWEEN - rpos; + + r.left = GAPBETWEEN; + r.top = cp->ypos + (height - STATICHEIGHT) / 2; + r.right = lwid; + r.bottom = STATICHEIGHT; + doctl(cp, r, "STATIC", WS_CHILD | WS_VISIBLE, 0, stext, sid); + + r.left = rpos; + r.top = cp->ypos + (height - EDITHEIGHT) / 2; + r.right = rwid; + r.bottom = COMBOHEIGHT*4; + doctl(cp, r, "COMBOBOX", + WS_CHILD | WS_VISIBLE | WS_TABSTOP | + CBS_DROPDOWNLIST | CBS_HASSTRINGS, WS_EX_CLIENTEDGE, "", lid); + + cp->ypos += height + GAPBETWEEN; +} + +/* * A big multiline edit control with a static labelling it. */ void bigeditctrl(struct ctlpos *cp, char *stext, @@ -1105,14 +1139,17 @@ void progressbar(struct ctlpos *cp, int id) * Another special control: the forwarding options setter. First a * list box; next a static header line, introducing a pair of edit * boxes with associated statics, another button, and a radio - * button pair. + * button pair. Then we have a bareradioline, which is included in + * this control group because it belongs before the `Add' button in + * the tab order. */ void fwdsetter(struct ctlpos *cp, int listid, char *stext, int sid, char *e1stext, int e1sid, int e1id, char *e2stext, int e2sid, int e2id, - char *btext, int bid) + char *btext, int bid, + char *r1text, int r1id, char *r2text, int r2id) { - RECT r; + RECT r, button_r; const int height = (STATICHEIGHT > EDITHEIGHT && STATICHEIGHT > PUSHBTNHEIGHT ? STATICHEIGHT : EDITHEIGHT > @@ -1161,11 +1198,19 @@ void fwdsetter(struct ctlpos *cp, int listid, char *stext, int sid, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL, WS_EX_CLIENTEDGE, "", j == 0 ? e1id : e2id); } else if (i == 3) { - doctl(cp, r, "BUTTON", - WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, - 0, btext, bid); + /* + * We postpone creation of the button until we've + * done everything else, since it belongs last in + * the tab order. + */ + button_r = r; /* structure copy */ } } cp->ypos += height + GAPWITHIN; } + bareradioline(cp, 2, r1text, r1id, r2text, r2id, NULL); + /* Create the postponed button. */ + doctl(cp, button_r, "BUTTON", + WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, + 0, btext, bid); }