static int motProgressBarSetFgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget w = XtNameToWidget(ih->handle, "*Scrollbar"); XtVaSetValues(w, XmNtroughColor, color, NULL); } return 1; }
static int motTabsSetFgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { XtVaSetValues(ih->handle, XmNforeground, color, NULL); motTabsUpdateButtonsFgColor(ih, color); return 1; } return 0; }
static int motTabsSetBgColorAttrib(Ihandle* ih, const char* value) { Pixel color; /* given value is used only for child, to the Tabs must use only from parent */ char* parent_value = iupBaseNativeParentGetBgColor(ih); color = iupmotColorGetPixelStr(parent_value); if (color != (Pixel)-1) { iupmotSetBgColor(ih->handle, color); motTabsUpdatePageBgColor(ih, color); } color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) motTabsUpdateButtonsBgColor(ih, color); return 1; }
int iupdrvBaseSetBgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { iupmotSetBgColor(ih->handle, color); /* update internal image cache for controls that have the IMAGE attribute */ iupImageUpdateParent(ih); } return 1; }
static int motFrameSetFgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget title_label = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMELABEL"); if (!title_label) return 0; XtVaSetValues(title_label, XmNforeground, color, NULL); return 1; } return 0; }
static int motDialogSetBgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget dialog_manager = XtNameToWidget(ih->handle, "*dialog_manager"); XtVaSetValues(dialog_manager, XmNbackground, color, NULL); XtVaSetValues(dialog_manager, XmNbackgroundPixmap, XmUNSPECIFIED_PIXMAP, NULL); return 1; } return 0; }
static int motToggleSetBgColorAttrib(Ihandle* ih, const char* value) { if (ih->data->type == IUP_TOGGLE_TEXT) { char* parent_value = iupAttribGetStrNativeParent(ih, "BGCOLOR"); if (!parent_value) { /* if not defined at a native parent, then change the toggle button color to the given color instead using the default */ if (iupdrvBaseSetBgColorAttrib(ih, value)) /* let XmChangeColor do its job */ { parent_value = IupGetGlobal("DLGBGCOLOR"); XtVaSetValues(ih->handle, XmNbackground, iupmotColorGetPixelStr(parent_value), NULL); /* reset just the background */ if (ih->data->radio) XtVaSetValues(ih->handle, XmNselectColor, iupmotColorGetPixel(0, 0, 0), NULL); XtVaSetValues(ih->handle, XmNunselectColor, iupmotColorGetPixelStr(value), NULL); return 1; } } else { /* ignore given value, must use only from parent */ if (iupdrvBaseSetBgColorAttrib(ih, parent_value)) { if (ih->data->radio) XtVaSetValues(ih->handle, XmNselectColor, iupmotColorGetPixel(0, 0, 0), NULL); XtVaSetValues(ih->handle, XmNunselectColor, iupmotColorGetPixelStr(parent_value), NULL); return 1; } } return 0; } else return iupdrvBaseSetBgColorAttrib(ih, value); }
static int motToggleSetBackgroundAttrib(Ihandle* ih, const char* value) { if (ih->data->type == IUP_TOGGLE_TEXT) { Pixel color; /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { XtVaSetValues(ih->handle, XmNbackground, color, NULL); return 1; } else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); return 1; } } } else { if (ih->data->flat) { /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); if (iupdrvBaseSetBgColorAttrib(ih, value)) return 1; else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); return 1; } } } } return 0; }
static int motListSetFgColorAttrib(Ihandle* ih, const char* value) { Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { XtVaSetValues(ih->handle, XmNforeground, color, NULL); if (ih->data->is_dropdown || ih->data->has_editbox) { Widget w; XtVaGetValues(ih->handle, XmNtextField, &w, NULL); XtVaSetValues(w, XmNforeground, color, NULL); XtVaGetValues(ih->handle, XmNlist, &w, NULL); XtVaSetValues(w, XmNforeground, color, NULL); } } return 1; }
static int motFrameSetBackgroundAttrib(Ihandle* ih, const char* value) { Pixel color; /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget title_label, child_manager; iupmotSetBgColor(ih->handle, color); child_manager = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMECONTAINER"); iupmotSetBgColor(child_manager, color); title_label = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMELABEL"); if (!title_label) return 1; iupmotSetBgColor(title_label, color); return 1; } else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { Widget child_manager = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMECONTAINER"); Widget title_label = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMELABEL"); XtVaSetValues(child_manager, XmNbackgroundPixmap, pixmap, NULL); if (title_label) XtVaSetValues(title_label, XmNbackgroundPixmap, pixmap, NULL); return 1; } } return 0; }
static int motTabsSetBackgroundAttrib(Ihandle* ih, const char* value) { /* given value is used only for child, to the Tabs must use only from parent */ char* parent_value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); Pixel color = iupmotColorGetPixelStr(parent_value); if (color != (Pixel)-1) { iupmotSetBgColor(ih->handle, color); motTabsUpdatePageBgColor(ih, color); } else { Pixmap pixmap = (Pixmap)iupImageGetImage(parent_value, ih, 0, "BACKGROUND"); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); motTabsUpdatePageBgPixmap(ih, pixmap); } } (void)value; return 1; }
static int motValSetBackgroundAttrib(Ihandle* ih, const char* value) { Pixel color; /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { XtVaSetValues(ih->handle, XmNbackground, color, NULL); return 1; } else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); return 1; } } return 0; }
static void motTabsChildAddedMethod(Ihandle* ih, Ihandle* child) { if (IupGetName(child) == NULL) iupAttribSetHandleName(child); if (ih->handle) { Widget child_manager; Widget tab_button; int num_args = 0, pos; Arg args[30]; char *tabtitle, *tabimage, *background; Pixel color; /* open space for new tab number */ motTabsUpdatePageNumber(ih); pos = IupGetChildPos(ih, child); /* Create pages */ child_manager = XtVaCreateManagedWidget( "child_manager", xmBulletinBoardWidgetClass, ih->handle, /* Core */ XmNborderWidth, 0, /* Manager */ XmNshadowThickness, 0, XmNnavigationType, XmTAB_GROUP, XmNuserData, child, /* used only in motTabsConfigureNotify */ /* BulletinBoard */ XmNmarginWidth, 0, XmNmarginHeight, 0, XmNresizePolicy, XmRESIZE_NONE, /* no automatic resize of children */ /* Notebook Constraint */ XmNnotebookChildType, XmPAGE, XmNpageNumber, pos, XmNresizable, True, NULL); XtOverrideTranslations(child_manager, XtParseTranslationTable("<Configure>: iupTabsConfigure()")); tabtitle = iupAttribGet(child, "TABTITLE"); if (!tabtitle) tabtitle = iupTabsAttribGetStrId(ih, "TABTITLE", pos); tabimage = iupAttribGet(child, "TABIMAGE"); if (!tabimage) tabimage = iupTabsAttribGetStrId(ih, "TABIMAGE", pos); if (!tabtitle && !tabimage) tabtitle = " "; /* Create tabs */ /* Label */ iupmotSetArg(args[num_args++], XmNlabelType, tabtitle? XmSTRING: XmPIXMAP); iupmotSetArg(args[num_args++], XmNmarginHeight, 0); iupmotSetArg(args[num_args++], XmNmarginWidth, 0); /* Notebook Constraint */ iupmotSetArg(args[num_args++], XmNnotebookChildType, XmMAJOR_TAB); iupmotSetArg(args[num_args++], XmNpageNumber, pos); tab_button = XtCreateManagedWidget("tab_button", xmPushButtonWidgetClass, ih->handle, args, num_args); /* Disable Drag Source */ iupmotDisableDragSource(tab_button); XtAddEventHandler(tab_button, EnterWindowMask, False, (XtEventHandler)iupmotEnterLeaveWindowEvent, (XtPointer)ih); XtAddEventHandler(tab_button, LeaveWindowMask, False, (XtEventHandler)iupmotEnterLeaveWindowEvent, (XtPointer)ih); XtAddEventHandler(tab_button, FocusChangeMask, False, (XtEventHandler)iupmotFocusChangeEvent, (XtPointer)ih); XtAddEventHandler(tab_button, KeyPressMask, False, (XtEventHandler)iupmotKeyPressEvent, (XtPointer)ih); if (tabtitle) iupmotSetString(tab_button, XmNlabelString, tabtitle); else { Pixmap pixmap = (Pixmap)iupImageGetImage(tabimage, ih, 0, "TABIMAGE"); if (pixmap) XtVaSetValues(tab_button, XmNlabelPixmap, pixmap, NULL); } background = iupBaseNativeParentGetBgColorAttrib(ih); color = iupmotColorGetPixelStr(background); if (color != -1) iupmotSetBgColor(child_manager, color); else { Pixmap pixmap = (Pixmap)iupImageGetImage(background, ih, 0, "BACKGROUND"); if (pixmap) { XtVaSetValues(child_manager, XmNbackgroundPixmap, pixmap, NULL); } } background = iupAttribGetStr(ih, "BGCOLOR"); color = iupmotColorGetPixelStr(background); if (color != -1) iupmotSetBgColor(tab_button, color); color = iupmotColorGetPixelStr(IupGetAttribute(ih, "FGCOLOR")); XtVaSetValues(tab_button, XmNforeground, color, NULL); XtRealizeWidget(child_manager); XtRealizeWidget(tab_button); iupAttribSetStr(child, "_IUPTAB_CONTAINER", (char*)child_manager); iupAttribSetStr(child, "_IUPMOT_TABBUTTON", (char*)tab_button); iupAttribSetInt(child, "_IUPMOT_TABNUMBER", pos); } }
static int motListSetBgColorAttrib(Ihandle* ih, const char* value) { Widget sb_win = (Widget)iupAttribGet(ih, "_IUP_EXTRAPARENT"); if (sb_win) { Pixel color; /* ignore given value for the scrollbars, must use only from parent */ char* parent_value = iupBaseNativeParentGetBgColor(ih); color = iupmotColorGetPixelStr(parent_value); if (color != (Pixel)-1) { Widget sb = NULL; iupmotSetBgColor(sb_win, color); XtVaGetValues(sb_win, XmNverticalScrollBar, &sb, NULL); if (sb) iupmotSetBgColor(sb, color); XtVaGetValues(sb_win, XmNhorizontalScrollBar, &sb, NULL); if (sb) iupmotSetBgColor(sb, color); } return iupdrvBaseSetBgColorAttrib(ih, value); /* use given value for contents */ } else { char* parent_value; /* use given value for Edit and List also */ Pixel color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget cbedit, cblist, sb; iupmotSetBgColor(ih->handle, color); XtVaGetValues(ih->handle, XmNtextField, &cbedit, NULL); if (cbedit) iupmotSetBgColor(cbedit, color); XtVaGetValues(ih->handle, XmNlist, &cblist, NULL); if (cblist) iupmotSetBgColor(cblist, color); XtVaGetValues(cblist, XmNverticalScrollBar, &sb, NULL); if (sb) iupmotSetBgColor(sb, color); XtVaGetValues(cblist, XmNhorizontalScrollBar, &sb, NULL); if (sb) iupmotSetBgColor(sb, color); } /* but reset just the background, so the combobox will look like a button */ parent_value = iupBaseNativeParentGetBgColor(ih); color = iupmotColorGetPixelStr(parent_value); if (color != (Pixel)-1) XtVaSetValues(ih->handle, XmNbackground, color, NULL); return 1; } }
static int motTipsSet(Ihandle *ih) { char* tipText = iupAttribGet(ih, "TIP"); if (!tipText) return FALSE; if (!mot_tips.Dialog) { mot_tips.Dialog = XtVaAppCreateShell(" ", "tip", overrideShellWidgetClass, iupmot_display, XmNmappedWhenManaged, False, NULL); mot_tips.Label = XtVaCreateManagedWidget("label tip", xmLabelWidgetClass, mot_tips.Dialog, /* must use IupGetAttribute to use inheritance */ XmNforeground, iupmotColorGetPixelStr(IupGetAttribute(ih, "TIPFGCOLOR")), XmNbackground, iupmotColorGetPixelStr(IupGetAttribute(ih, "TIPBGCOLOR")), NULL); XtRealizeWidget(mot_tips.Dialog); } /* set label font */ { XmFontList fontlist = (XmFontList)iupmotGetFontListAttrib(ih); char* value = iupAttribGetStr(ih, "TIPFONT"); if (value) { if (iupStrEqualNoCase(value, "SYSTEM")) fontlist = NULL; else fontlist = iupmotGetFontList(iupAttribGet(ih, "TIPFOUNDRY"), value); } if (fontlist) XtVaSetValues(mot_tips.Label, XmNfontList, fontlist, NULL); } /* set label contents */ iupmotSetString(mot_tips.Label, XmNlabelString, tipText); /* set label size */ { int lw = 0, lh = 0; iupdrvFontGetMultiLineStringSize(ih, tipText, &lw, &lh); /* add room for margin */ lw += 2*(2); lh += 2*(2); XtVaSetValues(mot_tips.Label, XmNwidth, (XtArgVal)lw, XmNheight, (XtArgVal)lh, NULL); XtVaSetValues(mot_tips.Dialog, XmNwidth, (XtArgVal)lw, XmNheight, (XtArgVal)lh, NULL); } mot_tips.ShowTimerId = (XtIntervalId) NULL; mot_tips.HideTimerId = (XtIntervalId) NULL; mot_tips.Visible = FALSE; mot_tips.ShowInterval = 500; /* 1/2 second to show */ { int delay = IupGetInt(ih, "TIPDELAY"); /* must use IupGetInt to use inheritance */ mot_tips.HideInterval = delay + mot_tips.ShowInterval; } return TRUE; }
static int motCanvasMapMethod(Ihandle* ih) { Widget sb_win; char *visual; int num_args = 0; Arg args[20]; if (!ih->parent) return IUP_ERROR; ih->data->sb = iupBaseGetScrollbar(ih); /*********************/ /* Create the parent */ /*********************/ iupMOT_SETARG(args, num_args, XmNmappedWhenManaged, False); /* not visible when managed */ iupMOT_SETARG(args, num_args, XmNshadowThickness, 0); iupMOT_SETARG(args, num_args, XmNmarginWidth, 0); iupMOT_SETARG(args, num_args, XmNmarginHeight, 0); iupMOT_SETARG(args, num_args, XmNwidth, 100); /* set this to avoid size calculation problems */ iupMOT_SETARG(args, num_args, XmNheight, 100); iupMOT_SETARG(args, num_args, XmNresizePolicy, XmRESIZE_NONE); iupMOT_SETARG(args, num_args, XmNnavigationType, XmTAB_GROUP); if (iupAttribGetBoolean(ih, "BORDER")) { iupMOT_SETARG(args, num_args, XmNborderWidth, 1); iupMOT_SETARG(args, num_args, XmNborderColor, iupmotColorGetPixelStr("0 0 0")); } else iupMOT_SETARG(args, num_args, XmNborderWidth, 0); sb_win = XtCreateManagedWidget( iupDialogGetChildIdStr(ih), /* child identifier */ xmBulletinBoardWidgetClass, /* widget class */ iupChildTreeGetNativeParentHandle(ih), /* widget parent */ args, num_args); if (!sb_win) return IUP_ERROR; ih->serial = iupDialogGetChildId(ih); /* must be after using the string */ /****************************/ /* Create the drawing area */ /****************************/ num_args = 0; iupMOT_SETARG(args, num_args, XmNmarginHeight, 0); /* no shadow margins */ iupMOT_SETARG(args, num_args, XmNmarginWidth, 0); /* no shadow margins */ iupMOT_SETARG(args, num_args, XmNshadowThickness, 0); iupMOT_SETARG(args, num_args, XmNresizePolicy, XmRESIZE_NONE); /* no automatic resize of children */ if (ih->iclass->is_interactive) { iupMOT_SETARG(args, num_args, XmNnavigationType, XmTAB_GROUP); /* include in navigation */ if (iupAttribGetBoolean(ih, "CANFOCUS")) iupMOT_SETARG(args, num_args, XmNtraversalOn, True); else iupMOT_SETARG(args, num_args, XmNtraversalOn, False); } else { iupMOT_SETARG(args, num_args, XmNnavigationType, XmNONE); iupMOT_SETARG(args, num_args, XmNtraversalOn, False); } iupMOT_SETARG(args, num_args, XmNx, 0); /* x-position */ iupMOT_SETARG(args, num_args, XmNy, 0); /* y-position */ iupMOT_SETARG(args, num_args, XmNwidth, 10); /* default width to avoid 0 */ iupMOT_SETARG(args, num_args, XmNheight, 10); /* default height to avoid 0 */ visual = IupGetAttribute(ih, "VISUAL"); /* defined by the OpenGL Canvas or NULL */ if (visual) { Colormap colormap = (Colormap)iupAttribGet(ih, "COLORMAP"); if (colormap) iupMOT_SETARG(args, num_args, XmNcolormap,colormap); iupmotDialogSetVisual(ih, visual); } ih->handle = XtCreateManagedWidget( "draw_area", /* child identifier */ xmDrawingAreaWidgetClass, /* widget class */ sb_win, /* widget parent */ args, num_args); if (!ih->handle) { XtDestroyWidget(sb_win); return IUP_ERROR; } if (visual) iupmotDialogResetVisual(ih); iupAttribSet(ih, "_IUP_EXTRAPARENT", (char*)sb_win); { XSetWindowAttributes attrs; attrs.bit_gravity = ForgetGravity; /* For the DrawingArea widget gets Expose events when you resize it to be smaller. */ if (iupAttribGetBoolean(ih, "BACKINGSTORE")) attrs.backing_store = WhenMapped; else attrs.backing_store = NotUseful; XChangeWindowAttributes(iupmot_display, XtWindow(ih->handle), CWBitGravity|CWBackingStore, &attrs); } if (ih->data->sb & IUP_SB_HORIZ) { Widget sb_horiz = XtVaCreateManagedWidget("sb_horiz", xmScrollBarWidgetClass, sb_win, XmNorientation, XmHORIZONTAL, XmNsliderMark, XmTHUMB_MARK, XmNuserData, ih, NULL); XtAddCallback(sb_horiz, XmNvalueChangedCallback, motCanvasScrollbarCallback, (void*)IUP_SBPOSH); XtAddCallback(sb_horiz, XmNdragCallback, motCanvasScrollbarCallback, (void*)IUP_SBDRAGH); XtAddCallback(sb_horiz, XmNdecrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBLEFT); XtAddCallback(sb_horiz, XmNincrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBRIGHT); XtAddCallback(sb_horiz, XmNpageDecrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBPGLEFT); XtAddCallback(sb_horiz, XmNpageIncrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBPGRIGHT); iupAttribSet(ih, "_IUPMOT_SBHORIZ", (char*)sb_horiz); } if (ih->data->sb & IUP_SB_VERT) { Widget sb_vert = XtVaCreateManagedWidget("sb_vert", xmScrollBarWidgetClass, sb_win, XmNorientation, XmVERTICAL, XmNsliderMark, XmTHUMB_MARK, XmNuserData, ih, NULL); XtAddCallback(sb_vert, XmNvalueChangedCallback, motCanvasScrollbarCallback, (void*)IUP_SBPOSV); XtAddCallback(sb_vert, XmNdragCallback, motCanvasScrollbarCallback, (void*)IUP_SBDRAGV); XtAddCallback(sb_vert, XmNdecrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBUP); XtAddCallback(sb_vert, XmNincrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBDN); XtAddCallback(sb_vert, XmNpageDecrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBPGUP); XtAddCallback(sb_vert, XmNpageIncrementCallback, motCanvasScrollbarCallback, (void*)IUP_SBPGDN); iupAttribSet(ih, "_IUPMOT_SBVERT", (char*)sb_vert); } XtAddCallback(ih->handle, XmNhelpCallback, (XtCallbackProc)iupmotHelpCallback, (XtPointer)ih); XtAddCallback(ih->handle, XmNexposeCallback, (XtCallbackProc)motCanvasExposeCallback, (XtPointer)ih); XtAddCallback(ih->handle, XmNresizeCallback, (XtCallbackProc)motCanvasResizeCallback, (XtPointer)ih); XtAddCallback(ih->handle, XmNinputCallback, (XtCallbackProc)motCanvasInputCallback, (XtPointer)ih); XtAddEventHandler(ih->handle, EnterWindowMask, False,(XtEventHandler)iupmotEnterLeaveWindowEvent, (XtPointer)ih); XtAddEventHandler(ih->handle, LeaveWindowMask, False,(XtEventHandler)iupmotEnterLeaveWindowEvent, (XtPointer)ih); XtAddEventHandler(ih->handle, FocusChangeMask, False,(XtEventHandler)iupmotFocusChangeEvent, (XtPointer)ih); XtAddEventHandler(ih->handle, KeyPressMask, False, (XtEventHandler)iupmotKeyPressEvent, (XtPointer)ih); XtAddEventHandler(ih->handle, KeyReleaseMask, False, (XtEventHandler)iupmotCanvasKeyReleaseEvent, (XtPointer)ih); XtAddEventHandler(ih->handle, PointerMotionMask, False, (XtEventHandler)iupmotPointerMotionEvent, (XtPointer)ih); /* initialize the widget */ XtRealizeWidget(sb_win); motCanvasSetDXAttrib(ih, NULL); motCanvasSetDYAttrib(ih, NULL); return IUP_NOERROR; }