home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 14 / CDACTUAL.iso / cdactual / demobin / share / program / c / ZINCDEMO.ZIP / ZINCDEMO.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-15  |  37.7 KB  |  935 lines

  1. //    Zinc Application Framework 3.5 Demonstration - ZINCDEMO.CPP
  2. //    COPYRIGHT (C) 1990-1993.  All Rights Reserved.
  3. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  4.  
  5. #include <string.h>
  6. #include <ui_win.hpp>
  7. #if defined(ZIL_PENDOS)
  8. #include <ui_pen.hpp>
  9. #endif
  10. #define USE_HELP_CONTEXTS
  11. #include "zincpost.hpp"
  12.  
  13. UIW_WINDOW *_sampleWindow = NULL;
  14. UIW_WINDOW *demoWindow = NULL;
  15. UIW_TEXT *_information = NULL;
  16. UI_STORAGE *_storage = NULL;
  17. char *message = "Zinc 3.5 Demonstration.";
  18.  
  19. void HelpInformation(const char *helpName)
  20. {
  21.     if (!_storage)
  22.         return;
  23.  
  24.     _storage->ChDir("~UI_HELP");
  25.     UI_STORAGE_OBJECT hFile(*_storage, helpName, ID_HELP_CONTEXT, UIS_READ);
  26.     if (!hFile.objectError)
  27.     {
  28.         char *message;                    // Read the help context title.
  29.         hFile.Load(&message);
  30.         delete message;
  31.         hFile.Load(&message);            // Read the help context.
  32.          _information->DataSet(message);
  33.         delete message;
  34.     }
  35. }
  36.  
  37. EVENT_TYPE About(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  38. {
  39.     if (ccode != L_SELECT)
  40.         return (ccode);
  41.  
  42.     // Compute the window region.
  43.     UI_DISPLAY *display = object->display;
  44.     int width = 42;
  45.     int height = display->isText ? 7 : 6;
  46.     int left = (display->columns / display->cellWidth - width) / 2;
  47.     int top = (display->lines / display->cellHeight - height) / 2;
  48.  
  49.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  50.     *window
  51.         + new UIW_BORDER
  52.         + &(*new UIW_SYSTEM_BUTTON
  53.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  54.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  55.         + new UIW_TITLE("About...");
  56.     if (display->isText)
  57.         *window
  58.             + new UIW_STRING(2, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  59.     else
  60.         *window
  61.             + new UIW_ICON(3, 1, "minIcon")
  62.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  63.     *window
  64.         + new UIW_BUTTON(15, height - 3, 10, "~OK",
  65.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  66.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  67.     object->windowManager->Add(window);
  68.     return (ccode);
  69. }
  70.  
  71. EVENT_TYPE Exit(UI_DISPLAY *display, UI_EVENT_MANAGER *, UI_WINDOW_MANAGER *windowManager)
  72. {
  73.     // Compute the window region.
  74.     int width = 44;
  75.     int height = display->isText ? 7 : 6;
  76.     int left = (display->columns / display->cellWidth - width) / 2;
  77.     int top = (display->lines / display->cellHeight - height) / 2;
  78.  
  79.     // Create the exit window.
  80.     char *message = "This will close the demonstration.";
  81.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height,
  82.         WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  83.     *window
  84.         + new UIW_BORDER
  85.         + &(*new UIW_SYSTEM_BUTTON
  86.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  87.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  88.         + new UIW_TITLE(message);
  89.     if (display->isText)
  90.         *window
  91.             + new UIW_STRING(4, 1, 36, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  92.     else
  93.         *window
  94.             + new UIW_ICON(2, 1, "ASTERISK")
  95.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  96.     *window
  97.         + new UIW_BUTTON(10, height - 3, 10, "~OK",
  98.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  99.             WOF_JUSTIFY_CENTER, NULL, L_EXIT)
  100.         + new UIW_BUTTON(22, height - 3, 10, "~Cancel",
  101.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  102.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  103.     *windowManager + window;
  104.     return (S_CONTINUE);
  105. }
  106.  
  107. EVENT_TYPE Error(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  108. {
  109.     if (ccode == L_SELECT)
  110.     {
  111.         demoWindow->helpContext = HELP_ERROR_SYSTEM;
  112.         object->errorSystem->ReportError(object->windowManager, WOS_UNANSWERED,
  113.             "This window is used to present error information.");
  114.     }
  115.     return (ccode);
  116. }
  117.  
  118. EVENT_TYPE Help(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  119. {
  120.     if (ccode == L_SELECT)
  121.     {
  122.         EVENT_TYPE value;
  123.         object->Information(GET_VALUE, &value);
  124.         object->helpSystem->DisplayHelp(object->windowManager,
  125.             (UI_HELP_CONTEXT)value);
  126.     }
  127.     return (ccode);
  128. }
  129.  
  130. EVENT_TYPE ButtonWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  131. {
  132.     if (ccode == L_SELECT)
  133.     {
  134.         _sampleWindow->Destroy();
  135.         if (_sampleWindow->display->isText)
  136.         {
  137.             *_sampleWindow
  138.                    + new UIW_BUTTON(10, 2, 9,  "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  139.                    + new UIW_BUTTON(10, 4, 9,  "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  140.                    + new UIW_BUTTON(10, 6, 9,  "Help", BTF_NO_TOGGLE | BTF_AUTO_SIZE);
  141.         }
  142.         else
  143.         {
  144.             *_sampleWindow
  145.                 + new UIW_BUTTON(7, 1, 5, NULL, BTF_NO_TOGGLE,
  146.                     WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  147.                 + new UIW_BUTTON(7, 3, 5, NULL, BTF_NO_TOGGLE,
  148.                     WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  149.                 + new UIW_BUTTON(7, 5, 5, NULL, BTF_NO_TOGGLE,
  150.                     WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")
  151.                    + new UIW_BUTTON(20, 1, 8, "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  152.                    + new UIW_BUTTON(20, 3, 8, "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  153.                 + new UIW_BUTTON(20, 5, 10, "Mixed", BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  154.                     WOF_NO_FLAGS, NULL, 0, "file");
  155.         }
  156.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  157.         HelpInformation("INFO_BUTTON");
  158.     }
  159.     return (ccode);
  160. }
  161.  
  162. EVENT_TYPE CheckWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  163. {
  164.     if (ccode == L_SELECT)
  165.     {
  166.         _sampleWindow->Destroy();
  167.         *_sampleWindow
  168.             + &(*new UIW_GROUP(8, 1, 22, 5, "Check Box Group", WNF_SELECT_MULTIPLE)
  169.                  + new UIW_BUTTON(2, 1, 18, "Check Box A", BTF_CHECK_BOX, WOF_NO_FLAGS)
  170.                 + new UIW_BUTTON(2, 2, 18, "Check Box B", BTF_CHECK_BOX, WOF_NO_FLAGS)
  171.                 + new UIW_BUTTON(2, 3, 18, "Check Box C", BTF_CHECK_BOX, WOF_NO_FLAGS)
  172.                    + new UIW_BUTTON(2, 4, 18, "Check Box D", BTF_CHECK_BOX, WOF_NO_FLAGS));
  173.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  174.         HelpInformation("INFO_CHECK_BOX");
  175.     }
  176.     return (ccode);
  177. }
  178.  
  179. EVENT_TYPE ComboWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  180. {
  181.     if (ccode == L_SELECT)
  182.     {
  183.         _sampleWindow->Destroy();
  184.         *_sampleWindow
  185.             + &(* new UIW_COMBO_BOX(1, 1, 17, 6)
  186.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  187.                 + new UIW_STRING(0, 0, 15, "Combo 1")
  188.                 + new UIW_STRING(0, 0, 15, "Combo 2")
  189.                 + new UIW_STRING(0, 0, 15, "Combo 3")
  190.                 + new UIW_STRING(0, 0, 15, "Combo 4")
  191.                 + new UIW_STRING(0, 0, 15, "Combo 5")   
  192.                 + new UIW_STRING(0, 0, 15, "Combo 6")   
  193.                 + new UIW_STRING(0, 0, 15, "Combo 7")   
  194.                 + new UIW_STRING(0, 0, 15, "Combo 8")   
  195.                 + new UIW_STRING(0, 0, 15, "Combo 9")   
  196.                 + new UIW_STRING(0, 0, 15, "Combo 10"));
  197.         *_sampleWindow
  198.             + &(* new UIW_COMBO_BOX(20, 1, 17, 6, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN)
  199.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  200.                 + new UIW_BUTTON(0, 0, 22, "String",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "string")
  201.                 + new UIW_BUTTON(0, 0, 22, "F String",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "fmtstr")
  202.                 + new UIW_BUTTON(0, 0, 22, "Text",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "text")
  203.                 + new UIW_BUTTON(0, 0, 22, "Date",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "date")
  204.                 + new UIW_BUTTON(0, 0, 22, "Time",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "time")
  205.                 + new UIW_BUTTON(0, 0, 22, "Number",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "number")
  206.                 + new UIW_BUTTON(0, 0, 22, "Button",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "button")
  207.                 + new UIW_BUTTON(0, 0, 22, "Radio",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "radio")
  208.                 + new UIW_BUTTON(0, 0, 22, "Chk Box",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "check")
  209.                 + new UIW_BUTTON(0, 0, 22, "Hz List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hlist")
  210.                 + new UIW_BUTTON(0, 0, 22, "Vt List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vlist")
  211.                 + new UIW_BUTTON(0, 0, 22, "Combo",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "combo")
  212.                 + new UIW_BUTTON(0, 0, 22, "Hz Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hscroll")
  213.                 + new UIW_BUTTON(0, 0, 22, "Vt Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vscroll")
  214.                 + new UIW_BUTTON(0, 0, 22, "Window",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "window")
  215.                 + new UIW_BUTTON(0, 0, 22, "Tool Bar",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "toolbar")
  216.                 + new UIW_BUTTON(0, 0, 22, "Prompt",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "prompt")
  217.                 + new UIW_BUTTON(0, 0, 22, "Group",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "group")
  218.                 + new UIW_BUTTON(0, 0, 22, "Icon",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "icon"));
  219.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  220.         HelpInformation("INFO_COMBO_BOX");
  221.     }
  222.     return (ccode);
  223. }
  224.  
  225. EVENT_TYPE DateWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  226. {
  227.     if (ccode == L_SELECT)
  228.     {
  229.         _sampleWindow->Destroy();
  230.         UI_DATE date;
  231.         *_sampleWindow
  232.                + new UIW_PROMPT(1, 1, "Default:")
  233.             + new UIW_DATE(12, 1, 25, &date, NULL)
  234.                + new UIW_PROMPT(1, 2, "Month:")
  235.             + new UIW_DATE(12, 2, 25, &date, NULL, DTF_ALPHA_MONTH)
  236.                + new UIW_PROMPT(1, 3, "Weekday:")
  237.             + new UIW_DATE(12, 3, 25, &date, NULL, DTF_SHORT_MONTH | DTF_SHORT_DAY)
  238.                + new UIW_PROMPT(1, 4, "Slash:")
  239.             + new UIW_DATE(12, 4, 25, &date, NULL, DTF_SLASH)
  240.                + new UIW_PROMPT(1, 5, "Military:")
  241.             + new UIW_DATE(12, 5, 25, &date, NULL, DTF_MILITARY_FORMAT);
  242.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  243.         HelpInformation("INFO_DATE");
  244.     }
  245.     return (ccode);
  246. }
  247.  
  248. class EXPORT FONT_STRING : public UIW_STRING
  249. {
  250. public:
  251.     FONT_STRING(int left, int top, int width, char *text, int maxLength,
  252.         LOGICAL_FONT _font, STF_FLAGS stFlags = STF_NO_FLAGS,
  253.         WOF_FLAGS woFlags = WOF_BORDER | WOF_AUTO_CLEAR) :
  254.         UIW_STRING(left, top, width, text, maxLength, stFlags, woFlags) { font = _font; }
  255.     virtual ~FONT_STRING(void) { };
  256. };
  257.  
  258.  
  259. EVENT_TYPE FontSupport(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  260. {
  261.     if (ccode == L_SELECT)
  262.     {
  263.         _sampleWindow->Destroy();
  264.         *_sampleWindow
  265.                + new UIW_PROMPT(1, 1, "System:")
  266.                + new FONT_STRING(10, 1, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SYSTEM_FONT,
  267.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  268.                + new UIW_PROMPT(1, 3, "Dialog:")
  269.                + new FONT_STRING(10, 3, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_DIALOG_FONT,
  270.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  271.                + new UIW_PROMPT(1, 5, "Small:")
  272.                + new FONT_STRING(10, 5, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SMALL_FONT,
  273.                 STF_NO_FLAGS, WOF_NON_SELECTABLE);
  274.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  275.  
  276.         HelpInformation("INFO_FONT_SUPPORT");
  277.     }
  278.     return (ccode);
  279. }
  280.  
  281. EVENT_TYPE FStringWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  282. {
  283.     if (ccode == L_SELECT)
  284.     {
  285.         _sampleWindow->Destroy();
  286.         *_sampleWindow
  287.                + new UIW_PROMPT(1, 2, "Phone #:")
  288.                + new UIW_FORMATTED_STRING(10, 2, 27, "8017858900", "LNNNLLNNNLNNNN", "(...) ...-....")
  289.                + new UIW_PROMPT(1, 3, "Part #:")
  290.                + new UIW_FORMATTED_STRING(10, 3, 27, "ABC1234", "LAAALNNNNL", "[...*0000]")
  291.                + new UIW_PROMPT(1, 4, "Serial #:")
  292.                + new UIW_FORMATTED_STRING(10, 4, 27, "634922", "LLLLLNNNNLNN", "#ZNC-....-..");
  293.  
  294.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  295.  
  296.         EVENT_TYPE value;
  297.         object->Information(GET_VALUE, &value);
  298.         if (value == HELP_FORMATTED_STRING)
  299.             HelpInformation("INFO_FORMATTED_STRING");
  300.         else
  301.             HelpInformation("INFO_PROMPT");
  302.     }
  303.     return (ccode);
  304. }
  305.  
  306. EVENT_TYPE HzListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  307. {
  308.     if (ccode == L_SELECT)
  309.     {
  310.         _sampleWindow->Destroy();
  311.         UIW_HZ_LIST *list = new UIW_HZ_LIST(1, 1, 36, 5, 12, 1, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  312.         *list
  313.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL)
  314.                + new UIW_BUTTON(0, 0, 12, "File.1", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  315.                + new UIW_BUTTON(0, 0, 12, "File.2", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  316.                + new UIW_BUTTON(0, 0, 12, "File.3", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  317.                + new UIW_BUTTON(0, 0, 12, "File.4", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  318.                + new UIW_BUTTON(0, 0, 12, "File.5", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  319.                + new UIW_BUTTON(0, 0, 12, "File.6", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  320.                + new UIW_BUTTON(0, 0, 12, "File.7", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  321.                + new UIW_BUTTON(0, 0, 12, "File.8", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  322.                + new UIW_BUTTON(0, 0, 12, "File.9", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  323.                + new UIW_BUTTON(0, 0, 12, "File.10", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  324.                + new UIW_BUTTON(0, 0, 12, "File.11", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  325.                + new UIW_BUTTON(0, 0, 12, "File.12", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  326.                + new UIW_BUTTON(0, 0, 12, "File.13", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  327.                + new UIW_BUTTON(0, 0, 12, "File.14", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  328.                + new UIW_BUTTON(0, 0, 12, "File.15", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  329.                + new UIW_BUTTON(0, 0, 12, "File.16", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  330.                + new UIW_BUTTON(0, 0, 12, "File.17", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  331.                + new UIW_BUTTON(0, 0, 12, "File.18", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  332.                + new UIW_BUTTON(0, 0, 12, "File.19", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  333.                + new UIW_BUTTON(0, 0, 12, "File.20", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file");
  334.         *_sampleWindow + list;
  335.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  336.  
  337.         EVENT_TYPE value;
  338.         object->Information(GET_VALUE, &value);
  339.         if (value == HELP_HLIST)
  340.             HelpInformation("INFO_HLIST");
  341.         else
  342.             HelpInformation("INFO_SCROLL_BAR");
  343.     }
  344.     return (ccode);
  345. }
  346.  
  347. EVENT_TYPE IconWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  348. {
  349.     if (ccode == L_SELECT)
  350.     {
  351.         _sampleWindow->Destroy();
  352.         *_sampleWindow
  353.             + new UIW_ICON(4, 2, "desk")
  354.             + new UIW_ICON(16, 2, "analog")
  355.             + new UIW_ICON(28, 2, "minIcon");
  356.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  357.  
  358.         HelpInformation("INFO_ICON");
  359.     }
  360.     return (ccode);
  361. }
  362.  
  363. EVENT_TYPE MenuWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  364. {
  365.     if (ccode == L_SELECT)
  366.     {
  367.         _sampleWindow->Destroy();
  368.         UIW_PULL_DOWN_MENU *menu = new UIW_PULL_DOWN_MENU();
  369.         *menu
  370.             + &(*new UIW_PULL_DOWN_ITEM("File")
  371.                 + new UIW_POP_UP_ITEM("Option 1", MNIF_NO_FLAGS, BTF_NO_3D)
  372.                    + new UIW_POP_UP_ITEM("Option 2", MNIF_NO_FLAGS, BTF_NO_3D)
  373.                    + new UIW_POP_UP_ITEM("Option 3", MNIF_NO_FLAGS, BTF_NO_3D))
  374.             + &(*new UIW_PULL_DOWN_ITEM("Cascade")
  375.                    + &(*new UIW_POP_UP_ITEM("Option 1", MNIF_NO_FLAGS, BTF_NO_3D)
  376.                      + new UIW_POP_UP_ITEM("Option 1.1", MNIF_NO_FLAGS, BTF_NO_3D)
  377.                     + &(* new UIW_POP_UP_ITEM("Option 1.2", MNIF_NO_FLAGS, BTF_NO_3D)
  378.                           + new UIW_POP_UP_ITEM("Option 1.2.1", MNIF_NO_FLAGS, BTF_NO_3D)
  379.                          + new UIW_POP_UP_ITEM("Option 1.2.2", MNIF_NO_FLAGS, BTF_NO_3D)
  380.                             + new UIW_POP_UP_ITEM("Option 1.2.3", MNIF_NO_FLAGS, BTF_NO_3D)))
  381.                    + new UIW_POP_UP_ITEM("Option 2", MNIF_NO_FLAGS, BTF_NO_3D)
  382.                    + new UIW_POP_UP_ITEM("Option 3", MNIF_NO_FLAGS, BTF_NO_3D));
  383.         *_sampleWindow
  384.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE)
  385.                 + new UIW_ICON(0, 0, "minIcon", "Menu Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  386.                 + new UIW_BORDER
  387.                 + new UIW_MAXIMIZE_BUTTON
  388.                 + new UIW_MINIMIZE_BUTTON
  389.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  390.                 + new UIW_TITLE("Menu Window")
  391.                 + menu);
  392.  
  393.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  394.  
  395.         EVENT_TYPE value;
  396.         object->Information(GET_VALUE, &value);
  397.         if (value == HELP_WINDOW)
  398.             HelpInformation("INFO_WINDOW");
  399.         else if (value == HELP_PULL_DOWN_MENU)
  400.             HelpInformation("INFO_PULL_DOWN_MENU");
  401.         else if (value == HELP_PULL_DOWN_ITEM)
  402.             HelpInformation("INFO_PULL_DOWN_ITEM");
  403.         else if (value == HELP_POP_UP_MENU)
  404.             HelpInformation("INFO_POP_UP_MENU");
  405.         else
  406.             HelpInformation("INFO_POP_UP_MENU_ITEM");
  407.     }
  408.     return (ccode);
  409. }
  410.  
  411. EVENT_TYPE NumberWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  412. {
  413.     if (ccode == L_SELECT)
  414.     {
  415.         _sampleWindow->Destroy();
  416.         UI_BIGNUM number(1234L);
  417.         UI_BIGNUM negNumber(-1234L);
  418.         *_sampleWindow
  419.                + new UIW_PROMPT(1, 1, "Default:")
  420.             + new UIW_BIGNUM(11, 1, 26, &number, NULL, NMF_NO_FLAGS)
  421.                + new UIW_PROMPT(1, 2, "No decimal:")
  422.             + new UIW_BIGNUM(11, 2, 26, &number, NULL, NMF_DECIMAL(0))
  423.                + new UIW_PROMPT(1, 3, "Currency:")
  424.             + new UIW_BIGNUM(11, 3, 26, &number, NULL, NMF_CURRENCY | NMF_COMMAS)
  425.                + new UIW_PROMPT(1, 4, "Credit:")
  426.             + new UIW_BIGNUM(11, 4, 26, &negNumber, NULL, NMF_CREDIT | NMF_COMMAS | NMF_DECIMAL(0))
  427.                + new UIW_PROMPT(1, 5, "Percent:")
  428.             + new UIW_BIGNUM(11, 5, 26, &number, NULL, NMF_PERCENT | NMF_DECIMAL(0));
  429.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  430.  
  431.         HelpInformation("INFO_BIGNUM");
  432.     }
  433.     return (ccode);
  434. }
  435.  
  436. EVENT_TYPE RadioWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  437. {
  438.     if (ccode == L_SELECT)
  439.     {
  440.         _sampleWindow->Destroy();
  441.         *_sampleWindow
  442.             + &(*new UIW_GROUP(8, 1, 22, 5, "Radio Button Group")
  443.                 + new UIW_BUTTON(2, 1, 18, "Radio Button 1", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  444.                    + new UIW_BUTTON(2, 2, 18, "Radio Button 2", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  445.                 + new UIW_BUTTON(2, 3, 18, "Radio Button 3", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  446.                    + new UIW_BUTTON(2, 4, 18, "Radio Button 4", BTF_RADIO_BUTTON, WOF_NO_FLAGS));
  447.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  448.  
  449.         EVENT_TYPE value;
  450.         object->Information(GET_VALUE, &value);
  451.         if (value == HELP_GROUP)
  452.             HelpInformation("INFO_GROUP");
  453.         else
  454.             HelpInformation("INFO_RADIO_BUTTON");
  455.     }
  456.     return (ccode);
  457. }
  458.  
  459. EVENT_TYPE StringWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  460. {
  461.     if (ccode == L_SELECT)
  462.     {
  463.         _sampleWindow->Destroy();
  464.             *_sampleWindow
  465.                + new UIW_PROMPT(1, 2, "Name:")
  466.                + new UIW_STRING(10, 2, 27, "Zinc Software Incorporated", 100)
  467.                + new UIW_PROMPT(1, 3, "Address:")
  468.                + new UIW_STRING(10, 3, 27, "405 South 100 East", 100)
  469.                + new UIW_STRING(10, 4, 27, "Pleasant Grove, UT", 100);
  470.  
  471.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  472.  
  473.         HelpInformation("INFO_STRING");
  474.     }
  475.     return (ccode);
  476. }
  477.  
  478. EVENT_TYPE TextWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  479. {
  480.     if (ccode == L_SELECT)
  481.     {
  482.         _sampleWindow->Destroy();
  483.         *_sampleWindow
  484.             + &(*new UIW_TEXT(1, 1, 36, 5, 
  485.                 "This is text to demonstrate a \r\n"
  486.                 "text field with scroll bars. \r\n"
  487.                 "Word wrap can also be used as \r\n"
  488.                 "shown below.", 256, WNF_NO_WRAP, WOF_BORDER | WOF_AUTO_CLEAR)
  489.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_CORNER)
  490.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  491.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL));
  492.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  493.  
  494.         HelpInformation("INFO_TEXT");
  495.     }
  496.     return (ccode);
  497. }
  498.  
  499. EVENT_TYPE TimeWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  500. {
  501.     if (ccode == L_SELECT)
  502.     {
  503.         _sampleWindow->Destroy();
  504.         UI_TIME time;
  505.         *_sampleWindow
  506.                + new UIW_PROMPT(1, 1, "Default:")
  507.             + new UIW_TIME(12, 1, 25, &time, NULL, TMF_NO_FLAGS)
  508.                + new UIW_PROMPT(1, 2, "Hours only:")
  509.             + new UIW_TIME(12, 2, 25, &time, NULL, TMF_NO_MINUTES)
  510.                + new UIW_PROMPT(1, 3, "Seconds:")
  511.             + new UIW_TIME(12, 3, 25, &time, NULL, TMF_SECONDS)
  512.                + new UIW_PROMPT(1, 4, "Hundredths:")
  513.             + new UIW_TIME(12, 4, 25, &time, NULL, TMF_SECONDS | TMF_HUNDREDTHS)
  514.                + new UIW_PROMPT(1, 5, "24 hour:")
  515.             + new UIW_TIME(12, 5, 25, &time, NULL, TMF_TWENTY_FOUR_HOUR);
  516.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  517.  
  518.         HelpInformation("INFO_TIME");
  519.     }
  520.     return (ccode);
  521. }
  522.  
  523. EVENT_TYPE ToolWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  524. {
  525.     if (ccode == L_SELECT)
  526.     {
  527.         _sampleWindow->Destroy();
  528.         *_sampleWindow
  529.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE)
  530.                 + new UIW_ICON(0, 0, "minIcon", "Tool Bar Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  531.                 + new UIW_BORDER
  532.                 + new UIW_MAXIMIZE_BUTTON
  533.                 + new UIW_MINIMIZE_BUTTON
  534.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  535.                 + new UIW_TITLE("Tool Bar Window")
  536.                 + &(*new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_WRAP)
  537.                     + new UIW_STRING(2, 0, 10, "Default", 100)
  538.                     + new UIW_BUTTON(15, 0, 5, NULL, BTF_NO_TOGGLE,
  539.                         WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  540.                     + new UIW_BUTTON(22, 0, 5, NULL, BTF_NO_TOGGLE,
  541.                         WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  542.                     + new UIW_BUTTON(29, 0, 5, NULL, BTF_NO_TOGGLE,
  543.                         WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")));
  544.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  545.  
  546.         HelpInformation("INFO_TOOL_BAR");
  547.     }
  548.     return (ccode);
  549. }
  550.  
  551. EVENT_TYPE VtListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  552. {
  553.     if (ccode == L_SELECT)
  554.     {
  555.         _sampleWindow->Destroy();
  556.         UIW_VT_LIST *list = new UIW_VT_LIST(1, 1, 17, 5, NULL, WNF_NO_WRAP);
  557.         *list
  558.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  559.                + new UIW_STRING(0, 0, 17, "Vt-Item 1", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  560.                + new UIW_STRING(0, 0, 17, "Vt-Item 2", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  561.                + new UIW_STRING(0, 0, 17, "Vt-Item 3", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  562.                + new UIW_STRING(0, 0, 17, "Vt-Item 4", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  563.                + new UIW_STRING(0, 0, 17, "Vt-Item 5", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  564.                + new UIW_STRING(0, 0, 17, "Vt-Item 6", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  565.                + new UIW_STRING(0, 0, 17, "Vt-Item 7", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  566.                + new UIW_STRING(0, 0, 17, "Vt-Item 8", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  567.                + new UIW_STRING(0, 0, 17, "Vt-Item 9", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  568.                + new UIW_STRING(0, 0, 17, "Vt-Item 10", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  569.                + new UIW_STRING(0, 0, 17, "Vt-Item 11", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  570.                + new UIW_STRING(0, 0, 17, "Vt-Item 12", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  571.                + new UIW_STRING(0, 0, 17, "Vt-Item 13", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  572.                + new UIW_STRING(0, 0, 17, "Vt-Item 14", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  573.                + new UIW_STRING(0, 0, 17, "Vt-Item 15", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  574.                + new UIW_STRING(0, 0, 17, "Vt-Item 16", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  575.                + new UIW_STRING(0, 0, 17, "Vt-Item 17", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  576.                + new UIW_STRING(0, 0, 17, "Vt-Item 18", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  577.                + new UIW_STRING(0, 0, 17, "Vt-Item 19", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  578.                + new UIW_STRING(0, 0, 17, "Vt-Item 20", 20, STF_NO_FLAGS, WOF_VIEW_ONLY);
  579.         *_sampleWindow + list;
  580.         list = new UIW_VT_LIST(20, 1, 17, 5, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  581.         *list
  582.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  583.             + new UIW_BUTTON(0, 0, 17, "c:\\", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  584.             + new UIW_BUTTON(1, 0, 16, "work", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  585.             + new UIW_BUTTON(1, 0, 16, "docs", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  586.             + new UIW_BUTTON(1, 0, 15, "compiler", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  587.             + new UIW_BUTTON(2, 0, 15, "bin", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  588.             + new UIW_BUTTON(2, 0, 15, "lib", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  589.             + new UIW_BUTTON(2, 0, 15, "include", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  590.             + new UIW_BUTTON(2, 0, 15, "util", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  591.             + new UIW_BUTTON(2, 0, 15, "examples", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  592.             + new UIW_BUTTON(2, 0, 15, "tutor", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory");
  593.         *_sampleWindow + list;
  594.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  595.  
  596.         EVENT_TYPE value;
  597.         object->Information(GET_VALUE, &value);
  598.         if (value == HELP_VLIST)
  599.             HelpInformation("INFO_VLIST");
  600.         else
  601.             HelpInformation("INFO_SCROLL_BAR");
  602.     }
  603.     return (ccode);
  604. }
  605.  
  606. static UI_ITEM toolBarItems[] =
  607. {
  608.     { HELP_STRING,                VOIDF(StringWindow),    "string",        0 },
  609.     { HELP_FORMATTED_STRING,    VOIDF(FStringWindow),    "fmtstr",        0 },
  610.     { HELP_TEXT,                VOIDF(TextWindow),        "text",            0 },
  611.     { HELP_DATE,                VOIDF(DateWindow),        "date",            0 },
  612.     { HELP_TIME,                VOIDF(TimeWindow),        "time",            0 },
  613.     { HELP_BIGNUM,                VOIDF(NumberWindow),    "number",        0 },
  614.     { HELP_BUTTON,                VOIDF(ButtonWindow),    "button",        0 },
  615.     { HELP_RADIO_BUTTON,        VOIDF(RadioWindow),        "radio",        0 },
  616.     { HELP_CHECK_BOX,            VOIDF(CheckWindow),        "check",        0 },
  617.     { HELP_HLIST,                VOIDF(HzListWindow),    "hlist",        0 },
  618.     { HELP_VLIST,                VOIDF(VtListWindow),    "vlist",        0 },
  619.     { HELP_COMBO_BOX,            VOIDF(ComboWindow),        "combo",        0 },
  620.     { HELP_SCROLL_BAR,            VOIDF(HzListWindow),    "hscroll",        0 },
  621.     { HELP_SCROLL_BAR,            VOIDF(VtListWindow),    "vscroll",        0 },
  622.     { HELP_WINDOW,                VOIDF(MenuWindow),        "window",        0 },
  623.     { HELP_PULL_DOWN_MENU,        VOIDF(MenuWindow),        "pllmenu",        0 },
  624.     { HELP_POP_UP_MENU,            VOIDF(MenuWindow),        "popmenu",        0 },
  625.     { HELP_TOOL_BAR,            VOIDF(ToolWindow),        "toolbar",        0 },
  626.     { HELP_PROMPT,                VOIDF(FStringWindow),    "prompt",        0 },
  627.     { HELP_GROUP,                VOIDF(RadioWindow),        "group",        0 },
  628.     { HELP_ICON,                VOIDF(IconWindow),        "icon",            0 },
  629.     { HELP_FONT_SUPPORT,        VOIDF(FontSupport),        "font",            0 },
  630.     { 0,                        NULL,                    NULL,            0 }
  631. };
  632.  
  633. static UI_ITEM listItems[] =
  634. {
  635.     { 0,                        NULL,                    "- INPUT OBJECTS -",            0 },
  636.     { HELP_STRING,                VOIDF(StringWindow),    "  String",                        0 },
  637.     { HELP_FORMATTED_STRING,    VOIDF(FStringWindow),    "  Formatted String",            0 },
  638.     { HELP_TEXT,                VOIDF(TextWindow),        "  Text",                        0 },
  639.     { HELP_DATE,                VOIDF(DateWindow),        "  Date",                        0 },
  640.     { HELP_TIME,                VOIDF(TimeWindow),        "  Time",                        0 },
  641.     { HELP_BIGNUM,                VOIDF(NumberWindow),    "  Number",                        0 },
  642.     { 0,                        NULL,                    "- CONTROL OBJECTS -",            0 },
  643.     { HELP_BUTTON,                VOIDF(ButtonWindow),    "  Button",                        0 },
  644.     { HELP_RADIO_BUTTON,        VOIDF(RadioWindow),        "  Radio-Button",                0 },
  645.     { HELP_CHECK_BOX,            VOIDF(CheckWindow),        "  Check Box",                    0 },
  646.     { HELP_HLIST,                VOIDF(HzListWindow),    "  Hz List",                    0 },
  647.     { HELP_VLIST,                VOIDF(VtListWindow),    "  Vt List",                    0 },
  648.     { HELP_COMBO_BOX,            VOIDF(ComboWindow),        "  Combo-Box",                    0 },
  649.     { HELP_SCROLL_BAR,            VOIDF(HzListWindow),    "  Hz Scroll",                    0 },
  650.     { HELP_SCROLL_BAR,            VOIDF(VtListWindow),    "  Vt Scroll",                    0 },
  651.     { HELP_WINDOW,                VOIDF(MenuWindow),        "  Window",                        0 },
  652.     { 0,                        NULL,                    "- MENU OBJECTS -",                 0 },
  653.     { HELP_PULL_DOWN_MENU,        VOIDF(MenuWindow),        "  Pull-Down Menu",                0 },
  654.     { HELP_POP_UP_MENU,            VOIDF(MenuWindow),        "  Pop-Up Menu",                0 },
  655.     { HELP_TOOL_BAR,            VOIDF(ToolWindow),        "  Tool Bar",                    0 },
  656.     { 0,                        NULL,                    "- STATIC OBJECTS -",             0 },
  657.     { HELP_PROMPT,                VOIDF(FStringWindow),    "  Prompt",                        0 },
  658.     { HELP_GROUP,                VOIDF(RadioWindow),        "  Group",                        0 },
  659.     { HELP_ICON,                VOIDF(IconWindow),        "  Icon",                        0 },
  660.     { 0,                        NULL,                    "- OTHER OBJECTS -",             0 },
  661.     { HELP_KEYBOARD,            VOIDF(Help),            "  Keyboard",                    0 },
  662.     { HELP_MOUSE,                VOIDF(Help),            "  Mouse",                        0 },
  663.     { HELP_PEN,                    VOIDF(Help),            "  Pen",                        0 },
  664.     { HELP_HELP_SYSTEM,            VOIDF(Help),            "  Help System",                0 },
  665.     { HELP_ERROR_SYSTEM,        VOIDF(Error),            "  Error System",                0 },
  666.     { HELP_FONT_SUPPORT,        VOIDF(FontSupport),        "  Font Support",                0 },
  667.     { 0,                        NULL,                    NULL,                            0 }
  668. };
  669.  
  670. #if defined(ZIL_MSDOS)
  671. main(int argc, char *argv[])
  672. {
  673.     // Set up the storage and display search path.
  674.     UI_PATH searchPath(argv[0], TRUE);
  675.  
  676.     UI_DISPLAY *display = NULL;
  677.     if (argc <= 1 || (argv[1][1] != 't' && argv[1][1] != 'T'))
  678.     {
  679.         display = new UI_GRAPHICS_DISPLAY;
  680. //        display = new UI_BGI_DISPLAY;
  681. //        display = new UI_FG_DISPLAY;
  682. //        display = new UI_MSC_DISPLAY;
  683.  
  684.     }
  685.     if (!display || !display->installed)
  686.     {
  687.         if (display)
  688.             delete display;
  689.         display = new UI_TEXT_DISPLAY;
  690.     }    
  691. #elif defined(ZIL_MSWINDOWS)
  692. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR, int nCmdShow)
  693. {
  694.     // Set up the storage and display search path.
  695.     UI_PATH searchPath;
  696.  
  697.     // Create the display.
  698.     UI_DISPLAY *display = new UI_MSWINDOWS_DISPLAY(hInstance, hPrevInstance, nCmdShow);
  699. #elif defined(ZIL_OS2)
  700. main(int argc, char *argv[])
  701. {
  702.     // Set up the storage and display search path.
  703.     UI_PATH searchPath(argv[0], TRUE);
  704.  
  705.     // Create the display.
  706.     UI_DISPLAY *display = new UI_OS2_DISPLAY;
  707. #elif defined(ZIL_MOTIF)
  708. main(int argc, char *argv[])
  709. {
  710.     // Set up the storage and display search path.
  711.     UI_PATH searchPath;
  712.  
  713.     UI_DISPLAY *display = new UI_MOTIF_DISPLAY(&argc, argv);
  714. #endif
  715.  
  716.     UI_EVENT_MANAGER *eventManager = new UI_EVENT_MANAGER(display);
  717.     *eventManager
  718.         + new UID_KEYBOARD
  719. #if defined(ZIL_PENDOS)
  720.         + new UID_PENDOS
  721. #else
  722.         + new UID_MOUSE
  723. #endif
  724.         + new UID_CURSOR;
  725.  
  726.     UI_WINDOW_MANAGER *windowManager = new UI_WINDOW_MANAGER(display,
  727.         eventManager, Exit);
  728.  
  729.     UID_KEYBOARD::breakHandlerSet = L_EXIT_FUNCTION;
  730.  
  731.     // Initialize the default storage.
  732.     UI_STORAGE::searchPath = &searchPath;
  733.     _storage = new UI_STORAGE("zincpost.dat", UIS_READ);
  734.     UI_WINDOW_OBJECT::defaultStorage = _storage;
  735.  
  736.     // Attach the error and help systems.
  737.     UI_WINDOW_OBJECT::errorSystem = new UI_ERROR_SYSTEM;
  738.     UI_WINDOW_OBJECT::helpSystem = new UI_HELP_SYSTEM("zincpost.dat",
  739.         windowManager, HELP_GENERAL);
  740.  
  741.     // Check for data file errors.
  742.     if (UI_WINDOW_OBJECT::defaultStorage->storageError)
  743.     {
  744.         UI_WINDOW_OBJECT::errorSystem->ReportError(windowManager,
  745.             WOS_NO_STATUS, "Error opening the data file <ZINCPOST.DAT>.\n");
  746.  
  747.          delete UI_WINDOW_OBJECT::helpSystem;
  748.          delete UI_WINDOW_OBJECT::errorSystem;
  749.         delete _storage;
  750.         delete windowManager;
  751.         delete eventManager;
  752.         delete display;
  753.  
  754.         return (1);
  755.     }
  756.  
  757.     // Create the main menu and items to add to it.
  758.     UIW_PULL_DOWN_MENU *mainMenu = new UIW_PULL_DOWN_MENU;
  759.     UIW_PULL_DOWN_ITEM *fileMenu = new UIW_PULL_DOWN_ITEM("~File");
  760.     UIW_PULL_DOWN_ITEM *objectMenu = new UIW_PULL_DOWN_ITEM("~Object");
  761.     UIW_PULL_DOWN_ITEM *helpMenu = new UIW_PULL_DOWN_ITEM("~Help");
  762.  
  763.     // Add items to the File drop down menu.
  764.     *fileMenu
  765.         + new UIW_POP_UP_ITEM("E~xit", MNIF_NO_FLAGS, BTF_SEND_MESSAGE, WOF_NO_FLAGS, NULL, L_EXIT_FUNCTION)
  766.         + new UIW_POP_UP_ITEM
  767.         + new UIW_POP_UP_ITEM("~About...", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, About);
  768.  
  769.     // Create the cascaded menu for Input window objects.
  770.     UIW_POP_UP_ITEM *inputItem = new UIW_POP_UP_ITEM("~Input");
  771.     *inputItem
  772.         + new UIW_POP_UP_ITEM("~String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, StringWindow, HELP_STRING)
  773.         + new UIW_POP_UP_ITEM("~Formatted String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_FORMATTED_STRING)
  774.         + new UIW_POP_UP_ITEM("Te~xt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TextWindow, HELP_TEXT)
  775.         + new UIW_POP_UP_ITEM
  776.         + new UIW_POP_UP_ITEM("~Date", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, DateWindow, HELP_DATE)
  777.         + new UIW_POP_UP_ITEM("~Time", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TimeWindow, HELP_TIME)
  778.         + new UIW_POP_UP_ITEM(NULL)
  779.         + new UIW_POP_UP_ITEM("~Number", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, NumberWindow, HELP_BIGNUM);
  780.  
  781.     // Create the cascaded menu for Control window objects.
  782.     UIW_POP_UP_ITEM *controlItem = new UIW_POP_UP_ITEM("~Control");
  783.     *controlItem
  784.         + new UIW_POP_UP_ITEM("~Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ButtonWindow, HELP_BUTTON)
  785.         + new UIW_POP_UP_ITEM("~Radio Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_RADIO_BUTTON)
  786.         + new UIW_POP_UP_ITEM("~Check Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, CheckWindow, HELP_CHECK_BOX)
  787.         + new UIW_POP_UP_ITEM
  788.         + new UIW_POP_UP_ITEM("~Hz-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_HLIST)
  789.         + new UIW_POP_UP_ITEM("~Vt-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_VLIST)
  790.         + new UIW_POP_UP_ITEM("C~ombo Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ComboWindow, HELP_COMBO_BOX)
  791.         + new UIW_POP_UP_ITEM
  792.         + new UIW_POP_UP_ITEM("H~z-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_SCROLL_BAR)
  793.         + new UIW_POP_UP_ITEM("V~t-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_SCROLL_BAR)
  794.         + new UIW_POP_UP_ITEM
  795.         + new UIW_POP_UP_ITEM("Child ~Window", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_WINDOW);
  796.  
  797.     // Create the cascaded menu for Menu window objects.
  798.     UIW_POP_UP_ITEM *menuItem = new UIW_POP_UP_ITEM("~Menu");
  799.     *menuItem
  800.         + new UIW_POP_UP_ITEM("~Pull-Down Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_PULL_DOWN_MENU)
  801.         + new UIW_POP_UP_ITEM("Pop-Up ~Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_POP_UP_MENU)
  802.         + new UIW_POP_UP_ITEM("Tool ~Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ToolWindow, HELP_TOOL_BAR);
  803.  
  804.     // Create the cascaded menu for Static window objects.
  805.     UIW_POP_UP_ITEM *staticItem = new UIW_POP_UP_ITEM("~Static");
  806.     *staticItem
  807.         + new UIW_POP_UP_ITEM("~Prompt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_PROMPT)
  808.         + new UIW_POP_UP_ITEM("~Group", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_GROUP)
  809.         + new UIW_POP_UP_ITEM
  810.         + new UIW_POP_UP_ITEM("~Icon", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, IconWindow, HELP_ICON);
  811.  
  812.     // Add the cascaded menu items to the Object drop down menu.
  813.     *objectMenu
  814.         + inputItem
  815.         + controlItem
  816.         + menuItem
  817.         + staticItem;
  818.  
  819.     // Add items to the Help drop down menu.
  820.     *helpMenu
  821.         + new UIW_POP_UP_ITEM("~General", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_GENERAL)
  822.         + new UIW_POP_UP_ITEM("~Order info", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ORDER_INFORMATION)
  823.         + new UIW_POP_UP_ITEM
  824.         + new UIW_POP_UP_ITEM("~Screen display", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_SCREEN_DISPLAY)
  825.         + new UIW_POP_UP_ITEM("~Event manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_EVENT_MANAGER)
  826.         + new UIW_POP_UP_ITEM("~Window manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_WINDOW_MANAGER)
  827.         + new UIW_POP_UP_ITEM("~Application class", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_APPLICATION)
  828.         + new UIW_POP_UP_ITEM
  829.         + new UIW_POP_UP_ITEM("~Zinc Designer", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ZINC_DESIGNER)
  830.         + new UIW_POP_UP_ITEM("~Persistent objects", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_PERSISTENT_OBJECTS)
  831.         + new UIW_POP_UP_ITEM("~Class hierarchy", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_CLASS_HIERARCHY)
  832.         + new UIW_POP_UP_ITEM
  833.         + new UIW_POP_UP_ITEM("~Video training", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_VIDEO);
  834.  
  835.     // Add the pull-down items (with their menus) to the main menu.
  836.     *mainMenu
  837.         + fileMenu
  838.         + objectMenu
  839.         + helpMenu;
  840.  
  841.     // Create main window and add objects (border, menu, minimize icon, etc.) to it.
  842.     int width = 74;
  843.     int height = display->isText ? 16 : 18;
  844.     int left = (display->columns / display->cellWidth - width) / 2;
  845.     int top = (display->lines / display->cellHeight - height) / 2;
  846.     if (top < 0)
  847.         top = 0;
  848.     demoWindow = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_NO_SIZE);
  849.     *demoWindow
  850.         + new UIW_ICON(0, 0, "minIcon", "Zinc Demo", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  851.         + new UIW_BORDER
  852.         + new UIW_MAXIMIZE_BUTTON
  853.         + new UIW_MINIMIZE_BUTTON
  854.         + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  855.         + new UIW_TITLE(message)
  856.         + mainMenu;
  857.  
  858.     // Create the tool bar and add it to the window.
  859.     if (!display->isText && top > 0)
  860.     {
  861.         UIW_TOOL_BAR *toolBar = new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_FLAGS,
  862.             WOF_BORDER | WOF_NON_FIELD_REGION, WOAF_NO_FLAGS);
  863.         for (int i = 0; toolBarItems[i].text; i++)
  864.         {
  865.             UIW_BUTTON *button = new UIW_BUTTON(0, 0, 6, NULL,
  866.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  867.                 WOF_JUSTIFY_CENTER, (USER_FUNCTION)toolBarItems[i].data,
  868.                 toolBarItems[i].value, toolBarItems[i].text);
  869.             button->helpContext = (UI_HELP_CONTEXT)toolBarItems[i].value;
  870.             *toolBar + button;
  871.         }
  872.         *demoWindow + toolBar;
  873.     }
  874.  
  875.     // Create the object list and add it to the window.
  876.     UIW_VT_LIST *sampleList = new UIW_VT_LIST(2, 1, 30, 11, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  877.     *sampleList + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  878.     for (int i = 0; listItems[i].text; i++)
  879.     {
  880.         if (listItems[i].value)
  881.         {
  882.             UIW_BUTTON *button = new UIW_BUTTON(0, 0, 28, listItems[i].text,
  883.                 BTF_RADIO_BUTTON, WOF_NO_FLAGS,
  884.                 (USER_FUNCTION)listItems[i].data, listItems[i].value);
  885.             button->helpContext = (UI_HELP_CONTEXT)listItems[i].value;
  886.             *sampleList + button;
  887.         }
  888.         else
  889.             *sampleList + new UIW_STRING(0, 0, 29, listItems[i].text,
  890.                 -1, STF_NO_FLAGS, WOF_NON_SELECTABLE);
  891.     }
  892.     *demoWindow + sampleList;
  893.  
  894.     // Create the sample window area and add it to the window.
  895.     _sampleWindow = new UIW_WINDOW(34, 0, 38, 7, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE);
  896.     _sampleWindow->wnFlags |= WNF_NO_WRAP;
  897.     *demoWindow + _sampleWindow;
  898.  
  899.     // Create the information text field and add it to the window.
  900.     _information = new UIW_TEXT(35, 7, 36, 5, NULL, 2048, WNF_NO_FLAGS, WOF_BORDER | WOF_VIEW_ONLY);
  901.     *_information + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  902.     *demoWindow + _information;
  903.  
  904.     // Add the demonstration window to the window manager (to be displayed).
  905.     *windowManager + demoWindow;
  906.  
  907.     // This line assigns the exit function to be called before the demo
  908.     // window is closed.  It MUST be after the window is added to windowManager.
  909.     windowManager->screenID = demoWindow->screenID;
  910.  
  911.     // Initialize the information text field.
  912.     HelpInformation("INFO_GENERAL");
  913.  
  914.     // Process user events.
  915.     EVENT_TYPE ccode;
  916.     do
  917.     {
  918.         UI_EVENT event;
  919.         eventManager->Get(event);
  920.         ccode = windowManager->Event(event);
  921.     } while (ccode != L_EXIT && ccode != S_NO_OBJECT);
  922.  
  923.     // Clean up.
  924.      delete UI_WINDOW_OBJECT::helpSystem;
  925.      delete UI_WINDOW_OBJECT::errorSystem;
  926.     delete _storage;
  927.     delete windowManager;
  928.     delete eventManager;
  929.     delete display;
  930.  
  931.     return (0);
  932. }
  933.  
  934.  
  935.