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_PLLDN.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-01  |  3.7 KB  |  114 lines

  1. //    Zinc Interface Library - D_PLLDN.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 "d_help.hlh"
  7.  
  8. const int STRING_FIELD        = 0x0001;
  9. const int ITEM_FIELD        = 0x0002;
  10. const int BTFLAGS_FIELD        = 0x0003;
  11. const int STRINGID_FIELD    = 0x0004;
  12. const int OBJFLAGS_FIELD    = 0x0005;
  13.  
  14. int UIW_PULL_DOWN_MENU::Editor(const UI_EVENT &event)
  15. {
  16.     char *windowName = "Pull-down menu";
  17.  
  18.     int ccode = event.type;
  19.     switch (ccode)
  20.     {
  21.     case S_PLACE_OBJECT:
  22.         for (UI_WINDOW_OBJECT *object = Last(); object; object = object->Previous())
  23.             if (!FlagSet(object->woAdvancedStatus, WOAS_INVALID_REGION) &&
  24.                 (FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
  25.                  (object->Touching(event.position) || !object->Overlap(event.position))  ||
  26.                 (!FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
  27.                   object->Overlap(event.position))))
  28.                 break;
  29.         if (!object && _currentObject->Inherited(ID_PULL_DOWN_ITEM))
  30.         {
  31.             UIW_WINDOW::Add(_currentObject);
  32.             _currentObject->woFlags |= WOF_NON_FIELD_REGION;
  33.         }
  34.         else if (object && _currentObject->Inherited(ID_POP_UP_ITEM))
  35.             ccode = UIW_WINDOW::Editor(event);
  36.         else
  37.             ccode = S_ERROR;
  38.         break;
  39.  
  40.     case S_EDIT_OBJECT:
  41.         {
  42.         UIW_BUTTON *save, *cancel, *help;
  43.         UIW_MATRIX *itemField;
  44.         UIW_STRING *stringIDField;
  45.  
  46.         // Create the button editor window.
  47.         UIW_WINDOW *window = new UIW_WINDOW(_centerColumn - 35, _centerLine - 7,
  48.             69, 13, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  49.         *window
  50.             + new UIW_BORDER
  51.             + &(*new UIW_SYSTEM_BUTTON
  52.                 + new UIW_POP_UP_ITEM("~Move", MNIF_MOVE, BTF_NO_TOGGLE, WOF_NO_FLAGS)
  53.                 + new UIW_POP_UP_ITEM("~Close", MNIF_CLOSE, BTF_NO_TOGGLE, WOF_NO_FLAGS))
  54.             + new UIW_TITLE(windowName)
  55.  
  56.             + new UIW_PROMPT(2, 1, "Items:", WOF_NO_FLAGS)
  57.             + new UIW_SCROLL_BAR(29, 1, 2, 6, SBF_VERTICAL, WOF_NO_FLAGS)
  58.             + (itemField = new UIW_MATRIX(9, 1, 20, 6, 100, 20, 1, 0, MXF_ROWS_FILL, WOF_BORDER, WOAF_NO_FLAGS))
  59.  
  60.             + new UIW_PROMPT(33, 1, "StringID:", WOF_NO_FLAGS)
  61.             + (stringIDField = new UIW_STRING(43, 1, 22, search.stringID, 100, STF_VARIABLE_NAME, WOF_BORDER | WOF_AUTO_CLEAR, 0))
  62.  
  63.             + (save = new UIW_BUTTON(14, 9, 10, "~Save",
  64.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  65.                 WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Save))
  66.             + (cancel = new UIW_BUTTON(29, 9, 10, "~Cancel",
  67.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  68.                 WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Cancel))
  69.             + (help = new UIW_BUTTON(44, 9, 10, "~Help",
  70.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  71.                 WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Help));
  72.  
  73.         // Supply the object list (if any).
  74.         int i = 1;
  75.         for (UIW_PULL_DOWN_ITEM *item = First(); item; i++, item = item->Next())
  76.             *itemField + new UIW_OBJECT_ITEM(0, i - 1, 20, item->string, item->value, item);
  77.  
  78.         // Identify key fields.
  79.         window->StringID(windowName);
  80.         itemField->NumberID(ITEM_FIELD);
  81.         stringIDField->NumberID(STRINGID_FIELD);
  82.         save->userObject = cancel->userObject = help->userObject = this;
  83.         help->value = HELP_PULL_DOWN_MENU;
  84.  
  85.         *windowManager + window;
  86.         break;
  87.         }
  88.  
  89.     case S_SAVE_OBJECT:
  90.         {
  91.         UIW_WINDOW *window = (UIW_WINDOW *)windowManager->Get(windowName);
  92.  
  93.         UIW_STRING *stringIDField = (UIW_STRING *)window->Get(STRINGID_FIELD);
  94.         StringID(stringIDField->DataGet());
  95.  
  96.         UIW_WINDOW::Clear();
  97.         UIW_MATRIX *itemField = (UIW_MATRIX *)window->Get(ITEM_FIELD);
  98.         for (UIW_OBJECT_ITEM *item = (UIW_OBJECT_ITEM *)itemField->First(); item; item = item->Next())
  99.             UI_LIST::Add(item->object);
  100.  
  101.         UI_WINDOW_OBJECT::Redisplay(FALSE);
  102.         break;
  103.         }
  104.  
  105.     default:
  106.         ccode = UIW_WINDOW::Editor(event);
  107.         break;
  108.     }
  109.  
  110.     // Return the control code.
  111.     return (ccode);
  112. }
  113.  
  114.