c->listbox.draglist = 0;
c->listbox.multisel = 0;
c->listbox.percentwidth = percentage;
+ c->listbox.ncols = 0;
+ c->listbox.percentages = NULL;
return c;
}
c->listbox.draglist = 1;
c->listbox.multisel = 0;
c->listbox.percentwidth = 100;
+ c->listbox.ncols = 0;
+ c->listbox.percentages = NULL;
return c;
}
}
sfree(ctrl);
}
-
-void dlg_stdradiobutton_handler(union control *ctrl, void *dlg,
- void *data, int event)
-{
- int button;
- /*
- * For a standard radio button set, the context parameter gives
- * offsetof(targetfield, Config), and the extra data per button
- * gives the value the target field should take if that button
- * is the one selected.
- */
- if (event == EVENT_REFRESH) {
- for (button = 0; button < ctrl->radio.nbuttons; button++)
- if (*(int *)ATOFFSET(data, ctrl->radio.context.i) ==
- ctrl->radio.buttondata[button].i)
- break;
- /* We expected that `break' to happen, in all circumstances. */
- assert(button < ctrl->radio.nbuttons);
- dlg_radiobutton_set(ctrl, dlg, button);
- } else if (event == EVENT_VALCHANGE) {
- button = dlg_radiobutton_get(ctrl, dlg);
- assert(button >= 0 && button < ctrl->radio.nbuttons);
- *(int *)ATOFFSET(data, ctrl->radio.context.i) =
- ctrl->radio.buttondata[button].i;
- }
-}
-
-void dlg_stdcheckbox_handler(union control *ctrl, void *dlg,
- void *data, int event)
-{
- int offset, invert;
-
- /*
- * For a standard checkbox, the context parameter gives
- * offsetof(targetfield, Config), optionally ORed with
- * CHECKBOX_INVERT.
- */
- offset = ctrl->checkbox.context.i;
- if (offset & CHECKBOX_INVERT) {
- offset &= ~CHECKBOX_INVERT;
- invert = 1;
- } else
- invert = 0;
-
- /*
- * C lacks a logical XOR, so the following code uses the idiom
- * (!a ^ !b) to obtain the logical XOR of a and b. (That is, 1
- * iff exactly one of a and b is nonzero, otherwise 0.)
- */
-
- if (event == EVENT_REFRESH) {
- dlg_checkbox_set(ctrl,dlg, (!*(int *)ATOFFSET(data,offset) ^ !invert));
- } else if (event == EVENT_VALCHANGE) {
- *(int *)ATOFFSET(data, offset) = !dlg_checkbox_get(ctrl,dlg) ^ !invert;
- }
-}
-
-void dlg_stdeditbox_handler(union control *ctrl, void *dlg,
- void *data, int event)
-{
- /*
- * The standard edit-box handler expects the main `context'
- * field to contain the `offsetof' a field in the structure
- * pointed to by `data'. The secondary `context2' field
- * indicates the type of this field:
- *
- * - if context2 > 0, the field is a char array and context2
- * gives its size.
- * - if context2 == -1, the field is an int and the edit box
- * is numeric.
- * - if context2 < -1, the field is an int and the edit box is
- * _floating_, and (-context2) gives the scale. (E.g. if
- * context2 == -1000, then typing 1.2 into the box will set
- * the field to 1200.)
- */
- int offset = ctrl->editbox.context.i;
- int length = ctrl->editbox.context2.i;
-
- if (length > 0) {
- char *field = (char *)ATOFFSET(data, offset);
- if (event == EVENT_REFRESH) {
- dlg_editbox_set(ctrl, dlg, field);
- } else if (event == EVENT_VALCHANGE) {
- dlg_editbox_get(ctrl, dlg, field, length);
- }
- } else if (length < 0) {
- int *field = (int *)ATOFFSET(data, offset);
- char data[80];
- if (event == EVENT_REFRESH) {
- if (length == -1)
- sprintf(data, "%d", *field);
- else
- sprintf(data, "%g", (double)*field / (double)(-length));
- dlg_editbox_set(ctrl, dlg, data);
- } else if (event == EVENT_VALCHANGE) {
- dlg_editbox_get(ctrl, dlg, data, lenof(data));
- if (length == -1)
- *field = atoi(data);
- else
- *field = (int)((-length) * atof(data));
- }
- }
-}
-
-void dlg_stdfilesel_handler(union control *ctrl, void *dlg,
- void *data, int event)
-{
- /*
- * The standard file-selector handler expects the `context'
- * field to contain the `offsetof' a Filename field in the
- * structure pointed to by `data'.
- */
- int offset = ctrl->fileselect.context.i;
-
- if (event == EVENT_REFRESH) {
- dlg_filesel_set(ctrl, dlg, *(Filename *)ATOFFSET(data, offset));
- } else if (event == EVENT_VALCHANGE) {
- dlg_filesel_get(ctrl, dlg, (Filename *)ATOFFSET(data, offset));
- }
-}
-
-void dlg_stdfontsel_handler(union control *ctrl, void *dlg,
- void *data, int event)
-{
- /*
- * The standard file-selector handler expects the `context'
- * field to contain the `offsetof' a FontSpec field in the
- * structure pointed to by `data'.
- */
- int offset = ctrl->fontselect.context.i;
-
- if (event == EVENT_REFRESH) {
- dlg_fontsel_set(ctrl, dlg, *(FontSpec *)ATOFFSET(data, offset));
- } else if (event == EVENT_VALCHANGE) {
- dlg_fontsel_get(ctrl, dlg, (FontSpec *)ATOFFSET(data, offset));
- }
-}