home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / m / master12.zip / mastering / swindemo.c < prev    next >
C/C++ Source or Header  |  1992-08-27  |  10KB  |  400 lines

  1. #include <stdio.h>
  2. #include <Xm/Frame.h>
  3. #include <Xm/RowColumn.h>
  4. #include <Xm/PushB.h>
  5. #include <Xm/ScrollBar.h>
  6. #include <Xm/DrawingA.h>
  7. #include <Xm/ScrolledW.h>
  8.  
  9. /* Global definitions */
  10. Widget frame, inner_box, appshell, fw, bb, sw;
  11. Widget New[25], Pbutton[10], hsb, vsb;
  12.  
  13. Arg args[20];
  14.  
  15. XmString text;
  16. XmStringCharSet cs = (XmStringCharSet)XmFONTLIST_DEFAULT_TAG;
  17.  
  18. XFontStruct *font;
  19. XmFontList curfontlist;
  20. int  NewPbutton;
  21.  
  22. /* Forward Declarations */
  23.  
  24. void ToggleHSB();
  25. void ToggleVSB();
  26. void GrowHSBCB();
  27. void GrowVSBCB();
  28. void ToggleGrowWide();
  29. void ToggleGrowHigh();
  30. void ToggleGrowBoth();
  31. void KillPbutton();
  32. void AddPbutton();
  33. void QuitCB();
  34.  
  35. /*Callback for Toggle HSB button */
  36. void ToggleHSB(w, closure, call_data)
  37.   Widget    w;
  38.   XtPointer   closure;
  39.   XtPointer   call_data;
  40. {
  41.   int n;
  42.  
  43.   n = 0;
  44.   XtSetArg (args[n], XmNhorizontalScrollBar, &hsb ); n++;
  45.   XtGetValues (sw, args, n); 
  46.  
  47.   if(XtIsManaged(hsb))
  48.   XtUnmanageChild(hsb);
  49.   else
  50.   XtManageChild(hsb);     
  51. }
  52.  
  53.  
  54. /* Callback for Toggle VSB button */
  55. void ToggleVSB(w, closure, call_data)
  56.   Widget    w;
  57.   XtPointer   closure;
  58.   XtPointer   call_data;
  59. {
  60.  
  61.   int n;
  62.  
  63.   n = 0;
  64.   XtSetArg (args[n], XmNverticalScrollBar, &vsb ); n++;
  65.   XtGetValues (sw, args, n); 
  66.  
  67.   if(XtIsManaged(vsb))
  68.   XtUnmanageChild(vsb);
  69.   else
  70.   XtManageChild(vsb);     
  71.  
  72. }
  73.  
  74. /* Callback for Grow HSB button */ 
  75. void GrowHSBCB(w, closure, call_data)
  76.   Widget    w;
  77.   XtPointer   closure;
  78.   XtPointer   call_data;
  79. {
  80.   int n;
  81.   Dimension hsbheight;
  82.  
  83.   n = 0;
  84.   XtSetArg (args[n], XmNhorizontalScrollBar, &hsb ); n++;
  85.   XtGetValues (sw, args, n); 
  86.  
  87.   n = 0;
  88.   XtSetArg (args[n], XmNheight, &hsbheight ); n++;
  89.   XtGetValues (hsb, args, n); 
  90.  
  91.   n=0;
  92.   XtSetArg(args[n], XmNheight, hsbheight + 5); n++;
  93.   XtSetValues(hsb, args, 1);   
  94.     
  95. }
  96.  
  97.  
  98. /* Callback for Grow VSB button */ 
  99. void GrowVSBCB(w, closure, call_data)
  100.   Widget    w;
  101.   XtPointer   closure;
  102.   XtPointer   call_data;
  103. {
  104.  
  105.   int n;
  106.   Dimension vsbwidth;
  107.  
  108.   n = 0;
  109.   XtSetArg (args[n], XmNverticalScrollBar, &vsb ); n++;
  110.   XtSetArg (args[n], XmNwidth, &vsbwidth ); n++;
  111.   XtGetValues (sw, args, n); 
  112.  
  113.   n = 0;
  114.   XtSetArg (args[n], XmNwidth, &vsbwidth ); n++;
  115.   XtGetValues (vsb, args, n); 
  116.   n=0;
  117.  
  118.   XtSetArg(args[n], XmNwidth, vsbwidth + 5); n++;
  119.   XtSetValues(vsb, args, 1);   
  120.     
  121. }
  122.  
  123.  
  124. /* Callback for Grow Wide button */
  125. void ToggleGrowWide(w, closure, call_data)
  126.   Widget    w;
  127.   XtPointer   closure;
  128.   XtPointer   call_data;
  129. {
  130.   XtWidgetGeometry  desired, preferred;
  131.   int i;
  132.   Position swx, swy;
  133.   Dimension swborderwidth, swheight;
  134.   
  135.   desired.request_mode = (CWHeight);
  136.  
  137.   XtQueryGeometry(sw, &desired, &preferred);
  138.   i = 0;
  139.   if (preferred.request_mode & CWWidth)
  140.   {
  141.     XtSetArg(args[i], XmNwidth, preferred.width);
  142.   i++;
  143.   }
  144.   if (preferred.request_mode & CWHeight)
  145.   {
  146.     XtSetArg(args[i], XmNheight, preferred.height);
  147.   i++;
  148.   }
  149.   XtSetValues(sw,args,i); 
  150. }
  151.  
  152.  
  153. /* Callback for Grow High button */
  154. void ToggleGrowHigh(w, closure, call_data)
  155.   Widget    w;
  156.   XtPointer   closure;
  157.   XtPointer   call_data;
  158. {
  159.   XtWidgetGeometry  desired, preferred;
  160.   Position swx, swy;
  161.   Dimension swborderwidth, swwidth;
  162.   int i;
  163.   
  164.   i = 0;
  165.   XtSetArg (args[i], XmNwidth, &swwidth); i++;
  166.   XtGetValues (sw, args, i); 
  167.  
  168.   desired.width = swwidth; 
  169.   desired.request_mode = (CWWidth);
  170.  
  171.   XtQueryGeometry(sw, &desired, &preferred);
  172.  
  173.   i = 0;
  174.   if (preferred.request_mode & CWWidth)
  175.   {
  176.   XtSetArg(args[i], XmNwidth, preferred.width);
  177.   i++;
  178.   }
  179.   if (preferred.request_mode & CWHeight)
  180.   {
  181.   XtSetArg(args[i], XmNheight, preferred.height);
  182.   i++;
  183.   }
  184.   XtSetValues(sw,args,i); 
  185. }
  186.  
  187.  
  188. /* Callback for Grow Both button */
  189. void ToggleGrowBoth(w, closure, call_data)
  190.   Widget    w;
  191.   XtPointer   closure;
  192.   XtPointer   call_data;
  193. {
  194.   XtWidgetGeometry  desired, preferred;
  195.   int i;
  196.   Position swx, swy;
  197.   Dimension swborderwidth, swwidth, swheight;
  198.   
  199.   i = 0;
  200.   XtSetArg (args[i], XmNwidth, &swwidth); i++;
  201.   XtSetArg (args[i], XmNheight, &swheight); i++;
  202.   XtGetValues (sw, args, i); 
  203.  
  204.   desired.width = swwidth;
  205.   desired.height = swheight;
  206.   
  207.   desired.request_mode = (CWHeight | CWWidth);
  208.   XtQueryGeometry(sw, &desired, &preferred);
  209.   i = 0;
  210.   if (preferred.request_mode & CWWidth)
  211.   {
  212.   XtSetArg(args[i], XmNwidth, preferred.width);
  213.   i++;
  214.   }
  215.   if (preferred.request_mode & CWHeight)
  216.   {
  217.   XtSetArg(args[1], XmNheight, preferred.height);
  218.   i++;
  219.   }
  220.   XtSetValues(sw,args,i);    
  221. }
  222.  
  223.  
  224. /* Callback for Add A Button button */
  225. void AddPbutton(w, closure, call_data)
  226.   Widget    w;
  227.   XtPointer   closure;
  228.   XtPointer   call_data;
  229. {
  230.   Widget x;  
  231.   int i;
  232.   if (NewPbutton < 25)
  233.   {   
  234.   i = 0;  
  235.   text = XmStringCreateLtoR("A button...",cs);
  236.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  237.   XtSetArg(args[i], XmNlabelString, text);i++;
  238.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  239.   x = XmCreatePushButton(inner_box, "new", args, i);
  240.   XtManageChild (x);
  241.   XmStringFree (text);
  242.   New[++NewPbutton] = x;
  243.   }
  244. }
  245.  
  246.  
  247. /* Callback for Kill A Button button */
  248. void KillPbutton(w, closure, call_data)
  249.   Widget    w;
  250.   XtPointer   closure;
  251.   XtPointer   call_data;
  252. {
  253.  if (NewPbutton )
  254.    XtDestroyWidget(New[NewPbutton--]);
  255. }
  256.  
  257.  
  258. /* Callback for Quit button */
  259. void QuitCB (w, client_data, call_data)
  260.  
  261.   Widget w;
  262.   XtPointer client_data;
  263.   XtPointer call_data;
  264. {
  265.   XmFontListFree (curfontlist);
  266.   exit (0);
  267. }
  268.  
  269.  
  270. /*  main */
  271. void main(argc, argv)
  272.   unsigned int argc;
  273.   char **argv;
  274. {
  275.   int i;
  276.   XtAppContext app_context;
  277.      
  278.   XtSetArg (args[0], XmNallowShellResize ,TRUE); 
  279.   appshell = XtAppInitialize(&app_context, "Swindemo", NULL, 0, &argc,
  280.   argv, NULL, args, 1);
  281.  
  282.   font = XLoadQueryFont(XtDisplay(appshell), "vr-20");
  283.   curfontlist = XmFontListCreate(font, cs);
  284.  
  285.   i = 0; 
  286.   frame = XmCreateFrame(appshell, "frame", args, i);
  287.   XtManageChild (frame);
  288.  
  289.   i = 0; 
  290.   XtSetArg (args[i], XmNwidth, 150); i++;
  291.   XtSetArg (args[i], XmNheight, 150); i++;
  292.   XtSetArg (args[i], XmNscrollingPolicy, XmAUTOMATIC); i++;
  293.   sw = XmCreateScrolledWindow(frame, "ScrolledWindow", args, i);
  294.   XtManageChild (sw);
  295.  
  296.   XmScrolledWindowSetAreas(sw, NULL, NULL, NULL);
  297.  
  298.   i = 0;
  299.   XtSetArg(args[i], XmNshadowThickness, 0);  i++;
  300.   inner_box = XmCreateRowColumn (sw, "RowCol", args, i);
  301.   XtManageChild (inner_box);
  302.  
  303.   i = 0;  
  304.   text = XmStringCreateLtoR("Toggle HSB",cs);
  305.   XtSetArg(args[i], XmNfontList,  curfontlist);i++;
  306.   XtSetArg(args[i], XmNlabelString,  text);i++;
  307.   XtSetArg(args[i], XmNlabelType,  XmSTRING);i++;
  308.   Pbutton[0] = XmCreatePushButton(inner_box, "pbutton0", args, i);
  309.   XmStringFree (text);
  310.   XtAddCallback(Pbutton[0], XmNactivateCallback, ToggleHSB, NULL);
  311.  
  312.   i = 0;  
  313.   text = XmStringCreateLtoR("Toggle VSB",cs);
  314.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  315.   XtSetArg(args[i], XmNlabelString, text);i++;
  316.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  317.   Pbutton[1] = XmCreatePushButton(inner_box, "pbutton1", args, i); 
  318.   XmStringFree (text);
  319.   XtAddCallback(Pbutton[1], XmNactivateCallback, ToggleVSB, NULL);
  320.  
  321.   i = 0;  
  322.   text = XmStringCreateLtoR("Grow HSB",cs);
  323.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  324.   XtSetArg(args[i], XmNlabelString, text);i++;
  325.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  326.   Pbutton[2] = XmCreatePushButton(inner_box, "pbutton2", args, i); 
  327.   XmStringFree (text);
  328.   XtAddCallback(Pbutton[2], XmNactivateCallback, GrowHSBCB, NULL);
  329.  
  330.   i = 0;  
  331.   text = XmStringCreateLtoR("Grow VSB",cs);
  332.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  333.   XtSetArg(args[i], XmNlabelString, text);i++;
  334.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  335.   Pbutton[3] = XmCreatePushButton(inner_box, "pbutton3", args, i); 
  336.   XmStringFree (text);
  337.   XtAddCallback(Pbutton[3], XmNactivateCallback, GrowVSBCB, NULL); 
  338.  
  339.   i = 0;  
  340.   text = XmStringCreateLtoR("Grow Wide",cs);
  341.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  342.   XtSetArg(args[i], XmNlabelString, text);i++;
  343.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  344.   Pbutton[4] = XmCreatePushButton(inner_box, "pbutton4", args, i);
  345.   XmStringFree (text);
  346.   XtAddCallback(Pbutton[4], XmNactivateCallback, ToggleGrowWide, NULL); 
  347.  
  348.   i = 0;  
  349.   text = XmStringCreateLtoR("Grow High",cs);
  350.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  351.   XtSetArg(args[i], XmNlabelString, text);i++;
  352.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  353.   Pbutton[5] = XmCreatePushButton(inner_box, "pbutton5", args, i);
  354.   XmStringFree (text);
  355.   XtAddCallback(Pbutton[5], XmNactivateCallback, ToggleGrowHigh, NULL); 
  356.  
  357.   i = 0;  
  358.   text = XmStringCreateLtoR("Grow Both",cs);
  359.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  360.   XtSetArg(args[i], XmNlabelString, text);i++;
  361.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  362.   Pbutton[6] = XmCreatePushButton(inner_box, "pbutton6", args, i);
  363.   XmStringFree (text);
  364.   XtAddCallback(Pbutton[6], XmNactivateCallback, ToggleGrowBoth, NULL); 
  365.  
  366.   i = 0;  
  367.   text = XmStringCreateLtoR("Add A button...",cs);
  368.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  369.   XtSetArg(args[i], XmNlabelString, text);i++;
  370.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  371.   Pbutton[7] = XmCreatePushButton(inner_box, "pbutton7", args, i);
  372.   XmStringFree (text);
  373.   XtAddCallback(Pbutton[7], XmNactivateCallback, AddPbutton, NULL); 
  374.   
  375.   i = 0;
  376.   text = XmStringCreateLtoR("Kill A button...",cs);
  377.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  378.   XtSetArg(args[i], XmNlabelString, text );i++;
  379.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  380.   Pbutton[8] = XmCreatePushButton(inner_box, "pbutton8", args, i);
  381.   XmStringFree (text);
  382.   XtAddCallback(Pbutton[8], XmNactivateCallback, KillPbutton, NULL); 
  383.   
  384.   i = 0;
  385.   text = XmStringCreateLtoR("Quit",cs);
  386.   XtSetArg(args[i], XmNfontList, curfontlist);i++;
  387.   XtSetArg(args[i], XmNlabelString, text );i++;
  388.   XtSetArg(args[i], XmNlabelType, XmSTRING);i++;
  389.   Pbutton[9] = XmCreatePushButton(inner_box, "pbutton9", args, i);
  390.   XmStringFree (text);
  391.   XtAddCallback(Pbutton[9], XmNactivateCallback, QuitCB, NULL); 
  392.   
  393.   XtManageChildren (Pbutton, 10);
  394.   
  395.   XtRealizeWidget (appshell);
  396.   XtAppMainLoop (app_context);
  397.  
  398. }
  399.  
  400.