static Boolean nav_sel_convert_cb( Widget w, Atom *selection, Atom *target, Atom *type_return, XtPointer *value_return, unsigned long *length_return, int *format_return) { NavMotif *nav; brow_tCtx browctx; char name[200]; int sts; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &nav); if (*target == XA_TARGETS(flow_Display(nav->brow_widget))) { Atom *targetP; Atom *std_targets; unsigned long std_length; XSelectionRequestEvent *req = XtGetSelectionRequest( w, *selection, (XtRequestId)NULL); XmuConvertStandardSelection( w, req->time, selection, target, type_return, (caddr_t *)&std_targets, &std_length, format_return); *value_return = XtMalloc( sizeof(Atom) * (std_length + 2)); targetP = *(Atom **) value_return; *targetP++ = XA_STRING; *targetP++ = XA_TEXT(flow_Display(nav->brow_widget)); *length_return = std_length + (targetP - (*(Atom **) value_return)); bcopy((char *)std_targets, (char *)targetP, sizeof(Atom) * std_length); XtFree( (char *)std_targets); *type_return = XA_ATOM; *format_return = 32; return True; } if (*target == XA_STRING) { if ( !nav->get_plant_select_cb) return FALSE; sts = nav->get_plant_select_cb( nav->parent_ctx, name, sizeof(name)); if ( EVEN(sts)) return FALSE; *value_return = XtNewString(name); *length_return = strlen(name) + 1; *type_return = XA_STRING; *format_return = 8; return TRUE; } return FALSE; }
static void nav_sel_lose_cb( Widget w, Atom *selection) { Nav *nav; brow_tCtx browctx; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &nav); brow_SelectClear( nav->brow_ctx); }
void WNavMotif::sel_lose_cb( Widget w, Atom *selection) { WNavMotif *wnav; brow_tCtx browctx; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &wnav); brow_SelectClear( wnav->brow->ctx); wnav->selection_owner = 0; }
static void pal_sel_lose_cb( Widget w, Atom *selection) { PalMotif *pal; brow_tCtx browctx; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &pal); brow_SelectClear( pal->brow_ctx); pal->selection_owner = 0; }
Boolean WNavMotif::sel_convert_cb( Widget w, Atom *selection, Atom *target, Atom *type_return, XtPointer *value_return, unsigned long *length_return, int *format_return) { WNavMotif *wnav; brow_tCtx browctx; int sts; int size; WItem *item; pwr_tAName attr_str; pwr_sAttrRef attrref; char name[200]; char *buffp; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &wnav); if (*target == XA_TARGETS(flow_Display(wnav->brow_widget))) { Atom *targetP; Atom *std_targets; unsigned long std_length; XSelectionRequestEvent *req = XtGetSelectionRequest( w, *selection, (XtRequestId)NULL); XmuConvertStandardSelection( w, req->time, selection, target, type_return, (caddr_t *)&std_targets, &std_length, format_return); *value_return = XtMalloc( sizeof(Atom) * (std_length + 2)); targetP = *(Atom **) value_return; *targetP++ = XA_STRING; *targetP++ = XA_TEXT(flow_Display(wnav->brow_widget)); *length_return = std_length + (targetP - (*(Atom **) value_return)); bcopy((char *)std_targets, (char *)targetP, sizeof(Atom) * std_length); XtFree( (char *)std_targets); *type_return = XA_ATOM; *format_return = 32; return True; } if (*target == XA_STRING || *target == XA_TEXT(flow_Display(wnav->brow_widget)) || *target == XA_COMPOUND_TEXT(flow_Display(wnav->brow_widget)) || *target == wnav->graph_atom || *target == wnav->objid_atom || *target == wnav->attrref_atom) { brow_tNode *node_list; int node_count; wnav_eSelectionFormat format; if ( *target == wnav->graph_atom) format = wnav_eSelectionFormat_Graph; else if ( *target == wnav->objid_atom) format = wnav_eSelectionFormat_Objid; else if ( *target == wnav->attrref_atom) format = wnav_eSelectionFormat_Attrref; else format = wnav_eSelectionFormat_User; brow_GetSelectedNodes( wnav->brow->ctx, &node_list, &node_count); if ( !node_count) return FALSE; brow_GetUserData( node_list[0], (void **)&item); switch( item->type) { case wnav_eItemType_Attr: case wnav_eItemType_AttrInput: case wnav_eItemType_AttrInputInv: case wnav_eItemType_AttrInputF: case wnav_eItemType_AttrOutput: case wnav_eItemType_AttrArray: case wnav_eItemType_AttrArrayOutput: case wnav_eItemType_AttrArrayElem: case wnav_eItemType_AttrObject: { WItemBaseAttr *aitem = (WItemBaseAttr *)item; sts = ldh_ObjidToName( wnav->ldhses, item->objid, ldh_eName_Hierarchy, attr_str, sizeof(attr_str), &size); if ( EVEN(sts)) return FALSE; strcat( attr_str, "."); strcat( attr_str, aitem->name); sts = ldh_NameToAttrRef( wnav->ldhses, attr_str, &attrref); if ( EVEN(sts)) return FALSE; sts = (wnav->format_selection_cb)( wnav->parent_ctx, attrref, &buffp, 0, 1, format); *value_return = XtNewString(buffp); *length_return = strlen(buffp) + 1; if ( !sts) return FALSE; break; } case wnav_eItemType_Object: memset( &attrref, 0, sizeof(attrref)); attrref.Objid = item->objid; sts = (wnav->format_selection_cb)( wnav->parent_ctx, attrref, &buffp, 0, 0, format); *value_return = XtNewString(buffp); *length_return = strlen(buffp) + 1; if ( !sts) return FALSE; break; default: brow_GetAnnotation( node_list[0], 0, name, sizeof(name)); *value_return = XtNewString(name); *length_return = strlen(name) + 1; } free( node_list); if ( *target == XA_COMPOUND_TEXT(flow_Display(wnav->brow_widget)) || *target == wnav->graph_atom || *target == wnav->objid_atom || *target == wnav->attrref_atom) *type_return = *target; else *type_return = XA_STRING; *format_return = 8; return TRUE; } return FALSE; }
static Boolean pal_sel_convert_cb( Widget w, Atom *selection, Atom *target, Atom *type_return, XtPointer *value_return, unsigned long *length_return, int *format_return) { PalMotif *pal; brow_tCtx browctx; char name[200]; PalItem *item; BrowCtxFromWidget( w, (void **) &browctx); brow_GetCtxUserData( browctx, (void **) &pal); if (*target == XA_TARGETS(flow_Display(pal->brow_widget))) { Atom *targetP; Atom *std_targets; unsigned long std_length; XSelectionRequestEvent *req = XtGetSelectionRequest( w, *selection, (XtRequestId)NULL); XmuConvertStandardSelection( w, req->time, selection, target, type_return, (caddr_t *)&std_targets, &std_length, format_return); *value_return = XtMalloc( sizeof(Atom) * (std_length + 2)); targetP = *(Atom **) value_return; *targetP++ = XA_STRING; *targetP++ = XA_TEXT(flow_Display(pal->brow_widget)); *length_return = std_length + (targetP - (*(Atom **) value_return)); bcopy((char *)std_targets, (char *)targetP, sizeof(Atom) * std_length); XtFree( (char *)std_targets); *type_return = XA_ATOM; *format_return = 32; return True; } if (*target == XA_STRING || *target == XA_TEXT(flow_Display(pal->brow_widget)) || *target == XA_COMPOUND_TEXT(flow_Display(pal->brow_widget))) { brow_tNode *node_list; int node_count; brow_GetSelectedNodes( pal->brow_ctx, &node_list, &node_count); if ( !node_count) return FALSE; brow_GetUserData( node_list[0], (void **)&item); switch( item->type) { case pal_ePalItemType_ClassVolume: case pal_ePalItemType_Class: case pal_ePalItemType_Object: default: brow_GetAnnotation( node_list[0], 0, name, sizeof(name)); *value_return = XtNewString(name); *length_return = strlen(name) + 1; } free( node_list); *type_return = XA_STRING; *format_return = 8; return TRUE; } return FALSE; }