Lines Matching +full:data +full:- +full:width
4 * rangebox.c -- implements the rangebox dialog
6 * Copyright 2012-2019,2020 Thomas E. Dickey
37 /* position and width of the numeric field */
41 /* position and width of the slider field */
60 digit_of(VALUE * data) in digit_of() argument
62 int col = data->value_col; in digit_of()
65 while (++col < data->value_len) { in digit_of()
72 set_digit(VALUE * data, int chr) in set_digit() argument
79 sprintf(buffer, "%*d", data->value_len, data->current); in set_digit()
80 buffer[data->value_col] = (char) chr; in set_digit()
83 if ((check <= (long) data->max_value) && in set_digit()
84 (check >= (long) data->min_value)) { in set_digit()
86 data->current = (int) check; in set_digit()
98 draw_value(VALUE * data, int value) in draw_value() argument
100 if (value != data->current) { in draw_value()
101 WINDOW *win = data->window; in draw_value()
104 int ranges = (data->max_value + 1 - data->min_value); in draw_value()
105 int offset = (value - data->min_value); in draw_value()
110 if (ranges > data->slide_len) { in draw_value()
111 scaled = (offset + data->slide_inc) / data->slide_inc; in draw_value()
112 } else if (ranges < data->slide_len) { in draw_value()
113 scaled = (offset + 1) * data->slide_inc; in draw_value()
119 wmove(win, data->slide_y, data->slide_x); in draw_value()
120 for (n = 0; n < data->slide_len; ++n) { in draw_value()
123 wmove(win, data->slide_y, data->value_x); in draw_value()
124 wprintw(win, "%*d", data->value_len, value); in draw_value()
130 wmove(win, data->slide_y, data->slide_x); in draw_value()
141 data->current = value; in draw_value()
147 data->slide_len, in draw_value()
148 data->slide_inc)); in draw_value()
161 int width, in dialog_rangebox() argument
166 /* *INDENT-OFF* */ in dialog_rangebox()
184 DLG_KEYS_DATA( DLGK_ITEM_PREV, '-' ), in dialog_rangebox()
192 /* *INDENT-ON* */ in dialog_rangebox()
196 int old_width = width; in dialog_rangebox()
198 VALUE data; in dialog_rangebox() local
216 DLG_TRACE2N("width", width); in dialog_rangebox()
235 dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MIN_WIDE); in dialog_rangebox()
237 dlg_button_layout(buttons, &width); in dialog_rangebox()
238 dlg_print_size(height, width); in dialog_rangebox()
239 dlg_ctl_size(height, width); in dialog_rangebox()
241 dialog = dlg_new_window(height, width, in dialog_rangebox()
243 xorg = dlg_box_x_ordinate(width)); in dialog_rangebox()
245 data.window = dialog; in dialog_rangebox()
247 data.min_value = min_value; in dialog_rangebox()
248 data.max_value = max_value; in dialog_rangebox()
250 usable = (width - 2 - 4 * MARGIN); in dialog_rangebox()
251 ranges = max_value - min_value + 1; in dialog_rangebox()
256 data.value_len = digits_of(max_value); in dialog_rangebox()
257 if (digits_of(min_value) > data.value_len) in dialog_rangebox()
258 data.value_len = digits_of(min_value); in dialog_rangebox()
259 data.value_x = (usable - data.value_len) / 2 + MARGIN; in dialog_rangebox()
260 data.value_col = data.value_len - 1; in dialog_rangebox()
263 * The slider is scaled, to try to use the width of the dialog. in dialog_rangebox()
266 data.slide_inc = (ranges + usable - 1) / usable; in dialog_rangebox()
267 data.slide_len = 1 + ranges / data.slide_inc; in dialog_rangebox()
269 data.slide_inc = usable / ranges; in dialog_rangebox()
270 data.slide_len = ranges * data.slide_inc; in dialog_rangebox()
272 data.slide_inc = 1; in dialog_rangebox()
273 data.slide_len = usable; in dialog_rangebox()
275 data.slide_x = (usable - data.slide_len) / 2 + MARGIN + 2; in dialog_rangebox()
276 data.slide_y = height - 5; in dialog_rangebox()
278 data.current = cur_value - 1; in dialog_rangebox()
283 dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); in dialog_rangebox()
285 dlg_mouse_mkregion(data.slide_y - 1, data.slide_x - 1, 3, usable + 2, 'i'); in dialog_rangebox()
287 height - 6, data.slide_x - MARGIN, in dialog_rangebox()
288 2 + MARGIN, data.slide_len + 2 * MARGIN, in dialog_rangebox()
297 dlg_print_autowrap(dialog, prompt, height, width); in dialog_rangebox()
304 draw_value(&data, cur_value); in dialog_rangebox()
306 dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); in dialog_rangebox()
308 data.value_col = data.value_len + state; in dialog_rangebox()
309 wmove(dialog, data.slide_y, data.value_x + data.value_col); in dialog_rangebox()
321 /* handle function-keys */ in dialog_rangebox()
332 if (state < 0 && state > -data.value_len) { in dialog_rangebox()
333 --state; in dialog_rangebox()
335 state = dlg_prev_ok_buttonindex(state, -data.value_len); in dialog_rangebox()
342 state = dlg_next_ok_buttonindex(state, -data.value_len); in dialog_rangebox()
353 cur_value -= digit_of(&data); in dialog_rangebox()
355 cur_value -= 1; in dialog_rangebox()
362 cur_value += digit_of(&data); in dialog_rangebox()
370 cur_value -= data.slide_inc; in dialog_rangebox()
375 cur_value += data.slide_inc; in dialog_rangebox()
382 /* reset data */ in dialog_rangebox()
384 width = old_width; in dialog_rangebox()
391 state = -data.value_len; in dialog_rangebox()
395 result = dlg_ok_buttoncode(key - M_EVENT); in dialog_rangebox()
402 if (set_digit(&data, key)) { in dialog_rangebox()
403 cur_value = data.current; in dialog_rangebox()
404 data.current--; in dialog_rangebox()