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 char* get_selection(Ihandle *n) { if (type(n) == TEXT_ || (type(n) == LIST_ && iupCheck(n, "EDITBOX")==YES)) { XmTextPosition left, right; Widget w = (Widget)handle(n); if (type(n) == LIST_) w = (Widget)IupGetAttribute(n, "_IUPMOT_EDITBOX"); if (XmTextFieldGetSelectionPosition(w, &left, &right)) { static char val[20]; sprintf(val,"%ld:%ld",(long int)left+1, (long int)right+1-1); return val; } } else if (type(n) == MULTILINE_) { XmTextPosition left, right; if (XmTextGetSelectionPosition((Widget)handle(n), &left, &right)) { static char val[40]; long int l1, l2, r1, r2; char *str = XmTextGetString((Widget)handle(n)); iupmotLincol( str, left, &l1, &l2 ); iupmotLincol( str, right, &r1, &r2 ); sprintf(val,"%ld,%ld:%ld,%ld",l1, l2, r1, r2-1); XtFree(str); return val; } } return NULL; }
static char* motListGetSelectionPosAttrib(Ihandle* ih) { XmTextPosition start = 0, end = 0; Widget cbedit; if (!ih->data->has_editbox) return NULL; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); if (!XmTextFieldGetSelectionPosition(cbedit, &start, &end) || start==end) return NULL; /* end is inside the selection, in IUP is outside */ end++; return iupStrReturnIntInt((int)start, (int)end, ':'); }
static int motListSetSelectedTextAttrib(Ihandle* ih, const char* value) { XmTextPosition start, end; Widget cbedit; if (!ih->data->has_editbox) return 0; if (!value) return 0; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); if (XmTextFieldGetSelectionPosition(cbedit, &start, &end) && start!=end) { iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", "1"); /* disable callbacks */ XmTextFieldReplace(cbedit, start, end, (char*)value); iupAttribSet(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL); } return 0; }
static char* motListGetSelectionPosAttrib(Ihandle* ih) { XmTextPosition start = 0, end = 0; char* str; Widget cbedit; if (!ih->data->has_editbox) return NULL; XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); if (!XmTextFieldGetSelectionPosition(cbedit, &start, &end) || start==end) return NULL; str = iupStrGetMemory(100); /* end is inside the selection, in IUP is outside */ end++; sprintf(str, "%d:%d", (int)start, (int)end); return str; }
void CEdit::GetSel(int& nStartChar, int& nEndChar) const { // Get the start and end of the selected text // Returns start and end as zero if there is no selected text Boolean has_selection = False ; XmTextPosition left = (XmTextPosition) 0 ; XmTextPosition right = (XmTextPosition) 0 ; nStartChar = nEndChar = 0; if (_xd_textwidget != NULL) { if (XmIsText(_xd_textwidget)) has_selection = XmTextGetSelectionPosition(_xd_textwidget, &left, &right); else if (XmIsTextField(_xd_textwidget)) has_selection = XmTextFieldGetSelectionPosition(_xd_textwidget, &left, &right); if (has_selection) { nStartChar = (int)left; nEndChar = (int)right; } } }