home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / XfeWidgets / tests / ButtonTest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  19.8 KB  |  650 lines

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /*-----------------------------------------*/
  19. /*                                                                        */
  20. /* Name:        ButtonTest.c                                            */
  21. /* Description:    Test for XfeButton widget.                                */
  22. /* Author:        Ramiro Estrugo <ramiro@netscape.com>                    */
  23. /*                                                                        */
  24. /*----------------------------------------------------------------------*/
  25.  
  26.  
  27. #include <Xfe/XfeTest.h>
  28.  
  29. static Widget    create_button            (Widget,String);
  30. static void        install_large_pixmaps    (Widget);
  31. static void        install_small_pixmaps    (Widget);
  32. static void        change_pixmap            (Widget);
  33. static void        change_label            (Widget);
  34. static void        button_callback            (Widget,XtPointer,XtPointer);
  35. static void        menu_item_cb            (Widget,XtPointer,XtPointer);
  36.  
  37. static Widget _button_target = NULL;
  38.  
  39. static String labels[] = 
  40. {
  41.     "Label One",
  42.     "A",
  43.     "This is a long label",
  44.     "",
  45.     "The previous one was blank",
  46.     "Label Four",
  47.     "First Line\nSecond Line\nThird Line",
  48.     "-=-=-=-= What ? #$!&*",
  49. };
  50.  
  51. #define CMP(s1,s2) (strcmp((s1),(s2)) == 0)
  52.  
  53. /*----------------------------------------------------------------------*/
  54. static XfeMenuItemRec file_items[] =
  55. {
  56.     { "Open",            XfeMENU_PUSH },
  57.     { "Save",            XfeMENU_PUSH },
  58.     { "------------",    XfeMENU_SEP    },
  59.     { "Exit",            XfeMENU_PUSH,    XfeExitCallback    },
  60.     { NULL }
  61. };
  62. /*----------------------------------------------------------------------*/
  63. static XfeMenuItemRec button_type_items[] =
  64. {
  65.     { "TypePush",        XfeMENU_RADIO,        menu_item_cb        },
  66.     { "TypeToggle",        XfeMENU_RADIO,        menu_item_cb        },
  67.     { "TypeNone",        XfeMENU_RADIO,        menu_item_cb        },
  68.     { NULL }
  69. };
  70. /*----------------------------------------------------------------------*/
  71. static XfeMenuItemRec button_layout_items[] =
  72. {
  73.     { "LayoutLabelOnly",        XfeMENU_RADIO,        menu_item_cb        },
  74.     { "LayoutLabelOnBottom",    XfeMENU_RADIO,        menu_item_cb        },
  75.     { "LayoutLabelOnLeft",        XfeMENU_RADIO,        menu_item_cb        },
  76.     { "LayoutLabelOnRight",        XfeMENU_RADIO,        menu_item_cb        },
  77.     { "LayoutLabelOnTop",        XfeMENU_RADIO,        menu_item_cb        },
  78.     { "LayoutPixmapOnly",        XfeMENU_RADIO,        menu_item_cb        },
  79.     { NULL }
  80. };
  81. /*----------------------------------------------------------------------*/
  82. static XfeMenuItemRec button_trigger_items[] =
  83. {
  84.     { "TriggerAnywhere",    XfeMENU_RADIO,        menu_item_cb        },
  85.     { "TriggerEither",        XfeMENU_RADIO,        menu_item_cb        },
  86.     { "TriggerNeither",        XfeMENU_RADIO,        menu_item_cb        },
  87.     { "TriggerLabel",        XfeMENU_RADIO,        menu_item_cb        },
  88.     { "TriggerPixmap",        XfeMENU_RADIO,        menu_item_cb        },
  89.     { NULL }
  90. };
  91. /*----------------------------------------------------------------------*/
  92. static XfeMenuItemRec modifiers_items[] =
  93. {
  94.     { "None",                XfeMENU_RADIO,        menu_item_cb        },
  95.     { "Any",                XfeMENU_RADIO,        menu_item_cb        },
  96.     { "------------",        XfeMENU_SEP    },
  97.     { "Shift",                XfeMENU_RADIO,        menu_item_cb        },
  98.     { "Control",            XfeMENU_RADIO,        menu_item_cb        },
  99.     { "Alt",                XfeMENU_RADIO,        menu_item_cb        },
  100.     { "------------",        XfeMENU_SEP    },
  101.     { "Mod1",                XfeMENU_RADIO,        menu_item_cb        },
  102.     { "Mod2",                XfeMENU_RADIO,        menu_item_cb        },
  103.     { "Mod3",                XfeMENU_RADIO,        menu_item_cb        },
  104.     { "Mod4",                XfeMENU_RADIO,        menu_item_cb        },
  105.     { NULL }
  106. };
  107. /*----------------------------------------------------------------------*/
  108. static XfeMenuItemRec button_boolean_items[] =
  109. {
  110.     { "TraversalOn",        XfeMENU_TOGGLE,        menu_item_cb        },
  111.     { "------------",        XfeMENU_SEP    },
  112.     { "RaiseOnEnter",        XfeMENU_TOGGLE,        menu_item_cb        },
  113.     { "FillOnEnter",        XfeMENU_TOGGLE,        menu_item_cb        },
  114.     { "FillOnArm"    ,        XfeMENU_TOGGLE,        menu_item_cb        },
  115.     { "------------",        XfeMENU_SEP    },
  116.     { "EmulateMotif",        XfeMENU_TOGGLE,        menu_item_cb        },
  117.     { "------------",        XfeMENU_SEP    },
  118.     { "Armed",                XfeMENU_TOGGLE,        menu_item_cb        },
  119.     { "Raised",                XfeMENU_TOGGLE,        menu_item_cb        },
  120.     { "------------",        XfeMENU_SEP    },
  121.     { "Sensitive",            XfeMENU_TOGGLE,        menu_item_cb        },
  122.     { "PretendSensitive",    XfeMENU_TOGGLE,        menu_item_cb        },
  123.     { "------------",        XfeMENU_SEP    },
  124.     { "Selected",            XfeMENU_TOGGLE,        menu_item_cb        },
  125.     { "------------",        XfeMENU_SEP    },
  126.     { "UsePreferredWidth",    XfeMENU_TOGGLE,        menu_item_cb        },
  127.     { "UsePreferredHeight",    XfeMENU_TOGGLE,        menu_item_cb        },
  128.     { NULL }
  129. };
  130. /*----------------------------------------------------------------------*/
  131. static XfeMenuItemRec misc_items[] =
  132. {
  133.     { "ChangePixmap",    XfeMENU_PUSH,        menu_item_cb            },
  134.     { NULL }
  135. };
  136. /*----------------------------------------------------------------------*/
  137. static XfeMenuItemRec label_items[] =
  138. {
  139.     { "ChangeLabel",    XfeMENU_PUSH,        menu_item_cb            },
  140.     { "Modifiers",        XfeMENU_PANE,        NULL, modifiers_items    },
  141.     { NULL }
  142. };
  143. /*----------------------------------------------------------------------*/
  144. static XfeMenuItemRec dimension_items[] =
  145. {
  146.     { "0",                XfeMENU_RADIO,        menu_item_cb        },
  147.     { "1",                XfeMENU_RADIO,        menu_item_cb        },
  148.     { "2",                XfeMENU_RADIO,        menu_item_cb        },
  149.     { "3",                XfeMENU_RADIO,        menu_item_cb        },
  150.     { "4",                XfeMENU_RADIO,        menu_item_cb        },
  151.     { "5",                XfeMENU_RADIO,        menu_item_cb        },
  152.     { "6",                XfeMENU_RADIO,        menu_item_cb        },
  153.     { "7",                XfeMENU_RADIO,        menu_item_cb        },
  154.     { "8",                XfeMENU_RADIO,        menu_item_cb        },
  155.     { "9",                XfeMENU_RADIO,        menu_item_cb        },
  156.     { "10",                XfeMENU_RADIO,        menu_item_cb        },
  157.     { "20",                XfeMENU_RADIO,        menu_item_cb        },
  158.     { "30",                XfeMENU_RADIO,        menu_item_cb        },
  159.     { "40",                XfeMENU_RADIO,        menu_item_cb        },
  160.     { "50",                XfeMENU_RADIO,        menu_item_cb        },
  161.     { "100",            XfeMENU_RADIO,        menu_item_cb        },
  162.     { "200",            XfeMENU_RADIO,        menu_item_cb        },
  163.     { "300",            XfeMENU_RADIO,        menu_item_cb        },
  164.     { "400",            XfeMENU_RADIO,        menu_item_cb        },
  165.     { "500",            XfeMENU_RADIO,        menu_item_cb        },
  166.     { "1000",            XfeMENU_RADIO,        menu_item_cb        },
  167.     { NULL }
  168. };
  169. /*----------------------------------------------------------------------*/
  170. static XfeMenuItemRec margin_items[] =
  171. {
  172.     { "MarginLeft",        XfeMENU_PANE,        NULL, dimension_items        },
  173.     { "MarginRight",    XfeMENU_PANE,        NULL, dimension_items        },
  174.     { "MarginTop",        XfeMENU_PANE,        NULL, dimension_items        },
  175.     { "MarginBottom",    XfeMENU_PANE,        NULL, dimension_items        },
  176.     { "------------",    XfeMENU_SEP    },
  177.     { "MarginAll"    ,    XfeMENU_PANE,        NULL, dimension_items        },
  178.     { NULL }
  179. };
  180. /*----------------------------------------------------------------------*/
  181. static XfeMenuItemRec shadow_type_items[] =
  182. {
  183.     { "ShadowIn",            XfeMENU_RADIO,        menu_item_cb        },
  184.     { "ShadowOut",            XfeMENU_RADIO,        menu_item_cb        },
  185.     { "ShadowEtchedIn",        XfeMENU_RADIO,        menu_item_cb        },
  186.     { "ShadowEtchedOut",    XfeMENU_RADIO,        menu_item_cb        },
  187.     { NULL }
  188. };
  189. /*----------------------------------------------------------------------*/
  190. static XfeMenuItemRec alignment_items[] =
  191. {
  192.     { "AlignmentBeginning",    XfeMENU_RADIO,        menu_item_cb        },
  193.     { "AlignmentCenter",    XfeMENU_RADIO,        menu_item_cb        },
  194.     { "AlignmentEnd",        XfeMENU_RADIO,        menu_item_cb        },
  195.     { NULL }
  196. };
  197. /*----------------------------------------------------------------------*/
  198. static XfeMenuItemRec enumeration_items[] =
  199. {
  200.     { "ButtonType",            XfeMENU_PANE,        NULL, button_type_items        },
  201.     { "ButtonLayout",        XfeMENU_PANE,        NULL, button_layout_items    },
  202.     { "ButtonTrigger",        XfeMENU_PANE,        NULL, button_trigger_items    },
  203.     { "------------",        XfeMENU_SEP    },
  204.     { "ShadowType",            XfeMENU_PANE,        NULL, shadow_type_items        },
  205.     { "------------",        XfeMENU_SEP    },
  206.     { "LabelAlignment",        XfeMENU_PANE,        NULL, alignment_items        },
  207.     { NULL }
  208. };
  209. /*----------------------------------------------------------------------*/
  210. static XfeMenuItemRec dimensions_items[] =
  211. {
  212.     { "Width",                    XfeMENU_PANE,        NULL, dimension_items    },
  213.     { "Height",                    XfeMENU_PANE,        NULL, dimension_items    },
  214.     { "------------",            XfeMENU_SEP    },
  215.     { "HighlightThickness",        XfeMENU_PANE,        NULL, dimension_items    },
  216.     { "ShadowThickness",        XfeMENU_PANE,        NULL, dimension_items    },
  217.     { "------------",            XfeMENU_SEP    },
  218.     { "Margins",                XfeMENU_PANE,        NULL, margin_items        },
  219.     { "RaiseBorderThickness",    XfeMENU_PANE,        NULL, dimension_items    },
  220.     { "Spacing",                XfeMENU_PANE,        NULL, dimension_items    },
  221.     { "------------",            XfeMENU_SEP    },
  222.     { "ArmOffset",                XfeMENU_PANE,        NULL, dimension_items    },
  223.     { NULL }
  224. };
  225. /*----------------------------------------------------------------------*/
  226. static XfeMenuItemRec xm_primitive_items[] =
  227. {
  228.     { "Open",            XfeMENU_PUSH },
  229.     { NULL }
  230. };
  231. /*----------------------------------------------------------------------*/
  232. static XfeMenuItemRec xfe_primitive_items[] =
  233. {
  234.     { "Open",            XfeMENU_PUSH },
  235.     { NULL }
  236. };
  237. /*----------------------------------------------------------------------*/
  238. static XfeMenuPaneRec pane_items[] =
  239. {
  240.     { "File",                file_items                },
  241.     { "XfePrimitive",        xfe_primitive_items        },
  242.     { "Enumeration",        enumeration_items        },
  243.     { "Dimensions",            dimensions_items        },
  244.     { "Boolean",            button_boolean_items    },
  245.     { "Misc",                misc_items                },
  246.     { "Label",                label_items                },
  247.     { NULL }
  248. };
  249. /*----------------------------------------------------------------------*/
  250.  
  251. static Widget _main_form;
  252. static Widget _menu_bar;
  253.  
  254. /*----------------------------------------------------------------------*/
  255. int
  256. main(int argc,char *argv[])
  257. {
  258.     Widget frame;
  259.  
  260.     XfeAppCreateSimple("ButtonTest",&argc,argv,"MainFrame",&frame,&_main_form);
  261.  
  262.     _button_target = create_button(_main_form,"ButtonTarget");
  263.  
  264.     _menu_bar = XfeMenuBarCreate(_main_form,"MenuBar",
  265.                                  pane_items,
  266.                                  (XtPointer) _button_target,NULL,0);
  267.  
  268.     install_large_pixmaps(_button_target);
  269.  
  270.     XtPopup(frame,XtGrabNone);
  271.  
  272.     XfeAppMainLoop();
  273.  
  274.     return 0;
  275. }
  276. /*----------------------------------------------------------------------*/
  277. static Widget
  278. create_button(Widget parent,String name)
  279. {
  280.     Widget w;
  281.  
  282.     w = XtVaCreateManagedWidget(name,
  283.                                 xfeButtonWidgetClass,
  284.                                 parent,
  285.                                 NULL);
  286.  
  287.      XtAddCallback(w,XmNactivateCallback,button_callback,NULL);
  288.      XtAddCallback(w,XmNarmCallback,button_callback,NULL);
  289.      XtAddCallback(w,XmNdisarmCallback,button_callback,NULL);
  290.      XtAddCallback(w,XmNselectionChangedCallback,button_callback,NULL);
  291. /*      XtAddCallback(w,XmNenterCallback,button_callback,NULL); */
  292. /*      XtAddCallback(w,XmNleaveCallback,button_callback,NULL); */
  293.     
  294.     return w;
  295. }
  296. /*----------------------------------------------------------------------*/
  297. static void
  298. install_large_pixmaps(Widget w)
  299. {
  300.     if (!XfeIsAlive(w))
  301.     {
  302.         return;
  303.     }
  304.  
  305.     XtVaSetValues(
  306.         w,
  307.         XmNpixmap,                XfeGetPixmap(w,"task_browser"),
  308.         XmNpixmapMask,            XfeGetMask(w,"task_browser"),
  309.         XmNarmedPixmap,            XfeGetPixmap(w,"task_browser_armed"),
  310.         XmNarmedPixmapMask,        XfeGetMask(w,"task_browser_armed"),
  311.         XmNraisedPixmap,        XfeGetPixmap(w,"task_browser_raised"),
  312.         XmNraisedPixmapMask,    XfeGetMask(w,"task_browser_raised"),
  313.         NULL);
  314. }
  315. /*----------------------------------------------------------------------*/
  316. static void
  317. install_small_pixmaps(Widget w)
  318. {
  319.     if (!XfeIsAlive(w))
  320.     {
  321.         return;
  322.     }
  323.  
  324.     XtVaSetValues(
  325.         w,
  326.         XmNpixmap,                XfeGetPixmap(w,"task_small_browser"),
  327.         XmNpixmapMask,            XfeGetMask(w,"task_small_browser"),
  328.         XmNarmedPixmap,            XfeGetPixmap(w,"task_small_browser_armed"),
  329.         XmNarmedPixmapMask,        XfeGetMask(w,"task_small_browser_armed"),
  330.         XmNraisedPixmap,        XfeGetPixmap(w,"task_small_browser_raised"),
  331.         XmNraisedPixmapMask,    XfeGetMask(w,"task_small_browser_raised"),
  332.         NULL);
  333. }
  334. /*----------------------------------------------------------------------*/
  335. static void
  336. change_pixmap(Widget w)
  337. {
  338.     static Boolean toggle = True;
  339.  
  340.     if (!XfeIsAlive(w))
  341.     {
  342.         return;
  343.     }
  344.  
  345.     if (toggle)
  346.     {
  347.         install_small_pixmaps(w);
  348.     }
  349.     else
  350.     {
  351.         install_large_pixmaps(w);
  352.     }
  353.  
  354.     toggle = !toggle;
  355. }
  356. /*----------------------------------------------------------------------*/
  357. static void
  358. change_label(Widget w)
  359. {
  360.     static Cardinal i = 0;
  361.  
  362.     if (!XfeIsAlive(w))
  363.     {
  364.         return;
  365.     }
  366.  
  367.     XfeSetXmStringPSZ(w,
  368.                       XmNlabelString,
  369.                       XmFONTLIST_DEFAULT_TAG,
  370.                       labels[i % XtNumber(labels)]);
  371.  
  372.     i++;
  373. }
  374. /*----------------------------------------------------------------------*/
  375. static void
  376. menu_item_cb(Widget w,XtPointer client_data,XtPointer call_data)
  377. {
  378.     String        name = XtName(w);
  379.     String        parent_name = XtName(XtParent(w));
  380.     Arg            av[20];
  381.     Cardinal    ac = 0;
  382.  
  383.     printf("menu_item_cb(%s,%s)\n",name,parent_name);
  384.  
  385.     if (!XfeIsAlive(_button_target))
  386.     {
  387.         return;
  388.     }
  389.  
  390.     /* Modifiers */
  391.     if (CMP(parent_name,"Modifiers"))
  392.     {
  393.         if (CMP(name,"None"))
  394.         {
  395.             XtSetArg(av[ac],XmNselectionModifiers,None); ac++;
  396.         }
  397.         else if (CMP(name,"Any"))
  398.         {
  399.             XtSetArg(av[ac],XmNselectionModifiers,AnyModifier); ac++;
  400.         }
  401.         else if (CMP(name,"Shift"))
  402.         {
  403.             XtSetArg(av[ac],XmNselectionModifiers,ShiftMask); ac++;
  404.         }
  405.         else if (CMP(name,"Control"))
  406.         {
  407.             XtSetArg(av[ac],XmNselectionModifiers,ControlMask); ac++;
  408.         }
  409.         else if (CMP(name,"Alt"))
  410.         {
  411.             XtSetArg(av[ac],XmNselectionModifiers,Mod1Mask); ac++;
  412.         }
  413.         else if (CMP(name,"Mod1"))
  414.         {
  415.             XtSetArg(av[ac],XmNselectionModifiers,Mod1Mask); ac++;
  416.         }
  417.         else if (CMP(name,"Mod2"))
  418.         {
  419.             XtSetArg(av[ac],XmNselectionModifiers,Mod2Mask); ac++;
  420.         }
  421.         else if (CMP(name,"Mod3"))
  422.         {
  423.             XtSetArg(av[ac],XmNselectionModifiers,Mod3Mask); ac++;
  424.         }
  425.         else if (CMP(name,"Mod4"))
  426.         {
  427.             XtSetArg(av[ac],XmNselectionModifiers,Mod4Mask); ac++;
  428.         }
  429.     }
  430.     else if (strcmp(name,"TypePush") == 0)
  431.     {
  432.         XtSetArg(av[ac],XmNbuttonType,XmBUTTON_PUSH); ac++;
  433.     }
  434.     else if (strcmp(name,"TypeToggle") == 0)
  435.     {
  436.         XtSetArg(av[ac],XmNbuttonType,XmBUTTON_TOGGLE); ac++;
  437.     }
  438.     else if (strcmp(name,"TypeNone") == 0)
  439.     {
  440.         XtSetArg(av[ac],XmNbuttonType,XmBUTTON_NONE); ac++;
  441.     }
  442.     else if (strcmp(name,"RaiseOnEnter") == 0)
  443.     {
  444.         XfeResourceToggleBoolean(_button_target,XmNraiseOnEnter);
  445.     }
  446.     else if (strcmp(name,"TraversalOn") == 0)
  447.     {
  448.         XfeResourceToggleBoolean(_button_target,XmNtraversalOn);
  449.     }
  450.     else if (strcmp(name,"EmulateMotif") == 0)
  451.     {
  452.         XfeResourceToggleBoolean(_button_target,XmNemulateMotif);
  453.     }
  454.     else if (strcmp(name,"Armed") == 0)
  455.     {
  456.         XfeResourceToggleBoolean(_button_target,XmNarmed);
  457.     }
  458.     else if (strcmp(name,"Raised") == 0)
  459.     {
  460.         XfeResourceToggleBoolean(_button_target,XmNraised);
  461.     }
  462.     else if (strcmp(name,"Selected") == 0)
  463.     {
  464.         XfeResourceToggleBoolean(_button_target,XmNselected);
  465.     }
  466.     else if (strcmp(name,"PretendSensitive") == 0)
  467.     {
  468.         XfeResourceToggleBoolean(_button_target,XmNpretendSensitive);
  469.     }
  470.     else if (strcmp(name,"Sensitive") == 0)
  471.     {
  472.         XfeResourceToggleBoolean(_button_target,XmNsensitive);
  473.     }
  474.     else if (strcmp(name,"UsePreferredWidth") == 0)
  475.     {
  476.         XfeResourceToggleBoolean(_button_target,XmNusePreferredWidth);
  477.     }
  478.     else if (strcmp(name,"UsePreferredHeight") == 0)
  479.     {
  480.         XfeResourceToggleBoolean(_button_target,XmNusePreferredHeight);
  481.     }
  482.     else if (strcmp(name,"FillOnEnter") == 0)
  483.     {
  484.         XfeResourceToggleBoolean(_button_target,XmNfillOnEnter);
  485.     }
  486.     else if (strcmp(name,"FillOnArm") == 0)
  487.     {
  488.         XfeResourceToggleBoolean(_button_target,XmNfillOnArm);
  489.     }
  490.     else if (strcmp(name,"LayoutLabelOnly") == 0)
  491.     {
  492.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_LABEL_ONLY); ac++;
  493.     }
  494.     else if (strcmp(name,"LayoutLabelOnBottom") == 0)
  495.     {
  496.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_LABEL_ON_BOTTOM); ac++;
  497.     }
  498.     else if (strcmp(name,"LayoutLabelOnLeft") == 0)
  499.     {
  500.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_LABEL_ON_LEFT); ac++;
  501.     }
  502.     else if (strcmp(name,"LayoutLabelOnRight") == 0)
  503.     {
  504.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_LABEL_ON_RIGHT); ac++;
  505.     }
  506.     else if (strcmp(name,"LayoutLabelOnTop") == 0)
  507.     {
  508.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_LABEL_ON_TOP); ac++;
  509.     }
  510.     else if (strcmp(name,"LayoutPixmapOnly") == 0)
  511.     {
  512.         XtSetArg(av[ac],XmNbuttonLayout,XmBUTTON_PIXMAP_ONLY); ac++;
  513.     }
  514.     else if (strcmp(name,"TriggerAnywhere") == 0)
  515.     {
  516.         XtSetArg(av[ac],XmNbuttonTrigger,XmBUTTON_TRIGGER_ANYWHERE); ac++;
  517.     }
  518.     else if (strcmp(name,"TriggerEither") == 0)
  519.     {
  520.         XtSetArg(av[ac],XmNbuttonTrigger,XmBUTTON_TRIGGER_EITHER); ac++;
  521.     }
  522.     else if (strcmp(name,"TriggerNeither") == 0)
  523.     {
  524.         XtSetArg(av[ac],XmNbuttonTrigger,XmBUTTON_TRIGGER_NEITHER); ac++;
  525.     }
  526.     else if (strcmp(name,"TriggerLabel") == 0)
  527.     {
  528.         XtSetArg(av[ac],XmNbuttonTrigger,XmBUTTON_TRIGGER_LABEL); ac++;
  529.     }
  530.     else if (strcmp(name,"TriggerPixmap") == 0)
  531.     {
  532.         XtSetArg(av[ac],XmNbuttonTrigger,XmBUTTON_TRIGGER_PIXMAP); ac++;
  533.     }
  534.     else if (strcmp(name,"ShadowIn") == 0)
  535.     {
  536.         XtSetArg(av[ac],XmNshadowType,XmSHADOW_IN); ac++;
  537.     }
  538.     else if (strcmp(name,"ShadowOut") == 0)
  539.     {
  540.         XtSetArg(av[ac],XmNshadowType,XmSHADOW_OUT); ac++;
  541.     }
  542.     else if (strcmp(name,"ShadowEtchedIn") == 0)
  543.     {
  544.         XtSetArg(av[ac],XmNshadowType,XmSHADOW_ETCHED_IN); ac++;
  545.     }
  546.     else if (strcmp(name,"ShadowEtchedOut") == 0)
  547.     {
  548.         XtSetArg(av[ac],XmNshadowType,XmSHADOW_ETCHED_OUT); ac++;
  549.     }
  550.     else if (strcmp(name,"AlignmentBeginning") == 0)
  551.     {
  552.         XtSetArg(av[ac],XmNlabelAlignment,XmALIGNMENT_BEGINNING); ac++;
  553.     }
  554.     else if (strcmp(name,"AlignmentCenter") == 0)
  555.     {
  556.         XtSetArg(av[ac],XmNlabelAlignment,XmALIGNMENT_CENTER); ac++;
  557.     }
  558.     else if (strcmp(name,"AlignmentEnd") == 0)
  559.     {
  560.         XtSetArg(av[ac],XmNlabelAlignment,XmALIGNMENT_END); ac++;
  561.     }
  562.  
  563.     if (strcmp(parent_name,"MarginLeft") == 0)
  564.     {
  565.         XtSetArg(av[ac],XmNmarginLeft,atoi(name)); ac++;
  566.     }
  567.     else if (strcmp(parent_name,"MarginRight") == 0)
  568.     {
  569.         XtSetArg(av[ac],XmNmarginRight,atoi(name)); ac++;
  570.     }
  571.     else if (strcmp(parent_name,"MarginTop") == 0)
  572.     {
  573.         XtSetArg(av[ac],XmNmarginTop,atoi(name)); ac++;
  574.     }
  575.     else if (strcmp(parent_name,"MarginBottom") == 0)
  576.     {
  577.         XtSetArg(av[ac],XmNmarginBottom,atoi(name)); ac++;
  578.     }
  579.     else if (strcmp(parent_name,"MarginAll") == 0)
  580.     {
  581.         XtSetArg(av[ac],XmNmarginLeft,atoi(name)); ac++;
  582.         XtSetArg(av[ac],XmNmarginRight,atoi(name)); ac++;
  583.         XtSetArg(av[ac],XmNmarginTop,atoi(name)); ac++;
  584.         XtSetArg(av[ac],XmNmarginBottom,atoi(name)); ac++;
  585.     }
  586.     else if (strcmp(parent_name,"Width") == 0)
  587.     {
  588.         XtSetArg(av[ac],XmNwidth,atoi(name)); ac++;
  589.     }
  590.     else if (strcmp(parent_name,"Height") == 0)
  591.     {
  592.         XtSetArg(av[ac],XmNheight,atoi(name)); ac++;
  593.     }
  594.     else if (strcmp(parent_name,"ShadowThickness") == 0)
  595.     {
  596.         XtSetArg(av[ac],XmNshadowThickness,atoi(name)); ac++;
  597.     }
  598.     else if (strcmp(parent_name,"HighlightThickness") == 0)
  599.     {
  600.         XtSetArg(av[ac],XmNhighlightThickness,atoi(name)); ac++;
  601.     }
  602.     else if (strcmp(parent_name,"RaiseBorderThickness") == 0)
  603.     {
  604.         XtSetArg(av[ac],XmNraiseBorderThickness,atoi(name)); ac++;
  605.     }
  606.     else if (strcmp(parent_name,"Spacing") == 0)
  607.     {
  608.         XtSetArg(av[ac],XmNspacing,atoi(name)); ac++;
  609.     }
  610.     else if (strcmp(parent_name,"ArmOffset") == 0)
  611.     {
  612.         XtSetArg(av[ac],XmNarmOffset,atoi(name)); ac++;
  613.     }
  614.     else if (strcmp(name,"ChangePixmap") == 0)
  615.     {
  616.         change_pixmap(_button_target);
  617.     }
  618.     else if (strcmp(name,"ChangeLabel") == 0)
  619.     {
  620.         change_label(_button_target);
  621.     }
  622.  
  623.     if (ac)
  624.     {
  625.         XtSetValues(_button_target,av,ac);
  626.     }
  627. }
  628. /*----------------------------------------------------------------------*/
  629. static void
  630. button_callback(Widget button,XtPointer client_data,XtPointer call_data)
  631. {
  632.     XfeButtonCallbackStruct *    data = (XfeButtonCallbackStruct *) call_data;
  633.     String                        rname;
  634.  
  635.     switch(data->reason)
  636.     {
  637.     case XmCR_ARM:                    rname = "Arm";                break;
  638.     case XmCR_DISARM:                rname = "Disarm";            break;
  639.     case XmCR_ACTIVATE:                rname = "Activate";            break;
  640.     case XmCR_ENTER:                rname = "Enter";            break;
  641.     case XmCR_LEAVE:                rname = "Leave";            break;
  642.     case XmCR_RAISE:                rname = "Raise";            break;
  643.     case XmCR_LOWER:                rname = "Lower";            break;
  644.     case XmCR_SELECTION_CHANGED:    rname = "SelectionChanged";    break;
  645.     }
  646.  
  647.     printf("%s(%s)\n",rname,XtName(button));
  648. }
  649. /*----------------------------------------------------------------------*/
  650.