Exemple #1
0
static int motTextSetSelectionPosAttrib(Ihandle* ih, const char* value)
{
  int start=0, end=0;

  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 (iupStrToIntInt(value, &start, &end, ':')!=2) 
    return 0;

  if(start<0 || end<0) 
    return 0;

  /* end is inside the selection, in IUP is outside */
  end--;

  XmTextSetSelection(ih->handle, (XmTextPosition)start, (XmTextPosition)end, CurrentTime);

  return 0;
}
Exemple #2
0
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;
}
Exemple #3
0
void WGeMotif::change_value_cb( void *ge_ctx, void *value_object, char *text)
{
  Arg 		args[1];
  WGeMotif   *ge = (WGeMotif *)ge_ctx;

  if ( ge->value_input_open) 
  {
    XtUnmanageChild( ge->value_dialog);
    ge->value_input_open = 0;
    return;
  }

  XtManageChild( ge->value_dialog);

  message( ge, ' ', "");
  XtCallAcceptFocus( ge->value_input, CurrentTime);
  // XtSetKeyboardFocus( ge->toplevel, ge->value_input);

  XtSetArg(args[0],XmNvalue, text);
  XtSetValues( ge->value_input, args, 1);
  XmTextSetCursorPosition( ge->value_input, strlen(text));
  XmTextSetSelection( ge->value_input, 0, strlen(text), CurrentTime);
  ge->value_input_open = 1;
  ge->current_value_object = value_object;
}
Exemple #4
0
void AttrMotif::change_value()
{
  int sts;
  Widget text_w;
  int multiline;
  char* value;
  int size;

  if (input_open) {
    XtUnmanageChild(cmd_input);
    set_prompt("");
    input_open = 0;
    return;
  }

  sts = ((AttrNav*)attrnav)->check_attr_value(&multiline, &size, &value);
  if (EVEN(sts)) {
    if (sts == GE__NOATTRSEL)
      message('E', "No attribute is selected");
    else
      message('E', "Attribute can't be modified");
    return;
  }

  if (multiline) {
    text_w = cmd_scrolledinput;
    XtManageChild(text_w);
    XtManageChild(cmd_scrolled_ok);
    XtManageChild(cmd_scrolled_ca);
  } else {
    text_w = cmd_input;
    XtManageChild(text_w);
  }

  message(' ', "");
  flow_SetInputFocus(text_w);
  //  XtSetKeyboardFocus( toplevel, text_w);
  //  XtCallAcceptFocus( text_w, CurrentTime);

  if (value) {
    XmTextSetString(text_w, value);
    if (!multiline) {
      XmTextSetInsertionPosition(text_w, strlen(value));
      XmTextSetSelection(text_w, 0, strlen(value), CurrentTime);
    }
  } else {
    XmTextSetString(cmd_input, (char*)"");
  }
  //  i = 0;
  //  XtSetArg(args[i],XmNeditMode, XmMULTI_LINE_EDIT); i++;
  //  XtSetValues( text_w, args, i);
  set_prompt("value >");
  input_open = 1;
}
Exemple #5
0
void clear_listener(void)
{
  if ((listener_text) && /* this can be called even when there is no listener */
      (XmTextGetCursorPosition(listener_text) > 1))
    {
      dont_check_motion = true;
      XmTextSetSelection(listener_text, 1, XmTextGetCursorPosition(listener_text), CurrentTime);
      XmTextRemove(listener_text);
      dont_check_motion = false;
    }
}
Exemple #6
0
void RXmTextSetSelection(message_t message)
{
  Widget w;
  XmTextPosition first,last;
  Time t;

  toolkit_read_value(message,&w,XtRWidget);
  toolkit_read_value(message,&first,XtRInt);
  toolkit_read_value(message,&last,XtRInt);
  t = XtLastTimestampProcessed(display);
  XmTextSetSelection(w,first,last,t);
}
Exemple #7
0
void listener_delete_text(int new_end)
{
  int old_end;
  old_end = XmTextGetLastPosition(listener_text);
  if (old_end > new_end)
    {
      dont_check_motion = true;
      XmTextSetSelection(listener_text, new_end, old_end, CurrentTime);
      XmTextRemove(listener_text);
      dont_check_motion = false;
    }
}
Exemple #8
0
	int main(int argc, char *argv[])
	{
		int i, n;
		Arg args[10];
		XtAppContext app;
		Widget toplevel, rowcol, textf, text;
		XmString str_months[12];

		setlocale(LC_ALL, "");

		//建立顶级窗口
		toplevel = XtVaAppInitialize(&app, "Edit", NULL, 0,
			&argc, argv, NULL, NULL);

		//建立rowcolumn 布局
		n = 0;
		XtSetArg(args[n], XmNpacking, XmPACK_TIGHT);   n++;
		rowcol = XmCreateRowColumn(toplevel, "rowcol", args, n);
		XtManageChild(rowcol);

		//建立输入条
		n = 0;
		XtSetArg(args[n], XmNvalue, "输入条");	n++;
		textf = XmCreateTextField(rowcol, "textf", args, n);
		XtManageChild(textf);

		//建立文本区
		n = 0;
		XtSetArg(args[n], XmNrows, 10);				n++;
		XtSetArg(args[n], XmNcolumns, 40);			n++;
		XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT);	n++;
		XtSetArg(args[n], XmNwordWrap, True);			n++;
		XtSetArg(args[n], XmNvalue, "输入区域\n请测试");	n++;
		text = XmCreateScrolledText(rowcol, "text", args, n);
		XtManageChild(text);
		
		//显示窗口
		XtRealizeWidget(toplevel);

		//edit
		XmTextSetInsertionPosition(text, 3);
		XmTextInsert(text, 5, "测试插入");
		XmTextSetSelection(text, 5, 8, CurrentTime);
		XmTextCopy(text, CurrentTime);
		XmTextSetInsertionPosition(text, 1);
		XmTextPaste(text);
		

		//进入事件循环
		XtAppMainLoop(app);

	}
Exemple #9
0
static void B1_release(Widget w, XEvent *event, char **str, Cardinal *num) 
{
  XmTextPosition pos;
  XButtonEvent *ev = (XButtonEvent *)event;
  pos = XmTextXYToPos(w, (Position)(ev->x), (Position)(ev->y));
  XmTextSetCursorPosition(w, pos);
  if (down_pos != pos)
    {
      XmTextSetHighlight(w, down_pos, pos, XmHIGHLIGHT_SELECTED);
      if (listener_selection) {XtFree(listener_selection); listener_selection = NULL;}
      XmTextSetSelection(w, down_pos, pos, CurrentTime);
      listener_selection = XmTextGetSelection(w);
    }
}
Exemple #10
0
static void Kill_line(Widget w, XEvent *ev, char **str, Cardinal *num) 
{
  /* C-k with storage of killed text */
  XmTextPosition curpos, loc;
  Boolean found;
  curpos = XmTextGetCursorPosition(w);
  found = XmTextFindString(w, curpos, "\n", XmTEXT_FORWARD, &loc);
  if (!found) loc = XmTextGetLastPosition(w);
  if (loc > curpos)
    {
      if (listener_selection) {XtFree(listener_selection); listener_selection = NULL;}
      XmTextSetSelection(w, curpos, loc, CurrentTime);
      listener_selection = XmTextGetSelection(w); /* xm manual p329 sez storage is allocated here */
      XmTextCut(w, CurrentTime);
    }
}
Exemple #11
0
static void motTextKeyPressEvent(Widget w, Ihandle *ih, XKeyEvent *evt, Boolean *cont)
{
  Widget spinbox;

  *cont = True;
  iupmotKeyPressEvent(w, ih, (XEvent*)evt, cont);
  if (*cont == False)
    return;

  if (evt->state & ControlMask && !(state & Mod1Mask || state & Mod5Mask))   /* Ctrl but NOT Alt */
  {
    KeySym motcode = iupmotKeycodeToKeysym(evt);
    if (motcode == XK_c || motcode == XK_x || motcode == XK_v || motcode == XK_a)
    {
      ih->data->disable_callbacks = -1; /* let callbacks be processed in motTextSetClipboardAttrib */

      if (motcode == XK_c)
        motTextSetClipboardAttrib(ih, "COPY");
      else if (motcode == XK_x)
        motTextSetClipboardAttrib(ih, "CUT");
      else if (motcode == XK_v)
        motTextSetClipboardAttrib(ih, "PASTE");
      else if (motcode == XK_a)
        XmTextSetSelection(ih->handle, 0, XmTextGetLastPosition(ih->handle), CurrentTime);

      ih->data->disable_callbacks = 0;

      *cont = False; 
      return;
    }
  }

  spinbox = (Widget)iupAttribGet(ih, "_IUP_EXTRAPARENT");
  if (spinbox && XmIsSpinBox(spinbox))
  {
    KeySym motcode = iupmotKeycodeToKeysym(evt);
    if (motcode == XK_Left || motcode == XK_Right)
    {
      /* avoid spin increment using Left/Right arrows, 
         but must manually handle the new cursor position */
      XmTextPosition caret_pos = XmTextGetInsertionPosition(ih->handle);
      XmTextSetInsertionPosition(ih->handle, (motcode == XK_Left)? caret_pos-1: caret_pos+1);
      *cont = False; 
    }
  }
}
Exemple #12
0
void CEdit:: SetSel(int nStartChar, int nEndChar, BOOL bNoScroll)
{
    // Set the current selection.

    if (_xd_textwidget != NULL)
    {
	XtVaSetValues(_xd_textwidget, XmNautoShowCursorPosition, !bNoScroll, NULL);

	XmTextPosition len = XmTextGetLastPosition(_xd_textwidget);

	if (nEndChar > len)
	    nEndChar = (int)len ;

	if (XmIsText(_xd_textwidget))
	    XmTextSetSelection(_xd_textwidget, nStartChar, nEndChar, XtLastTimestampProcessed(XtDisplay(_xd_textwidget)));
	else if (XmIsTextField(_xd_textwidget))
	    XmTextFieldSetSelection(_xd_textwidget, nStartChar, nEndChar, XtLastTimestampProcessed(XtDisplay(_xd_textwidget)));
    }
}
Exemple #13
0
void
ui_field_select_string(
    Widget	field,
    BOOL	assign_focus
)
{
    STRING	valuestr = NULL;

    valuestr = ui_field_get_string(field);

    if (XtIsSubclass(field, xmTextFieldWidgetClass))
    	XmTextFieldSetSelection(field, 0, strlen(valuestr), CurrentTime);
    else if (XtIsSubclass(field, xmTextWidgetClass))
	XmTextSetSelection(field, 0, strlen(valuestr), CurrentTime);

    if (assign_focus) 
        XmProcessTraversal(field, XmTRAVERSE_CURRENT);

    util_free(valuestr);
}
Exemple #14
0
static void motTextKeyPressEvent(Widget w, Ihandle *ih, XKeyEvent *evt, Boolean *cont)
{
  Widget spinbox;

  *cont = True;
  iupmotKeyPressEvent(w, ih, (XEvent*)evt, cont);
  if (*cont == False)
    return;

  if (evt->state & ControlMask)   /* Ctrl */
  {
    KeySym motcode = XKeycodeToKeysym(iupmot_display, evt->keycode, 0);
    if (motcode == XK_c)
      motTextSetClipboardAttrib(ih, "COPY");
    else if (motcode == XK_x)
      motTextSetClipboardAttrib(ih, "CUT");
    else if (motcode == XK_v)
      motTextSetClipboardAttrib(ih, "PASTE");
    else if (motcode == XK_a)
      XmTextSetSelection(ih->handle, 0, XmTextGetLastPosition(ih->handle), CurrentTime);
  }

  spinbox = (Widget)iupAttribGet(ih, "_IUP_EXTRAPARENT");
  if (spinbox && XmIsSpinBox(spinbox))
  {
    KeySym motcode = XKeycodeToKeysym(iupmot_display, evt->keycode, 0);
    if (motcode == XK_Left || motcode == XK_Right)
    {
      /* avoid spin increment using Left/Right arrows, 
         but must manually handle the new cursor position */
      XmTextPosition caret_pos = XmTextGetInsertionPosition(ih->handle);
      XmTextSetInsertionPosition(ih->handle, (motcode == XK_Left)? caret_pos-1: caret_pos+1);
      *cont = False; 
    }
  }
}
Exemple #15
0
void wxTextEntry::SetSelection(long from, long to)
{
    XmTextSetSelection(GetText(), from, GetMotifPos(to), CurrentTime);
}