Ejemplo n.º 1
0
static char* motTextGetSelectionPosAttrib(Ihandle* ih)
{
  XmTextPosition start = 0, end = 0;

  if (!XmTextGetSelectionPosition(ih->handle, &start, &end) || start==end)
    return NULL;

  return iupStrReturnIntInt((int)start, (int)end, ':');
}
Ejemplo n.º 2
0
void
editCB( Widget w, XtPointer client_data, 
 		XtPointer call_data)
{
	int i;
	char *s;
	long action;
	Time time;
	Widget widget;
	XButtonEvent *event;
	XmPushButtonCallbackStruct *acs;
	XmTextPosition left, right;
	
	action = (long) client_data;
	acs = (XmPushButtonCallbackStruct *) call_data; 
	event = (XButtonEvent *) acs->event;
	time = event->time;
	widget = get_document_text(w, "editCB");
	
	switch (action) {
		case EDIT_CUT:
			XmTextCut(widget, time);
			break;
		case EDIT_COPY:
			XmTextCopy(widget, time);
			break;
		case EDIT_PASTE:
			XmTextPaste(widget);
			break;
		case EDIT_DELETE:
			XmTextRemove(widget);
			break;
		case EDIT_CLEAR:
			if (False == XmTextGetSelectionPosition(widget, 
			    &left, &right)) 
				break; 
			s = calloc(1 + right - left, sizeof(char));
			if (NULL == s) {
				perror("Dtpad (calloc)");
				exit(1);
			}
			for (i = 0; i < right - left; i++) s[i] = ' ';
			s[right - left] = '\0';
			XmTextReplace(widget, left, right, s);
			XtFree(s);
			break;
		default:
			break;
	}
}
Ejemplo n.º 3
0
void wxTextEntry::GetSelection(long* from, long* to) const
{
    XmTextPosition left, right;
    if ( !XmTextGetSelectionPosition(GetText(), &left, &right) )
    {
        // no selection, for compatibility with wxMSW return empty range at
        // cursor position
        left =
        right = GetInsertionPoint();
    }

    if ( from )
        *from = left;
    if ( to )
        *to = right;
}
Ejemplo n.º 4
0
void RXmTextGetSelectionPosition(message_t message)
{
  Widget w;
  Boolean result;
  XmTextPosition left,right;
  message_t reply=prepare_reply(message);

  toolkit_read_value(message,&w,XtRWidget);
  result=XmTextGetSelectionPosition(w,&left,&right);

  message_write_boolean(reply,result,boolean_tag);
  message_write_int(reply,left,int_tag);
  message_write_int(reply,right,int_tag);
  message_send(client_socket,reply);
  message_free(reply);
  must_confirm=False;
}
Ejemplo n.º 5
0
static char* motTextGetSelectionPosAttrib(Ihandle* ih)
{
  XmTextPosition start = 0, end = 0;
  char* str;

  if (!XmTextGetSelectionPosition(ih->handle, &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;
}
Ejemplo n.º 6
0
static int motTextSetSelectedTextAttrib(Ihandle* ih, const char* value)
{
  XmTextPosition start, end;

  if (!value)
    return 0;

  if (XmTextGetSelectionPosition(ih->handle, &start, &end) && start!=end)
  {
    /* disable callbacks */
    iupAttribSetStr(ih, "_IUPMOT_DISABLE_TEXT_CB", "1");
    XmTextReplace(ih->handle, start, end, (char*)value);
    iupAttribSetStr(ih, "_IUPMOT_DISABLE_TEXT_CB", NULL);
  }

  return 0;
}
Ejemplo n.º 7
0
static int motTextSetSelectedTextAttrib(Ihandle* ih, const char* value)
{
  XmTextPosition start, end;

  if (!value)
    return 0;

  if (XmTextGetSelectionPosition(ih->handle, &start, &end) && start!=end)
  {
    /* disable callbacks */
    ih->data->disable_callbacks = 1;
    XmTextReplace(ih->handle, start, end, (char*)value);
    ih->data->disable_callbacks = 0;
  }

  return 0;
}
Ejemplo n.º 8
0
Archivo: CEdit.C Proyecto: dhaley/dcp
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;
	}
    }
}
Ejemplo n.º 9
0
//
// Input from motif text-widget with recall
// Returns 1 if return i pressed, else 0.
//
int mrm_TextInput( Widget w, XEvent *event, char *recall, int line_size, 
	int recall_size, int *current_recall_line)
{
  KeySym keysym;
  Modifiers mod;
  int 	pos;
  char 	*text;
  char 	newtext[160];
  int	i;
  XmTextPosition   left, right;
  char  *s, *t;

  text = XmTextGetString( w);
  XtTranslateKeycode( flow_Display(w), event->xkey.keycode, event->xkey.state, 
	&mod, &keysym);
  keysym &= 0xFFFF;
  switch ( keysym) 
  {
    case XK_Return:
    case XK_Linefeed:
      // Insert in recall buffer
      if ( strcmp( text, "") != 0)
      {
        for ( i = recall_size - 2; i >= 0; i--)
          strcpy( recall + (i+1) * line_size, recall + i * line_size);
        strncpy( recall, text, line_size);
        recall[line_size-1] = 0;
      }
      *current_recall_line = 0;
      return 1;
    case XK_Up:
      (*current_recall_line)++;
      if ( *current_recall_line > recall_size - 1)
        *current_recall_line = recall_size - 1;
      XmTextSetString( w, recall + (*current_recall_line - 1) * line_size);
      XmTextSetCursorPosition( w, 
		strlen(recall + (*current_recall_line - 1) * line_size));
      break;
    case XK_Down:
      if ( *current_recall_line == 0)
        XmTextSetString( w, "");
      else if ( *current_recall_line == 1)
      {
        XmTextSetString( w, "");
        (*current_recall_line)--;
      }
      else
      {
        (*current_recall_line)--;
        XmTextSetString( w, recall + (*current_recall_line - 1) * line_size);
        XmTextSetCursorPosition( w, 
		strlen(recall + (*current_recall_line - 1) * line_size));
      }
      break;
    case XK_Left:
      XmTextClearSelection( w, CurrentTime);
      pos = XmTextGetCursorPosition( w);
      if ( pos == 0)
        break;
      pos--;
      XmTextSetCursorPosition( w, pos);
      break;
    case XK_Right:
      XmTextClearSelection( w, CurrentTime);
      pos = XmTextGetCursorPosition( w);
      if ( pos >= line_size - 1)
        break;
      pos++;
      if ( pos > strlen(text))
        break;
      XmTextSetCursorPosition( w, pos);
      break;
    case XK_BackSpace:
    case 65535:
      if ( XmTextGetSelectionPosition( w, &left, &right)) {
        for ( s = text + left, t = text + right; *t; s++,t++)
	  *s = *t; 
        *s = 0;
        XmTextSetString( w, text);
        XmTextSetCursorPosition( w, left);
      }
      else {
        pos = XmTextGetCursorPosition( w);
        if ( pos == 0)
          break;
        if ( pos == 1)
          strcpy( newtext, "");
        else
          strncpy( newtext, text, pos-1);
        newtext[pos-1] = 0;
        strncat( newtext, &text[pos], sizeof( newtext));
        XmTextSetString( w, newtext);
        XmTextSetCursorPosition( w, pos-1);
      }
      break;
    default:
      if ( event->xkey.state & ControlMask)
        return 0;
      if ( keysym > 256)
        return 0;

      if ( XmTextGetSelectionPosition( w, &left, &right)) {
        for ( s = text + left, t = text + right; *t; s++,t++)
	  *s = *t; 
        *s = 0;
        XmTextSetCursorPosition( w, left);
      }
      pos = XmTextGetCursorPosition( w);
      if ( pos >= line_size - 1)
        break;
      if ( pos == 0)
        strcpy( newtext, "");
      else
        strncpy( newtext, text, pos);
      newtext[pos] = keysym;
      newtext[pos+1] = 0;
      strncat( newtext, &text[pos], sizeof( newtext));
      XmTextSetString( w, newtext);
      XmTextSetCursorPosition( w, pos+1);
  }
  return 0;
}