#include <Xm/SpinBox.h> |
int XmSpinBoxValidatePosition
(Widget text_field, int *position);
Функция XmSpinBoxValidatePosition используется приложением для реализации отслеживания изменений в редактируемом потомке XmSpinBox типа XmNumeric. Определение как и когда сделанные пользователем ихзменения вступят в силу остается за приложением.
Аргумент text_field указывает идентификатор виджета потомка XmSpinBox который был изменен. Обязательным тредованием к виджету text_field является сохранение им особенности accessTextual (всегда необходимой потомкам XmSpinBox). С ее помощью XmSpinBox получает возможность извлечь строку из виджета text_field даже если он не является текстовым виджетом Motif (класса XmText или XmTextField).
Определяет расположение аргумента которому будет присвоен результат трансляции, выполненной функцией.
В первую очередь функция XmSpinBoxValidatePosition проверяет имеет ли указанный виджет тип XmNUMERIC. Если виджет не является числовым значением, то XmSpinBoxValidatePosition устанавливает возвращаемое значение положения в текущее значение и возвращает XmCURRENT_VALUE.
Функция XmSpinBoxValidatePosition пытается произвести преобразование введенной строки в число с плавающей точкой. Если такое преобразование невозможно, то XmSpinBoxValidatePosition устанавливает значение возвращаемого положения в значение текущего положения и возвращает XmCURRENT_VALUE.
Далее XmSpinBoxValidatePosition преобразует число с плавающей точкой в целочисленное значение, используя ресурс XmNdecimalPoints. Лишние десятичные знаки отбрасываются. Полученное целочисленное значение проверяется на попадание в допустимый диапазон определенный ресурсами XmNminimumValue и XmNmaximumValue, включая сами эти значения. Если значение оказывается вне допустимого диапазона, то XmSpinBoxValidatePosition устанавливает значение возвращаемого положения в значение ближайшего предельного значения и возвращает соотвтественно либо XmMINIMUM_VALUE либо XmMAXIMUM_VALUE.
В заключении XmSpinBoxValidatePosition проверяет принадлежность полученного целочисленного значения последовательности XmNminimumValue ... XmNminimumValue + (n - 1) * XmNincrementValue. Если значение не принадлежит этой последовательности, то XmSpinBoxValidatePosition устанавливает возвращаемое значение положения в значение ближайшего элемента последовательности который меньше либо равен полученному значению и возвращает XmINCREMENT_VALUE.
В противном случае XmSpinBoxValidatePosition присваивает возвращаемому значению положения полученное целочисленное значение и возвращает XmVALID_VALUE.
XmSpinBoxValidatePosition возвращает признак результата проведенной проверки. Возможнен возврат следующих значений:
Преобразование невозможно. Возврашено текущее значение.
Введенное значение меньше минимального. Возвращено минимальное значение.
Введенное значение больше максимального. Возвращено максимальное значение.
Введенное значение не поподает в допустимый ряд значений. Возвращено блищайшее меньшее значение.
Преобразование прошло успешно. Возвращено полученное значение.
Первый пример показывает использование функции XmSpinBoxValidatePosition в процедуре обратного вызова XmNmodifyVerifyCallback, установленной для виджетов XmSpinBox и XmSimpleSpinBox:
/* * Install a callback on a spin arrow press. */ XtAddCallback(sb, XmNmodifyVerifyCallback, ModifyVerifyCB, NULL); XtAddcallback(simple_sb, XmNmodifyVerifyCallback, ModifyVerifyCB, NULL); |
void ModifyVerifyCB(widget, call_data, client_data) { XmPinBoxCallbackStruct *cbs = (XmSpinBoxCallbackStruct *) call_data; int position; Widget textual = NULL; if (XtIsSubclass(w, xmSimpleSpinBoxWidgetClass)) { Arg args[1]; XtSetArg(args[0], XmNtextField, &textual); XtGetValues(w, args, 1); } else if (XtIsSubclass(w, xmSpinBoxWidgetClass)) textual = cbs->widget; else textual = (Widget) NULL; ... if (XmSpinBoxValidatePosition(textual, &position) == XmCURRENT_VALUE) XBell(XtDisplay(w), 0); else cbs->position = position; } |
Второй пример показывает использование функции XmSpinBoxValidatePosition в процедуре обратного вызова XmNactivateCallback, установленной для текстового потомка XmSpinBox:
/* * Install a callback on spin box arrow press. */ XtAddCallback(tf, XmNactivateCallback, ModifyVerifyChildCB, NULL); |
void ModifyVerifyChildCB(widget, call_data, client_data) { int position; Widget textual = widget; Arg args[1]; if (XmSpinBoxValidatePosition (textual, &position) == XmCURRENT_VALUE) XBell(XtDisplay(widget), 0); /* Set the position constraint resource of the textfield */ XtSetArg(args[0], XmNposition, position); XtSetValues(textual, args, 1); } |
XmSpinBox(3), XmSimpleSpinBox(3), XmCreateSpinBox(3) и XmCreateSimpleSpinBox(3)
Пред. | Начало | След. |
XmFontListRemoveEntry | Уровень выше | XmStringBaseline |