home *** CD-ROM | disk | FTP | other *** search
- // Zinc Interface Library - D_WIN1.CPP
- // COPYRIGHT (C) 1990, 1991. All Rights Reserved.
- // Zinc Software Incorporated. Pleasant Grove, Utah USA
-
- #include "ui_dsn.hpp"
- #include "d_help.hlh"
- #include <stdio.h>
- #include <string.h>
-
- const int OBJECT_FIELD = 0x0001;
- const int OPTION_FIELD = 0x0002;
- const int STRINGID_FIELD = 0x0003;
- const int OBJFLAGS_FIELD = 0x0004;
-
- int UIW_WINDOW::Editor(const UI_EVENT &event)
- {
- char *windowName = "Window";
-
- int ccode = UI_WINDOW_OBJECT::LogicalEvent(event, ID_WINDOW);
- UI_WINDOW_OBJECT *object;
- switch (ccode)
- {
- case S_EDIT_OBJECT:
- {
- UI_ITEM _objectFlag[] =
- {
- { WOAF_NO_SIZE, 0, " Don't size " },
- { WOAF_NO_MOVE, 0, " Don't move " },
- { WOAF_MODAL, 0, " Modal " },
- { 0, 0, 0 }
- };
- UI_ITEM _windowOption[] = // Order of these options is important.
- {
- { ID_BORDER, 0, " Border " },
- { ID_MAXIMIZE_BUTTON, 0, " Maximize button " },
- { ID_MINIMIZE_BUTTON, 0, " Minimize button " },
- { ID_SYSTEM_BUTTON, 0, " System button " },
- { ID_TITLE, 0, " Title " },
- { 0, 0, 0 }
- };
- UIW_BUTTON *save, *cancel, *help;
- UIW_STRING *stringIDField;
- UIW_MATRIX *objectField, *optionField, *objFlagsField;
-
- // Create the button editor window.
- UIW_WINDOW *window = new UIW_WINDOW(_centerColumn - 36, _centerLine - 10,
- 72, 20, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
- *window
- + new UIW_BORDER
- + &(*new UIW_SYSTEM_BUTTON
- + new UIW_POP_UP_ITEM("~Move", MNIF_MOVE, BTF_NO_TOGGLE, WOF_NO_FLAGS)
- + new UIW_POP_UP_ITEM("~Close", MNIF_CLOSE, BTF_NO_TOGGLE, WOF_NO_FLAGS))
- + new UIW_TITLE(windowName)
-
- + new UIW_PROMPT(2, 1, "Objects:", WOF_NO_FLAGS)
- + new UIW_SCROLL_BAR(31, 1, 2, 6, SBF_VERTICAL, WOF_NO_FLAGS)
- + (objectField = new UIW_MATRIX(11, 1, 20, 6, 100, 20, 1, 0, MXF_ROWS_FILL, WOF_BORDER, WOAF_NO_FLAGS))
- + new UIW_PROMPT(2, 8, "Options:", WOF_NO_FLAGS)
- + new UIW_SCROLL_BAR(31, 8, 2, 6, SBF_VERTICAL, WOF_NO_FLAGS)
- + (optionField = new UIW_MATRIX(11, 8, 20, 6, woFlags, _windowOption))
-
- + new UIW_PROMPT(35, 1, "StringID:", WOF_NO_FLAGS)
- + (stringIDField = new UIW_STRING(45, 1, 22, search.stringID, 100, STF_VARIABLE_NAME, WOF_BORDER | WOF_AUTO_CLEAR, 0))
- + new UIW_PROMPT(35, 3, "Flags:", WOF_NO_FLAGS)
- + new UIW_SCROLL_BAR(65, 3, 2, 6, SBF_VERTICAL, WOF_NO_FLAGS)
- + (objFlagsField = new UIW_MATRIX(45, 3, 20, 6, woAdvancedFlags, _objectFlag))
-
- + (save = new UIW_BUTTON(15, 16, 10, "~Save",
- BTF_NO_TOGGLE | BTF_AUTO_SIZE,
- WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Save))
- + (cancel = new UIW_BUTTON(30, 16, 10, "~Cancel",
- BTF_NO_TOGGLE | BTF_AUTO_SIZE,
- WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Cancel))
- + (help = new UIW_BUTTON(45, 16, 10, "~Help",
- BTF_NO_TOGGLE | BTF_AUTO_SIZE,
- WOF_BORDER | WOF_JUSTIFY_CENTER, UI_DESIGN_MANAGER::Help));
-
- // Supply the object list (if any).
- int i = 1;
- for (object = First(); object; i++, object = object->Next())
- {
- char objectString[64];
- strcpy(objectString, object->StringID());
- if (objectString[0] == '\0')
- sprintf(objectString, "FIELD_%d", i);
- *objectField + new UIW_OBJECT_ITEM(0, i - 1, 20, objectString,
- object->NumberID(), object);
- }
-
- for (UIW_POP_UP_ITEM *option = (UIW_POP_UP_ITEM *)optionField->First(); option; option = option->Next())
- {
- if (option->value == ID_BORDER)
- option->NumberID(NUMID_BORDER);
- else if (option->value == ID_TITLE)
- option->NumberID(NUMID_TITLE);
- else if (option->value == ID_SYSTEM_BUTTON)
- option->NumberID(NUMID_SYSTEM);
- else if (option->value == ID_MAXIMIZE_BUTTON)
- option->NumberID(NUMID_MAXIMIZE);
- else if (option->value == ID_MINIMIZE_BUTTON)
- option->NumberID(NUMID_MINIMIZE);
-
- if (UIW_WINDOW::Get(option->NumberID()))
- option->woStatus |= WOS_SELECTED;
- }
-
- // Identify key fields.
- window->StringID(windowName);
- objectField->NumberID(OBJECT_FIELD);
- optionField->NumberID(OPTION_FIELD);
- stringIDField->NumberID(STRINGID_FIELD);
- objFlagsField->NumberID(OBJFLAGS_FIELD);
- save->userObject = cancel->userObject = help->userObject = this;
- help->value = HELP_WINDOW;
-
- *windowManager + window;
- break;
- }
-
- case S_SAVE_OBJECT:
- {
- UIW_WINDOW *window = (UIW_WINDOW *)windowManager->Get(windowName);
-
- UIW_STRING *stringIDField = (UIW_STRING *)window->Get(STRINGID_FIELD);
- StringID(stringIDField->DataGet());
-
- SaveFlags((UIW_MATRIX *)window->Get(OBJFLAGS_FIELD), &woAdvancedFlags);
-
- UIW_WINDOW::Clear();
- UIW_MATRIX *itemField = (UIW_MATRIX *)window->Get(OBJECT_FIELD);
- for (UIW_OBJECT_ITEM *item = (UIW_OBJECT_ITEM *)itemField->First(); item; item = item->Next())
- UI_LIST::Add(item->object);
-
- UIW_MATRIX *optionField = (UIW_MATRIX *)window->Get(OPTION_FIELD);
- UI_WINDOW_OBJECT *lastObject = First();
- for (UIW_POP_UP_ITEM *option = (UIW_POP_UP_ITEM *)optionField->First(); option; option = option->Next())
- {
- int redisplay = FALSE;
- UI_WINDOW_OBJECT *object = (UI_WINDOW_OBJECT *)UIW_WINDOW::Get(option->NumberID());
- if (FlagSet(option->woStatus, WOS_SELECTED) && !object)
- {
- redisplay = TRUE;
- UI_WINDOW_OBJECT *(*newFunction)(const char *name, UI_STORAGE *file, USHORT loadFlags);
- UI_JUMP_LIST::_jumpList.GetFunction(option->value, &newFunction);
- object = newFunction(0, 0, L_NO_FLAGS);
- UI_LIST::Add(lastObject, object);
- object->InformationSet(screenID, display, eventManager,
- windowManager, paletteMapTable, this);
- lastObject = object->Next();
- woAdvancedStatus |= WOAS_REDISPLAY;
- }
- else if (!FlagSet(option->woStatus, WOS_SELECTED) && object)
- {
- lastObject = object->Next();
- UI_LIST::Subtract(object);
- delete object;
- woAdvancedStatus |= WOAS_REDISPLAY;
- redisplay = TRUE;
- }
- else if (object)
- lastObject = object->Next();
- if (redisplay)
- {
- UI_EVENT tEvent;
- tEvent.type = S_CREATE;
- UIW_WINDOW::Event(tEvent);
- tEvent.type = S_DISPLAY_INACTIVE;
- tEvent.region = true;
- UIW_WINDOW::Event(tEvent);
- }
- }
- break;
- }
-
- case S_PLACE_OBJECT:
- // Compute a unique field identification.
- if (_currentObject->search.numberID == 0)
- {
- int i = 1;
- while (UIW_WINDOW::Get(i))
- i++;
- _currentObject->search.numberID = i;
- sprintf(_currentObject->search.stringID, "FIELD_%d", i);
- }
-
- // Place the object.
- for (object = Last(); object; object = object->Previous())
- if (!FlagSet(object->woAdvancedStatus, WOAS_INVALID_REGION) &&
- (FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- (object->Touching(event.position) || !object->Overlap(event.position)) ||
- (!FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- object->Overlap(event.position))))
- break;
- if (!object)
- {
- UI_REGION region = (regionList.First()) ?
- regionList.First()->region : true;
- _currentObject->relative.left = event.position.column - region.left;
- _currentObject->relative.left /= display->cellWidth;
- _currentObject->relative.top = event.position.line - region.top;
- _currentObject->relative.top /= display->cellHeight;
- _currentObject->relative.right += _currentObject->relative.left;
- _currentObject->relative.bottom += _currentObject->relative.top;
- UIW_WINDOW::Add(_currentObject);
- }
- else if (object->Editor(event) != S_PLACE_OBJECT)
- {
- _errorSystem->Beep();
- delete _currentObject;
- _currentObject = NULL;
- }
- break;
-
- case S_CLEAR_OBJECT:
- if (UI_LIST::Index(_currentObject) != -1)
- {
- ccode = S_CLEAR_OBJECT;
- UI_LIST::Subtract(_currentObject);
- }
- else
- {
- ccode = S_UNKNOWN;
- for (object = Last(); object && ccode == S_UNKNOWN; object = object->Previous())
- ccode = object->Editor(event);
- }
- break;
-
- case L_SELECT:
- object = (UI_WINDOW_OBJECT *)UI_LIST::Get(UIW_WINDOW::FindStatus, &WOS_CURRENT);
- ccode = (object) ? object->Editor(event) : S_ERROR;
- break;
-
- case L_VIEW:
- case L_BEGIN_SELECT:
- for (object = Last(); object; object = object->Previous())
- if (!FlagSet(object->woAdvancedStatus, WOAS_INVALID_REGION) &&
- (FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- (object->Touching(event.position) || !object->Overlap(event.position)) ||
- (!FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- object->Overlap(event.position))))
- break;
- if (object)
- {
- if (ccode == L_BEGIN_SELECT && !FlagSet(object->woStatus, WOS_CURRENT))
- ToFront(object, FALSE);
- ccode = object->Editor(event);
- }
- else
- ccode = UI_WINDOW_OBJECT::Editor(event);
- break;
- }
-
- // Return the control code.
- return (ccode);
- }
-