home *** CD-ROM | disk | FTP | other *** search
- // Zinc Interface Library - ERRORWIN.CPP
- // COPYRIGHT (C) 1990, 1991. All Rights Reserved.
- // Zinc Software Incorporated. Pleasant Grove, Utah USA
-
- #include "ui_win.hpp"
- #include <dos.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
-
- const int MAX_ERROR_MESSAGE = 2048;
-
- const int ERROR_CONTINUE = 0x0001;
- const int ERROR_UNANSWERED = 0x0002;
- const int ERROR_INVALID = 0x0003;
-
- static void ErrorControl(void *data, UI_EVENT &event)
- {
- UIW_PULL_DOWN_ITEM *item = (UIW_PULL_DOWN_ITEM *)data;
-
- // Push on the error message so edit object can redisplay cursor.
- event.type = S_ERROR_RESPONSE;
- if (item->value == ERROR_INVALID)
- event.rawCode = WOS_INVALID;
- else if (item->value == ERROR_UNANSWERED)
- event.rawCode = WOS_UNANSWERED;
- else
- event.rawCode = 0;
- item->eventManager->Put(event, Q_BEGIN);
-
- // Push on a window delete message. This deletes the error window.
- event.type = S_CLOSE;
- item->eventManager->Put(event, Q_BEGIN);
- }
-
- UI_ERROR_WINDOW_SYSTEM::UI_ERROR_WINDOW_SYSTEM() :
- UIW_WINDOW(10, 3, -10, 6, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_DESTROY,
- NO_HELP_CONTEXT)
- {
- UIW_PULL_DOWN_ITEM *continueEdit, *leaveUnanswered, *leaveInvalid;
- message = new char[MAX_ERROR_MESSAGE];
- message[0] = '\0';
-
- paletteMapTable = _errorPaletteMapTable;
- *this
- + new UIW_BORDER
- + new UIW_MAXIMIZE_BUTTON
- + new UIW_MINIMIZE_BUTTON
- + UIW_SYSTEM_BUTTON::Generic()
- + new UIW_TITLE("Error")
- + &(*new UIW_PULL_DOWN_MENU(0, WOF_NO_FLAGS, WOAF_NO_FLAGS)
- + (continueEdit = new UIW_PULL_DOWN_ITEM(" ~Continue Edit ",
- MNF_NO_FLAGS, ErrorControl, ERROR_CONTINUE))
- + (leaveUnanswered = new UIW_PULL_DOWN_ITEM(" Leave ~Unanswered ",
- MNF_NO_FLAGS, ErrorControl, ERROR_UNANSWERED))
- + (leaveInvalid = new UIW_PULL_DOWN_ITEM(" Leave ~Invalid ",
- MNF_NO_FLAGS, ErrorControl, ERROR_INVALID)))
- + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL, WOF_NON_FIELD_REGION)
- + new UIW_TEXT(0, 0, 0, 0, message, MAX_ERROR_MESSAGE, TXF_NO_FLAGS,
- WOF_NO_ALLOCATE_DATA | WOF_VIEW_ONLY | WOF_NON_FIELD_REGION);
-
- continueEdit->NumberID(ERROR_CONTINUE);
- leaveUnanswered->NumberID(ERROR_UNANSWERED);
- leaveInvalid->NumberID(ERROR_INVALID);
- }
-
- UI_ERROR_WINDOW_SYSTEM::~UI_ERROR_WINDOW_SYSTEM()
- {
- // Delete the error window system class information.
- delete message;
- if (windowManager)
- *windowManager - this;
- }
-
- void UI_ERROR_WINDOW_SYSTEM::ReportError(UI_WINDOW_MANAGER *a_windowManager,
- USHORT woFlags, char *format, ...)
- {
- // Beep, then display the error.
- Beep();
- if (!a_windowManager)
- return;
-
- // Format the error message.
- va_list arguments;
- va_start(arguments, format);
- vsprintf(message, format, arguments);
-
- // Add the error window to the window manager.
- UIW_PULL_DOWN_ITEM *leaveUnanswered = (UIW_PULL_DOWN_ITEM *)UIW_WINDOW::Get(ERROR_UNANSWERED);
- if (FlagSet(woFlags, WOF_NO_UNANSWERED))
- leaveUnanswered->woFlags |= WOF_NON_SELECTABLE;
- else
- leaveUnanswered->woFlags &= ~WOF_NON_SELECTABLE;
- UIW_PULL_DOWN_ITEM *leaveInvalid = (UIW_PULL_DOWN_ITEM *)UIW_WINDOW::Get(ERROR_INVALID);
- if (FlagSet(woFlags, WOF_NO_INVALID))
- leaveInvalid->woFlags |= WOF_NON_SELECTABLE;
- else
- leaveInvalid->woFlags &= ~WOF_NON_SELECTABLE;
- *a_windowManager + this;
- }
-