void CEdit::ReplaceSel(LPCSTR lpszNewText) { // Inserts the given text to replace the current selection // or at the insert cursor position if there is no selection. Boolean has_selection = False; XmTextPosition left = (XmTextPosition) 0 ; XmTextPosition right = (XmTextPosition) 0 ; if (_xd_textwidget!=NULL) { if (XmIsText(_xd_textwidget)) { has_selection = XmTextGetSelectionPosition(_xd_textwidget, &left, &right); if (!has_selection) left = right = XmTextGetInsertionPosition(_xd_textwidget); XmTextReplace(_xd_textwidget, left, right, (char *)lpszNewText); } else if (XmIsTextField(_xd_textwidget)) { has_selection = XmTextFieldGetSelectionPosition(_xd_textwidget, &left, &right); if (!has_selection) left = right = XmTextFieldGetInsertionPosition(_xd_textwidget); XmTextFieldReplace(_xd_textwidget, left, right, (char *)lpszNewText); } } }
static int motListSetClipboardAttrib(Ihandle *ih, const char *value) { Widget cbedit; if (!ih->data->has_editbox) return 0; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); if (iupStrEqualNoCase(value, "COPY")) { Ihandle* clipboard; char *str = XmTextFieldGetSelection(cbedit); if (!str) return 0; clipboard = IupClipboard(); IupSetAttribute(clipboard, "TEXT", str); IupDestroy(clipboard); XtFree(str); } else if (iupStrEqualNoCase(value, "CUT")) { Ihandle* clipboard; char *str = XmTextFieldGetSelection(cbedit); if (!str) return 0; clipboard = IupClipboard(); IupSetAttribute(clipboard, "TEXT", str); IupDestroy(clipboard); XtFree(str); /* disable callbacks */ iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", "1"); XmTextFieldRemove(cbedit); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL); } else if (iupStrEqualNoCase(value, "PASTE")) { Ihandle* clipboard; char *str; clipboard = IupClipboard(); str = IupGetAttribute(clipboard, "TEXT"); /* disable callbacks */ iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", "1"); XmTextFieldRemove(cbedit); XmTextFieldInsert(cbedit, XmTextFieldGetInsertionPosition(cbedit), str); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL); } else if (iupStrEqualNoCase(value, "CLEAR")) { /* disable callbacks */ iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", "1"); XmTextFieldRemove(cbedit); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL); } return 0; }
static void darkness_text_cb(Widget w, XtPointer client_data, XtPointer call_data) { char *text; int val; struct topic_info *info = (struct topic_info *)client_data; struct prefs_choice *prefs = (struct prefs_choice *)(info->data); #if USE_SPINBOX /* synchronize internal spinbox value. Apparently this loses the insertion position, so we need to save it and set it again. */ XmTextPosition pos = XmTextFieldGetInsertionPosition(w); UNUSED(call_data); text = XmTextFieldGetString(w); val = strtol(text, (char **)NULL, 10); if (val != 0) { XtVaSetValues(w, XmNposition, val, NULL); XmTextFieldSetInsertionPosition(w, pos); } #else Widget text_field; UNUSED(call_data); XtVaGetValues(w, XmNuserData, &text_field, NULL); XtVaGetValues(text_field, XmNvalue, &text, NULL); val = strtol(text, (char **)NULL, 10); #endif if (XtIsRealized(w)) { do_set_density(val / 100.0, True, False); store_preference(&(prefs->db), "gamma", "%f", val / 100.0); } XtFree(text); }
static Boolean set_values(Widget old, Widget request, Widget new_w, ArgList args, Cardinal *num_args) { Boolean refresh = False; #ifdef DEBUG printf("NumEntry - set_values(%s) - >%s< >%s<\n", XtName(new_w), NumEntry_Value(old), NumEntry_Value(new_w)); #endif if (XtIsSensitive(old) != XtIsSensitive(new_w) && !XtIsSensitive(new_w)) { if (NumEntry_TimerId(new_w)) { XtRemoveTimeOut(NumEntry_TimerId(new_w)); NumEntry_TimerId(new_w) = (XtIntervalId)NULL; } } if (NumEntry_LabelString(old) != NumEntry_LabelString(new_w)) { NumEntry_LabelString(new_w) = XmStringCopy(NumEntry_LabelString(new_w)); XtVaSetValues(NumEntry_Label(new_w), XmNlabelString, NumEntry_LabelString(new_w), NULL); if (NumEntry_LabelString(old)) { XmStringFree(NumEntry_LabelString(old)); } } if (NumEntry_Value(old) != NumEntry_Value(new_w)) { char *tmp; Position Place; #ifdef DEBUG printf("NumEntry - set_values(%s) - value old >%s< new >%s<\n", XtName(new_w), NumEntry_Value(old), NumEntry_Value(new_w)); #endif tmp = NumEntry_Value(new_w); NumEntry_Value(new_w) = XtNewString(tmp); Place = XmTextFieldGetInsertionPosition(NumEntry_TextField(new_w)); XmTextFieldSetString(NumEntry_TextField(new_w), NumEntry_Value(new_w)); XmTextFieldSetInsertionPosition(NumEntry_TextField(new_w), Place); if (NumEntry_Value(old)) { XtFree(NumEntry_Value(old)); } refresh = True; DoMath(new_w); } if (NumEntry_Columns(old) != NumEntry_Columns(new_w)) { Dimension old_width = XtWidth(NumEntry_TextField(new_w)); XtVaSetValues(NumEntry_TextField(new_w), XmNcolumns, NumEntry_Columns(new_w), NULL); XtWidth(new_w) -= (old_width - XtWidth(NumEntry_TextField(new_w))); refresh = True; } return (refresh); }
static char* motListGetCaretPosAttrib(Ihandle* ih) { if (ih->data->has_editbox) { XmTextPosition pos; Widget cbedit; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); pos = XmTextFieldGetInsertionPosition(cbedit); return iupStrReturnInt((int)pos); } else return NULL; }
static char* motListGetCaretPosAttrib(Ihandle* ih) { if (ih->data->has_editbox) { XmTextPosition pos; Widget cbedit; char* str = iupStrGetMemory(50); XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); pos = XmTextFieldGetInsertionPosition(cbedit); sprintf(str, "%d", (int)pos); return str; } else return NULL; }
static int motListSetInsertAttrib(Ihandle* ih, const char* value) { if (!value) return 0; if (ih->data->has_editbox) { Widget cbedit; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", "1"); /* disable callbacks */ XmTextFieldRemove(cbedit); XmTextFieldInsert(cbedit, XmTextFieldGetInsertionPosition(cbedit), (char*)value); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL); } return 0; }
void insert_source_argAct(Widget w, XEvent*, String*, Cardinal*) { clear_isearch(); string arg = source_arg->get_string(); if (XmIsText(w)) { if (XmTextGetEditable(w)) { XmTextPosition pos = XmTextGetInsertionPosition(w); XmTextReplace(w, pos, pos, XMST(arg.chars())); } } else if (XmIsTextField(w)) { if (XmTextFieldGetEditable(w)) { XmTextPosition pos = XmTextFieldGetInsertionPosition(w); XmTextFieldReplace(w, pos, pos, XMST(arg.chars())); } } }
static void DoMath(Widget W) { String value; double result; Position Place; #ifdef DEBUG printf("DoMath(%s)\n", XtName(W)); #endif value = XmTextFieldGetString(NumEntry_TextField(W)); Place = XmTextFieldGetInsertionPosition(NumEntry_TextField(W)); result = XltCalc(value); if (result != NumEntry_Result(W)) { char buf[1024]; XltNumEntryVerifyCallbackStruct cbs; NumEntry_Result(W) = result; sprintf(buf, "%.*g", NumEntry_Columns(W), result); cbs.reason = XmCR_VALUE_CHANGED; cbs.event = NULL; cbs.doit = True; cbs.value = XtNewString(buf); cbs.dvalue = NumEntry_Result(W); XtCallCallbacks(W, XmNvalueChangedCallback, &cbs); if (cbs.doit) { XtFree(NumEntry_Value(W)); NumEntry_Value(W) = cbs.value; NumEntry_Result(W) = cbs.dvalue; } else { XtFree(cbs.value); } } XmTextFieldSetString(NumEntry_TextField(W), NumEntry_Value(W)); XmTextFieldSetInsertionPosition(NumEntry_TextField(W), Place); XtFree(value); }
static void StepValue(Widget W, int a, int b) { Widget Rc = XtParent(XtParent(W)); Position Place; char *buf; #ifdef DEBUG printf("NumEntry - StepValue(%s) - %s\n", XtName(W), XtName(Rc)); #endif buf = XmTextFieldGetString(NumEntry_TextField(Rc)); Place = XmTextFieldGetInsertionPosition(NumEntry_TextField(Rc)); if (buf[Place] != '.') { buf = IncDigit(buf, &Place, a); XmTextFieldSetString(NumEntry_TextField(Rc), buf); XmTextFieldSetInsertionPosition(NumEntry_TextField(Rc), Place); DoMath(Rc); } XtFree(buf); }