home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / program / code / stubshack / HeapGraph / !HeapDisp / c / AppMenu < prev    next >
Encoding:
Text File  |  1994-08-29  |  2.6 KB  |  122 lines

  1. #include "DeskLib:Menu.h"
  2. #include "DeskLib:WimpSWIs.h"
  3. #include "DeskLib:Kbd.h"
  4.  
  5. #include "Shell.SafeAlloc.h"
  6.  
  7. #include "ChHeapSize.h"
  8. #include "AppMenu.h"
  9. #include "AddStep.h"
  10.  
  11.  
  12.  
  13.  
  14. #define Menu_FirstEntry(menu) ((menu_item *) (((menu_ptr) (menu) + 1)))
  15.  
  16. static    menu_ptr    m = 0;
  17.  
  18. #define menu_BYTESPEROS    0
  19.  
  20. static void    ClaimHandlers( void *reference);
  21. static void    ReleaseHandlers( void *reference);
  22.  
  23.  
  24.  
  25.  
  26.  
  27. static menu_ptr    MakeMenu( void)
  28. {
  29. menu_ptr    m = Menu_New( "Application", "Bytes per os pixel");
  30. menu_ptr    m2= Menu_New( "Bytes", "0");
  31. Menu_MakeWritable( m2, 0, Shell_SafeCalloc( 1, 8), 8, "");
  32. Menu_AddSubMenu( m, menu_BYTESPEROS, m2);
  33. return m;
  34. }
  35.  
  36.  
  37.  
  38. static BOOL    MenuCancelHandler( event_pollblock *event, void *reference)
  39. {
  40. if ( event->data.message.header.action == message_MENUSDELETED)    ReleaseHandlers( reference);
  41. return FALSE;
  42. }
  43.  
  44.  
  45. static BOOL    MenuHandler( event_pollblock *event, void *reference)
  46. {
  47. mouse_block    mouse;
  48. app_block    *app    = (app_block *) reference;
  49.  
  50. Wimp_GetPointerInfo( &mouse);
  51.  
  52. if ( event->data.selection[0] == menu_BYTESPEROS && event->data.selection[1]==0)    {
  53.     int        new;
  54.     menu_block    *submenu= Menu_FirstEntry(m)[ menu_BYTESPEROS].submenu.menu;
  55.     char        *text    = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
  56.     sscanf( text, "%i", &new);
  57.     if ( new>0)    {
  58.         app->words_per_os = new;
  59.         GetBestAddressStep( app);
  60.         RescaleHeap( app);
  61.         }
  62.     }
  63.  
  64.  
  65. if ( !mouse.button.data.adjust)    Wimp_GetPointerInfo( &mouse);
  66.     /* Give two chances to hold down adjust...    */
  67.  
  68. if ( mouse.button.data.adjust)    {
  69.     mouse.pos.x = mouse.pos.y = 0;
  70.     Menu_ShowLast();
  71.     }
  72.  
  73. else    ReleaseHandlers( reference);
  74.  
  75.  
  76. return TRUE;
  77. }
  78.  
  79.  
  80.  
  81.  
  82. BOOL    AppWindowClickHandler( event_pollblock *event, void *reference)
  83. {
  84. app_block    *app    = (app_block *) reference;
  85. if ( !Kbd_KeyDown( inkey_SHIFT) && event->data.mouse.button.data.menu)    {
  86.  
  87.     if ( m==0)    m = MakeMenu();
  88.  
  89.         /* Put present value into the submenu.    */
  90.         {
  91.         menu_block    *submenu= Menu_FirstEntry(m)[ menu_BYTESPEROS].submenu.menu;
  92.         char    *text    = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
  93.         sprintf( text, "%i", app->words_per_os);
  94.         }
  95.  
  96.     Menu_Show( m, event->data.mouse.pos.x, event->data.mouse.pos.y);
  97.     ClaimHandlers( reference);
  98.     return TRUE;
  99.     }
  100.  
  101. else return FALSE;
  102. }
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. static void ClaimHandlers( void *reference)
  110. {
  111. Event_Claim( event_MENU, event_ANY, event_ANY, MenuHandler, reference);
  112. Event_Claim( event_USERMESSAGE, event_ANY, event_ANY, MenuCancelHandler, reference);
  113. }
  114.  
  115. static void ReleaseHandlers( void *reference)
  116. {
  117. Event_Release( event_MENU, event_ANY, event_ANY, MenuHandler, reference);
  118. Event_Release( event_USERMESSAGE, event_ANY, event_ANY, MenuCancelHandler, reference);
  119. }
  120.  
  121.  
  122.