home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / MACtive Desktop / Source / Sources / BaseEventManager.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-15  |  4.6 KB  |  289 lines  |  [TEXT/CWIE]

  1. #include <Dialogs.h>
  2. #include "AppleEvent.h"
  3. #include "LayerManager.h"
  4. #include "MenuManager.h"
  5. #include "Window.h"
  6. #include "WindowManager.h"
  7. #include "BaseEventManager.h"
  8.  
  9.  
  10.  
  11.  
  12.  
  13. extern MenuManager            *gMenuManager;
  14. extern WindowManager        *gWindowManager;
  15.  
  16.  
  17.  
  18.  
  19.  
  20. void BaseEventManager::DoDispatch(EventRecord *event,Boolean isSystemWindow)
  21. {
  22.     if ((event->what != nullEvent) && (event->what != osEvt) && IsDialogEvent(event) &&
  23.         !((event->what == keyDown) && (event->modifiers & cmdKey)))
  24.     {
  25.         HandleDialogEventDispatch(event);
  26.     }
  27.     else
  28.     {
  29.         switch(event->what)
  30.         {
  31.             case nullEvent:
  32.                 HandleNullEventDispatch(event);
  33.                 break;
  34.             
  35.             case mouseDown:
  36.                 HandleMouseDownDispatch(event,isSystemWindow);
  37.                 break;
  38.             
  39.             case mouseUp:
  40.                 HandleMouseUpDispatch(event);
  41.                 break;
  42.             
  43.             case keyDown:
  44.                 HandleKeyDownDispatch(event);
  45.                 break;
  46.             
  47.             case keyUp:
  48.                 HandleKeyUpDispatch(event);
  49.                 break;
  50.             
  51.             case autoKey:
  52.                 HandleAutoKeyDispatch(event);
  53.                 break;
  54.             
  55.             case updateEvt:
  56.                 HandleUpdateEvtDispatch(event);
  57.                 break;
  58.             
  59.             case activateEvt:
  60.                 HandleActivateEvtDispatch(event);
  61.                 break;
  62.             
  63.             case osEvt:
  64.                 HandleOSEvtDispatch(event);
  65.                 break;
  66.             
  67.             case kHighLevelEvent:
  68.                 HandleHighLevelEventDispatch(event);
  69.                 break;
  70.         }
  71.     }
  72. }
  73.  
  74.  
  75.  
  76.  
  77.  
  78. void BaseEventManager::HandleNullEventDispatch(EventRecord *event)
  79. {
  80.     gWindowManager->DoIdleTime(event,event->where,event->modifiers);
  81.     gMenuManager->DoMenuUpdates();
  82. }
  83.  
  84.  
  85.  
  86.  
  87.  
  88. void BaseEventManager::HandleMouseDownDispatch(EventRecord *event,Boolean isSystemWindow)
  89. {
  90.     WindowPtr    window;
  91.     SInt32        part;
  92.     Window        *win;
  93.     
  94.     
  95.     part = isSystemWindow ? FindSystemWindow(event->where,&window) : FindWindow(event->where,&window);
  96.     switch(part)
  97.     {
  98.         case inDesk:
  99.             break;
  100.         
  101.         case inMenuBar:
  102.             HandleInMenuBarDispatch(event);
  103.             break;
  104.         
  105.         case inSysWindow:
  106.             SystemClick(event,window);
  107.             break;
  108.         
  109.         case inContent:
  110.         case inDrag:
  111.         case inGrow:
  112.         case inGoAway:
  113.         case inZoomIn:
  114.         case inZoomOut:
  115.             gWindowManager->DoClick(event->where,event->modifiers,window,part);
  116.             break;
  117.     }
  118. }
  119.  
  120.  
  121.  
  122.  
  123.  
  124. void BaseEventManager::HandleMouseUpDispatch(EventRecord *event)
  125. {
  126.     
  127. }
  128.  
  129.  
  130.  
  131.  
  132.  
  133. void BaseEventManager::HandleKeyDownDispatch(EventRecord *event)
  134. {
  135.     UInt32    selection;
  136.     UInt32    key;
  137.     Window    *win;
  138.     
  139.     
  140.     key = charCodeMask & event->message;
  141.     
  142.     // Resolve menu item command keys
  143.     if (event->modifiers & cmdKey)
  144.     {
  145.         gMenuManager->DoMenuUpdates();
  146.         selection = MenuKey(key);
  147.         if ((selection >> 16) != 0)
  148.         {
  149.             gMenuManager->DoSelect((selection >> 16),(selection & 0xFFFF));
  150.             return;
  151.         }
  152.     }
  153.     
  154.     // Give it the most eligible window
  155.     if (NULL != (win = gWindowManager->DoGetFrontWindow()))
  156.         win->DoKey(key,event->modifiers);
  157. }
  158.  
  159.  
  160.  
  161.  
  162.  
  163. void BaseEventManager::HandleKeyUpDispatch(EventRecord *event)
  164. {
  165.     
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172. void BaseEventManager::HandleAutoKeyDispatch(EventRecord *event)
  173. {
  174.     HandleKeyDownDispatch(event);
  175. }
  176.  
  177.  
  178.  
  179.  
  180.  
  181. void BaseEventManager::HandleUpdateEvtDispatch(EventRecord *event)
  182. {
  183.     WindowPtr    window;
  184.     Window        *win;
  185.     
  186.     
  187.     window = (WindowPtr)event->message;
  188.     win = gWindowManager->DoGetWindow(window);
  189.     if (win != NULL)
  190.         win->DoUpdate();
  191. }
  192.  
  193.  
  194.  
  195.  
  196.  
  197. void BaseEventManager::HandleActivateEvtDispatch(EventRecord *event)
  198. {
  199.     WindowPtr    window;
  200.     
  201.     
  202.     window = (WindowPtr)event->message;
  203.     gWindowManager->DoActivation(window,event->modifiers & activeFlag);
  204.     gMenuManager->DoMenuUpdates();
  205. }
  206.  
  207.  
  208.  
  209.  
  210.  
  211. void BaseEventManager::HandleOSEvtDispatch(EventRecord *event)
  212. {
  213.     // Is this a suspend/resume event?
  214.     if ((event->message & 0xFF000000) == 0x01000000)
  215.     {
  216.         gWindowManager->DoSuspendResume(event,!(event->message & 1));
  217.         gMenuManager->DoMenuUpdates();
  218.     }
  219. }
  220.  
  221.  
  222.  
  223.  
  224.  
  225. void BaseEventManager::HandleHighLevelEventDispatch(EventRecord *event)
  226. {
  227.     ProcessAppleEvent(event);
  228. }
  229.  
  230.  
  231.  
  232.  
  233.  
  234. void BaseEventManager::HandleDialogEventDispatch(EventRecord *event)
  235. {
  236.     WindowPtr    window;
  237.     DialogPtr    dialog;
  238.     short        item;
  239.     Window        *win;
  240.     
  241.     
  242.     win = NULL;
  243.     switch(event->what)
  244.     {
  245.         case mouseDown:
  246.         case mouseUp:
  247.             FindWindow(event->where,&window);
  248.             win = gWindowManager->DoGetWindow(window);
  249.             break;
  250.         
  251.         case keyDown:
  252.         case keyUp:
  253.         case autoKey:
  254.             win = gWindowManager->DoGetFrontWindow();
  255.             break;
  256.         
  257.         case updateEvt:
  258.             window = (WindowPtr)event->message;
  259.             win = gWindowManager->DoGetWindow(window);
  260.             break;
  261.             
  262.         case activateEvt:
  263.             window = (WindowPtr)event->message;
  264.             win = gWindowManager->DoGetWindow(window);
  265.             HandleActivateEvtDispatch(event);
  266.             break;
  267.     }
  268.     
  269.     if (win)
  270.         win->DoDialogEvent(event);
  271.     else
  272.         DialogSelect(event,&dialog,&item);
  273. }
  274.  
  275.  
  276.  
  277.  
  278.  
  279. void BaseEventManager::HandleInMenuBarDispatch(EventRecord *event)
  280. {
  281.     UInt32    selection;
  282.     
  283.     
  284.     gMenuManager->DoMenuUpdates();
  285.     selection = MenuSelect(event->where);
  286.     if ((selection >> 16) != 0)
  287.         gMenuManager->DoSelect((selection >> 16),(selection & 0xFFFF));
  288. }
  289.