home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0040 - 0049 / ibm0040-0049 / ibm0040.tar / ibm0040 / ZINC_6.ZIP / DOSSRC.ZIP / D_WIN2.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-01  |  2.7 KB  |  87 lines

  1. //    Zinc Interface Library - D_WIN2.CPP
  2. //    COPYRIGHT (C) 1990, 1991.  All Rights Reserved.
  3. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  4.  
  5. #include "ui_dsn.hpp"
  6. #include <fcntl.h>
  7. #include <string.h>
  8.  
  9. UI_WINDOW_OBJECT *_currentObject = NULL;
  10.  
  11. int UI_WINDOW_OBJECT::Editor(const UI_EVENT &event)
  12. {
  13.     static USHORT time = 0;
  14.  
  15.     int ccode = UI_WINDOW_OBJECT::LogicalEvent(event, ID_WINDOW_OBJECT);
  16.     switch (ccode)
  17.     {
  18.     case L_SELECT:
  19.     case L_BEGIN_SELECT:
  20.         if (ccode == L_SELECT || ui_time() - time < 8)
  21.         {
  22.             _currentObject = this;
  23.             UI_EVENT tEvent;
  24.             tEvent.type = S_EDIT_OBJECT;
  25.             this->Editor(tEvent);
  26.             time = 0;
  27.             break;
  28.         }
  29.         time = ui_time();
  30.         // Continue to L_VIEW.
  31.  
  32.     case L_VIEW:
  33.         int border = (display->isText) ? 0 : 6;
  34.         UI_WINDOW_OBJECT *object = this;
  35.         while (object->parent && FlagSet(object->woFlags, WOF_NON_FIELD_REGION))
  36.             object = object->parent;
  37.  
  38.         int sizeFlags = 0;
  39.         if (event.position.column - border <= object->true.left)
  40.             sizeFlags |= M_LEFT_CHANGE;
  41.         else if (event.position.column + border >= object->true.right)
  42.             sizeFlags |= M_RIGHT_CHANGE;
  43.         if (event.position.line - border <= object->true.top)
  44.             sizeFlags |= M_TOP_CHANGE;
  45.         else if (event.position.line + border >= object->true.bottom)
  46.             sizeFlags |= M_BOTTOM_CHANGE;
  47.         if (FlagSet(woAdvancedFlags, WOAF_NO_SIZE))
  48.             sizeFlags = 0;
  49.         else if (!FlagSet(object->woFlags, WOF_NON_FIELD_REGION))
  50.             sizeFlags &= ~(M_LEFT_CHANGE | M_TOP_CHANGE);
  51.  
  52.         UI_EVENT tEvent = event;
  53.         if (!sizeFlags)
  54.             tEvent.rawCode = (parent && !FlagSet(woFlags, WOF_NON_FIELD_REGION)) ?
  55.                 DM_SMALL_MOVE : DM_MOVE;
  56.          else if (FlagsSet(sizeFlags, M_LEFT_CHANGE | M_TOP_CHANGE) ||
  57.             FlagsSet(sizeFlags, M_RIGHT_CHANGE | M_BOTTOM_CHANGE))
  58.             tEvent.rawCode = (parent && !FlagSet(woFlags, WOF_NON_FIELD_REGION)) ?
  59.                 DM_SMALL_DIAGONAL_ULLR : DM_DIAGONAL_ULLR;
  60.         else if (FlagsSet(sizeFlags, M_LEFT_CHANGE | M_BOTTOM_CHANGE) ||
  61.             FlagsSet(sizeFlags, M_RIGHT_CHANGE | M_TOP_CHANGE))
  62.             tEvent.rawCode = DM_DIAGONAL_LLUR;
  63.         else if (FlagSet(sizeFlags, M_LEFT_CHANGE | M_RIGHT_CHANGE))
  64.             tEvent.rawCode = (parent && !FlagSet(woFlags, WOF_NON_FIELD_REGION)) ?
  65.                 DM_SMALL_HORIZONTAL : DM_HORIZONTAL;
  66.         else if (FlagSet(sizeFlags, M_TOP_CHANGE | M_BOTTOM_CHANGE))
  67.             tEvent.rawCode = (parent && !FlagSet(woFlags, WOF_NON_FIELD_REGION)) ?
  68.                 DM_SMALL_VERTICAL : DM_VERTICAL;
  69.         eventManager->Event(tEvent);
  70.  
  71.         if (ccode == L_BEGIN_SELECT)
  72.         {
  73.             _currentObject = object;
  74.             tEvent.type = sizeFlags ? S_SIZE_CURRENT : S_MOVE_CURRENT;
  75.             tEvent.rawCode = sizeFlags;
  76.             eventManager->Put(tEvent, Q_BEGIN);
  77.         }
  78.         break;
  79.  
  80.     default:
  81.         ccode = S_UNKNOWN;
  82.     }
  83.  
  84.     // Return the control code.
  85.     return (ccode);
  86. }
  87.