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

  1. //    Zinc Interface Library - SYS.CPP
  2. //    COPYRIGHT (C) 1990, 1991.  All Rights Reserved.
  3. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  4.  
  5. #include "ui_win.hpp"
  6. #include <string.h>
  7.  
  8. UIW_SYSTEM_BUTTON::UIW_SYSTEM_BUTTON() :
  9.     UIW_BUTTON(0, 0, 0, 0, BTF_NO_TOGGLE, WOF_JUSTIFY_CENTER | WOF_NON_FIELD_REGION,
  10.     UIW_SYSTEM_BUTTON::SystemUserFunction),
  11.     menu(0, 0, MNF_SELECT_ONE, WOF_BORDER, WOAF_TEMPORARY | WOAF_NO_DESTROY)
  12. {
  13.     // Initialize the system button information.
  14.     windowID[0] = ID_SYSTEM_BUTTON;
  15.     windowID[1] = ID_BUTTON;
  16.     search.type = ID_SYSTEM_BUTTON;
  17.     search.numberID = NUMID_SYSTEM;
  18.     strcpy(search.stringID, "NUMID_SYSTEM");
  19.  
  20.     hotKey = HOT_KEY_SYSTEM;
  21.     woAdvancedFlags |= WOAF_NON_CURRENT;
  22.     MSWindowsStyle |= WS_SYSMENU;
  23. }
  24.  
  25. int UIW_SYSTEM_BUTTON::Event(const UI_EVENT &event)
  26. {
  27.     // Switch on the event type.
  28.     int ccode = event.type;
  29.     switch (ccode)
  30.     {
  31.     case S_INITIALIZE:
  32.         if (parent)
  33.             parent->MSWindowsStyle |= MSWindowsStyle;
  34.         break;
  35.  
  36.     case S_CREATE:
  37.     case S_SIZE:
  38.         int height, width;
  39.         width = GetSystemMetrics(SM_CXSIZE);
  40.         height = GetSystemMetrics(SM_CYCAPTION) - 1;
  41.         UI_WINDOW_OBJECT::RegionMax(TRUE);
  42.         true.left -= 1;
  43.         true.top -= 1;
  44.         true.right = true.left + width + 1;
  45.         true.bottom = true.top + height - 1;
  46.         break;
  47.  
  48.     default:
  49.         ccode = UI_WINDOW_OBJECT::Event(event);
  50.         break;
  51.     }
  52.  
  53.     // Return the control code.
  54.     return (ccode);
  55. }
  56.  
  57. #pragma argsused
  58. void UIW_SYSTEM_BUTTON::UserFunction(UI_EVENT &event)
  59. {
  60. }
  61.  
  62. void *UIW_SYSTEM_BUTTON::Information(INFORMATION_REQUEST request, void *data)
  63. {
  64.     if (request == GET_NUMBERID_OBJECT || request == GET_STRINGID_OBJECT ||
  65.         request == PRINT_INFORMATION)
  66.         return (menu.Information(request, data));
  67.     else if (request == PRINT_INFORMATION)
  68.     {
  69.         UI_WINDOW_OBJECT::Information(request, data);
  70.         return (menu.Information(request, data));
  71.     }
  72.     else
  73.         return (UI_WINDOW_OBJECT::Information(request, data));
  74. }
  75.  
  76. #ifdef ZIL_LOAD
  77. #pragma argsused
  78. UIW_SYSTEM_BUTTON::UIW_SYSTEM_BUTTON(const char *name, UI_STORAGE *file, USHORT loadFlags) :
  79.     UIW_BUTTON(0, file, L_SUB_LEVEL), menu(0, file, L_SUB_LEVEL)
  80. {
  81.     windowID[0] = ID_SYSTEM_BUTTON;
  82.     windowID[1] = ID_BUTTON;
  83.     hotKey = HOT_KEY_SYSTEM;
  84.     woAdvancedFlags |= WOAF_NON_CURRENT;
  85.     userFunction = UIW_SYSTEM_BUTTON::SystemUserFunction;
  86.     if (menu.First())
  87.         btFlags |= BTF_DOWN_CLICK;
  88.  
  89.     if (!file)
  90.         file = _storage;
  91.     if (!FlagSet(loadFlags, L_SUB_LEVEL) && FlagSet(file->stStatus, STS_TEMPORARY))
  92.         delete file;
  93. }
  94. #endif
  95.  
  96. #ifdef ZIL_STORE
  97. #pragma argsused
  98. void UIW_SYSTEM_BUTTON::Store(const char *name, UI_STORAGE *file, USHORT storeFlags)
  99. {
  100.     UIW_BUTTON::Store(name, file, storeFlags | S_SUB_LEVEL);
  101.     menu.Store(NULL, file, S_SUB_LEVEL | S_SKIP_TYPE);
  102.     if (!FlagSet(storeFlags, S_SUB_LEVEL))
  103.         file->ObjectSize(name, search);
  104. }
  105. #endif
  106.  
  107.