home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / XfeWidgets / tests / MenuTest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  9.9 KB  |  412 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:        MenuTest.c                                                */
  21. /* Description:    Test for XfeBmButton and XfeBmCascade widgets.            */
  22. /* Author:        Ramiro Estrugo <ramiro@netscape.com>                    */
  23. /*                                                                        */
  24. /*----------------------------------------------------------------------*/
  25.  
  26.  
  27.  
  28. #include <Xfe/XfeTest.h>
  29.  
  30. #include <Xm/RowColumnP.h>
  31.  
  32.  
  33. static Widget    create_pulldown                (Widget,String);
  34. static Widget    create_sep                    (Widget,String);
  35. static Widget    create_bm_pulldown            (Widget,String);
  36. static Widget    create_item                    (Widget,String);
  37. static Widget    create_cascade_alone_one    (Widget parent,String name);
  38. static Widget    create_cascade_alone_two    (Widget parent,String name);
  39. static void        activate_callback            (Widget,XtPointer,XtPointer);
  40. static Widget    get_sub_menu_id                (Widget);
  41.  
  42. static void        post_callback                (Widget,XtPointer,XtPointer);
  43. static void        event_loop                    (void);
  44.  
  45. /*----------------------------------------------------------------------*/
  46. int
  47. main(int argc,char *argv[])
  48. {
  49.     Widget    form;
  50.     Widget    frame;
  51.     Widget    menu;
  52.     Widget    pane1;
  53.     Widget    pane2;
  54.     Widget    pane3;
  55.     
  56.     XfeAppCreateSimple("MenuTest",&argc,argv,"MainFrame",&frame,&form);
  57.  
  58.     menu = XmCreateMenuBar(form,"Menu",NULL,0);
  59.  
  60.     pane1 = create_bm_pulldown(menu,"File");
  61.  
  62. #if 1
  63.     pane2 = create_bm_pulldown(menu,"Options");
  64. #else
  65.     pane2 = create_pulldown(menu,"Options");
  66. #endif
  67.  
  68.     create_item(pane1,"Open");
  69.     create_item(pane1,"Close");
  70.     create_item(pane1,"Save");
  71.     create_sep(pane1,"Sep2");
  72.     create_item(pane1,"SaveAs");
  73.     create_item(pane1,"Exit");
  74.  
  75.     create_item(pane2,"Browser");
  76.     create_item(pane2,"Mail");
  77.     create_item(pane2,"News");
  78.     create_item(pane2,"Editor");
  79.  
  80.     pane3 = create_bm_pulldown(pane2,"More");
  81.  
  82.     create_item(pane3,"Browser");
  83.     create_item(pane3,"Mail");
  84.     create_item(pane3,"News");
  85.     create_item(pane3,"Editor");
  86.  
  87.     create_cascade_alone_one(form,"CascadeAlone1");
  88.  
  89.     create_cascade_alone_two(form,"CascadeAlone2");
  90.  
  91.     XtManageChild(menu);
  92.  
  93.     {
  94.         Widget pb = XmCreatePushButton(form,"Caca",NULL,0);
  95.  
  96.         XtManageChild(pb);
  97.     }
  98.  
  99.     XtPopup(frame,XtGrabNone);
  100.  
  101.     XfeAppMainLoop();
  102.  
  103.     return 0;
  104. }
  105. /*----------------------------------------------------------------------*/
  106. static Widget
  107. create_pulldown(Widget parent,String name)
  108. {
  109.     Widget cascade;
  110.     Widget pane;
  111.  
  112.     pane = XmCreatePulldownMenu(parent,"_Pane",NULL,0);
  113.  
  114.     cascade = XtVaCreateManagedWidget(name,
  115.                                       xmCascadeButtonWidgetClass,
  116.                                       parent,
  117.                                       XmNsubMenuId,        pane,
  118.                                       NULL);
  119.  
  120.  
  121. /*     XtVaSetValues(pane,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL); */
  122.  
  123.     return pane;
  124. }
  125. /*----------------------------------------------------------------------*/
  126. static Widget
  127. create_bm_pulldown(Widget parent,String name)
  128. {
  129.     Widget cascade;
  130.     Widget pane;
  131.  
  132.     static Pixmap            arm_pixmap = XmUNSPECIFIED_PIXMAP;
  133.     static Pixmap            pixmap = XmUNSPECIFIED_PIXMAP;
  134.  
  135.  
  136.     pane = XmCreatePulldownMenu(parent,"_Pane",NULL,0);
  137.  
  138.     cascade = 
  139.         XtVaCreateManagedWidget(name,
  140.                                 xfeBmCascadeWidgetClass,
  141.                                 parent,
  142.                                 XmNbuttonLayout,    XmBUTTON_LABEL_ON_RIGHT,
  143.                                 XmNsubMenuId,        pane,
  144.                                 NULL);
  145.  
  146.     XtAddCallback(cascade,XmNactivateCallback,activate_callback,NULL);
  147.  
  148. /*     XtVaSetValues(pane,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL); */
  149.  
  150.     if (!XfePixmapGood(pixmap))
  151.     {
  152.         pixmap = XfeGetPixmap(cascade,"task_small_browser");
  153.     }
  154.  
  155.     if (!XfePixmapGood(arm_pixmap))
  156.     {
  157.         Pixel arm_color;
  158.  
  159.         XtVaGetValues(cascade,XmNarmColor,&arm_color,NULL);
  160.         
  161.         arm_pixmap = XfeGetPixmap(cascade,"task_small_browser_armed");
  162.     }
  163.  
  164.     if (XfePixmapGood(pixmap))
  165.     {
  166.         XtVaSetValues(cascade,XmNlabelPixmap,pixmap,NULL);
  167.     }
  168.  
  169.     if (XfePixmapGood(arm_pixmap))
  170.     {
  171.         XtVaSetValues(cascade,XmNarmPixmap,arm_pixmap,NULL);
  172.     }
  173.  
  174.  
  175.     return pane;
  176. }
  177. /*----------------------------------------------------------------------*/
  178. static Widget
  179. create_item(Widget parent,String name)
  180. {
  181.     Widget            item;
  182.  
  183.     static Pixmap            arm_pixmap = XmUNSPECIFIED_PIXMAP;
  184.     static Pixmap            pixmap = XmUNSPECIFIED_PIXMAP;
  185.  
  186.     item = XtVaCreateManagedWidget(name,
  187. #if 1
  188.                                    xfeBmButtonWidgetClass,
  189. #else
  190.                                    xmPushButtonWidgetClass,
  191. #endif
  192.                                    parent,
  193.                                    NULL);
  194.  
  195.     if (!XfePixmapGood(pixmap))
  196.     {
  197.         pixmap = XfeGetPixmap(parent,"task_small_browser");
  198.     }
  199.  
  200.     if (!XfePixmapGood(arm_pixmap))
  201.     {
  202.         Pixel arm_color;
  203.  
  204.         XtVaGetValues(item,XmNarmColor,&arm_color,NULL);
  205.  
  206.         arm_pixmap = XfeGetPixmap(parent,"task_small_browser");
  207.     }
  208.  
  209.     if (XfePixmapGood(pixmap))
  210.     {
  211.         XtVaSetValues(item,XmNlabelPixmap,pixmap,NULL);
  212.     }
  213.  
  214.     if (XfePixmapGood(arm_pixmap))
  215.     {
  216.         XtVaSetValues(item,XmNarmPixmap,arm_pixmap,NULL);
  217.     }
  218.  
  219.     XtAddCallback(item,XmNactivateCallback,activate_callback,NULL);
  220.  
  221.     XtManageChild(item);
  222.  
  223.     return item;
  224. }
  225. /*----------------------------------------------------------------------*/
  226. static Widget
  227. create_sep(Widget parent,String name)
  228. {
  229.     Widget            item;
  230.  
  231.     item = XtVaCreateManagedWidget(name,
  232.                                    xmSeparatorWidgetClass,
  233.                                    parent,
  234.                                    NULL);
  235.  
  236.     XtManageChild(item);
  237.  
  238.     return item;
  239. }
  240. /*----------------------------------------------------------------------*/
  241. static void
  242. activate_callback(Widget w,XtPointer client_data,XtPointer call_data)
  243. {
  244.     unsigned char accent_type;
  245.  
  246.     XtVaGetValues(w,XmNaccentType,&accent_type,NULL);
  247.  
  248.     switch(accent_type)
  249.     {
  250.     case XmACCENT_TOP:
  251.         printf("Activate(%s) ACCENT_TOP\n",XtName(w));
  252.         break;
  253.  
  254.     case XmACCENT_BOTTOM:
  255.         printf("Activate(%s) ACCENT_BOTTOM\n",XtName(w));
  256.         break;
  257.  
  258.     case XmACCENT_NONE:
  259.         printf("Activate(%s) ACCENT_NONE\n",XtName(w));
  260.         break;
  261.  
  262.     case XmACCENT_ALL:
  263.         printf("Activate(%s) ACCENT_ALL\n",XtName(w));
  264.         break;
  265.     }
  266. }
  267. /*----------------------------------------------------------------------*/
  268. static Widget
  269. create_cascade_alone_one(Widget parent,String name)
  270. {
  271.     Widget cascade;
  272.     Widget sub_menu_id;
  273.     Widget pane;
  274.     Widget pane2;
  275.     Widget pane3;
  276.     
  277.     cascade = 
  278.         XtVaCreateManagedWidget(name,
  279.                                 xfeCascadeWidgetClass,
  280.                                 parent,
  281.                                 XmNbuttonLayout,    XmBUTTON_LABEL_ON_BOTTOM,
  282.                                 XmNbuttonType,        XmBUTTON_PUSH,
  283.                                 XmNmappingDelay,    0,
  284.                                 NULL);
  285.     
  286.     sub_menu_id = get_sub_menu_id(cascade);
  287.     
  288.     assert( XfeIsAlive(sub_menu_id) );
  289.  
  290.     /* Turn accent drawing on */
  291.     XfeBmAccentSetFileMode(XmACCENT_FILE_ANYWHERE);
  292.     XfeBmAccentEnable();
  293.  
  294.     XtVaSetValues(sub_menu_id,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL);
  295.     
  296. #if 1
  297. /*    XtVaSetValues(cascade,XmNpixmap,_bm_pixmap,NULL);*/
  298.     XtVaSetValues(cascade,XmNbuttonLayout,XmBUTTON_LABEL_ON_BOTTOM,NULL);
  299. #endif
  300.     
  301.     create_item(sub_menu_id,"Open");
  302.     create_item(sub_menu_id,"Close");
  303.     pane = create_bm_pulldown(sub_menu_id,"More");
  304.     create_item(sub_menu_id,"Save");
  305.     create_item(sub_menu_id,"SaveAs");
  306.     create_item(sub_menu_id,"Exit");
  307.         
  308.     /*pane = create_pulldown(sub_menu_id,"More");*/
  309.     
  310.     pane2 = create_bm_pulldown(pane,"More 2");
  311.  
  312.     create_item(pane,"Browser");
  313.     create_item(pane,"Mail");
  314.     create_item(pane,"News");
  315.     create_item(pane,"Editor");
  316.  
  317.     pane3 = create_bm_pulldown(pane2,"More 3");
  318.  
  319.     create_item(pane2,"Browser");
  320.     create_item(pane2,"Mail");
  321.     create_item(pane2,"News");
  322.     create_item(pane2,"Editor");
  323.  
  324.     create_item(pane3,"Browser");
  325.     create_item(pane3,"Mail");
  326.     create_item(pane3,"News");
  327.     create_item(pane3,"Editor");
  328.  
  329.     XtAddCallback(cascade,XmNactivateCallback,post_callback,NULL);
  330.  
  331.     return cascade;
  332. }
  333. /*----------------------------------------------------------------------*/
  334. static Widget
  335. create_cascade_alone_two(Widget parent,String name)
  336. {
  337.     Widget cascade;
  338.     Widget sub_menu_id;
  339.     Widget pane;
  340.     
  341.     cascade = 
  342.         XtVaCreateManagedWidget(name,
  343.                                 xfeCascadeWidgetClass,
  344.                                 parent,
  345. /*                                XmNpixmap,            _bm_pixmap,*/
  346.                                 XmNbuttonLayout,    XmBUTTON_LABEL_ON_BOTTOM,
  347.                                 XmNbuttonType,        XmBUTTON_PUSH,
  348.                                 NULL);
  349.  
  350.     sub_menu_id = get_sub_menu_id(cascade);
  351.     
  352. /*     XtVaSetValues(sub_menu_id,XmNtearOffModel,XmTEAR_OFF_ENABLED,NULL); */
  353.     
  354.     create_item(sub_menu_id,"Open");
  355.     create_item(sub_menu_id,"Close");
  356.     create_item(sub_menu_id,"Save");
  357.     create_item(sub_menu_id,"SaveAs");
  358.     create_item(sub_menu_id,"Exit");
  359.         
  360.     pane = create_bm_pulldown(sub_menu_id,"More");
  361.     /*pane = create_pulldown(sub_menu_id,"More");*/
  362.  
  363. #if 0    
  364.     create_item(pane,"Browser");
  365.     create_item(pane,"Mail");
  366.     create_item(pane,"News");
  367.     create_item(pane,"Editor");
  368. #endif
  369.  
  370.  
  371.     return cascade;
  372. }
  373. /*----------------------------------------------------------------------*/
  374. static Widget
  375. get_sub_menu_id(Widget w)
  376. {
  377.     Widget sub_menu_id;
  378.  
  379.     XtVaGetValues(w,XmNsubMenuId,&sub_menu_id,NULL);
  380.  
  381.     return sub_menu_id;
  382. }
  383. /*----------------------------------------------------------------------*/
  384. static void
  385. post_callback(Widget w,XtPointer client_data,XtPointer call_data)
  386. {
  387.     XfeSleep(w,event_loop,2000);
  388.  
  389.     XfeBmAccentEnable();
  390.  
  391.     XfeCascadeArmAndPost(w,NULL);
  392. }
  393. /*----------------------------------------------------------------------*/
  394. static void
  395. event_loop(void)
  396. {
  397.     XtAppContext    app = XfeAppContext();
  398.     XEvent            event;
  399.  
  400.     /* XtAppLock(app); */
  401.  
  402.     while(1)
  403.     {
  404.         XtAppNextEvent(app,&event);
  405.         
  406.         XtDispatchEvent(&event);
  407.     }
  408.  
  409.     /* XtAppUnlock(app); */
  410. }
  411. /*----------------------------------------------------------------------*/
  412.