home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional Developers Kit 1992 November / Disc01 / Disc01.mdf / cppbeta / clsam2i / tmenu.cp_ / TMENU.CPP
Encoding:
C/C++ Source or Header  |  1992-10-20  |  21.3 KB  |  659 lines

  1. /**************************************************************/
  2. /* Menu Test Program for IAccelerator                         */
  3. /*                       IMenu                                */
  4. /*                       IActionBarMenu                       */
  5. /*                       IPopUpMenu                           */
  6. /*                       ISystemMenu                          */
  7. /*                       IMenuItem                            */
  8. /*                       ITitle                               */
  9. /*                       IWindowIcon                          */
  10. /*                                                            */
  11. /* CHANGE ACTIVITY:                                           */
  12. /*   DATE:     INITIAL:        DESCRIPTION                    */
  13. /*                                                            */
  14. /*   071882    Peter Hoa       Initial  code                  */
  15. /*   090192    SPH             Changes for Driver 3           */
  16. /**************************************************************/
  17.  
  18. #include <tmenu.hpp>
  19. #include "tmenu.h"
  20.                            
  21. #include <imprintf.h>
  22.  
  23. #define INCL_DOSDEVIOCTL
  24. // need os2.h for DosBeep() NOT for any PM stuff
  25. extern "C" {
  26.    #include <os2.h>
  27.    #include <stdio.h>
  28. }
  29.  
  30.  
  31. /**************************************************************/
  32. /* main() program entry point                                 */
  33. /**************************************************************/
  34. void main()
  35. {
  36.  
  37.    imprintf("About to create TestWindow from Main\n");
  38.  
  39.    TestWindow theTestWindow(1, (IWindow*)0, (IWindow*)0, IRectangle());
  40.  
  41.    imprintf("About to run application\n");
  42.  
  43.    IApplication::current.run();
  44.  
  45. }
  46.  
  47.  
  48.  
  49. /**************************************************************/
  50. /*        TestWindow Constructor                              */
  51. /**************************************************************/
  52. TestWindow :: TestWindow( unsigned long windowId, const IWindow* parentWindow,
  53.                     const IWindow* ownerWindow, const IRectangle& initialSize)
  54.    : IFrameWindow(windowId, parentWindow, ownerWindow, initialSize),
  55.  
  56.      resmgr_exe(),
  57.  
  58.      tle(this, PSZ_TITLE_OBJ1, PSZ_TITLE_VIEW1,1),
  59.  
  60.      ac(),
  61.      ac_title(ID_MENU_WITH_ACCEL_CTL, this),
  62.  
  63.      abmn(ID_MENU, this),
  64.      sysmn(this),
  65.  
  66.      // The false as third parameter indicates that this
  67.      // PopUp Menu should not be automatically deleted by
  68.      // the IMenuHandler.
  69.      ppumn(new IPopUpMenu(ID_POPUP, this, false)),
  70.  
  71.      ic_doc(ID_ICON_DOC,this,this,IRectangle(100,300,130,330), ID_ICON1,IIconControl::autosize),
  72.      ic_hr(ID_ICON_HR,this,this,IRectangle(100,300,130,330), ID_ICON2,IIconControl::autosize),
  73.      ic_inbasket(ID_ICON_INBASKET,this,this,IRectangle(100,300,130,330), ID_ICON3,IIconControl::autosize),
  74.      ic_folder(ID_ICON_FOLDER,this,this,IRectangle(100,300,130,330), ID_ICON4,IIconControl::autosize),
  75.  
  76.      mni_text1(&(abmn),   ID_MENU_TEXT1, "Text Menu Added",
  77.                IMenuItem::defStyle,
  78.                IMenuItem::checked | IMenuItem::framed),
  79.  
  80.      mni_text2(&(abmn),   ID_MENU_TEXT2, PSZ_MENU_TEXT2, 
  81.                IMenuItem::Text),
  82.  
  83.      mni_text3(&(abmn),   ID_MENU_TEXT3, PSZ_MENU_TEXT3,
  84.                IMenuItem::Text, IMenuItem::subMenu),
  85.      mni_system(&(sysmn), ID_MENU_TEXT4, "System Text Menu Added"),
  86.      mni_popup(ppumn, ID_POPUP_TEXT, "Popup Text Item added"),
  87.  
  88.      mni_bitmap(&(abmn), ID_MENU_BITMAP1,
  89.                 IResourceId(ID_BITMAP1), 
  90.                 IMenuItem::Bitmap),
  91.      mni_bitmap2(&(abmn), ID_MENU_BITMAP2,
  92.                  resmgr_exe.loadBitmap(ID_BITMAP2)),
  93.      mni_bitmap5(&(sysmn), ID_MENU_BITMAP5, 
  94.                  resmgr_exe.loadBitmap(ID_BITMAP5) ),
  95.  
  96.      mni_popup_bitmap(ppumn, ID_MENU_BITMAP1,
  97.                  resmgr_exe.loadBitmap(ID_BITMAP1)),
  98.  
  99.      psttxt(new IStaticText(ID_STTXT1,
  100.                             this, this,
  101.                             IRectangle(100,20,600,70)) ),
  102.  
  103.      pef(new IEntryField(ID_ENTRYFIELD,
  104.                          this, this, 
  105.                          IRectangle(20,100,400,120)) ),
  106.  
  107.      efpuHandler(),
  108.  
  109.      mni_AltABM(ppumn, ID_ACTION_ALT, "Switch to Alternate Action Bar Menu"),
  110.      mni_DefABM(ppumn, ID_ALT_ACTION_SET_DEF, "Switch to Default Action Bar Menu"),
  111.      defaultABMActive_(true)
  112.  
  113. {
  114.    imprintf("TestWindow Init list complete\n");
  115.  
  116.    // have to explicitly cast the this pointer because TestWindow has more than
  117.    // one IHandler base class.
  118.    addHandler((ICommandHandler *)this);
  119.  
  120.    pef -> setText(PSZ_MENU_TEXT2);
  121.    pef -> setAlignment(IEntryField::left);
  122.  
  123.    // add the PopUp Menu handler to the entry field
  124.    pef -> addHandler(&efpuHandler);
  125.    // WM_COMMAND msg's from entry field PopUp go to the big command handler
  126.    pef -> addHandler((ICommandHandler *)this);
  127.  
  128.    // no PM #defines needed
  129.    psttxt->setAlignment(IStaticText::topLeftWrapped);
  130.  
  131.  
  132.    addHandler((IMenuHandler *)this);
  133.  
  134.    imprintf("About to show() TestWindow from Cstor \n");
  135.    show();
  136.  
  137. }
  138.  
  139. /**************************************************************/
  140. /*                  Destructor                                */
  141. /**************************************************************/
  142. TestWindow :: ~TestWindow()
  143. {
  144.   if (psttxt) delete psttxt;
  145.   if (pef) delete pef;
  146.   if (ppumn) delete ppumn;
  147. }
  148.  
  149.  
  150. IPopUpMenu* TestWindow :: makePopUpMenu(const IMenuEvent& mnEvt)
  151. {
  152.   ppumn->show(mnEvt.mousePosition());
  153.   return ppumn;
  154. }
  155.  
  156. void TestWindow :: menuShowing(const IMenuEvent& mnEvt,
  157.                                ISubMenu* psmnAboutToShow)
  158. {
  159.  
  160.    switch (psmnAboutToShow->id()) {
  161.  
  162. case ID_POPUP:
  163.       psmnAboutToShow->addSeparator();
  164.       if (defaultABMActive()) {
  165.         psmnAboutToShow->addItem(mni_AltABM);
  166.         psmnAboutToShow->addItem(mni_popup);
  167.         psmnAboutToShow->disableItem(ID_TITLE_TEXT);
  168.       } else {
  169.         psmnAboutToShow->addItem(mni_DefABM);
  170.         psmnAboutToShow->addItem(mni_popup_bitmap);
  171.         psmnAboutToShow->checkItem(ID_TITLE_TEXT);
  172.       } /* endif */
  173.       break;
  174.  
  175.  
  176.    } /* endswitch */
  177. }
  178.  
  179. //----------------------------------------------------
  180. // Member Functions for the Entry Field PopUp
  181. //----------------------------------------------------
  182.  
  183. EFPopUpHandler :: EFPopUpHandler ()
  184. {
  185.    alignment = IEntryField::left;
  186. }
  187.  
  188. IPopUpMenu* EFPopUpHandler :: makePopUpMenu(const IMenuEvent& mnEvt)
  189. {
  190.   // This PopUpMenu is created on the heap.
  191.   // The IMenuHandler will delete when we're done with it.
  192.   // The true flag on IPopUpMenu constructor is stored in the object
  193.   // and used by the IMenuHandler to determine whether to delete
  194.   // the returned IPopUpMenu*.
  195.  
  196.   IPopUpMenu* ppumn = new IPopUpMenu(ID_EF_POPUP, 
  197.                                      (IWindow*)mnEvt.window(),
  198.                                      true);
  199.   ppumn->show(mnEvt.mousePosition());
  200.   return ppumn;
  201. }
  202.  
  203. void EFPopUpHandler :: menuShowing(const IMenuEvent& mnEvt,
  204.                                    ISubMenu* psmnAboutToShow)
  205. {
  206.    // Remove the alignment choice that matches the current state.
  207.    // ie. if text currently centered, then remove "Center" from
  208.    // the PopUp Menu.
  209.  
  210.    imprintf("addSeparator for EFPU\n");
  211.    psmnAboutToShow->addSeparator();
  212.  
  213.    switch (alignment) {
  214.  
  215.      case IEntryField::left:
  216.         psmnAboutToShow->checkItem(ID_LEFT_JUST);
  217.         break;
  218.  
  219.      case IEntryField::center:
  220.         psmnAboutToShow->checkItem(ID_CENTER);
  221.         break;
  222.  
  223.      case IEntryField::right:
  224.         psmnAboutToShow->checkItem(ID_RIGHT_JUST);
  225.         break;
  226.    } /* endswitch */
  227. }
  228.  
  229. void EFPopUpHandler :: menuSelected(const IMenuEvent& mnEvt)
  230. {
  231.  
  232.   // The following could have been done in the Command Handler,
  233.   // but doing it here just to test menuSelected()
  234.  
  235.   switch (mnEvt.menuItemId()) {
  236.  
  237.       case ID_LEFT_JUST:
  238.         alignment = IEntryField::left;
  239.         break;
  240.  
  241.       case ID_CENTER:
  242.         alignment = IEntryField::center;
  243.         break;
  244.  
  245.       case ID_RIGHT_JUST:
  246.         alignment = IEntryField::right;
  247.         break;
  248.    }
  249. }
  250.  
  251.  
  252. //-----------------------------------------------------
  253. // End of IEntryField PopUp functions
  254. //-----------------------------------------------------
  255.  
  256. /**************************************************************/
  257. /*               Command Event handler                        */
  258. /**************************************************************/
  259. Boolean TestWindow :: command(ICommandEvent& cmdevt)
  260. {
  261.  
  262.  
  263.   switch (cmdevt.commandId()) {
  264.  
  265.       // First 3 cases are for handling selections from the
  266.       // IEntryField PopUp Menu.
  267.       case ID_LEFT_JUST:
  268.         efpuHandler.alignment = IEntryField::left;
  269.         pef->setAlignment(IEntryField::left);
  270.         break;
  271.  
  272.       case ID_CENTER:
  273.         efpuHandler.alignment = IEntryField::center;
  274.         pef->setAlignment(IEntryField::center);
  275.         break;
  276.  
  277.       case ID_RIGHT_JUST:
  278.         efpuHandler.alignment = IEntryField::right;
  279.         pef->setAlignment(IEntryField::right);
  280.         break;
  281.  
  282.     case ID_MENU_TEXT1:
  283.       psttxt -> setText("add text item selected");
  284.       break;
  285.     case ID_MENU_TEXT2:
  286.       psttxt -> setText("Text item added to pulldown");
  287.       break;
  288.     case ID_MENU_TEXT3:
  289.       psttxt -> setText("Text item added to ActionBar");
  290.       break;
  291.     case ID_MENU_TEXT4:
  292.       psttxt -> setText("Text item added to SystmeMenu");
  293.       break;
  294.     case ID_MENU_BITMAP1:
  295.       psttxt->setText("bitmap TBDOC bitmap item is selected");
  296.       break;
  297.     case ID_MENU_BITMAP2:
  298.       psttxt->setText("bitmap PAYNOTE bitmap item is selected");
  299.       break;
  300.     case ID_MENU_BITMAP3:
  301.       psttxt->setText("bitmap TEMPLATE bitmap item is selected");
  302.       break;
  303.     case ID_MENU_BITMAP4:
  304.       psttxt->setText("bitmap TINBAS bitmap item is selected");
  305.       break;
  306.     case ID_MENU_BITMAP5:
  307.       psttxt->setText("bitmap TCSBFORM bitmap is selected");
  308.       break;
  309.     case ID_POPUP_TEXT:
  310.       psttxt -> setText("Text item added to PopUpMenu");
  311.       break;
  312.  
  313.     case ID_WIN_ICON_HR:                              // testing setIcon(usIconResId, resmgr)
  314. //      wndico.setIcon(ID_ICON2);   // matches IPointerHandle also!!!
  315.       break;
  316.     case ID_WIN_ICON_IN:                              // testing setIcon(HPOINTER)
  317. //      wndico.setIcon(hp_ic_inbasket);
  318.       break;
  319.     case ID_WIN_ICON_DOCMT:                           // testing icon()
  320. //      wndico.setIcon(ic_doc.icon());
  321.       break;
  322.     case ID_WIN_ICON_FOLDER:                          // testing IWindow(pappwndOwner, HPOINTER)
  323. //      IWindowIcon(this, ic_folder.icon());
  324.       break;
  325.  
  326.     case ID_TITLE_OBJ:                                // testing objectText()
  327.       psttxt -> setText(tle.objectText());
  328.       break;
  329.     case ID_TITLE_VIEW:                               // testing viewText()
  330.       psttxt -> setText(tle.viewText());
  331.       break;
  332.    case ID_TITLE_VIEW_NUM:                           // testing viewNum()
  333.       {
  334.       IString str("View Number is: ");
  335.       psttxt -> setText(str += IString(tle.viewNum()));
  336.       break;
  337.       }
  338.     case ID_TITLE_TEXT:                               // testing titleText()
  339.       psttxt -> setText(tle.text());
  340.       break;
  341.     case ID_TITLE_SET_OBJ2:                           // testing setObjectText(ulObjNameResId, resmgr)
  342.       tle.setObjectText(PSZ_TITLE_OBJ2);
  343.       break;
  344.     case ID_TITLE_SET_OBJ1:                           // testing setObjectText(pszObjName)
  345.       tle.setObjectText("1234567890123456789012345678901234567890");
  346.       break;
  347.     case ID_TITLE_SET_VIEW2:                          // testing setViewText(ulViewNameResId, resmgr)
  348.       tle.setViewText(PSZ_TITLE_VIEW2);
  349.       break;
  350.     case ID_TITLE_SET_VIEW1:                          // testing setViewText(pszViewName)
  351.       tle.setViewText("1234567890123456789012345678901234567890");
  352.       break;
  353.     case ID_TITLE_SET_VIEW_NUM2:                      // testing setViewNum(ulViewNum)
  354.       tle.setViewNum(2);
  355.       break;
  356.     case ID_TITLE_SET_VIEW_NUM1:
  357.       tle.setViewNum(1);
  358.       break;
  359.     case ID_TITLE_SET_TITLE2:                         // testing setTitleText(ulObjNameResId,
  360.                                                       //              ulViewNameResId,ulViewNum,resmgr)
  361.       tle.setTitleText(PSZ_TITLE_OBJ2, PSZ_TITLE_VIEW2, 2);
  362.       break;
  363.    case ID_TITLE_SET_TITLE1:                          // testing setTitleText(pszObjName,
  364.                                                       //                      pszViewName, ulViewNum)
  365.       tle.setTitleText("Test Program", "Icon, Title, Accelerator, Action Bar/PopUp/System Menu",1L);
  366.       break;
  367.    case ID_TITLE_CONSTRUCT:                           // testing ITitle(pappwndOwner, pszObjName,
  368.                                                       //                pszViewName, ulViewNum)
  369.       ITitle(this,"Menu Related Test Program","IBMCLASS 2.1", 32);
  370.       break;
  371.  
  372.  
  373.  
  374.     case ID_ACCEL_SET_SYS1:                           // testing setSystemAccel(haccel)
  375.       ac.unsetAccel();
  376.       break;
  377.    case ID_ACCEL_SET_SYS2:                            // testing setSystemAccel(ulAccelResId, resmgr)
  378.       ac.setAccel(ID_ALT_SYS_ACCEL1);     
  379.       break;
  380.    case ID_ACCEL_SET_SYS3:                            // testing IAccelerator(ulAccelResId, resmgr)
  381.       ac.setAccel(ID_ALT_SYS_ACCEL2);
  382.       break;
  383.    case ID_ACCEL_UNSET_SYS:                          // testing unsetSystemAccel()
  384.       ac.unsetAccel();
  385.       break;
  386.  
  387.     case ID_ACCEL_SET1:                               // testing setAccel(haccel) and accel()
  388.       ac_title.setAccel(ID_MENU_WITH_ACCEL_CTL);
  389.       break;
  390.     case ID_ACCEL_SET2:                         
  391.       ac_title.setAccel(ID_MENU_WITH_ACCEL);
  392.       break;
  393.     case ID_ACCEL_SET3:                          
  394.       ac_title.setAccel(ID_MENU_WITH_ACCEL_CTL_ALT);
  395.       break;
  396.     case ID_ACCEL_UNSET:                              // testing unsetAccel()
  397.                                           
  398.       ac_title.unsetAccel();
  399.       break;
  400.     case ID_ACCEL_REMOVE:                             // testing removeAccel()
  401.       ac_title.removeAccel();
  402.       break;
  403.     case ID_ACCEL_IS_SET:                             // testing isAccelSet()
  404.                                           
  405.       if (ac_title.isAccelSet()) {
  406.          DosBeep(1000,200);
  407.       } else {
  408.          DosBeep(200,200);
  409.       } /* endif */
  410.       break;
  411.  
  412.  
  413.  
  414.     case ID_ACTION_ADD_ITEM_STRING1:                  // testing addItem to pulldown menu
  415.       abmn.addItem(mni_text1, ID_ACTION_MENU);
  416.       break;
  417.     case ID_ACTION_ADD_ITEM_STRING2:
  418.       abmn.addItem(mni_text1, ID_WINDOW_ICON);
  419.       break;
  420.     case ID_ACTION_ADD_ITEM_STRING3:
  421.       abmn.addItem(mni_text1, ID_TITLE);
  422.       break;
  423.     case ID_ACTION_ADD_ITEM_STRING4:
  424.       abmn.addItem(mni_text1, ID_ACCELERATOR);
  425.       break;
  426.     case ID_ACTION_ADD_ITEM_STRING5:                  // testing addItem to ActionBarMenu
  427.       abmn.addItem(mni_text1);   
  428.       break;
  429.    case ID_ACTION_ADD_ITEM_BITMAP:
  430.       abmn.addItem(mni_bitmap, ID_ACTION_MENU);
  431.       break;
  432.     case ID_ACTION_ADD_SEP:                           // testing addSeparator
  433.       abmn.addSeparator(ID_SEPARATOR,ID_ACTION_MENU);
  434.       break;
  435.     case ID_ACTION_DELETE:                            // testing deleteItem(ulItemId)
  436.       abmn.deleteItem(ID_MENU_TEXT1);
  437.       break;
  438.     case ID_ACTION_IS_CHECKED:
  439.       if (abmn.isItemChecked(ID_MENU_TEXT1)) {
  440.          DosBeep(1000,200);
  441.       } else {
  442.          DosBeep(200,200);
  443.       } /* endif */
  444.       break;
  445.     case ID_ACTION_CHECK:
  446.       abmn.checkItem(ID_MENU_TEXT1);
  447.       break;
  448.     case ID_ACTION_UNCHECK:
  449.       abmn.uncheckItem(ID_MENU_TEXT1);
  450.       break;
  451.     case ID_ACTION_IS_DISABLED:
  452.       if (abmn.isItemDisabled(ID_MENU_TEXT1)) {
  453.          DosBeep(1000,200);
  454.       } else {
  455.          DosBeep(200,200);
  456.       } /* endif */
  457.       break;
  458.     case ID_ACTION_ENABLE:
  459.       abmn.enableItem(ID_MENU_TEXT1);
  460.       break;
  461.     case ID_ACTION_DISABLE:
  462.       abmn.disableItem(ID_MENU_TEXT1);
  463.       break;
  464.  
  465.  
  466.     case ID_POPUP_SHOW2:                              // testing show(IPoint)
  467.       ppumn->show(IPoint(400,400));
  468.       break;
  469.     case ID_POPUP_ID:                                 // testing id()
  470.     {
  471.       IString temp("ID of the popup is: ");
  472.       psttxt->setText(temp + IString(ppumn->id()) );
  473.       break;
  474.     }
  475.     case ID_POPUP_ADD_ITEM_STRING:
  476.       ppumn->addItem(mni_popup, ID_POPUP);
  477.       break;
  478.     case ID_POPUP_ADD_ITEM_BITMAP:
  479.       ppumn->addItem(mni_bitmap, ID_POPUP);
  480.       break;
  481.     case ID_POPUP_ADD_SEP:
  482.       ppumn->addSeparator(ID_SEPARATOR, ID_POPUP);
  483.       break;
  484.     case ID_POPUP_DELETE:
  485.       ppumn->deleteItem(ID_MENU_BITMAP1);
  486.       break;
  487.     case ID_POPUP_IS_CHECKED:
  488.       if (ppumn->isItemChecked(ID_POPUP_TEXT)) {
  489.          DosBeep(1000,200);
  490.       } else {
  491.          DosBeep(200,200);
  492.       } /* endif */
  493.       break;
  494.     case ID_POPUP_CHECK:
  495.       ppumn->checkItem(ID_POPUP_TEXT);
  496.       break;
  497.     case ID_POPUP_UNCHECK:
  498.       ppumn->uncheckItem(ID_POPUP_TEXT);
  499.       break;
  500.     case ID_POPUP_IS_DISABLED:
  501.       if (ppumn->isItemDisabled(ID_POPUP_TEXT)) {
  502.          DosBeep(1000,200);
  503.       } else {
  504.          DosBeep(200,200);
  505.       } /* endif */
  506.       break;
  507.     case ID_POPUP_ENABLE:
  508.       ppumn->enableItem(ID_POPUP_TEXT);
  509.       break;
  510.     case ID_POPUP_DISABLE:
  511.       ppumn->disableItem(ID_POPUP_TEXT);
  512.       break;
  513.  
  514.  
  515.     case ID_SYSTEM_ADD_ITEM_STRING:
  516.       sysmn.addItem(mni_system);
  517.       break;
  518.     case ID_SYSTEM_ADD_ITEM_BITMAP:
  519.       {
  520.       sysmn.addItem(mni_bitmap5);
  521.       break;
  522.       }
  523.     case ID_SYSTEM_ADD_SEP:
  524.       sysmn.addSeparator(ID_SEPARATOR);
  525.       break;
  526.     case ID_SYSTEM_DELETE:
  527.       sysmn.deleteItem(ID_MENU_BITMAP5);
  528.       break;
  529.     case ID_SYSTEM_IS_CHECKED:
  530.       if (sysmn.isItemChecked(ID_MENU_TEXT4)) {
  531.          DosBeep(1000,200);
  532.       } else {
  533.          DosBeep(200,200);
  534.       } /* endif */
  535.       break;
  536.     case ID_SYSTEM_CHECK:
  537.       break;
  538.     case ID_SYSTEM_UNCHECK:
  539.       sysmn.uncheckItem(ID_MENU_TEXT4);
  540.       break;
  541.     case ID_SYSTEM_IS_DISABLED:
  542.       if (sysmn.isItemDisabled(ID_MENU_TEXT4)) {
  543.          DosBeep(1000,200);
  544.       } else {
  545.          DosBeep(200,200);
  546.       } /* endif */
  547.       break;
  548.     case ID_SYSTEM_ENABLE:
  549.       sysmn.enableItem(ID_MENU_TEXT4);
  550.       break;
  551.     case ID_SYSTEM_DISABLE:
  552.       sysmn.disableItem(ID_MENU_TEXT4);
  553.       break;
  554.  
  555.     case ID_ACTION_ALT:
  556.       abmn.setMenu(ID_MENU2);
  557.       defaultABMActive_ = false;
  558.       break;
  559.  
  560.     case ID_ALT_STRING_PULL_ADD:                         // testing IMenuItem constructor
  561.       abmn.addItem(mni_text2,ID_ALT_STRING);
  562.       break;
  563.    case ID_ALT_STRING_PULL_REMOVE:
  564.       abmn.deleteItem(ID_MENU_TEXT2);
  565.       break;
  566.     case ID_ALT_STRING_PULL_TEXT:
  567.       psttxt->setText(mni_text2.text());
  568.       break;
  569.     case ID_ALT_STRING_PULL_SET_TEXT1:
  570.       mni_text2.setText("PullDown text is changed");
  571.       break;
  572.     case ID_ALT_STRING_PULL_SET_TEXT2:
  573.       mni_text2.setText(PSZ_MENU_TEXT2);
  574.       break;
  575.     case ID_ALT_STRING_PULL_FRAME:                       // testing setAttribute()
  576.       mni_text2.setFramed();
  577.       break;
  578.     case ID_ALT_STRING_PULL_UNFRAME:
  579.       mni_text2.setFramed(false);
  580.       break;
  581.     case ID_ALT_STRING_PULL_STYLE1:
  582.       mni_text2.setLayout(IMenuItem::breakSeparator);
  583.       break;
  584.     case ID_ALT_STRING_PULL_STYLE2:
  585.       mni_text2.setLayout(IMenuItem::normalLayout);
  586.       break;
  587.                       
  588.     case ID_ALT_STRING_AB_ADD:
  589.       abmn.addItem(mni_text3);
  590.       break;
  591.    case ID_ALT_STRING_AB_REMOVE:
  592.       abmn.deleteItem(ID_MENU_TEXT3);
  593.       break;
  594.     case ID_ALT_STRING_AB_TEXT:
  595.       psttxt->setText(mni_text3.text());
  596.       break;
  597.     case ID_ALT_STRING_AB_SET_TEXT1:
  598.       mni_text3.setText("ActionBar text is changed");
  599.       break;
  600.     case ID_ALT_STRING_AB_SET_TEXT2:
  601.       mni_text3.setText(PSZ_MENU_TEXT3);
  602.       break;
  603.  
  604.     case ID_ALT_BITMAP_ADD_PULLDOWN:
  605.       abmn.addItem(mni_bitmap2, ID_ALT_BITMAP);
  606.       break;
  607.     case ID_ALT_BITMAP_REMOVE_PULLDOWN:
  608. // had been a removeItem()
  609.       abmn.deleteItem(ID_MENU_BITMAP2);
  610.       break;
  611.     case ID_ALT_BITMAP_PULL_SETBITMAP1:
  612.       mni_bitmap2.setBitMap(ID_BITMAP4);
  613.       break;
  614.     case ID_ALT_BITMAP_PULL_SETBITMAP2:
  615.       mni_bitmap2.setBitMap(mni_bitmap2.bitMap());
  616.       break;
  617.  
  618.     case ID_ALT_BITMAP_SET_ATTRIB1:
  619.       mni_bitmap2.setFramed();
  620.       break;
  621.     case ID_ALT_BITMAP_SET_ATTRIB2:
  622.       mni_bitmap2.setFramed(false);
  623.       break;
  624.  
  625.     case ID_ALT_BITMAP_SET_STYLE1:
  626.       mni_bitmap2.setLayout(IMenuItem::breakSeparator);
  627.       break;
  628.     case ID_ALT_BITMAP_SET_STYLE2:
  629.       mni_bitmap2.setLayout(IMenuItem::normalLayout);
  630.       break;
  631.  
  632.     case ID_ALT_BITMAP_ADD_ACTION:
  633.     {
  634.       // This bitmap persists because it uses resmgr_exe
  635.       IMenuItem mni_bitmap3=IMenuItem(&(abmn), 
  636.                                       ID_MENU_BITMAP3,
  637.                                       resmgr_exe.loadBitmap(ID_BITMAP3) );
  638.       abmn.addItem(mni_bitmap3);
  639.       break;
  640.     }
  641.     case ID_ALT_BITMAP_REMOVE_ACTION:
  642.       abmn.deleteItem(ID_MENU_BITMAP3);
  643.       break;
  644.  
  645.     case ID_ALT_ACTION_SET_DEF:
  646.       abmn.setMenu(ID_MENU);
  647.       defaultABMActive_ = true;
  648.       break;
  649.    default: 
  650.       return false;
  651.       break;
  652.  
  653.   } /* endswitch */
  654.  
  655.   return true;
  656. }
  657.  
  658.  
  659.