home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 14 / CDACTUAL.iso / cdactual / demobin / share / program / c / ZINC.ZIP / D_EVENT.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-23  |  6.7 KB  |  219 lines

  1. //    Program name..    Zinc Interface Library
  2. //    Filename......    D_EVENT.CPP
  3. //    
  4. //    COPYRIGHT (C) 1990.  All Rights Reserved.
  5. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  6.  
  7. #include <dos.h>
  8. #include <time.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <ui_win.hpp>
  12. #include "d_demo.hpp"
  13. #include "d_help.hlh"
  14.  
  15. #pragma argsused
  16. void EventKeyboard(void *data, UI_EVENT &event)
  17. {
  18.     // Check the state of the input devices.
  19.     UIW_POP_UP_ITEM *item = (UIW_POP_UP_ITEM *)data;
  20.     int kState = item->eventManager->DeviceState(E_KEY, D_STATE);
  21.     int mState = item->eventManager->DeviceState(E_MOUSE, D_STATE);
  22.  
  23.     // Change the state of the keyboard device.
  24.     if (mState == D_OFF && kState == D_ON)
  25.         return;
  26.     kState = (kState == D_ON) ? D_OFF : D_ON;
  27.     item->eventManager->DeviceState(E_KEY, kState);
  28.     kState = item->eventManager->DeviceState(E_KEY, D_STATE);
  29.     if (kState == D_ON)
  30.         item->DataSet(" ~Keyboard (Off/On) : ON");
  31.     else
  32.         item->DataSet(" ~Keyboard (Off/On) : OFF");
  33. }
  34.  
  35. #pragma argsused
  36. void EventMouse(void *data, UI_EVENT &event)
  37. {
  38.     // Check the state of the input devices.
  39.     UIW_POP_UP_ITEM *item = (UIW_POP_UP_ITEM *)data;
  40.     int kState = item->eventManager->DeviceState(E_KEY, D_STATE);
  41.     int mState = item->eventManager->DeviceState(E_MOUSE, D_STATE);
  42.  
  43.     // Change the state of the mouse device.
  44.     if (kState == D_OFF && mState == D_ON)
  45.         return;
  46.     mState = (mState == D_ON) ? D_OFF : D_ON;
  47.     item->eventManager->DeviceState(E_MOUSE, mState);
  48.     mState = item->eventManager->DeviceState(E_MOUSE, D_STATE);
  49.     if (mState == D_ON)
  50.         item->DataSet(" ~Mouse    (Off/On) : ON");
  51.     else
  52.         item->DataSet(" ~Mouse    (Off/On) : OFF");
  53. }
  54.  
  55. #pragma argsused
  56. void EventMonitor(void *item, UI_EVENT &event)
  57. {
  58.     EVENT_MONITOR *eventMonitor = new EVENT_MONITOR;
  59.     if (!eventMonitor->installed)
  60.         delete eventMonitor;
  61. }
  62.  
  63. // ----- Event Monitor class definition -------------------------------------
  64.  
  65. int EVENT_MONITOR::active = FALSE;
  66.  
  67. EVENT_MONITOR::EVENT_MONITOR(void) :
  68.     UI_DEVICE(E_EVENT_MONITOR, D_ON),
  69.     UIW_WINDOW(-31, 1, 32, 8, WOF_NO_FLAGS, WOAF_NO_SIZE, NO_HELP_CONTEXT),
  70.     installed(FALSE)
  71. {
  72.     if (active)
  73.         return;
  74.  
  75.     active = TRUE;
  76.     installed = TRUE;
  77.     oldTime = lastTime = time(0);
  78.     kEvent.type = mEvent.type = sEvent.type = 0;
  79.     kEvent.rawCode = mEvent.rawCode = sEvent.rawCode = 0xFFFF;
  80.     keyboard[0] = new UIW_STRING(16, 1, 4, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  81.     keyboard[1] = new UIW_STRING(21, 1, 2, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  82.     keyboard[2] = new UIW_STRING(25, 1, 1, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  83.     mouse[0] = new UIW_STRING(16, 2, 4, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  84.     mouse[1] = new UIW_STRING(21, 2, 3, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  85.     mouse[2] = new UIW_STRING(25, 2, 3, "", 10, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  86.     system = new UIW_STRING(16, 3, 15, "", 20, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  87.     elapsedTime = new UIW_STRING(16, 4, 15, "", 20, STF_NO_FLAGS, WOF_VIEW_ONLY, 0);
  88.  
  89.     window = this;
  90.     *window
  91.         + new UIW_BORDER
  92.         + new UIW_MAXIMIZE_BUTTON
  93.         + new UIW_MINIMIZE_BUTTON
  94.         + &(*new UIW_SYSTEM_BUTTON
  95.             + new UIW_POP_UP_ITEM("~Move", MNIF_MOVE, BTF_NO_TOGGLE, WOF_NO_FLAGS, 0)
  96.             + new UIW_POP_UP_ITEM
  97.             + new UIW_POP_UP_ITEM("~Close", MNIF_CLOSE, BTF_NO_TOGGLE, WOF_NO_FLAGS, 0))
  98.         + new UIW_TITLE("Event monitor", WOF_JUSTIFY_CENTER)
  99.         + new UIW_PROMPT(1, 1, "Last key......", WOF_NO_FLAGS)
  100.         + keyboard[0] + keyboard[1] + keyboard[2]
  101.         + new UIW_PROMPT(1, 2, "Last mouse....", WOF_NO_FLAGS)
  102.         + mouse[0] + mouse[1] + mouse[2]
  103.         + new UIW_PROMPT(1, 3, "Last event....", WOF_NO_FLAGS)
  104.         + system
  105.         + new UIW_PROMPT(1, 4, "Elapsed time..", WOF_NO_FLAGS)
  106.         + elapsedTime;
  107.     *_windowManager + window;
  108.  
  109.     device = this;
  110.     *_eventManager + device;
  111. }
  112.  
  113. EVENT_MONITOR::~EVENT_MONITOR(void)
  114. {
  115.     if (!installed)
  116.         return;
  117.  
  118.     // The object is automatically removed from the window manager.
  119.     *_eventManager - device;
  120.     active = FALSE;
  121. }
  122.  
  123. int EVENT_MONITOR::Event(const UI_EVENT &event)
  124. {
  125.     // Process the event according to the event type.
  126.     if (event.type == E_EVENT_MONITOR || event.type == E_DEVICE)
  127.         return (state);
  128.     UIW_WINDOW::Event(event);
  129. }
  130.  
  131. void EVENT_MONITOR::Poll(void)
  132. {
  133.     char string[32];
  134.     long currentTime = time(0);
  135.     if (currentTime != lastTime)
  136.     {
  137.         sprintf(string, "%ld", currentTime - oldTime);
  138.         elapsedTime->DataSet(string);
  139.         lastTime = currentTime;
  140.     }
  141.  
  142.     UI_EVENT event;
  143.     event.type = 0;
  144.     _eventManager->Get(event, Q_BEGIN | Q_NO_BLOCK | Q_NO_DESTROY | Q_NO_POLL);
  145.     if (event.type == 0)
  146.         return;
  147.     else if (event.type == E_KEY)
  148.     {
  149.         if (kEvent.rawCode != event.rawCode)
  150.         {
  151.             sprintf(string, "%04x", event.rawCode);
  152.             keyboard[0]->DataSet(string);
  153.         }
  154.         if (kEvent.key.shiftState != event.key.shiftState)
  155.         {
  156.             sprintf(string, "%02x", event.key.shiftState);
  157.             keyboard[1]->DataSet(string);
  158.         }
  159.         if (kEvent.key.value != event.key.value)
  160.         {
  161.             sprintf(string, "%c", event.key.value);
  162.             keyboard[2]->DataSet(string);
  163.         }
  164.         kEvent = event;
  165.     }
  166.     else if (event.type == E_MOUSE)
  167.     {
  168.         if (mEvent.rawCode != event.rawCode)
  169.         {
  170.             sprintf(string, "%04x", event.rawCode);
  171.             mouse[0]->DataSet(string);
  172.         }
  173.         if (mEvent.position.column != event.position.column)
  174.         {
  175.             sprintf(string, "%03d", event.position.column);
  176.             mouse[1]->DataSet(string);
  177.         }
  178.         if (mEvent.position.line != event.position.line)
  179.         {
  180.             sprintf(string, "%03d", event.position.line);
  181.             mouse[2]->DataSet(string);
  182.         }
  183.         mEvent = event;
  184.     }
  185.     if (sEvent.type != event.type)
  186.     {
  187.         char *typeName;
  188.         switch (event.type)
  189.         {
  190.         case E_KEY: typeName = "Key"; break;
  191.         case E_MOUSE: typeName = "Mouse"; break;
  192.         case E_CURSOR: typeName = "Cursor"; break;
  193.         case E_DEVICE: typeName = "Device"; break;
  194.  
  195.         case S_ERROR: typeName = "Error"; break;
  196.         case S_NO_OBJECT: typeName = "No object"; break;
  197.         case S_MINIMIZE: typeName = "Minimize"; break;
  198.         case S_MAXIMIZE: typeName = "Maximize"; break;
  199.         case S_ALT_KEY: typeName = "Alt key"; break;
  200.         case S_CREATE: typeName = "Create"; break;
  201.         case S_DELETE: typeName = "Delete"; break;
  202.         case S_CURRENT: typeName = "Current"; break;
  203.         case S_NON_CURRENT: typeName = "Non current"; break;
  204.         case S_MOVE: typeName = "Move"; break;
  205.         case S_REDISPLAY: typeName = "Redisplay"; break;
  206.         case S_DELETE_LEVEL: typeName = "Delete level"; break;
  207.         case S_SIZE: typeName = "Size"; break;
  208.         case S_CHANGE: typeName = "Change"; break;
  209.         case S_DISPLAY_ACTIVE: typeName = "Display active"; break;
  210.         case S_DISPLAY_INACTIVE: typeName = "Display inactive"; break;
  211.         case S_SCROLL_VERTICAL: typeName = "Scroll vertical"; break;
  212.         case S_SCROLL_HORIZONTAL: typeName = "Scroll horizontal"; break;
  213.         default: typeName = "<Unknown>"; break;
  214.         }
  215.         system->DataSet(typeName);
  216.     }
  217.     sEvent = event;
  218. }
  219.