home *** CD-ROM | disk | FTP | other *** search
- // Zinc Interface Library - WINDOW2.CPP
- // COPYRIGHT (C) 1990, 1991. All Rights Reserved.
- // Zinc Software Incorporated. Pleasant Grove, Utah USA
-
- #include "ui_win.hpp"
- #include <io.h>
- #include <stdio.h>
- #include <string.h>
-
- USHORT UI_WINDOW_OBJECT::NumberID(USHORT numberID)
- {
- if (numberID)
- search.numberID = numberID;
- return (search.numberID);
- }
-
- char *UI_WINDOW_OBJECT::StringID(const char *stringID)
- {
- if (stringID)
- strcpy(search.stringID, stringID);
- return (search.stringID);
- }
-
- UI_WINDOW_OBJECT::UI_WINDOW_OBJECT(int left, int top, int width, int height,
- USHORT _woFlags, USHORT _woAdvancedFlags) : woFlags(_woFlags),
- woAdvancedFlags(_woAdvancedFlags), woStatus(WOS_NO_STATUS),
- woAdvancedStatus(WOAS_INVALID_REGION), parent(0), display(0), eventManager(0),
- windowManager(0), paletteMapTable(_normalPaletteMapTable),
- lastPalette(&paletteMapTable[0].palette), Validate(0), hotKey(0),
- screenID(-1), userObject(NULL), userFlags(0), helpContext(NO_HELP_CONTEXT)
- {
- // Intialize the screen object information.
- windowID[0] = windowID[1] = windowID[2] = windowID[3] = windowID[4] = ID_WINDOW_OBJECT;
-
- if (FlagSet(_woFlags, WOF_UNANSWERED))
- woStatus |= WOS_UNANSWERED;
- if (FlagSet(_woFlags, WOF_INVALID))
- woStatus |= WOS_INVALID;
-
- true.left = relative.left = left;
- true.top = relative.top = top;
- true.right = relative.right = (left >= 0 && width > 0) ?
- left + width - 1 : width;
- true.bottom = relative.bottom = (top >= 0 && height > 0) ?
- top + height - 1 : height;
-
- search.stringID[0] = '\0';
- search.numberID = search.type = search.size = 0;
- search.offset = 0L;
- }
-
- UI_WINDOW_OBJECT::~UI_WINDOW_OBJECT(void)
- {
- }
-
- void UI_WINDOW_OBJECT::Border(int ccode, UI_REGION ®ion,
- const UI_PALETTE *palette)
- {
- // Compute the display region.
- region = true;
-
- // Make sure the object needs a border.
- if (!FlagSet(woFlags, WOF_BORDER))
- return;
-
- // Determine the border and update the region.
- int displayBorder = (ccode == S_DISPLAY_ACTIVE ||
- ccode == S_NON_CURRENT || ccode == S_DISPLAY_INACTIVE ||
- ccode == S_CURRENT) ? TRUE : FALSE;
- int logicalPalette;
- if (FlagSet(woAdvancedStatus, WOAS_TOO_SMALL) || FlagSet(woFlags, WOF_VIEW_ONLY))
- logicalPalette = PM_VIEW;
- else if (ccode == S_DISPLAY_INACTIVE)
- logicalPalette = PM_INACTIVE;
- else
- logicalPalette = PM_ACTIVE;
- UI_PALETTE *outlinePalette = MapPalette(paletteMapTable, logicalPalette,
- ID_OUTLINE);
- if (display->isText && (region.top == region.bottom))
- {
- if (region.left <= region.right - 2 * display->cellWidth)
- {
- if (displayBorder)
- display->Text(screenID, region.left, region.top, "[", outlinePalette, 1);
- region.left++;
- }
- if (region.left <= region.right - display->cellWidth)
- {
- if (displayBorder)
- display->Text(screenID, region.right, region.top, "]", outlinePalette, 1);
- region.right--;
- }
- }
- if (region.top + 1 >= region.bottom || region.left + 1 >= region.right)
- return;
- if (displayBorder)
- display->Rectangle(screenID, region, outlinePalette);
- region.left++;
- region.top++;
- region.right--;
- region.bottom--;
- if (FlagSet(woFlags, WOF_NON_FIELD_REGION) || ccode == S_CREATE ||
- display->isText)
- return;
-
- if (region.top + 1 >= region.bottom || region.left + 1 >= region.right)
- return;
- if (displayBorder && palette)
- {
- // Force the background color.
- UI_PALETTE tPalette = *palette;
- tPalette.colorForeground = tPalette.colorBackground;
- tPalette.bwForeground = tPalette.bwBackground;
- tPalette.grayScaleForeground = tPalette.grayScaleBackground;
- display->Rectangle(screenID, region, &tPalette);
- }
- region.left++;
- region.top++;
- region.right--;
- region.bottom--;
- if (region.left + 1 >= region.right)
- return;
- if (displayBorder && palette)
- {
- UI_PALETTE tPalette = *palette;
- tPalette.colorForeground = tPalette.colorBackground;
- tPalette.bwForeground = tPalette.bwBackground;
- tPalette.grayScaleForeground = tPalette.grayScaleBackground;
- display->Line(screenID, region.left, region.top, region.left, region.bottom, &tPalette);
- display->Line(screenID, region.right, region.top, region.right, region.bottom, &tPalette);
- }
- region.left++;
- region.right--;
- }
-
- int UI_WINDOW_OBJECT::Event(const UI_EVENT &event)
- {
- /* Switch on the event type */
- int ccode = UI_WINDOW_OBJECT::LogicalEvent(event, ID_WINDOW_OBJECT);
- switch (ccode)
- {
- case S_CREATE:
- case S_SIZE:
- display->RegionConvert(relative, &woStatus, WOS_GRAPHICS);
- if (!display->isText && relative.bottom == relative.top)
- relative.bottom += display->cellHeight - 1;
- UI_WINDOW_OBJECT::RegionMax(TRUE);
- break;
-
- case S_MOVE:
- if (!parent || FlagSet(woAdvancedFlags, WOAF_TEMPORARY) ||
- FlagSet(woAdvancedStatus, WOAS_INVALID_REGION))
- break;
- true.left += event.position.column;
- true.top += event.position.line;
- true.right += event.position.column;
- true.bottom += event.position.line;
- UI_REGION region = parent->true;
- if (true.left < region.left || true.top < region.top ||
- true.right > region.right || true.bottom > region.bottom)
- woAdvancedStatus |= WOAS_INVALID_REGION;
- else
- woAdvancedStatus &= ~WOAS_INVALID_REGION;
- break;
-
- case L_VIEW:
- {
- UI_EVENT t_event = event;
- t_event.rawCode = DM_VIEW;
- eventManager->Event(t_event);
- }
- break;
-
- case L_SELECT:
- {
- UI_EVENT t_event = event;
- t_event.type = L_NEXT;
- eventManager->Event(t_event);
- }
-
- default:
- ccode = S_UNKNOWN;
- break;
- }
-
- /* Return the control code */
- return (ccode);
- }
-
- void *UI_WINDOW_OBJECT::Information(INFORMATION_REQUEST request, void *data)
- {
- /* Switch on the request type */
- switch(request)
- {
- case GET_MINIMUM_WIDTH:
- *(int *)data = (display->isText) ? 2 : display->cellWidth * 2 - 1;
- break;
-
- case GET_MINIMUM_HEIGHT:
- *(int *)data = (display->isText) ? 1 : display->cellHeight - 1;
- break;
-
- case GET_DEFAULT_WIDTH:
- *(int *)data = (display->isText) ? display->cellWidth : 32;
- break;
-
- case GET_DEFAULT_HEIGHT:
- *(int *)data = (display->isText) ? display->cellHeight : 16;
- break;
-
- #ifdef ZIL_STORE
- case PRINT_INFORMATION:
- {
- if (search.stringID[0] == '\0' || search.numberID > 0xFF00)
- break;
- char buffer[128];
- sprintf(buffer, "#define %-32s 0x%04X\r\n", search.stringID, search.numberID);
- _write(*(int *)data, buffer, strlen(buffer));
- break;
- }
- #endif
-
- default:
- data = NULL;
- break;
- }
-
- return (data);
- }
-
- UI_WINDOW_OBJECT::NeedsUpdate(const UI_EVENT &event, int ccode)
- {
- UI_PALETTE *palette = UI_WINDOW_OBJECT::LogicalPalette(ccode);
- if ((palette == lastPalette && !FlagSet(woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- !UI_WINDOW_OBJECT::Overlap(event.region)) ||
- (palette == lastPalette && FlagSet(woAdvancedFlags, WOAF_OUTSIDE_REGION) &&
- !parent->Overlap(event.region)))
- return (FALSE);
- lastPalette = palette;
- return(TRUE);
- }
-
- int UI_WINDOW_OBJECT::NeedsValidation()
- {
- int needsValidation =
- (Validate && !FlagSet(woStatus, WOS_UNANSWERED) &&
- FlagSet(woAdvancedStatus, WOAS_NEED_VALIDATE)) ? TRUE : FALSE;
- woAdvancedStatus &= ~WOAS_NEED_VALIDATE;
- return (needsValidation);
- }
-
- int UI_WINDOW_OBJECT::Overlap(const UI_REGION ®ion)
- {
- return (Max(region.left, true.left) <= Min(region.right, true.right) &&
- Max(region.top, true.top) <= Min(region.bottom, true.bottom));
- }
-
- void UI_WINDOW_OBJECT::RegionMax(int leftTop)
- {
- UI_REGION_LIST regionList;
- UI_REGION_ELEMENT *dRegion;
- UI_WINDOW_OBJECT *object;
- UI_REGION region;
-
- /* Make sure the object has a parent */
- if (!parent || FlagSet(woAdvancedFlags, WOAF_TEMPORARY))
- {
- woAdvancedStatus &= ~WOAS_INVALID_REGION;
- true = relative;
- return;
- }
-
- /* Compute the update regions then make an update request */
- region = parent->true;
- parent->Border(S_CREATE, region, 0);
- regionList.Add(0, new UI_REGION_ELEMENT(screenID, ®ion));
- /* Get the first object */
- for (object = this; object->previous; object = object->Previous())
- ;
- for (; object && object != this; object = object->Next())
- {
- if (FlagSet(object->woAdvancedFlags, WOAF_OUTSIDE_REGION))
- {
- regionList.Destroy();
- regionList.Add(0, new UI_REGION_ELEMENT(screenID,
- object->true.left + 1, object->true.top + 1,
- object->true.right - 1, object->true.bottom - 1));
- }
- else if (FlagSet(object->woFlags, WOF_NON_FIELD_REGION) &&
- !FlagSet(object->woAdvancedStatus, WOAS_INVALID_REGION))
- regionList.Split(screenID, object->true);
- }
-
- /* Get the region then destroy the region list */
- if (leftTop)
- {
- region.left = parent->true.right;
- region.top = parent->true.bottom;
- region.right = region.left - 1;
- region.bottom = region.top - 1;
- for (dRegion = regionList.First(); dRegion; dRegion = dRegion->Next())
- if (dRegion->region.top <= region.top &&
- (!FlagSet(woFlags, WOF_NON_FIELD_REGION) ||
- dRegion->region.right - dRegion->region.left >=
- relative.right - relative.left))
- region = dRegion->region;
- }
- else
- {
- region.right = parent->true.left;
- region.bottom = parent->true.top;
- region.left = region.right + 1;
- region.top = region.bottom + 1;
- for (dRegion = regionList.First(); dRegion; dRegion = dRegion->Next())
- if (dRegion->region.bottom >= region.bottom &&
- (!FlagSet(woFlags, WOF_NON_FIELD_REGION) ||
- dRegion->region.right - dRegion->region.left >=
- relative.right - relative.left))
- region = dRegion->region;
- }
-
- /* Compute relative coordinates */
- if (!FlagSet(woFlags, WOF_NON_FIELD_REGION))
- {
- if (relative.left < 0 || relative.top < 0)
- {
- woAdvancedStatus |= WOAS_INVALID_REGION;
- return;
- }
- true.left = region.left + relative.left;
- true.top = region.top + relative.top;
- true.right = region.left + relative.right;
- true.bottom = region.top + relative.bottom;
- woAdvancedStatus &= ~WOAS_TOO_SMALL;
- if (true.right > region.right)
- {
- if (true.right > region.right + 2)
- woAdvancedStatus |= WOAS_TOO_SMALL;
- true.right = region.right;
- }
- if (true.bottom > region.bottom)
- {
- if (true.bottom > region.bottom + 2)
- woAdvancedStatus |= WOAS_TOO_SMALL;
- true.bottom = region.bottom;
- }
- }
- else
- true = region;
-
- /* Check for the validity of the region */
- if (true.left > true.right || true.top > true.bottom ||
- true.left < parent->true.left || true.top < parent->true.top)
- woAdvancedStatus |= WOAS_INVALID_REGION;
- else
- woAdvancedStatus &= ~WOAS_INVALID_REGION;
- if (FlagSet(woAdvancedStatus, WOAS_INVALID_REGION | WOAS_TOO_SMALL))
- woStatus &= ~WOS_CURRENT;
- }
-
- void UI_WINDOW_OBJECT::Redisplay(int fromRoot)
- {
- // Preserve the original region for re-display.
- UI_EVENT event;
- event.region = true;
-
- // Find the root then make sure the window manager is attached.
- UI_WINDOW_OBJECT *root = this;
- while (root->parent)
- root = root->parent;
- if (FlagSet(root->woAdvancedStatus, WOAS_REDISPLAY) ||
- !display || !eventManager || !windowManager)
- fromRoot = TRUE;
- if (!root->display || !root->eventManager || !root->windowManager)
- {
- root->woAdvancedStatus |= WOAS_REDISPLAY;
- return;
- }
-
- // Redisplay the window by sending a size, then redisplay message.
- event.type = S_CREATE;
- if (fromRoot)
- root->Event(event);
- else
- Event(event);
- event.type = (root == windowManager->First()) ?
- S_DISPLAY_ACTIVE : S_DISPLAY_INACTIVE;
- if (fromRoot)
- root->Event(event);
- else
- Event(event);
- }
-
- void UI_WINDOW_OBJECT::Shadow(UI_REGION ®ion, int depth)
- {
- /* Make sure the region is large enough to shadow */
- if (depth == 0)
- return;
- int left, top, right, bottom;
- UI_REGION tRegion;
- tRegion = region;
- left = region.left + 1;
- top = region.top + 1;
- right = region.right - 2;
- bottom = region.bottom - 2;
- if (left + depth > right || top + depth > bottom)
- {
- region = true;
- if (region.left < region.right)
- region.left += 1;
- if (region.top < region.bottom)
- region.top += 1;
- if (region.right > region.left)
- region.right -= 1;
- if (region.bottom > region.top)
- region.bottom -= 1;
- return;
- }
-
- /* Hide the screen devices */
- if (eventManager)
- eventManager->DevicesHide(tRegion);
-
- /* Left column and top lines */
- UI_PALETTE *palette = MapPalette(paletteMapTable, PM_ANY,
- (depth > 0) ? ID_WHITE_SHADOW : ID_LIGHT_SHADOW);
- display->Line(screenID, left, top, left, bottom, palette);
- display->Line(screenID, left, top, right--, top, palette);
- top++;
- if (depth == 2 || depth == -2)
- display->Line(screenID, left, top, right++, top, palette);
- else
- right++;
-
- /* Right columns and bottom line */
- palette = MapPalette(paletteMapTable, PM_ANY,
- (depth > 0) ? ID_LIGHT_SHADOW : ID_DARK_SHADOW);
- if (depth == 2 || depth == -2)
- display->Line(screenID, right, top--, right, bottom++, palette);
- else
- {
- top--;
- bottom++;
- }
- right++;
- display->Line(screenID, right, top, right, bottom, palette);
- display->Line(screenID, left, bottom, right, bottom, palette);
-
- /* Show the screen devices */
- if (eventManager)
- eventManager->DevicesShow(tRegion);
-
- /* Compute the new region coordinates */
- tRegion = region;
- region.left = tRegion.left + 2;
- region.bottom = tRegion.bottom - 2;
- if (depth == 2 || depth == -2)
- {
- region.top = tRegion.top + 3;
- region.right = tRegion.right - 3;
- }
- else
- {
- region.top = tRegion.top + 2;
- region.right = tRegion.right - 2;
- }
- }
-
- void UI_WINDOW_OBJECT::Text(char *string, int depth, int ccode,
- const UI_PALETTE *palette)
- {
- // Shadow the region if needed.
- if (!display)
- return;
- UI_REGION region;
- if (depth != 0 && !display->isText)
- {
- UI_WINDOW_OBJECT::Border(ccode, region, palette);
- if (region.top + 2 >= region.bottom || region.left + 2 >= region.right)
- {
- display->Rectangle(screenID, region, palette, 0, TRUE);
- return;
- }
- region = true;
- UI_WINDOW_OBJECT::Shadow(region, depth);
- display->Rectangle(screenID, region, palette, 0, TRUE);
- if (!FlagSet(woFlags, WOF_JUSTIFY_RIGHT | WOF_JUSTIFY_CENTER))
- region.left += depth;
- }
- else
- {
- UI_WINDOW_OBJECT::Border(ccode, region, palette);
- display->Rectangle(screenID, region, palette, 0, TRUE);
- }
-
- // Make sure something fits on the screen.
- if (region.left + display->TextWidth("X") - 1 > region.right ||
- region.top + display->TextHeight("X") - 1 > region.bottom)
- return;
-
- // Make sure it is a valid string.
- if (string == 0 || string[0] == '\0')
- return;
-
- // See if the string will fit.
- int height = display->TextHeight(string);
- if (region.bottom - region.top + 1 < height)
- return;
-
- char scrapBuffer[128];
- strncpy(scrapBuffer, string, 128);
- scrapBuffer[127] = '\0';
- char *hotKey = strchr(scrapBuffer, '~');
- if (hotKey)
- strcpy(hotKey, hotKey + 1);
-
- int width = display->TextWidth(scrapBuffer);
- if (width > region.right - region.left + 1)
- {
- width = region.right - region.left;
- scrapBuffer[width / display->cellWidth] = '\0';
- }
-
- region.top += (region.bottom - region.top + 1 - height) / 2;
- if (FlagSet(woFlags, WOF_JUSTIFY_CENTER))
- region.left += (region.right - region.left + 1 - width) / 2;
- else if (FlagSet(woFlags, WOF_JUSTIFY_RIGHT))
- region.left = region.right - width + 1;
-
- display->Text(screenID, region.left, region.top, scrapBuffer, palette, -1, FALSE);
-
- if (!hotKey)
- return;
- region.left += (int)(hotKey - scrapBuffer) * display->cellWidth;
- if (region.left > region.right - display->TextWidth("X"))
- return;
- if (!display->isText)
- {
- UI_PALETTE tPalette = *palette;
- tPalette.colorBackground = tPalette.colorForeground;
- tPalette.bwBackground = tPalette.bwForeground;
- tPalette.grayScaleBackground = tPalette.grayScaleForeground;
- region.top += display->TextHeight("_");
- region.right = region.left + display->TextHeight("_") - 1;
- display->Line(screenID, region.left, region.top, region.right,
- region.top, &tPalette);
- }
- else if (!FlagSet(woFlags, WOF_NON_SELECTABLE) &&
- (!FlagSet(woStatus, WOS_CURRENT) || ccode == S_DISPLAY_INACTIVE))
- {
- palette = MapPalette(paletteMapTable, PM_HOT_KEY);
- display->Text(screenID, region.left, region.top, hotKey, palette, 1, FALSE);
- }
- }
-
- void UI_WINDOW_OBJECT::InformationSet(int a_screenID, UI_DISPLAY *a_display,
- UI_EVENT_MANAGER *a_eventManager, UI_WINDOW_MANAGER *a_windowManager,
- UI_PALETTE_MAP *a_paletteMapTable, UI_WINDOW_OBJECT *a_parent)
- {
- screenID = a_screenID;
- display = a_display;
- eventManager = a_eventManager;
- windowManager = a_windowManager;
- if (paletteMapTable == _normalPaletteMapTable)
- paletteMapTable = a_paletteMapTable;
- lastPalette = &paletteMapTable[0].palette;
- parent = a_parent;
- }
-
- UI_PALETTE *UI_WINDOW_OBJECT::LogicalPalette(int ccode)
- {
- USHORT logicalPalette = PM_ACTIVE;
- if (FlagSet(woFlags, WOF_NON_SELECTABLE))
- logicalPalette = PM_NON_SELECTABLE;
- else if (FlagSet(woAdvancedStatus, WOAS_TOO_SMALL) || FlagSet(woFlags, WOF_VIEW_ONLY))
- logicalPalette = PM_VIEW;
- else if (ccode == S_DISPLAY_INACTIVE)
- logicalPalette = PM_INACTIVE;
- else if (ccode == S_NON_CURRENT && FlagSet(woStatus, WOS_SELECTED))
- logicalPalette = PM_SELECTED;
- else if (ccode == S_NON_CURRENT)
- logicalPalette = PM_ACTIVE;
- else if (FlagSet(woStatus, WOS_CURRENT) &&
- (!parent || FlagSet(parent->woStatus, WOS_CURRENT)))
- logicalPalette = PM_CURRENT;
- else if (FlagSet(woStatus, WOS_SELECTED))
- logicalPalette = PM_SELECTED;
-
- return (MapPalette(paletteMapTable, logicalPalette, windowID[0],
- windowID[1], windowID[2], windowID[3]));
- }
-
- #ifdef ZIL_LOAD
- #pragma argsused
- UI_WINDOW_OBJECT::UI_WINDOW_OBJECT(const char *name, UI_STORAGE *file, USHORT loadFlags) :
- parent(0), display(0), eventManager(0), windowManager(0),
- paletteMapTable(_normalPaletteMapTable),
- lastPalette(&paletteMapTable[0].palette), Validate(0), hotKey(0),
- screenID(-1), woStatus(WOS_NO_STATUS), woAdvancedStatus(WOAS_NO_STATUS)
- {
- if (!file)
- {
- char pathName[64], fileName[32], objectName[32];
- UI_STORAGE::StripFullPath(name, pathName, fileName, objectName);
- UI_STORAGE::AppendFullPath(pathName, pathName, fileName);
- UI_STORAGE::ChangeExtension(pathName, ".DAT");
- file = _storage = new UI_STORAGE(pathName, TRUE);
- file->stStatus |= STS_TEMPORARY;
- UI_STORAGE_ELEMENT *element = file->Seek(objectName, SEEK_READ);
- search = element->search;
- }
- else if (name)
- {
- UI_STORAGE_ELEMENT *element = file->Seek(name, SEEK_READ);
- search = element->search;
- }
-
- windowID[0] = windowID[1] = windowID[2] = windowID[3] = windowID[4] =
- ID_WINDOW_OBJECT;
- file->Load(&search, sizeof(search));
- file->Load(&woFlags);
- file->Load(&woAdvancedFlags);
- file->Load(&relative, sizeof(relative));
- file->Load(&helpContext);
- true = relative;
- }
- #endif
-
- #ifdef ZIL_STORE
- #pragma argsused
- void UI_WINDOW_OBJECT::Store(const char *name, UI_STORAGE *file, USHORT storeFlags)
- {
- if (!file)
- {
- char pathName[64], fileName[32], objectName[32];
- UI_STORAGE::StripFullPath(name, pathName, fileName, objectName);
- UI_STORAGE::AppendFullPath(pathName, pathName, fileName);
- UI_STORAGE::ChangeExtension(pathName, ".DAT");
- file = _storage = new UI_STORAGE(pathName, TRUE);
- file->stStatus |= STS_TEMPORARY;
- if (objectName[0] == '\0' && search.stringID[0] == '\0')
- {
- strcpy(objectName, "RESOURCE_1");
- for (int i = 2; file->Seek(objectName, SEEK_READ); i++)
- sprintf(objectName, "RESOURCE_%d", i++);
- search.numberID = i;
- }
- else if (objectName[0] == '\0')
- strcpy(objectName, search.stringID);
- UI_STORAGE_ELEMENT *element = file->Seek(objectName, SEEK_WRITE);
- element->search.type = windowID[0];
- element->search.numberID = search.numberID;
- strcpy(search.stringID, objectName);
- search.offset = element->search.offset;
- search.size = element->search.size;
- }
- else if (name)
- {
- UI_STORAGE_ELEMENT *element = file->Seek(name, SEEK_WRITE);
- element->search.type = windowID[0];
- element->search.numberID = search.numberID;
- strcpy(search.stringID, name);
- search.offset = element->search.offset;
- search.size = element->search.size;
- }
- else if (!FlagSet(storeFlags, S_SKIP_TYPE))
- file->Store(search.type);
-
- file->Store(&search, sizeof(search));
- file->Store(woFlags);
- file->Store(woAdvancedFlags);
- if (!parent)
- relative = true;
- UI_REGION region = relative;
- if (display && !display->isText)
- {
- region.left /= display->cellWidth;
- region.top /= display->cellHeight;
- region.right /= display->cellWidth;
- region.bottom /= display->cellHeight;
- }
- file->Store(®ion, sizeof(region));
- file->Store(helpContext);
- }
- #endif
-