home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / XfeWidgets / XfeTest / TestMenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  7.7 KB  |  303 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:        <XfeTest/TestMenu.c>                                    */
  21. /* Description:    Xfe widget menu test funcs.                                */
  22. /* Author:        Ramiro Estrugo <ramiro@netscape.com>                    */
  23. /*                                                                        */
  24. /*----------------------------------------------------------------------*/
  25.  
  26.  
  27. #include <Xfe/XfeTest.h>
  28.  
  29. static WidgetClass    type_to_class            (XfeMenuItemType item_type);
  30. static String        type_to_action_cb_name    (XfeMenuItemType item_type);
  31.  
  32. /*----------------------------------------------------------------------*/
  33. /* extern */ Widget
  34. XfeMenuItemCreate(Widget pw,XfeMenuItem data,XtPointer client_data)
  35. {
  36.     Widget            item = NULL;
  37.     WidgetClass        wc = NULL;
  38.  
  39.     assert( XfeIsAlive(pw) );
  40.     assert( XmIsRowColumn(pw) );
  41.     assert( data != NULL );
  42.     assert( data->name != NULL );
  43.  
  44.     wc = type_to_class(data->type);
  45.  
  46.     assert( wc != NULL );
  47.  
  48.     if (client_data)
  49.     {
  50.         data->client_data = client_data;
  51.     }
  52.  
  53.     if (data->type == XfeMENU_PANE)
  54.     {
  55.         XfeMenuPaneRec pane_data;
  56.  
  57.         pane_data.name = data->name;
  58.         pane_data.items = data->pane_items;
  59.  
  60.         item = XfeMenuPaneCreate(pw,&pane_data,client_data);
  61.     }
  62.     else
  63.     {
  64.         item = XtVaCreateManagedWidget(data->name,wc,pw,NULL);
  65.  
  66.         if (data->type == XfeMENU_SEP)
  67.         {
  68.             XtVaSetValues(item,XmNshadowThickness,3,NULL);
  69.         }
  70.         else if (data->type == XfeMENU_RADIO)
  71.         {
  72.             XtVaSetValues(item,XmNindicatorType,XmONE_OF_MANY,NULL);
  73.             XtVaSetValues(pw,XmNradioBehavior,True,NULL);
  74.         }
  75.         else if (data->type == XfeMENU_TOGGLE)
  76.         {
  77.             XtVaSetValues(item,XmNindicatorType,XmN_OF_MANY,NULL);
  78.             XtVaSetValues(pw,XmNradioBehavior,False,NULL);
  79.         }
  80.  
  81.         if (data->action_cb)
  82.         {
  83.             String cb_name = type_to_action_cb_name(data->type);
  84.         
  85.             XtAddCallback(item,cb_name,data->action_cb,data->client_data);
  86.         }
  87.     }
  88.  
  89.     return item;
  90. }
  91. /*----------------------------------------------------------------------*/
  92. /* extern */ Widget
  93. XfeMenuItemCreate2(Widget                pw,
  94.                    String                name,
  95.                    XfeMenuItemType        type,
  96.                    XtCallbackProc        action_cb,
  97.                    XfeMenuItemRec *        pane_items,
  98.                    XtPointer            client_data)
  99. {
  100.     XfeMenuItemRec menu_item;
  101.  
  102.     assert( XfeIsAlive(pw) );
  103.     assert( XmIsRowColumn(pw) );
  104.     assert( name != NULL );
  105.  
  106.     menu_item.name            = name;
  107.     menu_item.type            = type;
  108.     menu_item.action_cb        = action_cb;
  109.     menu_item.pane_items    = pane_items;
  110.     menu_item.client_data    = client_data;
  111.  
  112.     return XfeMenuItemCreate(pw,&menu_item,client_data);
  113. }
  114. /*----------------------------------------------------------------------*/
  115. /* extern */ Widget
  116. XfeMenuPaneCreate(Widget pw,XfeMenuPane data,XtPointer client_data)
  117. {
  118.     Widget            pane = NULL;
  119.     Widget            cascade;
  120.     char            buf[1024];
  121.     
  122.     assert( XfeIsAlive(pw) );
  123.     assert( XmIsRowColumn(pw) );
  124.     assert( data != NULL );
  125.  
  126.     sprintf(buf,"%s_pulldown",data->name);
  127.  
  128.     pane = XmCreatePulldownMenu(pw,buf,NULL,0);
  129.  
  130.     XtVaSetValues(pane,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL);
  131.  
  132.     cascade = XtVaCreateManagedWidget(data->name,
  133.                                       xmCascadeButtonWidgetClass,
  134.                                       pw,
  135.                                       XmNsubMenuId,        pane,
  136.                                       NULL);
  137.     if (data->items)
  138.     {
  139.         XfeMenuItem item = data->items;
  140.  
  141.         while(item && item->name)
  142.         {
  143.             XfeMenuItemCreate(pane,item,client_data);
  144.  
  145.             item++;
  146.         }
  147.     }
  148.  
  149.     if ((strcmp(data->name,"help") == 0) || 
  150.         (strcmp(data->name,"Help") == 0))
  151.     {
  152.         XtVaSetValues(pw,XmNmenuHelpWidget,cascade,NULL);
  153.     }
  154.  
  155.     return cascade;
  156. }
  157. /*----------------------------------------------------------------------*/
  158. extern Widget
  159. XfeMenuPaneCreate2(Widget            pw,
  160.                    String            name,
  161.                    XfeMenuItemRec * items,
  162.                    XtPointer        client_data)
  163. {
  164.     XfeMenuPaneRec menu_pane;
  165.  
  166.     assert( XfeIsAlive(pw) );
  167.     assert( XmIsRowColumn(pw) );
  168.     assert( name != NULL );
  169.  
  170.     menu_pane.name    = name;
  171.     menu_pane.items    = items;
  172.  
  173.     return XfeMenuPaneCreate(pw,&menu_pane,client_data);
  174. }
  175. /*----------------------------------------------------------------------*/
  176. /* extern */ Widget
  177. XfeMenuBarCreate(Widget                pw,
  178.                  String                name,
  179.                  XfeMenuPaneRec *    items,
  180.                  XtPointer            client_data,
  181.                  ArgList            av,
  182.                  Cardinal            ac)
  183. {
  184.     Widget menu_bar = NULL;
  185.     
  186.     assert( XfeIsAlive(pw) );
  187.     assert( name != NULL );
  188.  
  189.     menu_bar = XmCreateMenuBar(pw,name,av,ac);
  190.  
  191.     if (items)
  192.     {
  193.         XfeMenuPane pane = items;
  194.  
  195.         while(pane && pane->name)
  196.         {
  197.             XfeMenuPaneCreate(menu_bar,pane,client_data);
  198.  
  199.             pane++;
  200.         }
  201.     }
  202.  
  203.     XtManageChild(menu_bar);
  204.  
  205.     return menu_bar;
  206. }
  207. /*----------------------------------------------------------------------*/
  208. /* extern */ Widget
  209. XfePopupMenuCreate(Widget            pw,
  210.                    String            name,
  211.                    XfeMenuPaneRec *    items,
  212.                    XtPointer        client_data,
  213.                    ArgList            av,
  214.                    Cardinal            ac)
  215. {
  216.     Widget popup_menu = NULL;
  217.     
  218.     assert( XfeIsAlive(pw) );
  219.     assert( name != NULL );
  220.  
  221.     popup_menu = XmCreatePopupMenu(pw,name,av,ac);
  222.  
  223.     XtVaSetValues(popup_menu,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL);
  224.  
  225.     if (items)
  226.     {
  227.         XfeMenuPane pane = items;
  228.  
  229.         while(pane && pane->name)
  230.         {
  231.             XfeMenuPaneCreate(popup_menu,pane,client_data);
  232.  
  233.             pane++;
  234.         }
  235.     }
  236.  
  237.     return popup_menu;
  238. }
  239. /*----------------------------------------------------------------------*/
  240. /* extern */ String
  241. XfeNameIndex(String prefix,Cardinal i)
  242. {
  243.     static char buf[4096];
  244.  
  245.     sprintf(buf,"%s%d",prefix,i);
  246.  
  247.     return buf;
  248. }
  249. /*----------------------------------------------------------------------*/
  250. /* extern */ String
  251. XfeNameString(String prefix,String name)
  252. {
  253.     static char buf[4096];
  254.  
  255.     sprintf(buf,"%s%s",prefix,name);
  256.  
  257.     return buf;
  258. }
  259. /*----------------------------------------------------------------------*/
  260.  
  261.  
  262. /*----------------------------------------------------------------------*/
  263. static WidgetClass
  264. type_to_class(XfeMenuItemType item_type)
  265. {
  266.     WidgetClass wc = NULL;
  267.  
  268.     switch(item_type)
  269.     {
  270.     case XfeMENU_BM_PANE:        wc = xfeBmCascadeWidgetClass;        break;
  271.     case XfeMENU_BM_PUSH:        wc = xfeBmButtonWidgetClass;        break;
  272.     case XfeMENU_PANE:            wc = xmCascadeButtonWidgetClass;    break;
  273.     case XfeMENU_LABEL:            wc = xmLabelWidgetClass;            break;
  274.     case XfeMENU_PUSH:            wc = xmPushButtonWidgetClass;        break;
  275.     case XfeMENU_SEP:            wc = xmSeparatorWidgetClass;        break;
  276.     case XfeMENU_TOGGLE:        wc = xmToggleButtonWidgetClass;        break;
  277.     case XfeMENU_RADIO:            wc = xmToggleButtonWidgetClass;        break;
  278.     }
  279.  
  280.     return wc;
  281. }
  282. /*----------------------------------------------------------------------*/
  283. static String
  284. type_to_action_cb_name(XfeMenuItemType item_type)
  285. {
  286.     String name = NULL;
  287.  
  288.     switch(item_type)
  289.     {
  290.     case XfeMENU_BM_PANE:        name = XmNactivateCallback;        break;
  291.     case XfeMENU_BM_PUSH:        name = XmNactivateCallback;        break;
  292.     case XfeMENU_PANE:            name = XmNactivateCallback;        break;
  293.     case XfeMENU_LABEL:            name = NULL;                    break;
  294.     case XfeMENU_PUSH:            name = XmNactivateCallback;        break;
  295.     case XfeMENU_RADIO:            name = XmNvalueChangedCallback;    break;
  296.     case XfeMENU_SEP:            name = NULL;                    break;
  297.     case XfeMENU_TOGGLE:        name = XmNvalueChangedCallback;    break;
  298.     }
  299.  
  300.     return name;
  301. }
  302. /*----------------------------------------------------------------------*/
  303.