static int motTextSetSelectionAttrib(Ihandle* ih, const char* value) { int start=1, end=1; if (!value || iupStrEqualNoCase(value, "NONE")) { XmTextClearSelection(ih->handle, CurrentTime); return 0; } if (iupStrEqualNoCase(value, "ALL")) { XmTextSetSelection(ih->handle, (XmTextPosition)0, (XmTextPosition)XmTextGetLastPosition(ih->handle), CurrentTime); return 0; } if (ih->data->is_multiline) { int lin_start=1, col_start=1, lin_end=1, col_end=1; char *str; if (sscanf(value, "%d,%d:%d,%d", &lin_start, &col_start, &lin_end, &col_end)!=4) return 0; if (lin_start<1 || col_start<1 || lin_end<1 || col_end<1) return 0; str = XmTextGetString(ih->handle); start = motTextSetLinColToPosition(str, lin_start, col_start); end = motTextSetLinColToPosition(str, lin_end, col_end); XtFree(str); } else { if (iupStrToIntInt(value, &start, &end, ':')!=2) return 0; if(start<1 || end<1) return 0; start--; /* IUP starts at 1 */ end--; } /* end is inside the selection, in IUP is outside */ end--; XmTextSetSelection(ih->handle, (XmTextPosition)start, (XmTextPosition)end, CurrentTime); return 0; }
static int motTextSetScrollToAttrib(Ihandle* ih, const char* value) { int pos = 1; if (!value) return 0; if (ih->data->is_multiline) { int lin = 1, col = 1, pos; char* str; iupStrToIntInt(value, &lin, &col, ','); if (lin < 1) lin = 1; if (col < 1) col = 1; str = XmTextGetString(ih->handle); pos = motTextSetLinColToPosition(str, lin, col); XtFree(str); } else { sscanf(value,"%i",&pos); if (pos < 1) pos = 1; pos--; /* return to Motif referece */ } XmTextShowPosition(ih->handle, (XmTextPosition)pos); return 0; }
static int motTextSetCaretAttrib(Ihandle* ih, const char* value) { int pos = 1; if (!value) return 0; if (ih->data->is_multiline) { int lin = 1, col = 1; char *str; iupStrToIntInt(value, &lin, &col, ','); str = XmTextGetString(ih->handle); pos = motTextSetLinColToPosition(str, lin, col); XtFree(str); } else { sscanf(value,"%i",&pos); pos--; /* IUP starts at 1 */ } XmTextSetInsertionPosition(ih->handle, (XmTextPosition)pos); XmTextShowPosition(ih->handle, (XmTextPosition)pos); return 0; }
static char* motTextGetLineValueAttrib(Ihandle* ih) { if (ih->data->is_multiline) { int lin, col, start, end; char* str = iupStrGetMemory(200); char *value = XmTextGetString(ih->handle); XmTextPosition pos = XmTextGetInsertionPosition(ih->handle); motTextGetLinColFromPosition(value, pos, &lin, &col); start = motTextSetLinColToPosition(value, lin, 1); end = motTextSetLinColToPosition(value, lin, 20000); XtFree(value); XmTextGetSubstring(ih->handle, start, end-start, 200, str); /* do not include the EOL */ return str; } else return motTextGetValueAttrib(ih); }
void iupdrvTextConvertLinColToPos(Ihandle* ih, int lin, int col, int *pos) { char* str = XmTextGetString(ih->handle); *pos = motTextSetLinColToPosition(str, lin, col); XtFree(str); }