home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / yacl-012.zip / ui / applic.h < prev    next >
C/C++ Source or Header  |  1995-04-08  |  7KB  |  211 lines

  1. #ifndef _applic_h_
  2. #define _applic_h_
  3.  
  4.  
  5.  
  6.  
  7.  
  8. /*
  9.  *
  10.  *          Copyright (C) 1994, M. A. Sridhar
  11.  *  
  12.  *
  13.  *     This software is Copyright M. A. Sridhar, 1994. You are free
  14.  *     to copy, modify or distribute this software  as you see fit,
  15.  *     and to use  it  for  any  purpose, provided   this copyright
  16.  *     notice and the following   disclaimer are included  with all
  17.  *     copies.
  18.  *
  19.  *                        DISCLAIMER
  20.  *
  21.  *     The author makes no warranties, either expressed or implied,
  22.  *     with respect  to  this  software, its  quality, performance,
  23.  *     merchantability, or fitness for any particular purpose. This
  24.  *     software is distributed  AS IS.  The  user of this  software
  25.  *     assumes all risks  as to its quality  and performance. In no
  26.  *     event shall the author be liable for any direct, indirect or
  27.  *     consequential damages, even if the  author has been  advised
  28.  *     as to the possibility of such damages.
  29.  *
  30.  */
  31.  
  32.  
  33.  
  34. // Authors:   M. A. Sridhar
  35. //            N. Bhowmik
  36.  
  37.  
  38. // This class provides the basic behaviour of ``global state'' of an
  39. // application. It includes methods for destroying individual views,
  40. // (conditionally) terminating the application itself, creating and
  41. // destroying the root window for the application, and the like.  It also
  42. // includes the main entry point and initialization code for the
  43. // application.
  44.  
  45.  
  46.  
  47.  
  48. #if defined(__GNUC__)
  49. #pragma interface
  50. #endif
  51.  
  52.  
  53. #include "ui/composit.h"
  54.  
  55. #if defined(__MS_WINDOWS__)
  56. #include <windows.h>
  57. #endif
  58.  
  59. class CL_EXPORT UI_Controller;
  60.  
  61. class CL_EXPORT UI_Application: public CL_Object {
  62.  
  63. public:
  64.  
  65.     // --------------- Construction and destruction ---------------------
  66.     UI_Application();
  67.     // Default constructor.
  68.  
  69.     virtual ~UI_Application();
  70.     // Destructor.
  71.  
  72. #if defined(__MS_WINDOWS__)
  73.     virtual void Initialize (HANDLE hInstance, HANDLE hPrevInstance,
  74.                              LPSTR lpCmdln, int nCmdShow);
  75.     // [MS-Windows-specific method]
  76.     // Instantiates and initializes the controller.
  77.     
  78.     
  79. #elif defined(__X_MOTIF__)
  80.     virtual void Initialize (int& argc, char *argv[]);
  81.     // [X-Windows-specific method]
  82.     // Instantiates and initializes the controller.
  83.  
  84. #elif defined(__OS2__)
  85.     virtual void Initialize (int argc, char *argv[]);
  86.     // [OS/2-specific method]
  87.     // Instantiates and initializes the controller.
  88.  
  89. #endif
  90.  
  91.     // ------------------------- Querying -----------------------------
  92.     
  93.     long ProcessId () const {return pid; };
  94.     // Return the process id of this process. This method returns the
  95.     // handle to the instance under MS-Windows.
  96.  
  97.     const CL_StringStringMap& Environment () const {return _env;};
  98.     // Return a reference to a map containing the environment variables and
  99.     // their values. Note that some environment variables may have null
  100.     // values associated with them, because they were set that way;
  101.     // therefore, unlike the conventions with YACL Maps, the fact that {\tt
  102.     // Environment ()[v] == ""} does not mean that {\tt v} is not a defined
  103.     // environment variable. This must be ascertained explicitly via the
  104.     // {\tt IncludesKey} method.
  105.     
  106.     UI_CompositeVObject* MainWindow () const;
  107.     // Return the root window of the application.
  108.  
  109.     UI_Rectangle ScreenRect () const;
  110.     // Return the rectangle corresponding to the screen. Its origin will
  111.     // be set at (0,0).
  112.  
  113.     UI_Point AsScreenPoint (const UI_Point& windowPoint,
  114.                             UI_VisualObject* vObj) const;
  115.     // Given a point in the co-ordinate space of {\tt vObj}, translate it to
  116.     // screen co-ordinates and return the result.
  117.     
  118.     
  119.     UI_Controller& Controller();  
  120.     // Return a reference to the underlying controller object. 
  121.  
  122.     // --------------- Creating and destroying views ------------------
  123.     
  124.     void MakeTopWindow (UI_CompositeVObject* topWindow);
  125.     // Make the given object the root window of the application. This method
  126.     // must be called only once, at the beginning of the application.
  127.  
  128.     virtual void Destroy (UI_VisualObject* v);
  129.     // Unconditionally destroys the given visual object.
  130.  
  131.     // --------------------------- Execution ------------------------
  132.  
  133.     int Main (int argc, char* argv[]);
  134.     // Alternate entry point for the user interface library.
  135.     
  136.     virtual void Run ();
  137.     // Execute the application. Simply invokes {\tt Run()} on the controller.
  138.  
  139.     virtual void End ();
  140.     // Terminate the application. This method generates a CloseDown event for
  141.     // the root window. This results in calling the WantToQuit method of the
  142.     // root, and if the latter returns TRUE, closing the application.
  143.  
  144.     virtual void IdleAction() {};
  145.     // Perform any necessary idle action; called when the controller is
  146.     // idle, with no events available. The default implementation does
  147.     // nothing.
  148.  
  149.     // ------------------------- Miscellaneous services --------------
  150.     virtual CL_String InstanceName (UI_VisualObject* v);
  151.     // Return the instance name of the given visual object. This method is
  152.     // used under X-windows to set the instance name at the time of widget
  153.     // creation; it is not used inder MS-Windows.
  154.  
  155.     virtual CL_String Name () const;
  156.     // Return the name of this application. The default implementation
  157.     // returnes the name of the application's executable file. This method
  158.     // is used to determine the application's name under X windows, and
  159.     // derived classes may override it; it is
  160.     // not used under MS-Windows.
  161.     
  162.     virtual CL_String AppClass () const;
  163.     // Return the class name of this application. The default implementation
  164.     // returnes the string returned by the {\tt Name} method with its first
  165.     // letter capitalized (to meet the X windows convention). This method
  166.     // is used to determine the application's class under X windows; it is
  167.     // not used under MS-Windows.
  168.     
  169.     // --------------------- End public protocol -----------------------
  170.     
  171. protected:
  172.     
  173.     UI_Controller*     _controller;
  174.     CL_StringStringMap _env;
  175.     
  176. #if defined(__MS_WINDOWS__)
  177.     HANDLE pid;
  178. #elif defined(__OS2__)
  179.     ulong  pid;
  180. #elif defined(__X_MOTIF__)
  181.     long pid;
  182. #endif
  183.     CL_String _name;
  184.  
  185. public:
  186. #if defined(__OS2__)
  187.     UI_Rectangle YACLRect (UI_ViewHandle parent, const RECTL& rect) const;
  188.     // [OS/2-specific, internal use only]
  189.  
  190.     static void PMError ();
  191.     // [OS/2-specific, internal use only] Ask PM for the most recent error
  192.     // string, and send it out as {\tt CL_Error::Warning}.
  193.     
  194. #endif
  195.     
  196. };
  197.  
  198.  
  199.  
  200. extern UI_Application* _TheApplication; // The single application instance
  201.  
  202.  
  203. inline UI_Controller& UI_Application::Controller ()
  204. {
  205.     return *_controller; 
  206.  
  207. }
  208.  
  209.  
  210. #endif
  211.