home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv8.zip / VACPP / IBMCPP / samples / IOC / MSGBOX / MSGBOX.CPP < prev    next >
C/C++ Source or Header  |  1995-05-01  |  11KB  |  249 lines

  1. /*****************************************************************************
  2. * FILE NAME: msgbox.cpp         (Message Box Sample Program)                 *
  3. *                                                                            *
  4. * COPYRIGHT: Copyright (C) International Business Machines Corp., 1992,1995. *
  5. *                                                                            *
  6. * DISCLAIMER OF WARRANTIES:                                                  *
  7. *   The following [enclosed] code is sample code created by IBM              *
  8. *   Corporation.  This sample code is not part of any standard IBM product   *
  9. *   and is provided to you solely for the purpose of assisting you in the    *
  10. *   development of your applications.  The code is provided "AS IS",         *
  11. *   without warranty of any kind.  IBM shall not be liable for any damages   *
  12. *   arising out of your use of the sample code, even if they have been       *
  13. *   advised of the possibility of such damages.                              *
  14. *****************************************************************************/
  15. //NOTE: WE RECOMMEND USING A FIXED-SPACE FONT TO LOOK AT THE SOURCE.
  16. /**************************************************************************
  17. * IBM User Interface Class Library - Message Box Sample                   *
  18. *   The purpose of this sample application is to show various types of    *
  19. *   message boxes.  A frame window with an IMultiLineEdit client window   *
  20. *   is used to display information about the progress of the sample.      *
  21. *   Information is also traced to the trace destination.  Tracing         *
  22. *   information is turned on by setting the ICLUI_TRACE environment       *
  23. *   variable to ON and the destination is set using the ICLUI_TRACETO     *
  24. *   environment variable.                                                 *
  25. **************************************************************************/
  26. //Include User Interface Class Library class headers:
  27. #ifndef _IBASE_                         //Make sure ibase.hpp is included
  28.   #include <ibase.hpp>                  //  since that is where IC_<environ>
  29. #endif                                  //  is defined.
  30. #ifndef _IAPP_
  31.   #include <iapp.hpp>                   //Include IApplication class header
  32. #endif
  33.  
  34. #include "msgbox.hpp"                   //Include AMsgBoxDemo class header
  35. #include "msgbox.h"                     //Include symbolic definitions
  36.  
  37. int main()
  38. {
  39. /*--------------------- Create Demo Object and Run It --------------------|
  40. |  Create an object from the AMsgBoxDemo class with window ID, WND_MAIN.  |
  41. |  Size the frame window used to display the demo status.                 |
  42. |  Begin the demonstration; runDemo performs the show for the frame.      |
  43. |  Begin processing events for the window.  This allows the user to       |
  44. |    interact with the frame window after the demo has completed.         |
  45. |------------------------------------------------------------------------*/
  46.   AMsgBoxDemo mbDisplay(WND_MAIN);
  47.   mbDisplay.sizeTo(ISize(800,300));
  48.   mbDisplay.runDemo();
  49.   IApplication::current().run();
  50.   return 0;
  51. } /* end main() */
  52.  
  53. /**************************************************************************
  54. * AMsbBoxDemo :: AMsgBoxDemo - Constructor                                *
  55. *  Construct the IFrameWindow using the default style.                    *
  56. *  Create the IMultiLineEdit object with the default style and make it    *
  57. *    read only it is used only to display status.                         *
  58. *  Create the message box owned by the frame window.                      *
  59. *  Create the help window also owned by the frame window.                 *
  60. **************************************************************************/
  61.  
  62. AMsgBoxDemo :: AMsgBoxDemo( unsigned long windowId )
  63.         :IFrameWindow(windowId)
  64.         ,mbResponses(WND_MLE, this, this, IRectangle(),
  65.                 IMultiLineEdit::defaultStyle() | IMultiLineEdit::readOnly)
  66.         ,mb(this)
  67.         ,mbHelp(this)
  68. {
  69.  
  70. /*--------------------- Setup the User Interface Objects -----------------|
  71. |  Set the icon for the application.                                      |
  72. |  Use the addLibraries member function to identify which IPF help file   |
  73. |    contains the help information.                                       |
  74. |  Set the client window of the frame to the IMultiLineEdit window,       |
  75. |    size the frame, and show it.                                         |
  76. |  Set the titles for the help and message box windows.                   |
  77. |------------------------------------------------------------------------*/
  78.    setIcon( windowId );
  79.    try
  80.    {
  81.       mbHelp.addLibraries( "msgbox.hlp" );
  82.       mbHelp.setTitle(IResourceId(STR_HELPT));
  83.    }
  84.    catch( ... )
  85.    {
  86.       IMessageBox
  87.          msgBox( this );
  88.       msgBox.show( STR_HELP_NOT_FOUND, IMessageBox::warning );
  89.    }
  90.  
  91.    setClient(&mbResponses);
  92.    mb.setTitle(IResourceId(MSGBOX_TITLE));
  93. }
  94.  
  95. AMsgBoxDemo
  96.    &AMsgBoxDemo :: runDemo()
  97. {
  98.    show();                      //Show the message box status frame
  99. /*--------------------- Message Box Samples Display Loop -----------------|
  100. |  Each time the message box is to be shown:                              |
  101. |    write a line to the status window describing the message box type,   |
  102. |    show the message box,                                                |
  103. |    trace the response to both the ITrace destination and status window. |
  104. |  Use a message box to determine whether to repeat the loop.             |
  105. |------------------------------------------------------------------------*/
  106. IMessageBox::Response
  107.    reply;
  108.    do
  109.      {
  110.      mbResponses.addLineAsLast(
  111.        "Message Box Sample 1 - okCancelButton and informationIcon");
  112.      reply = mb.show( IResourceId( MSGBOX_OKCANCEL ),
  113.                       IMessageBox::okCancelButton |
  114.                       IMessageBox::informationIcon);
  115.      traceReply(reply);
  116.  
  117.      mbResponses.addLineAsLast(
  118.        "Message Box Sample 2 - okButton and warningIcon");
  119.      reply = mb.show( IResourceId( MSGBOX_OKWARNING ),
  120.                       IMessageBox::okButton |
  121.                       IMessageBox::warningIcon);
  122.      traceReply(reply);
  123.  
  124.      mbResponses.addLineAsLast(
  125.        "Message Box Sample 3 - cancelButton and errorIcon");
  126.      reply = mb.show( IResourceId( MSGBOX_CANCELERROR ),
  127.                       IMessageBox::cancelButton |
  128.                       IMessageBox::errorIcon);
  129.      traceReply(reply);
  130.  
  131.      mbResponses.addLineAsLast(
  132.        "Message Box Sample 4 - yesNoCancelButton and queryIcon");
  133.      reply = mb.show( IResourceId( MSGBOX_YESNOCANCEL ),
  134.                       IMessageBox::yesNoCancelButton |
  135.                       IMessageBox::queryIcon);
  136.      traceReply(reply);
  137.  
  138.      mbResponses.addLineAsLast(
  139.      "Message Box Sample 5 - yesNoCancelButton, queryIcon, moveable, helpId");
  140.      reply = mb.show( IResourceId( MSGBOX_YESNOCANCELHELP ),
  141.                       IMessageBox::yesNoCancelButton |
  142.                       IMessageBox::queryIcon |
  143.                       IMessageBox::moveable,
  144.                       MB_HELPID);
  145.      traceReply(reply);
  146.  
  147.      mbResponses.addLineAsLast(
  148.        "Message Box Sample 6 - enterButton, systemModal, and errorIcon");
  149.      reply = mb.show( IResourceId( MSGBOX_SYSMODAL ),
  150.                       IMessageBox::enterButton | IMessageBox::systemModal |
  151.                       IMessageBox::errorIcon);
  152.      traceReply(reply);
  153.  
  154. /*--------------------- Demonstrate Exception Messages -------------------|
  155. |  Call the throwException function to throw an IAccessError type of      |
  156. |    exception.                                                           |
  157. |  Catch the exception and show it in a message box.                      |
  158. |------------------------------------------------------------------------*/
  159.      mbResponses.addLineAsLast(
  160.        "Message Box Sample 7 - exception (from generated IAccessError)");
  161.      try
  162.        {
  163.        throwException();
  164.        }
  165.      catch( IException &exc)
  166.        {
  167.        reply = mb.show( exc );
  168.        }
  169.      traceReply(reply);
  170.  
  171.      reply = mb.show( IResourceId( MSGBOX_CONTINUE ),
  172.                       IMessageBox::yesNoButton |
  173.                       IMessageBox::queryIcon);
  174.  
  175.      }  while (reply == IMessageBox::yes);
  176.  
  177. /*--------------------- Display Final Message Box ------------------------|
  178. |  Use the message box to display instructions for how to close the frame.|
  179. |------------------------------------------------------------------------*/
  180.    reply = mb.show( IResourceId( MSGBOX_END ),
  181.                     IMessageBox::okButton |
  182.                     IMessageBox::informationIcon);
  183.  
  184.   return (*this);
  185. } /* end AMsgBoxDemo :: runDemo() */
  186.  
  187. /********************** Format the Message Box Response *******************
  188. *  Generate IStrings corresponding to each IMessageBox enumeration.       *
  189. *  Trace the string reply to the ITrace destination.                      *
  190. *  Add the response to the end of the status window.                      *
  191. **************************************************************************/
  192. AMsgBoxDemo
  193.    &AMsgBoxDemo :: traceReply( IMessageBox::Response response )
  194. {
  195.    IString traceLine("traceReply * ");
  196.    IString stringReply("response = ");
  197.    switch (response)
  198.       {
  199.       case IMessageBox::enter:
  200.         stringReply += IString("enter");
  201.         break;
  202.       case IMessageBox::ok:
  203.         stringReply += IString("ok");
  204.         break;
  205.       case IMessageBox::cancel:
  206.         stringReply += IString("cancel");
  207.         break;
  208.       case IMessageBox::abort:
  209.         stringReply += IString("abort");
  210.         break;
  211.       case IMessageBox::retry:
  212.         stringReply += IString("retry");
  213.         break;
  214.       case IMessageBox::ignore:
  215.         stringReply += IString("ignore");
  216.         break;
  217.       case IMessageBox::yes:
  218.         stringReply += IString("yes");
  219.         break;
  220.       case IMessageBox::no:
  221.         stringReply += IString("no");
  222.         break;
  223.       case IMessageBox::unknown:
  224.         stringReply += IString("unknown");
  225.         break;
  226.       default:
  227.         stringReply += IString("bad reply");
  228.         break;
  229.       }
  230.    traceLine += stringReply;
  231.    IMODTRACE_ALL(traceLine);
  232.    mbResponses.addLineAsLast(stringReply)
  233.               .setCursorLinePosition(mbResponses.numberOfLines()-1)
  234.               .addLineAsLast(" ");
  235.    return (*this);
  236. } /* end AMsgBoxDemo :: traceReply() */
  237.  
  238. /********************** Format the Message Box Response *******************
  239. *  Generate an IAccessError type of exception to demonstrate use of the   *
  240. *    IException type of message box.                                      *
  241. **************************************************************************/
  242. void
  243.    AMsgBoxDemo :: throwException()
  244. {
  245.   ITHROWLIBRARYERROR( IC_MEMBER_ACCESS_ERROR ,
  246.                       IErrorInfo::accessError,
  247.                       IException::recoverable);
  248. } /* end AMsgBoxDemo :: throwException() */
  249.