applicat.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:23k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * applicat.h
  3.  *
  4.  * GUI application class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: applicat.h,v $
  30.  * Revision 1.34  2000/01/10 02:25:01  craigs
  31.  * Added macro to allow multiple ancestors
  32.  *
  33.  * Revision 1.33  1999/08/07 07:13:22  robertj
  34.  * Fixed problems with "balloon help" text popup.
  35.  *
  36.  * Revision 1.32  1999/03/10 03:49:50  robertj
  37.  * More documentation adjustments.
  38.  *
  39.  * Revision 1.31  1999/03/09 08:01:47  robertj
  40.  * Changed comments for doc++ support (more to come).
  41.  *
  42.  * Revision 1.30  1999/02/16 08:08:45  robertj
  43.  * MSVC 6.0 compatibility changes.
  44.  *
  45.  * Revision 1.29  1998/09/23 06:22:49  robertj
  46.  * Added open source copyright license.
  47.  *
  48.  * Revision 1.28  1998/04/07 13:33:22  robertj
  49.  * Changed startup code to support PApplication class.
  50.  *
  51.  * Revision 1.27  1997/04/27 05:50:17  robertj
  52.  * DLL support.
  53.  *
  54.  * Revision 1.26  1995/12/23 03:43:40  robertj
  55.  * Changed version numbers.
  56.  *
  57.  * Revision 1.25  1995/12/10 11:28:21  robertj
  58.  * Added extra user information to processes and applications.
  59.  * Changed default default OnAbout() function to have user specified dialog.
  60.  *
  61.  * Revision 1.24  1995/10/14 14:51:16  robertj
  62.  * Changed return values to references for efficency.
  63.  *
  64.  * Revision 1.23  1995/08/24 12:58:57  robertj
  65.  * Added standard colours for balloon help windows.
  66.  *
  67.  * Revision 1.22  1995/07/31 12:15:40  robertj
  68.  * Removed PContainer from PChannel ancestor.
  69.  *
  70.  * Revision 1.21  1995/04/02 09:27:17  robertj
  71.  * Added "balloon" help.
  72.  *
  73.  * Revision 1.20  1995/03/14 12:40:57  robertj
  74.  * Updated documentation to use HTML codes.
  75.  *
  76.  * Revision 1.19  1995/02/22  10:50:25  robertj
  77.  * Changes required for compiling release (optimised) version.
  78.  *
  79.  * Revision 1.18  1995/02/19  04:08:41  robertj
  80.  * Added dynamically linked command processing.
  81.  *
  82.  * Revision 1.17  1994/12/13  12:01:18  robertj
  83.  * Fixed documentation error.
  84.  *
  85.  * Revision 1.16  1994/12/05  11:16:43  robertj
  86.  * Documentation.
  87.  * Normalised some variable types.
  88.  *
  89.  * Revision 1.15  1994/11/26  03:41:17  robertj
  90.  * Added DoContextHelp versions using default help file (MSC bug).
  91.  *
  92.  * Revision 1.14  1994/11/24  11:48:25  robertj
  93.  * Documentation.
  94.  *
  95.  * Revision 1.13  1994/08/23  11:32:52  robertj
  96.  * Oops
  97.  *
  98.  * Revision 1.12  1994/08/22  00:46:48  robertj
  99.  * Added pragma fro GNU C++ compiler.
  100.  *
  101.  * Revision 1.11  1994/08/21  23:43:02  robertj
  102.  * Added delayed close of interactors to avoid the "delete this" problem.
  103.  *
  104.  * Revision 1.10  1994/07/17  10:46:06  robertj
  105.  * Moved help menu function from application to toplevelwindow.
  106.  *
  107.  * Revision 1.9  1994/06/25  11:55:15  robertj
  108.  * Unix version synchronisation.
  109.  *
  110.  * Revision 1.8  1994/04/03  08:34:18  robertj
  111.  * Added help and focus functionality.
  112.  *
  113.  * Revision 1.7  1994/03/07  07:38:19  robertj
  114.  * Major enhancementsacross the board.
  115.  *
  116.  * Revision 1.6  1994/01/03  04:42:23  robertj
  117.  * Mass changes to common container classes and interactors etc etc etc.
  118.  *
  119.  * Revision 1.5  1993/12/31  06:38:11  robertj
  120.  * Made inlines optional for debugging purposes.
  121.  *
  122.  * Revision 1.4  1993/08/27  18:17:47  robertj
  123.  * Added timer support functions.
  124.  *
  125.  * Revision 1.3  1993/08/21  01:50:33  robertj
  126.  * Made Clone() function optional, default will assert if called.
  127.  *
  128.  * Revision 1.2  1993/07/14  12:49:16  robertj
  129.  * Fixed RCS keywords.
  130.  *
  131.  */
  132. #define _PAPPLICATION
  133. #ifdef __GNUC__
  134. #pragma interface
  135. #endif
  136. class PTopLevelWindow;
  137. #ifndef PAPPLICATION_ANCESTOR
  138. #define PAPPLICATION_ANCESTOR    public PProcess
  139. #endif
  140. ///////////////////////////////////////////////////////////////////////////////
  141. // PApplication
  142. /**A class to embody a GUI application. There is always exactly one instance
  143.    of a descendednt of this class in an application. It should be possible to
  144.    write the application so that this is the only global variable present. All
  145.    other data is contained within this instance or its member variables or
  146.    their member variables etc.
  147. */
  148. class PApplication : PAPPLICATION_ANCESTOR
  149. {
  150.   PCLASSINFO(PApplication, PProcess);
  151.   public:
  152.    /**Create a new application instance.
  153.      */
  154.     PApplication(
  155.       const char * manuf = "",         /// Name of manufacturer
  156.       const char * name = "",          /// Name of product
  157.       WORD majorVersion = 1,           /// Major version number of the product
  158.       WORD minorVersion = 0,           /// Minor version number of the product
  159.       CodeStatus status = ReleaseCode, /// Development status of the product
  160.       WORD buildNumber = 1             /// Build number of the product
  161.     );
  162.     /** Destroy the application
  163.      */
  164.     ~PApplication();
  165.     /**@name Overrides from class PProcess */
  166.    /**This is the windows application main event loop. A typical application
  167.        would override this function to perform all application initialisation
  168.        and then call the ancestor function to execute the event loop.
  169.      */
  170.     virtual void Main();
  171.    /**Terminate the application. This will destroy the main window and exit
  172.        the event loop in Main(). This is usually only used in abnormal abort
  173.        situations.
  174.      */
  175.     virtual void Terminate();
  176.     /**@name New functions for class */
  177.    /**Get the current processes application object. Note that there can only
  178.        be one instance of an application class in a program image.
  179.        @return
  180.        Pointer to the current application.
  181.      */
  182.     static PApplication & Current();
  183.    /**This function is called in the main program execution loop for
  184.        handling events. This may be overridden to allow operations to be
  185.        handled after each event that is handled by the system.
  186.      */
  187.     virtual void PassMainLoop();
  188.    /**Get the top level window for the application. This will be the first
  189.        instance of a descendent from Ref{PTopLevelWindow}.
  190.        @return
  191.        pointer to the top level window for the application.
  192.      */
  193.     PTopLevelWindow * GetWindow() const;
  194.    /**This enum describes the possible parameter list types that may be passed
  195.        to the application. The mechanism by which these are passed is platform
  196.        dependent.
  197.      */
  198.     enum ParameterTypes {
  199.       /// The parameters are a list of files to be opened
  200.       OpenFiles,        
  201.       /// The parameters are a list of files to be printed
  202.       PrintFiles,       
  203.       /// The parameters are arbitrary strings
  204.       GeneralParameters 
  205.     };
  206.    /**Get the type of the parameter list. The ParameterTypes values indicate
  207.        that the parameter list should be parsed as a set of files to be opened
  208.        or printed, or in the GeneralParameters case it leaves it entirely up
  209.        to the application to decide what to do. In this case they may be parsed
  210.        by the Ref{PArgList} class.
  211.        @return
  212.        type of the application arguments
  213.      */
  214.     ParameterTypes GetParameterType() const;
  215.    /**Set the menu item string to be used in the system standard "About" menu
  216.        item. This string is used whenever the SetMenu() function is executed
  217.        on a Ref{PTopLevelWindow} class.
  218.      */
  219.     void SetAboutMenuItemString(
  220.       const PString & newName /// New menu item title for the "About" function
  221.     );
  222.    /**Get the menu item string to be used in the system standard "About" menu
  223.        item. This string is used whenever the SetMenu() function is executed
  224.        on a Ref{PTopLevelWindow} class.
  225.        @return
  226.        string used for "About" menus.
  227.      */
  228.     PString GetAboutMenuItemString() const;
  229.    /**Set the resource ID to be used in the Ref{OnAbout()} function.
  230.      */
  231.     void SetAboutDialogID(
  232.       PRESOURCE_ID newID /// New resource ID for the "About" dialog.
  233.     );
  234.    /**Get the resource ID to be used in the Ref{OnAbout()} function.
  235.        @return
  236.        Resource ID for "About" dialog.
  237.      */
  238.     PRESOURCE_ID GetAboutDialogID() const;
  239.    /**Function which gets called when the about menu item is selected. An
  240.        application could override this function to display a fancy "About"
  241.        dialog.
  242.        The default behaviour is to display the dialog specified by the
  243.        Ref{SetAboutDialogID()} function. If this dialog has not been set
  244.        then a Ref{PSimpleDialog} with the manufacturer, program name
  245.        and version is displayed.
  246.      */
  247.     virtual void OnAbout();
  248.    /**Set the default help file for the application. This file is used by the
  249.        DoContextHelp() function in this class.
  250.      */
  251.     void SetDefaultHelpFile(
  252.       const PFilePath & name /// Name of help file to be used by application.
  253.     );
  254.    /**Set the default help file for the application. This file is used by the
  255.        DoContextHelp() function in this class.
  256.        @return
  257.        Name of help file to be used by application.
  258.      */
  259.     PFilePath GetDefaultHelpFile() const;
  260.    /**Execute context sensitive help with the specified context key and
  261.        help file. This will start the platform standard help system to display
  262.        the help information for the context.
  263.      */
  264.     void DoContextHelp(
  265.       const PString & context  /// Context string index into the help file
  266.     );
  267.     void DoContextHelp(
  268.       PINDEX contextId         /// Context numerical index into the help file
  269.     );
  270.     void DoContextHelp(
  271.       const PString & context, /// Context string index into the help file
  272.       const PFilePath & file   /// File to search for the context in.
  273.     );
  274.     void DoContextHelp(
  275.       PINDEX contextId,        /// Context numerical index into the help file
  276.       const PFilePath & file   /// File to search for the context in.
  277.     );
  278.    /**Do all logic regarding the inflation and deflation of balloon help. The
  279.        #action# parameter indicates the action to take in the
  280.        balloon help system.
  281.        
  282.        A zero value for #action# indicates that the mouse was moved
  283.        over the indicated interactor and if it stops moving, a balloon popup
  284.        is to be displayed.
  285.        A value for #action# of one indicates that current balloon
  286.        is to be set to the #interactor# parameter.
  287.        A value for #action# of two indicates that current balloon
  288.        is to be returned and no other action taken.
  289.        This is an internal function and is not normally called by the
  290.        application.
  291.        @return
  292.        The balloon window displayed.
  293.      */
  294.     PBalloon * DoBalloonHelp(
  295.       PInteractor * interactor,  /// Interactor in which cursor is over.
  296.       int action = 0             /// Action to take in the balloon help system.
  297.     );
  298.    /**Find the interactor that is at the specified absolute screen
  299.        coordinates. The interactor must be owned by the application.
  300.        @return
  301.        pointer to interactor at point or NULL if no interactor there.
  302.      */
  303.     PInteractor * FindInteractor(
  304.       const PPoint & pt    /// Point to check.
  305.     ) const;
  306.    /**Get the size of the screen in pixels. Note that on some platforms the
  307.        "screen" may be made up of smaller screens next to each other, and is
  308.        not actually rectangular. In this case it returns the largest bounding
  309.        rectangle of all sub-screens.
  310.        @return
  311.        the coordiantes of the screen in pixels.
  312.      */
  313.     const PRect & GetScreenRect() const;
  314.    /**Get the size of the primary screen in pixels. This is always the screen
  315.       that has its origin at 0,0 in multi screen systems.
  316.        @return
  317.        the coordiantes of the screen in pixels.
  318.      */
  319.     const PDim & GetPrimaryScreenSize() const;
  320.    /**Get the resolution for the screen.
  321.        @return
  322.        dots per meter (or inch) in x and y for the screen.
  323.      */
  324.     const PDim & GetScreenResolution(
  325.       BOOL imperial = FALSE
  326.       /// Indicate that the return value is in imperial (TRUE) or metric (FALSE)
  327.     ) const;
  328.    /**Get the number of colours that can be simultaneously be displayed on
  329.        the screen.
  330.        @return
  331.        number of colours.
  332.      */
  333.     long GetScreenColours() const;
  334.    /**Get the number of bits per pixel that the screen is capable of.
  335.        @return
  336.        the depth or number of bits per pixel.
  337.      */
  338.     PDIMENSION GetScreenDepth() const;
  339.    /**Get the maximum size of a cursor pixmap in screen pixels.
  340.        @return
  341.        width & height of a cursor.
  342.      */
  343.     const PDim & GetCursorSize() const;
  344.    /**Get the maximum size of an icon pixmap in screen pixels.
  345.        @return
  346.        width & height of an icon.
  347.      */
  348.     const PDim & GetIconSize() const;
  349.    /**Get the height of the caption part of a titled window or descendent.
  350.        This may also be used on Ref{PDialog} descendents on some platforms.
  351.        @return
  352.        height in pixels of caption.
  353.      */
  354.     PDIMENSION GetTitleHeight() const;
  355.    /**Get the height of the menu bar in Ref{PTopLevelWindow} descendent
  356.        classes.
  357.        @return
  358.        height in pixels of the menu bar.
  359.      */
  360.     PDIMENSION GetMenuHeight() const;
  361.    /**Get the size of the border for a titled window ie one that may be
  362.        moved & resized.
  363.        @return
  364.        width & height in pixels of the border.
  365.      */
  366.     const PDim & GetTitledBorderSize() const;
  367.    /**Get the size of the border for a modal dialog box.
  368.        @return
  369.        width & height in pixels of the border.
  370.      */
  371.     const PDim & GetDlgBorderSize() const;
  372.    /**Get the size of the border for interactors with borders other than modal
  373.        dialogs and resizable windows.
  374.        @return
  375.        width & height in pixels of the border.
  376.      */
  377.     const PDim & GetBorderSize() const;
  378.    /**Get the default size of a main (top level) window.
  379.        @return
  380.        width & height in pixels of the window.
  381.      */
  382.     const PDim & GetMainWindowSize() const;
  383.    /**Get the default size of all titled windows other than top level windows.
  384.        @return
  385.        width & height in pixels of the window.
  386.      */
  387.     const PDim & GetTitledWindowSize() const;
  388.    /**Get the size of the horizontal scroll bar.
  389.        @return
  390.        height in pixels of the scroll bar.
  391.      */
  392.     PDIMENSION GetHScrollHeight() const;
  393.    /**Get the size of the vertical scroll bar.
  394.        @return
  395.        width in pixels of the scroll bar.
  396.      */
  397.     PDIMENSION GetVScrollWidth() const;
  398.    /**Get the system font which is the default basis for interactor
  399.        coordinate systems. This is also the initial font used in interactors
  400.        which will be active when drawing into canvases.
  401.        @return
  402.        specification of the system font.
  403.      */
  404.     const PFont & GetSystemFont() const;
  405.    /**Get the font which is the default basis for balloon help windows.
  406.        @return
  407.        specification of the font.
  408.      */
  409.     const PFont & GetBalloonFont() const;
  410.    /**Get the rectangle around a mouse click point that the second click must
  411.        be within to be detected as a double click. Typically you would do a
  412.        PtInRect of the second click position within this rectangle that has
  413.        been offset by the position of the first click.
  414.        @return
  415.        rectangle for double click bounds.
  416.      */
  417.     const PRect & GetDoubleClickRect() const;
  418.    /**Get the amount of milliseconds that must not have elapsed for the two
  419.        mouse clicks to called a double click.
  420.        @return
  421.        time interval for double click.
  422.      */
  423.     const PTimeInterval & GetDoubleClickTime() const;
  424.    /**Get the default colour of all foreground items in interactors.
  425.        @return
  426.        colour specification.
  427.      */
  428.     const PColour & GetWindowFgColour() const;
  429.    /**Get the default colour of all background items in interactors.
  430.        @return
  431.        colour specification.
  432.      */
  433.     const PColour & GetWindowBkColour() const;
  434.    /**Get the default colour of active titled window border.
  435.        @return
  436.        colour specification.
  437.      */
  438.     const PColour & GetActiveBorderColour() const;
  439.    /**Get the default colour of inactive titled window border.
  440.        @return
  441.        colour specification.
  442.      */
  443.     const PColour & GetInactiveBorderColour() const;
  444.    /**Get the default colour of the window title text in an active window.
  445.        @return
  446.        colour specification.
  447.      */
  448.     const PColour & GetActiveTitleFgColour() const;
  449.    /**Get the default colour of the window title bar in an active window.
  450.        @return
  451.        colour specification.
  452.      */
  453.     const PColour & GetActiveTitleBkColour() const;
  454.    /**Get the default colour of the window title text in an inactive window.
  455.        @return
  456.        colour specification.
  457.      */
  458.     const PColour & GetInactiveTitleFgColour() const;
  459.    /**Get the default colour of the window title bar in an inactive window.
  460.        @return
  461.        colour specification.
  462.      */
  463.     const PColour & GetInactiveTitleBkColour() const;
  464.    /**Get the default colour of the text in menus or menu bar.
  465.        @return
  466.        colour specification.
  467.      */
  468.     const PColour & GetMenuFgColour() const;
  469.    /**Get the default colour of the background in menus or menu bar.
  470.        @return
  471.        colour specification.
  472.      */
  473.     const PColour & GetMenuBkColour() const;
  474.    /**Get the default colour of the text in balloon help windows.
  475.        @return
  476.        colour specification.
  477.      */
  478.     const PColour & GetBalloonFgColour() const;
  479.    /**Get the default colour of the background in balloon help windows.
  480.        @return
  481.        colour specification.
  482.      */
  483.     const PColour & GetBalloonBkColour() const;
  484.    /**Get the default colour of the foreground (text) in a standard
  485.        3 dimensional push button.
  486.        @return
  487.        colour specification.
  488.      */
  489.     const PColour & GetButtonFgColour() const;
  490.    /**Get the default colour of the background (face) in a standard
  491.        3 dimensional push button.
  492.        @return
  493.        colour specification.
  494.      */
  495.     const PColour & GetButtonBkColour() const;
  496.    /**Get the default colour of the lighted edge in a standard 3 dimensional
  497.        push button.
  498.        @return
  499.        colour specification.
  500.      */
  501.     const PColour & GetButtonLightingColour() const;
  502.    /**Get the default colour of the shadowed edge in a standard 3 dimensional
  503.        push button.
  504.        @return
  505.        colour specification.
  506.      */
  507.     const PColour & GetButtonShadowColour() const;
  508.    /**Get the default colour of the slider section of a scroll bar. The
  509.        arrows and thumb use the colours of the standard pushbutton.
  510.        @return
  511.        colour specification.
  512.      */
  513.     const PColour & GetScrollBarColour() const;
  514.    /**Get the default colour of text that is highlighted. Used in the menus
  515.        menu bars and edit text controls.
  516.        @return
  517.        colour specification.
  518.      */
  519.     const PColour & GetHighlightFgColour() const;
  520.    /**Get the default colour of the background for text that is highlighted.
  521.        Used in the menus, menu bars and edit text controls.
  522.        @return
  523.        colour specification.
  524.      */
  525.     const PColour & GetHighlightBkColour() const;
  526.    /**Get the default colour of text that is disabled ("dimmed" or "grayed
  527.        out"). Used in the menus, menu bars and all controls.
  528.        @return
  529.        colour specification.
  530.      */
  531.     const PColour & GetGrayTextColour() const;
  532.    /**Add the interactor to the list for delayed delete operation on close
  533.        of interactor from within a callback member function. This avoids the
  534.        problem of an interactor object having its memory freed (via delete)
  535.        while executing member functions of that object. The actual delete
  536.        operation is delayed until the system returns to the main event loop.
  537.        This function is primarily for internal use by PWLib and is used by
  538.        the Close() function in the PTitledWindow and PDialog classes.
  539.      */
  540.     void DelayedCloseInteractor(
  541.       PInteractor * interactor  /// Interactor to close
  542.     );
  543.    /*Internal initialisation function called directly from
  544.        #main()#. The user should never call this function.
  545.      */
  546.     virtual int _main(void * arg = NULL);
  547.   protected:
  548.       /** The main, top level window for the application. */
  549.     PTopLevelWindow * mainWindow;
  550.       /** The type of the parameter list. */
  551.     ParameterTypes parameterType;
  552.   private:
  553.     void Construct();
  554.     // System values
  555.     PString aboutMenuItemString;
  556.     PRESOURCE_ID aboutDialogID;
  557.     PFilePath defaultHelpFile;
  558.     PDim primaryScreenSize, screenResImperial, screenResMetric, cursorSize, iconSize;
  559.     PDim titledBorder, dlgBorder, border, defMainWindow, defTitledWindow;
  560.     long screenColours;
  561.     PDIMENSION screenDepth, heightTitle, heightMenu;
  562.     PDIMENSION heightHScroll, widthVScroll;
  563.     PRect screenRect, dblClkRect;
  564.     PFont systemFont, balloonFont;
  565.     PTimeInterval doubleClick;
  566.     PColour windowFg, windowBk, highlightFg, highlightBk;
  567.     PColour menuFg, menuBk, balloonFg, balloonBk;
  568.     PColour grayText, buttonFg, buttonBk, buttonLighting, buttonShadow;
  569.     PColour scrollBar, activeTitleFg, activeTitleBk, inactiveTitleFg;
  570.     PColour inactiveTitleBk, activeBorder, inactiveBorder;
  571.     PInteractorList delayedCloseInteractors;
  572.       // List of interactors that require deletion at end of main loop.
  573.     PCommandManager commandManager;
  574.       // Manager for the command communication mechanism.
  575.     PInteractor * balloonee;
  576.     PBalloon * balloon;
  577.     PTimer blowUpTimer;
  578.     PTimeInterval blowUpTimeout;
  579.     PDECLARE_NOTIFIER(PTimer, PApplication, BlowUpBalloon);
  580.   friend class PTopLevelWindow;
  581.   friend PCommandSink::PCommandSink(const char *, const char *);
  582.   friend void PCommandSource::Call(PObject &, INT) const;
  583. #ifdef DOC_PLUS_PLUS
  584. };
  585. #endif
  586. // Class declaration continued in platform specific header file ///////////////