home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / fli106c / winalter.cpp < prev    next >
C/C++ Source or Header  |  1992-03-11  |  6KB  |  257 lines

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.06c
  4. // Copyright (C) 1990, 1991, 1992
  5. // Software Dimensions
  6. //
  7. // MenuAlteration --> MenuControl --> MenuItems --> FusionWindow
  8. //
  9.  
  10. #include "fliwin.h"
  11. #include "colors.h"
  12.  
  13. #ifdef __BCPLUSPLUS__
  14. #pragma hdrstop
  15. #endif
  16.  
  17. #include <alloc.h>
  18. #include <string.h>
  19. #include <mem.h>
  20.  
  21. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  22. //
  23. // SetMenus()
  24. //
  25. // Resets the menu bar and redraws it
  26. //
  27. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  28.  
  29. void MenuAlteration::SetMenus()
  30. {
  31.   RemoveAllMenus();
  32.   SetMenuBar(SetX,SetY,StowedWidth,0);
  33. }
  34.  
  35. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  36. //
  37. // DeleteLastMenu()
  38. //
  39. // Removes Last Added Menu
  40. //
  41. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  42.  
  43. void MenuAlteration::DeleteLastMenu()
  44. {
  45.   RemoveAllMenus();
  46.  
  47.   if (!NumberOfMenus)
  48.     return;
  49.  
  50.   delete Menus[(NumberOfMenus--)-1];
  51. }
  52.  
  53. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  54. //
  55. // DeleteAllMenus()
  56. //
  57. // Removes *ALL* Menus
  58. //
  59. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  60.  
  61. void MenuAlteration::DeleteAllMenus()
  62. {
  63.   RemoveAllMenus();
  64.  
  65.   if (!NumberOfMenus)
  66.     return;
  67.  
  68.   for (int i=0;i<NumberOfMenus;i++)
  69.     delete Menus[i];
  70.  
  71.   free(Menus);
  72.  
  73.   Menus=0;
  74.   SubMenuTrack=0;
  75. }
  76.  
  77. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  78. //
  79. // DeleteMenu()
  80. //
  81. // Removes a particular menu that has Event as its event code
  82. //
  83. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  84.  
  85. void MenuAlteration::DeleteMenu(int Event)
  86. {
  87.   RemoveAllMenus();
  88.  
  89.   if (!NumberOfMenus)
  90.     return;
  91.  
  92.   for (int i=0;i<NumberOfMenus;i++)
  93.   {
  94.     if (Menus[i]->MenuEvent==Event)
  95.     {
  96.       if (NumberOfMenus==1)
  97.         DeleteAllMenus();
  98.       else
  99.       {
  100.         delete Menus[i];
  101.         if (i==NumberOfMenus-1)
  102.           NumberOfMenus--;
  103.         else
  104.           movmem(Menus[i+1],Menus[i],(NumberOfMenus-i)-1);
  105.       }
  106.       break;
  107.     }
  108.   }
  109. }
  110.  
  111. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  112. //
  113. // GrabThis()
  114. //
  115. // Scan menu for an event code
  116. //
  117. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  118.  
  119. MenuItems *MenuAlteration::GrabThis(int Event,MenuItems *Scan)
  120. {
  121.   for (int i=0;i<Scan->NumberOfOptions;i++)
  122.   {
  123.     _Options &Option=*(Scan->Option+i);
  124.  
  125.     if (Event==Option.Event)
  126.       return Scan;
  127.   }
  128.  
  129.   for (i=0;i<Scan->NumberOfOptions;i++)
  130.   {
  131.     _Options &Option=*(Scan->Option+i);
  132.  
  133.     if (Option.SubMenu)
  134.     {
  135.       if (!*Option.Available || !Option.Option)
  136.         continue;
  137.  
  138.       MenuItems *Save=GrabThis(Event,Option.SubMenu);
  139.  
  140.       if (Save)
  141.         return Save;
  142.     }
  143.   }
  144.  
  145.   return 0;
  146. }
  147.  
  148. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  149. //
  150. // DeleteOption()
  151. //
  152. // Removes a particular option that has Event as its event code
  153. //
  154. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  155.  
  156. void MenuAlteration::DeleteOption(int Event)
  157. {
  158.   RemoveAllMenus();
  159.  
  160.   if (!NumberOfMenus)
  161.     return;
  162.  
  163.   for (int j=0;j<NumberOfMenus;j++)
  164.   {
  165.     MenuItems *GrabIt=GrabThis(Event,Menus[j]);
  166.  
  167.     if (GrabIt)
  168.     {
  169.       for (int i=0;i<GrabIt->NumberOfOptions;i++)
  170.       {
  171.         if ((GrabIt->Option+i)->Event==Event)
  172.         {
  173.           if ((GrabIt->Option+i)->SubMenu)
  174.           {
  175.             delete (GrabIt->Option+i)->SubMenu;
  176.             GrabIt->SubMenus--;
  177.           }
  178.           if (GrabIt->NumberOfOptions==1)
  179.           {
  180.             free(GrabIt->Option);
  181.             GrabIt->Option=0;
  182.             GrabIt->NumberOfOptions=0;
  183.           }
  184.           else if (GrabIt->NumberOfOptions-1==i)
  185.           {
  186.             if ((GrabIt->Option+i)->Selectables)
  187.             {
  188.               delete (GrabIt->Option+i)->Selectables;
  189.               GrabIt->Selectables--;
  190.             }
  191.             if ((GrabIt->Option+i)->Checked)
  192.               GrabIt->Checkables--;
  193.             GrabIt->NumberOfOptions--;
  194.           }
  195.           else
  196.           {
  197.             if ((GrabIt->Option+i)->Selectables)
  198.             {
  199.               delete (GrabIt->Option+i)->Selectables;
  200.               GrabIt->Selectables--;
  201.             }
  202.             if ((GrabIt->Option+i)->Checked)
  203.               GrabIt->Checkables--;
  204.             movmem((GrabIt->Option+i+1),(GrabIt->Option+i),
  205.               sizeof(_Options)*((GrabIt->NumberOfOptions-i)-1));
  206.             GrabIt->NumberOfOptions--;
  207.           }
  208.           return;
  209.         }
  210.       }
  211.       return;
  212.     }
  213.   }
  214. }
  215.  
  216. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  217. //
  218. // ChangeOption()
  219. //
  220. // Changes a particular option to a new format
  221. //
  222. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  223.  
  224. void MenuAlteration::ChangeOption(int Event,char *NewTitle,char *NewHelp,
  225.   int NewEventCode,char *NewHotKey,int NewKeyCode)
  226. {
  227.   RemoveAllMenus();
  228.  
  229.   if (!NumberOfMenus)
  230.     return;
  231.  
  232.   for (int j=0;j<NumberOfMenus;j++)
  233.   {
  234.     MenuItems *GrabIt=GrabThis(Event,Menus[j]);
  235.  
  236.     if (GrabIt)
  237.     {
  238.       for (int i=0;i<GrabIt->NumberOfOptions;i++)
  239.       {
  240.         if ((GrabIt->Option+i)->Event==Event)
  241.         {
  242.           _Options &Option=*(GrabIt->Option+i);
  243.  
  244.           Option.Help=NewHelp;
  245.           Option.Option=NewTitle;
  246.           Option.Event=NewEventCode;
  247.           Option.HotKey=NewKeyCode;
  248.           Option.HotKeyOption=NewHotKey;
  249.           return;
  250.         }
  251.       }
  252.       return;
  253.     }
  254.   }
  255. }
  256.  
  257.