Exemple #1
0
void
XmCommandError(Widget w, XmString error)
{
    if (Com_Error(w))
    {
	DEBUGOUT(_LtDebug(__FILE__, w, "Error Condition detected"));
	XmListDeletePos(SB_List(w), 0);
    }

    XmListAddItemUnselected(SB_List(w), error, 0);

    Com_Error(w) = True;
}
Exemple #2
0
static void
initialize(Widget request, Widget new_w,
	   ArgList args, Cardinal *num_args)
{
    DEBUGOUT(_LtDebug(__FILE__, new_w, "Initialize\n"));

    if (Com_PromptString(new_w) == (XmString)XmUNSPECIFIED)
    {
	XmString xms;

	xms = XmStringCreateLocalized(">");
	XtVaSetValues( SB_SelectionLabel(new_w), XmNlabelString, xms, NULL);
	XmStringFree(xms);
	Com_PromptString(new_w) = NULL;
    }
#if 0
    /* rws 2 Oct 1998
       These are just re-named SelectionBox resources so SelectionBox
       will take care of them.
     */
    if (Com_PromptString(new_w) == (XmString)XmUNSPECIFIED)
    {
	Com_PromptString(new_w) = XmStringCreateLocalized(">");
    }
    else if (Com_PromptString(new_w) != NULL)
    {
	Com_PromptString(new_w) = XmStringCopy(Com_PromptString(new_w));
    }

    if (Com_Command(new_w) == (XmString)XmUNSPECIFIED)
    {
	Com_Command(new_w) = XmStringCreateLocalized(">");
    }
    else if (Com_Command(new_w) != NULL)
    {
	Com_Command(new_w) = XmStringCopy(Com_Command(new_w));
    }
#endif

    XtAddCallback(SB_Text(new_w), XmNactivateCallback,
		  _XmCommandCallback, C_ACT);
    XtAddCallback(SB_List(new_w), XmNsingleSelectionCallback,
		  _XmCommandCallback, C_LIST_SELECT);
    XtAddCallback(SB_List(new_w), XmNdefaultActionCallback,
		  _XmCommandCallback, C_LIST_DOUBLE);

    Com_Error(new_w) = False;
}
Exemple #3
0
static void
_XmCommandGetVisibleItemCount(Widget w, int offset, XtArgVal *value)
{
int count = 0;

    DEBUGOUT(_LtDebug(__FILE__, w, "_XmCommandGetVisibleItemCount\n"));
    XtVaGetValues(SB_List(w),
    	XmNvisibleItemCount, &count,
    	NULL);
    *value = (XtArgVal)count;
}
Exemple #4
0
static void
_XmCommandGetHistoryItems(Widget w, int offset, XtArgVal *value)
{
XmStringTable table = NULL;

    DEBUGOUT(_LtDebug(__FILE__, w, "_XmCommandGetHistoryItems\n"));
    XtVaGetValues(SB_List(w),
    	XmNitems, &table,
    	NULL);
    *value = (XtArgVal)table;
}
Exemple #5
0
Widget
XmCommandGetChild(Widget w, unsigned char child)
{
    switch (child)
    {
    case XmDIALOG_COMMAND_TEXT:
	return SB_Text(w);

    case XmDIALOG_HISTORY_LIST:
	return SB_List(w);

    case XmDIALOG_PROMPT_LABEL:
	return SB_SelectionLabel(w);
    }

    return NULL;
}
Exemple #6
0
/*ARGSUSED*/
static Boolean 
SetValues(
        Widget ow,
        Widget rw,		/* unused */
        Widget nw,
        ArgList args,		/* unused */
        Cardinal *num_args )	/* unused */
{
            XmCommandWidget old = (XmCommandWidget) ow ;
            XmCommandWidget new_w = (XmCommandWidget) nw ;
            int max;
            Arg             argv[5] ;
            Cardinal        argc ;
/****************/

    /* mustMatch does not apply to command... (it is always false) */
    if (new_w->selection_box.must_match != False) { 
        new_w->selection_box.must_match = False; 
        XmeWarning( (Widget) new_w, WARNING5);
    }

    if (new_w->selection_box.dialog_type != XmDIALOG_COMMAND) {
        new_w->selection_box.dialog_type = XmDIALOG_COMMAND;
        XmeWarning( (Widget) new_w, WARNING1);
    }

    /* check for and change max history items (remove items if needed) */
    if (new_w->command.history_max_items < 1) {
        new_w->command.history_max_items = old->command.history_max_items;
        XmeWarning( (Widget) new_w, WARNING6);
    }
    if (new_w->command.history_max_items < 
        old->command.history_max_items)
    {
        argc = 0 ;
        XtSetArg( argv[argc], XmNitemCount, &max) ; ++argc ;
        XtGetValues( SB_List( new_w), argv, argc) ;

        while (max > new_w->command.history_max_items) {
            XmListDeletePos (new_w->selection_box.list, 1);
            if (new_w->selection_box.list_selected_item_position > 0)
                new_w->selection_box.list_selected_item_position--;
            max--;
        }
    }
    if (old->command.error)
    {
	XmString new_xms, old_xms;
        int new_count = new_w->selection_box.list_item_count;
        int old_count = old->selection_box.list_item_count;

	if (new_count > 2 && old_count > 2)
	{
            XmString new_blank, old_blank, new_error, old_error;
	    
            new_error = new_w->selection_box.list_items[new_count-1];
            old_error = old->selection_box.list_items[new_count-1];
            new_blank = new_w->selection_box.list_items[new_count-2];
            old_blank = old->selection_box.list_items[new_count-2];

	    if (XmStringCompare(new_error, old_error) &&
	        XmStringCompare(new_blank, old_blank))
	    {
                new_w->command.error = FALSE;
#if 0
                XmListDeletePos(SB_List(old), 0);   /* Delete error message.*/
                XmListDeletePos(SB_List(old), 0) ;   /* Delete blank line.*/
                old->command.error = FALSE ;
#endif
	    }
	}
	else new_w->command.error = FALSE;
    }
    
    /* require redisplay */
    return(True);
}
Exemple #7
0
/*ARGSUSED*/
void 
_XmCommandReturn(
        Widget wid,
        XEvent *event,
        String *params,		/* unused */
        Cardinal *numParams )	/* unused */
{
            XmCommandWidget w = (XmCommandWidget) wid ;
    XmCommandCallbackStruct cb;
    XmString                   tmpXmString;
    String                     tmpString;
            Arg             argv[5] ;
            Cardinal        argc ;
            int             count ;
/****************/

    /* if an error has been sent to the history list, remove it now */
    if (w->command.error) {
        XmListDeletePos (w->selection_box.list, 0);     /* delete error msg  */
        XmListDeletePos (w->selection_box.list, 0);     /* delete blank line */
        w->command.error = FALSE;
        XmListSetBottomPos (w->selection_box.list, 0);
    }

    /* update the history:  - get text, check null/empty  */
    /*                      - create XmString from text   */
    /*                      - increment local list count  */
    /*                      - add to history list         */
    /*                      - delete first element if too */
    /*                        many items (maxItemCount)   */
    /*                      - position list to end        */
    /*                      - reset selection list ptr    */
    /*                      - reset command to ""         */

    tmpString = XmTextFieldGetString (w->selection_box.text);
    if ((tmpString == NULL) || (strcmp(tmpString, "") == 0)) { 
        if (tmpString) XtFree(tmpString);
        return;
    }
    argc = 0 ;
    XtSetArg( argv[argc], XmNitemCount, &count) ; ++argc ;
    XtGetValues( SB_List( w), argv, argc) ;
    /* if already at max items, remove first item in list */

    if (count >= w->command.history_max_items) 
    {
        XmListDeletePos (w->selection_box.list, 1);
        if (w->selection_box.list_selected_item_position > 0)
            w->selection_box.list_selected_item_position--;
    }
    tmpXmString = XmStringGenerate(tmpString, XmFONTLIST_DEFAULT_TAG,
				   XmCHARSET_TEXT, NULL);
    XmListAddItemUnselected (w->selection_box.list, tmpXmString, 0);

    XmListSetBottomPos (w->selection_box.list, 0);
    XmTextFieldSetString (w->selection_box.text, "");
    /* call the users command entered callback */

    cb.reason = XmCR_COMMAND_ENTERED;
    cb.event  = event;
    cb.value  = tmpXmString;
    cb.length = XmStringLength (tmpXmString);
    XtCallCallbackList ((Widget) w, w->command.callback, &cb);
    XmStringFree (tmpXmString);
    XtFree (tmpString);
    return ;
}
Exemple #8
0
/*ARGSUSED*/
static void 
ListCallback(
        Widget w,		/* unused */
        XtPointer client_data,
        XtPointer call_data )
{   
            XmListCallbackStruct * listCB = (XmListCallbackStruct *)
                                                                    call_data ;
            XmCommandCallbackStruct cmdCB ;
            XmCommandWidget cmdWid = (XmCommandWidget) client_data ;
            char *          text_value ;
            Arg             argv[5] ;
            Cardinal        argc ;
            int             count ;
            XmString        tmpXmString ;
/*********** reset is not used ************
            Boolean         reset = FALSE ;
****************/

    argc = 0 ;
    XtSetArg( argv[argc], XmNitemCount, &count) ; ++argc ;
    XtGetValues( SB_List( cmdWid), argv, argc) ;

    if(    !count    )
    {   return ;
        } 
    if(    cmdWid->command.error    )
    {   
        if(    (listCB->item_position == (count - 1))
            || (    (listCB->item_position == count)
                 && (listCB->reason != XmCR_DEFAULT_ACTION))    )
        {   
            /* Selection or default action on the blank line, or selection on
            *   error message.  Restore previous selection and return.
            */
            XmListDeselectPos( SB_List( cmdWid), listCB->item_position) ;

            if(    cmdWid->selection_box.list_selected_item_position    )
            {   XmListSelectPos( SB_List( cmdWid), 
                    cmdWid->selection_box.list_selected_item_position, FALSE) ;
                } 
            return ;
            } 
        XmListDeletePos( SB_List( cmdWid), 0) ;   /* Delete error message.*/
        XmListDeletePos( SB_List( cmdWid), 0) ;   /* Delete blank line.*/
        cmdWid->command.error = FALSE ;

        if(    count <= 2    )
        {   /* List only contained error message and blank line.
            */
            cmdWid->selection_box.list_selected_item_position = 0 ;
            return ;
            } 
        count -= 2 ;

        if(    (listCB->item_position > count)
            && (listCB->reason == XmCR_DEFAULT_ACTION)    )
        {   
            /* Default action on the error message line.  Restore previous
            *   selection, clear text area, and return.
            */
            if(    cmdWid->selection_box.list_selected_item_position    )
            {   XmListSelectPos( SB_List( cmdWid), 
                    cmdWid->selection_box.list_selected_item_position, FALSE) ;
                } 
            XmTextFieldSetString( cmdWid->selection_box.text, "") ;
            return ;
            }
        }
    if(    listCB->reason == XmCR_DEFAULT_ACTION    )
    {   
        /* If we are already at max items, remove first item.
        */
        if(    count >= cmdWid->command.history_max_items    )
        {
            XmListDeletePos( cmdWid->selection_box.list, 1) ;

            if(    cmdWid->selection_box.list_selected_item_position > 0    )
            {   cmdWid->selection_box.list_selected_item_position-- ;
                } 
            }
        tmpXmString = XmStringCopy( listCB->item) ;
        XmListAddItemUnselected( cmdWid->selection_box.list, tmpXmString, 0) ;

        XmListSetBottomPos( cmdWid->selection_box.list, 0) ;
        XmTextFieldSetString( cmdWid->selection_box.text, "") ;
        /* Call the users command entered callback.
        */
        cmdCB.reason = XmCR_COMMAND_ENTERED ;
        cmdCB.event  = NULL ;
        cmdCB.value  = tmpXmString ;
        cmdCB.length = XmStringLength( tmpXmString) ;
        XtCallCallbackList( (Widget) cmdWid, cmdWid->command.callback, &cmdCB) ;

        XmStringFree( tmpXmString) ;
        } 
    else /* listCB->reason is BROWSE_SELECT or SINGLE_SELECT */
    {   /* Update the text widget to relect the latest list selection.
        */
        cmdWid->selection_box.list_selected_item_position = 
                                                        listCB->item_position ;
        if((text_value = _XmStringGetTextConcat( listCB->item)) != NULL)
        {   
            XmTextFieldSetString( SB_Text( cmdWid), text_value) ;
            XmTextFieldSetInsertionPosition( SB_Text( cmdWid),
			       XmTextFieldGetLastPosition( SB_Text( cmdWid))) ;
            XtFree( text_value) ;
            } 
        } 
    return ;
    }
Exemple #9
0
/*ARGSUSED*/
static void 
Initialize(
        Widget rw,		/* unused */
        Widget nw,
        ArgList args,		/* unused */
        Cardinal *num_args )	/* unused */
{
    XmCommandWidget new_w = (XmCommandWidget) nw ;
    int max;
    Arg             argv[5] ;
    Cardinal        argc ;
/****************/
    
    /*	Here we have now to take care of XmUNSPECIFIED (CR 4856).
     */  
    if (new_w->selection_box.selection_label_string == 
	(XmString) XmUNSPECIFIED) {
	XmString local_xmstring ;

	local_xmstring = XmStringCreate(">", XmFONTLIST_DEFAULT_TAG);
	argc = 0 ;
	XtSetArg( argv[argc], XmNlabelString, local_xmstring) ; ++argc ;
	XtSetValues( SB_SelectionLabel( new_w), argv, argc) ;
	XmStringFree(local_xmstring);

	new_w->selection_box.selection_label_string = NULL ;
    }
	   
    /* mustMatch does not apply to command... (it is always false) */
    if (new_w->selection_box.must_match != False) { 
        new_w->selection_box.must_match = False; 
        XmeWarning( (Widget) new_w, WARNING5);
    }

    /* check for and change max history items (remove items if needed) */
    if (new_w->command.history_max_items < 1) {
        new_w->command.history_max_items = 100;
        XmeWarning( (Widget) new_w, WARNING6);
    }
    argc = 0 ;
    XtSetArg( argv[argc], XmNitemCount, &max) ; ++argc ;
    XtGetValues( SB_List( new_w), argv, argc) ;

    if (new_w->command.history_max_items < max)
    {
        while (max > new_w->command.history_max_items) {
            XmListDeletePos (new_w->selection_box.list, 1);
            if (new_w->selection_box.list_selected_item_position > 0)
                new_w->selection_box.list_selected_item_position--;
            max--;
        }
    }
    if (new_w->selection_box.dialog_type != XmDIALOG_COMMAND)
    {   
        new_w->selection_box.dialog_type = XmDIALOG_COMMAND ;
        XmeWarning( (Widget) new_w, WARNING1);
        } 
    XtAddCallback (new_w->selection_box.text, XmNvalueChangedCallback, 
                                              CommandCallback, (XtPointer) new_w);
    new_w->command.error = FALSE;

    return ;
}
Exemple #10
0
static void
_XmCommandCallback(Widget w, XtPointer client, XtPointer call)
{
    XmCommandCallbackStruct cbs;
    XmAnyCallbackStruct *p = (XmAnyCallbackStruct *)call;
    XmListCallbackStruct *l = (XmListCallbackStruct *) call;
    XmCommandWidget cw = (XmCommandWidget)XtParent(w);
    char *t;

    if (client != C_ACT)
	cw = (XmCommandWidget)XtParent(XtParent(w));

    DEBUGOUT(_LtDebug(__FILE__, (Widget)cw, "_XmCommandCallback [%s]\n",
	(client == C_ACT) ? "TextField Activate" : "List Selection"));

    /*
     * In the cases of TextField Activate and List DefaultAction, we need to
     * call a callback ourselves.
     * In the List SingleSelect case, just make the list item show up in
     * TextField.
     */
    if (client == C_ACT)
    {
	cbs.reason = XmCR_COMMAND_ENTERED;
	cbs.event = p->event;

	t = XmTextFieldGetString(w);

	cbs.value = XmStringCreateSimple(t);
	cbs.length = (t == NULL) ? 0 : strlen(t);

	XtFree(t);

	XtCallCallbackList((Widget)cw, cw->command.callback, &cbs);
    }

    if (client == C_LIST_SELECT)
    {
	if (!XmStringGetLtoR(l->item, XmFONTLIST_DEFAULT_TAG, &t))
	{
	    return;
	}

	XmTextFieldSetString(SB_Text(cw), t);

	cbs.value = XmStringCreateSimple(t);

	XtFree(t);

	return;
    }

    if (client == C_LIST_DOUBLE)
    {
	cbs.reason = XmCR_COMMAND_ENTERED;
	cbs.event = l->event;
	cbs.value = l->item;
	cbs.length = XmStringLength(l->item);

	XtCallCallbackList((Widget)cw, cw->command.callback, &cbs);
    }

    /* If we have an error condition, remove it */
    if (Com_Error(cw))
    {
	Com_Error(cw) = False;
	XmListDeletePos(SB_List(cw), 0);
    }

    /* We need to blindly insert now.  */
    XmListAddItemUnselected(SB_List(cw), cbs.value, 0);  /* 0 is at the end */

    /*
     * If #items in list is larger than HistoryMaxItems, remove the first
     * This code will actually delete more than just the first item, in case
     * some sick programmer decides to manually cram more items in the list
     * than XmNhistoryMaxItems allows
     */
    if (List_ItemCount(SB_List(cw)) > Com_HistoryMaxItems(cw))
    {
	DEBUGOUT(_LtDebug(__FILE__, (Widget)cw,
			  "_XmCommandCallback: List too long; removing %d items"
			  " from list\n",
			  List_ItemCount(SB_List(cw)) -
				Com_HistoryMaxItems(cw)));

	XmListDeleteItemsPos(SB_List(cw),
			     List_ItemCount(SB_List(cw)) -
				Com_HistoryMaxItems(cw), 1);
    }
    if (client != C_LIST_DOUBLE)	/* FIX ME - I think this is right ! */
    {
	XmStringFree(cbs.value);
    }

    /* Clear the text field */
    XmTextFieldSetString(SB_Text(cw), "");
}