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

  1. //    Zinc Interface Library - ERRORWIN.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 <dos.h>
  7. #include <stdio.h>
  8. #include <stdarg.h>
  9. #include <string.h>
  10.  
  11. const int MAX_ERROR_MESSAGE = 2048;
  12.  
  13. const int ERROR_CONTINUE    = 0x0001;
  14. const int ERROR_UNANSWERED    = 0x0002;
  15. const int ERROR_INVALID        = 0x0003;
  16.  
  17. static void ErrorControl(void *data, UI_EVENT &event)
  18. {
  19.     UIW_PULL_DOWN_ITEM *item = (UIW_PULL_DOWN_ITEM *)data;
  20.  
  21.     // Push on the error message so edit object can redisplay cursor.
  22.     event.type = S_ERROR_RESPONSE;
  23.     if (item->value == ERROR_INVALID)
  24.         event.rawCode = WOS_INVALID;
  25.     else if (item->value == ERROR_UNANSWERED)
  26.         event.rawCode = WOS_UNANSWERED;
  27.     else
  28.         event.rawCode = 0;
  29.     item->eventManager->Put(event, Q_BEGIN);
  30.  
  31.     // Push on a window delete message.  This deletes the error window.
  32.     event.type = S_CLOSE;
  33.     item->eventManager->Put(event, Q_BEGIN);
  34. }
  35.  
  36. UI_ERROR_WINDOW_SYSTEM::UI_ERROR_WINDOW_SYSTEM() :
  37.     UIW_WINDOW(10, 3, -10, 6, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_DESTROY,
  38.         NO_HELP_CONTEXT)
  39. {
  40.     UIW_PULL_DOWN_ITEM *continueEdit, *leaveUnanswered, *leaveInvalid;
  41.     message = new char[MAX_ERROR_MESSAGE];
  42.     message[0] = '\0';
  43.  
  44.     paletteMapTable = _errorPaletteMapTable;
  45.     *this
  46.         + new UIW_BORDER
  47.         + new UIW_MAXIMIZE_BUTTON
  48.         + new UIW_MINIMIZE_BUTTON
  49.         + UIW_SYSTEM_BUTTON::Generic()
  50.         + new UIW_TITLE("Error")
  51.         + &(*new UIW_PULL_DOWN_MENU(0, WOF_NO_FLAGS, WOAF_NO_FLAGS)
  52.             + (continueEdit = new UIW_PULL_DOWN_ITEM(" ~Continue Edit ",
  53.                 MNF_NO_FLAGS, ErrorControl, ERROR_CONTINUE))
  54.             + (leaveUnanswered = new UIW_PULL_DOWN_ITEM(" Leave ~Unanswered ",
  55.                 MNF_NO_FLAGS, ErrorControl, ERROR_UNANSWERED))
  56.             + (leaveInvalid = new UIW_PULL_DOWN_ITEM(" Leave ~Invalid ",
  57.                 MNF_NO_FLAGS, ErrorControl, ERROR_INVALID)))
  58.         + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL, WOF_NON_FIELD_REGION)
  59.         + new UIW_TEXT(0, 0, 0, 0, message, MAX_ERROR_MESSAGE, TXF_NO_FLAGS,
  60.             WOF_NO_ALLOCATE_DATA | WOF_VIEW_ONLY | WOF_NON_FIELD_REGION);
  61.  
  62.     continueEdit->NumberID(ERROR_CONTINUE);
  63.     leaveUnanswered->NumberID(ERROR_UNANSWERED);
  64.     leaveInvalid->NumberID(ERROR_INVALID);
  65. }
  66.  
  67. UI_ERROR_WINDOW_SYSTEM::~UI_ERROR_WINDOW_SYSTEM()
  68. {
  69.     // Delete the error window system class information.
  70.     delete message;
  71.     if (windowManager)
  72.         *windowManager - this;
  73. }
  74.  
  75. void UI_ERROR_WINDOW_SYSTEM::ReportError(UI_WINDOW_MANAGER *a_windowManager,
  76.     USHORT woFlags, char *format, ...)
  77. {
  78.     // Beep, then display the error.
  79.     Beep();
  80.     if (!a_windowManager)
  81.         return;
  82.  
  83.     // Format the error message.
  84.     va_list arguments;
  85.     va_start(arguments, format);
  86.     vsprintf(message, format, arguments);
  87.  
  88.     // Add the error window to the window manager.
  89.     UIW_PULL_DOWN_ITEM *leaveUnanswered = (UIW_PULL_DOWN_ITEM *)UIW_WINDOW::Get(ERROR_UNANSWERED);
  90.     if (FlagSet(woFlags, WOF_NO_UNANSWERED))
  91.         leaveUnanswered->woFlags |= WOF_NON_SELECTABLE;
  92.     else
  93.         leaveUnanswered->woFlags &= ~WOF_NON_SELECTABLE;
  94.     UIW_PULL_DOWN_ITEM *leaveInvalid = (UIW_PULL_DOWN_ITEM *)UIW_WINDOW::Get(ERROR_INVALID);
  95.     if (FlagSet(woFlags, WOF_NO_INVALID))
  96.         leaveInvalid->woFlags |= WOF_NON_SELECTABLE;
  97.     else
  98.         leaveInvalid->woFlags &= ~WOF_NON_SELECTABLE;
  99.     *a_windowManager + this;
  100. }
  101.