}
/*
+ * 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,
SetWindowLong(hwnd, DWL_MSGRESULT, DL_STOPCURSOR);
ret = 1; break;
case DL_DROPPED:
- ret = 1;
- if (!hdl->dragging) break;
- dest = pl_itemfrompt(dlm->hWnd, dlm->ptCursor, TRUE);
- if (dest > hdl->dummyitem) dest = hdl->dummyitem;
- DrawInsert (hwnd, dlm->hWnd, -1);
+ if (hdl->dragging) {
+ dest = pl_itemfrompt(dlm->hWnd, dlm->ptCursor, TRUE);
+ if (dest > hdl->dummyitem) dest = hdl->dummyitem;
+ DrawInsert (hwnd, dlm->hWnd, -1);
+ }
SendDlgItemMessage(hwnd, hdl->listid,
LB_DELETESTRING, hdl->dummyitem, 0);
- hdl->dragging = 0;
- if (dest >= 0) {
- /* Correct for "missing" item. This means you can't drag
- * an item to the end, but that seems to be the way this
- * control is used. */
- if (dest > hdl->srcitem) dest--;
- pl_moveitem(hwnd, hdl->listid, hdl->srcitem, dest);
+ if (hdl->dragging) {
+ hdl->dragging = 0;
+ if (dest >= 0) {
+ /* Correct for "missing" item. */
+ if (dest > hdl->srcitem) dest--;
+ pl_moveitem(hwnd, hdl->listid, hdl->srcitem, dest);
+ }
}
ret = 1; break;
}
* 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 >
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);
}