/****************************************************************************** * * ClassPartInitialize: * Called when this widget or a subclass of this widget is instantiated. * *****************************************************************************/ static void ClassPartInitialize ( WidgetClass widgetClass ) { ExmSimpleWidgetClass wc = (ExmSimpleWidgetClass)widgetClass; ExmSimpleWidgetClass sc = (ExmSimpleWidgetClass) wc->core_class.superclass; /* The following code allows subclasses of ExmSimple to inherit certain methods of ExmSimple. */ if (wc->simple_class.draw_visual == ExmInheritDrawVisual) wc->simple_class.draw_visual = sc->simple_class.draw_visual; if (wc->simple_class.draw_shadow == ExmInheritDrawShadow) wc->simple_class.draw_shadow = sc->simple_class.draw_shadow; if (wc->simple_class.create_gc == ExmInheritCreateGC) wc->simple_class.create_gc = sc->simple_class.create_gc; if (wc->simple_class.destroy_gc == ExmInheritDestroyGC) wc->simple_class.destroy_gc = sc->simple_class.destroy_gc; if (wc->simple_class.select_gc == ExmInheritSelectGC) wc->simple_class.select_gc = sc->simple_class.select_gc; if (wc->simple_class.calc_visual_size == ExmInheritCalcVisualSize) wc->simple_class.calc_visual_size = sc->simple_class.calc_visual_size; if (wc->simple_class.calc_widget_size == ExmInheritCalcWidgetSize) wc->simple_class.calc_widget_size = sc->simple_class.calc_widget_size; if (wc->simple_class.reconfigure == ExmInheritReconfigure) wc->simple_class.reconfigure = sc->simple_class.reconfigure; /* Install the containerItem trait on ExmSimple and all its subclasses. */ XmeTraitSet((XtPointer) wc, XmQTcontainerItem, (XtPointer) &simpleCIT); /* Install the careParentVisual trait on ExmSimple and all subclasses. */ XmeTraitSet((XtPointer) wc, XmQTcareParentVisual, (XtPointer) &simpleCVT); }
static void ClassInitialize() #endif { baseClassExtRec.record_type = XmQmotif; #if XmVersion == 2000 /* Trait records */ XmeTraitSet((XtPointer) xmtMenuWidgetClass, XmQTmenuSystem, (XtPointer) &_XmRC_menuSystemRecord); #endif #if XmVersion >= 2001 /* Trait records */ XmeTraitSet((XtPointer) xmtMenuWidgetClass, XmQTmenuSystem, XmeTraitGet ((XtPointer) xmRowColumnWidgetClass, XmQTmenuSystem)); #endif }
static void class_initialize(void) { if (! XmeTraitSet((XtPointer)xmDrawnButtonWidgetClass, XmQTactivatable, (XtPointer)&_XmDrawnBTraitRec)) { _XmWarning(NULL, "XmDrawnButton ClassInitialize: XmeTraitSet failed\n"); } }
static void ClassPartInitialize( WidgetClass wc ) { _XmFastSubclassInit (wc, XmARROW_BUTTON_BIT); /* Install the activatable trait for all subclasses */ XmeTraitSet((XtPointer)wc, XmQTactivatable, (XtPointer) &arrowButtonAT); }
void _XmToolTipRemove(Widget w) { XmToolTipTrait ttp; _XmToolTipLeave(w, NULL, NULL, NULL); ttp = (XmToolTipTrait) XmeTraitGet(w, XmQTtoolTip); if (ttp != NULL) { XmStringFree(ttp->tool_tip_string); XmeTraitSet(w, XmQTtoolTip, (XtPointer) NULL); XtFree((char*)ttp); } }
void XmSetToolTipString (Widget w, XmString s) { XmToolTipTrait ttp; ttp = (XmToolTipTrait)XmeTraitGet(w, XmQTtoolTip); if (!ttp) { ttp = (XmToolTipTrait)XtCalloc(1, sizeof(XmToolTipTraitRec)); XmeTraitSet(w, XmQTtoolTip, ttp); } if (ttp->tool_tip_string) XmStringFree(ttp->tool_tip_string); ttp->tool_tip_string = XmStringCopy(s); }
/* * XmeTraitSet installs trait on object. It is typically called from a widget's * class_part_initialize method. Subclasses of this object inherit the trait. * * object Specifies the object. * trait The trait name (an XrmQuark value). * * Returns True on success. */ extern Boolean XmeTraitSet(XtPointer obj, XrmQuark trait, XtPointer rec) { int i, j; if (obj == NULL || trait == 0) { DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet(NULL)\n")); _XmInitTraits(); return False; } DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet(%s,%s)\n", ((WidgetClass)obj)->core_class.class_name, XrmQuarkToString(trait))); for (i=0; i<_num_traits; i++) { if (_traits[i].wc == (WidgetClass)obj) { /* Expand array */ if (_traits[i].num == 0) { _traits[i].num += NUM_TRAITS; if (_traits[i].traits) { _traits[i].traits = (_XmTraitRec *) XtRealloc( (char *)_traits[i].traits, sizeof(_XmTraitRec) * _traits[i].num); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: _traits[%d].traits = %p," " size %d = %d * %d\n", i, _traits[i].traits, _traits[i].num * sizeof(_XmTraitRec), _traits[i].num, sizeof(_XmTraitRec))); } else { _traits[i].traits = (_XmTraitRec *) XtCalloc( _traits[i].num, sizeof(_XmTraitRec)); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: _traits[%d].traits = %p," " size %d = %d * %d\n", i, _traits[i].traits, _traits[i].num * sizeof(_XmTraitRec), _traits[i].num, sizeof(_XmTraitRec))); } } for (j=0; _traits[i].traits[j].trait && j<_traits[i].num; j++) if (_traits[i].traits[j].trait == trait) { /* Trait was already installed !! */ /* If rec == NULL this removes the trait. * Code for supporting this is in XmeTraitGet */ _traits[i].traits[j].traitrec = rec; DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: overwrite _traits[%d]." "traits[%d].traitrec\n", i, j)); return True; } if (j == _traits[i].num) { /* Expand array first */ _traits[i].num += NUM_TRAITS; if (_traits[i].traits) { _traits[i].traits = (_XmTraitRec *) XtRealloc( (char *)_traits[i].traits, sizeof(_XmTraitRec) * _traits[i].num); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: _traits[%d].traits = %p," " size %d = %d * %d\n", i, _traits[i].traits, _traits[i].num * sizeof(_XmTraitRec), _traits[i].num, sizeof(_XmTraitRec))); } else { _traits[i].traits = (_XmTraitRec *) XtCalloc( _traits[i].num, sizeof(_XmTraitRec)); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: _traits[%d].traits = %p," " size %d = %d * %d\n", i, _traits[i].traits, _traits[i].num * sizeof(_XmTraitRec), _traits[i].num, sizeof(_XmTraitRec))); } } /* Add the trait to the list */ _traits[i].traits[j].trait = trait; _traits[i].traits[j].traitrec = rec; #if 0 _traits[i].traits[j+1].trait = NULLQUARK; #endif DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: write _traits[%d]." "traits[%d].traitrec\n", i, j)); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: write _traits[%d]." "traits[%d].traitrec\n", i, j+1)); return True; } } /* No traits known yet for this widget class */ if (_max_traits == _num_traits) { _max_traits += NUM_WIDGET_CLASSES; if (_traits) { _traits = (struct _XmTraitWidgetList *) XtRealloc((char *)_traits, _max_traits * sizeof(struct _XmTraitWidgetList)); } else { _traits = (struct _XmTraitWidgetList *) XtCalloc( _max_traits, sizeof(struct _XmTraitWidgetList)); DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: _traits = %p, size %d = %d * %d\n", _traits, _max_traits * sizeof(struct _XmTraitWidgetList), _max_traits, sizeof(struct _XmTraitWidgetList))); } } DEBUGOUT(_LtDebug(__FILE__, NULL, "XmeTraitSet: set _traits[%d]\n", i)); _traits[i].wc = (WidgetClass)obj; _traits[i].num = 0; _traits[i].traits = NULL; _num_traits++; DEBUGOUT(_LtDebug0(__FILE__, NULL, "Recursive Call : ")); /* no \n */ return XmeTraitSet(obj, trait, rec); /* Recursive call */ }
/************************************************************************ * * ClassPartInit * Used by subclasses of gadget to inherit class record procedures. * ************************************************************************/ static void ClassPartInit( WidgetClass g ) { static Boolean first_time = TRUE; XmGadgetClass wc = (XmGadgetClass) g; XmGadgetClass super = (XmGadgetClass) wc->rect_class.superclass; XmGadgetClassExt *wcePtr, *scePtr; wcePtr = _XmGetGadgetClassExtPtr(wc, NULLQUARK); if (((WidgetClass)wc != xmGadgetClass) && (*wcePtr)) { scePtr = _XmGetGadgetClassExtPtr(super, NULLQUARK); if ((*wcePtr)->widget_baseline == XmInheritBaselineProc) (*wcePtr)->widget_baseline = (*scePtr)->widget_baseline; if ((*wcePtr)->widget_display_rect == XmInheritDisplayRectProc) (*wcePtr)->widget_display_rect = (*scePtr)->widget_display_rect; if ((*wcePtr)->widget_margins == XmInheritMarginsProc) (*wcePtr)->widget_margins = (*scePtr)->widget_margins; } if (wc->gadget_class.border_highlight == XmInheritWidgetProc) wc->gadget_class.border_highlight = super->gadget_class.border_highlight; if (wc->gadget_class.border_unhighlight == XmInheritWidgetProc) wc->gadget_class.border_unhighlight = super->gadget_class.border_unhighlight; if (wc->gadget_class.arm_and_activate == XmInheritArmAndActivate) wc->gadget_class.arm_and_activate = super->gadget_class.arm_and_activate; if (wc->gadget_class.input_dispatch == XmInheritInputDispatch) wc->gadget_class.input_dispatch = super->gadget_class.input_dispatch; if (wc->gadget_class.visual_change == XmInheritVisualChange) wc->gadget_class.visual_change = super->gadget_class.visual_change; _XmFastSubclassInit (g, XmGADGET_BIT); if (first_time) { _XmReOrderResourceList(xmGadgetClass, XmNunitType, NULL); first_time = FALSE; } _XmBuildGadgetResources((WidgetClass) wc); /* Install the direction trait for all subclasses as well. */ XmeTraitSet((XtPointer)wc, XmQTspecifyLayoutDirection, (XtPointer)&gadLDT); /* Install the accessColors trait for all subclasses as well. */ XmeTraitSet((XtPointer)wc, XmQTaccessColors, (XtPointer)&gadACT); /* Install the unit type trait for all subclasses as well. */ XmeTraitSet((XtPointer)wc, XmQTspecifyUnitType, (XtPointer)&gadUTT); }