home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / XfeWidgets / tests / CascadeTest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  6.9 KB  |  277 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:        CascadeTest.c                                            */
  21. /* Description:    Test for XfeCascade widget.                                */
  22. /* Author:        Ramiro Estrugo <ramiro@netscape.com>                    */
  23. /*                                                                        */
  24. /*----------------------------------------------------------------------*/
  25.  
  26.  
  27.  
  28. #include <Xfe/XfeTest.h>
  29.  
  30. static String names[] =
  31. {
  32.     "One",
  33.     "Two",
  34.     "Three",
  35.     "Four",
  36.     "Five",
  37.     "Six",
  38.     "Seven",
  39.     "Eight",
  40.     "Nine",
  41.     "Ten",
  42. };
  43.  
  44. static Cardinal delays[] =
  45. {
  46.     0,
  47.     200,
  48.     0,
  49.     0,
  50.     300,
  51.     1000,
  52.     500,
  53.     5000,
  54.     400,
  55.     0,
  56. };
  57.  
  58. static Cardinal counts[] =
  59. {
  60.     0,
  61.     1,
  62.     2,
  63.     4,
  64.     8,
  65.     16,
  66.     32,
  67.     64,
  68.     128,
  69.     1,
  70. };
  71.  
  72. static void        activate_callback        (Widget,XtPointer,XtPointer);
  73. static void        arm_callback            (Widget,XtPointer,XtPointer);
  74. static void        disarm_callback            (Widget,XtPointer,XtPointer);
  75. static void        popup_callback            (Widget,XtPointer,XtPointer);
  76. static void        popdown_callback        (Widget,XtPointer,XtPointer);
  77. static void        cascading_callback        (Widget,XtPointer,XtPointer);
  78. static void        populate_callback        (Widget,XtPointer,XtPointer);
  79.  
  80. static Widget    create_button            (Widget,String,Cardinal,Cardinal);
  81. static void        add_items                (Widget,Cardinal);
  82. static Widget    add_item                (Widget,String);
  83. static Widget    get_sub_menu_id            (Widget);
  84.  
  85. #define MAX_J 10
  86.  
  87. /*----------------------------------------------------------------------*/
  88. int
  89. main(int argc,char *argv[])
  90. {
  91.     Widget        form;
  92.     Widget        frame;
  93.     Widget        tool_bar;
  94.     Cardinal    i;
  95.     
  96.     XfeAppCreateSimple("CascadeTest",&argc,argv,"MainFrame",&frame,&form);
  97.     
  98.     tool_bar = XtVaCreateManagedWidget("ToolBar",
  99.                                        xfeToolBarWidgetClass,
  100.                                        form,
  101.                                        NULL);
  102.     
  103.     for (i = 0; i < XtNumber(names); i++)
  104.     {
  105.         create_button(tool_bar,names[i],counts[i],delays[i]);
  106.     }
  107.  
  108.     XtPopup(frame,XtGrabNone);
  109.     
  110.     XfeAppMainLoop();
  111.  
  112.     return 0;
  113. }
  114. /*----------------------------------------------------------------------*/
  115. static void
  116. activate_callback(Widget w,XtPointer client_data,XtPointer call_data)
  117. {
  118.     XfeButtonCallbackStruct * cbs = (XfeButtonCallbackStruct *) call_data;
  119.  
  120.     printf("Activate(%s)\n\n",XtName(w));
  121. }
  122. /*----------------------------------------------------------------------*/
  123. static void
  124. arm_callback(Widget w,XtPointer client_data,XtPointer call_data)
  125. {
  126.     XfeButtonCallbackStruct * cbs = (XfeButtonCallbackStruct *) call_data;
  127.  
  128.     printf("Arm(%s)\n\n",XtName(w));
  129. }
  130. /*----------------------------------------------------------------------*/
  131. static void
  132. disarm_callback(Widget w,XtPointer client_data,XtPointer call_data)
  133. {
  134.     printf("Disarm(%s)\n\n",XtName(w));
  135. }
  136. /*----------------------------------------------------------------------*/
  137. static void
  138. popup_callback(Widget w,XtPointer client_data,XtPointer call_data)
  139. {
  140.     printf("Popup(%s)\n\n",XtName(w));
  141. }
  142. /*----------------------------------------------------------------------*/
  143. static void
  144. popdown_callback(Widget w,XtPointer client_data,XtPointer call_data)
  145. {
  146.     printf("Popdown(%s)\n\n",XtName(w));
  147. }
  148. /*----------------------------------------------------------------------*/
  149. static void
  150. populate_callback(Widget w,XtPointer client_data,XtPointer call_data)
  151. {
  152.     Widget        submenu;
  153.     Cardinal    num_children;
  154.  
  155.     XtVaGetValues(w,XmNsubMenuId,&submenu,NULL);
  156.  
  157.     assert( XfeIsAlive(submenu) );
  158.  
  159.     XfeChildrenGet(submenu,NULL,&num_children);
  160.  
  161.  
  162.     printf("Populate(%s) Have %d menu items\n\n",XtName(w),num_children);
  163.  
  164.     if (strcmp(XtName(w),"One") == 0)
  165.     {
  166.         XfeCascadeDestroyChildren(w);
  167.         /*XfeChildrenDestroy(submenu);*/
  168.  
  169.         XSync(XtDisplay(w),True);
  170.  
  171.         XmUpdateDisplay(w);
  172.  
  173.         add_items(w,30);
  174.     }
  175. }
  176. /*----------------------------------------------------------------------*/
  177. static void
  178. cascading_callback(Widget w,XtPointer client_data,XtPointer call_data)
  179. {
  180.     Widget        submenu;
  181.     Cardinal    num_children;
  182.  
  183.     XtVaGetValues(w,XmNsubMenuId,&submenu,NULL);
  184.  
  185.     assert( XfeIsAlive(submenu) );
  186.  
  187.     XfeChildrenGet(submenu,NULL,&num_children);
  188.  
  189.     printf("Cascading(%s) Have %d menu items\n\n",XtName(w),num_children);
  190. }
  191. /*----------------------------------------------------------------------*/
  192. static Widget
  193. create_button(Widget parent,String name,Cardinal item_count,Cardinal delay)
  194. {
  195.     Widget        button;
  196.     Cardinal    i;
  197.     char        buf[100];
  198.  
  199.     static String items[] =
  200.     {
  201.         "Item One",
  202.         "Item Two",
  203.         "Item Three",
  204.         "Item Four",
  205.         "Item Five",
  206.         "Item Six",
  207.         "Item Seven",
  208.         "Item Eight",
  209.         "Item Nine",
  210.         "Item Ten",
  211.     };
  212.     
  213.     button = XtVaCreateManagedWidget(name,
  214.                                      xfeCascadeWidgetClass,
  215.                                      parent,
  216.                                      XmNmappingDelay,        delay,
  217.                                      NULL);
  218.  
  219.     XtAddCallback(button,XmNactivateCallback,activate_callback,NULL);
  220.     XtAddCallback(button,XmNarmCallback,arm_callback,NULL);
  221.     XtAddCallback(button,XmNcascadingCallback,cascading_callback,NULL);
  222.     XtAddCallback(button,XmNdisarmCallback,disarm_callback,NULL);
  223.     XtAddCallback(button,XmNpopdownCallback,popdown_callback,NULL);
  224.     XtAddCallback(button,XmNcascadingCallback,populate_callback,NULL);
  225.     XtAddCallback(button,XmNpopupCallback,popup_callback,NULL);
  226.  
  227.     add_items(button,item_count);
  228.  
  229.     return button;
  230. }
  231. /*----------------------------------------------------------------------*/
  232. static void
  233. add_items(Widget parent,Cardinal item_count)
  234. {
  235.  
  236.     if (item_count > 0)
  237.     {
  238.         Cardinal    i;
  239.         char        buf[100];
  240.         Widget        sub_menu_id = get_sub_menu_id(parent);
  241.         
  242.         assert( XfeIsAlive(sub_menu_id) );
  243.  
  244.         for (i = 0; i < item_count; i++)
  245.         {
  246.             sprintf(buf,"Item %-2d",i);
  247.  
  248.             add_item(sub_menu_id,buf);
  249.         }
  250.     }
  251. }
  252. /*----------------------------------------------------------------------*/
  253. static Widget
  254. add_item(Widget parent,String name)
  255. {
  256.     Widget item;
  257.  
  258.     item = XtVaCreateManagedWidget(name,
  259.                                    /*xmPushButtonGadgetClass,*/
  260.                                    xmPushButtonWidgetClass,
  261.                                    parent,
  262.                                    NULL);
  263.  
  264.     return item;
  265. }
  266. /*----------------------------------------------------------------------*/
  267. static Widget
  268. get_sub_menu_id(Widget w)
  269. {
  270.     Widget sub_menu_id;
  271.  
  272.     XtVaGetValues(w,XmNsubMenuId,&sub_menu_id,NULL);
  273.  
  274.     return sub_menu_id;
  275. }
  276. /*----------------------------------------------------------------------*/
  277.