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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * wizard.h
  3.  *
  4.  * Wizard Interactor GUI classes
  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: wizard.h,v $
  30.  * Revision 1.3  1999/03/09 08:01:47  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.2  1998/09/23 06:20:13  robertj
  34.  * Added open source copyright license.
  35.  *
  36.  * Revision 1.1  1998/09/15 11:47:22  robertj
  37.  * Initial revision
  38.  *
  39.  */
  40. #ifndef _WIZARD_H
  41. #define _WIZARD_H
  42. #ifdef __GNUC__
  43. #pragma interface
  44. #endif
  45. class PWizardFrame;
  46. /**An interactor layout that is used within a PWizardFrame class. There is one
  47.    descendant of PWizardPage for each page in the wizard sequence.
  48.    This contitutes the pages contained within the frame. There are 1 or more
  49.    of these pages in a PWizardFrame that are sequentially displayed until a
  50.    "final" page, which then terminates the wizard.
  51.  */
  52. class PWizardPage : public PInteractorLayout
  53. {
  54.   PCLASSINFO(PWizardPage, PInteractorLayout);
  55.   
  56.   public:
  57.   /**@name Construction */
  58.   //@{
  59.     /**Create a new empty layout. There are no controls contained within the
  60.        layout and it is expected that these are to added manually by the
  61.        application.
  62.      */
  63.     PWizardPage(
  64.       PInteractor * parent  /// Interactor (PWizardFrame) that owns the page.
  65.     );
  66.     /**Create a new layout by loading it from a resource. The resource
  67.        description determines the position, dimensions of the layout as well
  68.        as the position, dimensions, title and other options for all of the
  69.        controls in the layout.
  70.      */
  71.     PWizardPage(
  72.       PInteractor * parent, /// Interactor (PWizardFrame) that owns the page.
  73.       PRESOURCE_ID resID    /// Resource identifier for loading controls.
  74.     );
  75.   //@}
  76.   /**@name New functions for class */
  77.   //@{
  78.     /**Get the unique identifier for the page. This defaults to the resource
  79.        ID used to load the layout.
  80.     
  81.        @return
  82.        identifier for page.
  83.      */
  84.     PRESOURCE_ID GetIdentifier() const { return pageIdentifier; }
  85.     /**Get the parent PWizardFrame for the page.
  86.     
  87.        @return
  88.        reference to wizard frame.
  89.      */
  90.     PWizardFrame & GetFrame() const { return *(PWizardFrame *)GetParent(); }
  91.     /**This callback is executed when the PWizardFrame loads the page. It is
  92.        typically only called once per load of the PWizardFrame.
  93.        The usual behaviour is to initialise the dialog member variables to
  94.        values saved in non-volatile storage.
  95.        The default function does nothing.
  96.      */
  97.     virtual void OnInitialisePage();
  98.     /**This callback is executed when the PWizardFrame completes, that is, the
  99.        "Finished" button has been pressed. It is typically only called once per
  100.        run of the PWizardFrame.
  101.        The usual behaviour is to save the dialog member variables to
  102.        non-volatile storage.
  103.        The default function does nothing.
  104.      */
  105.     virtual void OnCompletedPages();
  106.     /**This callback is executed when the PWizardFrame displays the page. This
  107.        may happen multiple times as the user goes forward and backward through
  108.        the page sequence.
  109.        The default function does nothing.
  110.      */
  111.     virtual void OnEnteringPage();
  112.     /**This callback is executed when the PWizardFrame is abbout to display
  113.        another page. This may happen multiple times as the user goes forward
  114.        and backward through the page sequence.
  115.        The usual behaviour is to validate any fields on the page. A value of
  116.        FALSE may be returned to prevent the PWizardFrame from moving to the
  117.        new page.
  118.        The default function does nothing and returns TRUE.
  119.     
  120.        @return
  121.        TRUE if allowed to move on.
  122.      */
  123.     virtual BOOL OnLeavingPage();
  124.     /**This function indicates that this is the final page in the sequence
  125.        used by the PWizardFrame. The PWizardFrame then displays the "Finish"
  126.        button instead of the "Next" button.
  127.        The default function does nothing and returns FALSE.
  128.     
  129.        @return
  130.        TRUE if final page.
  131.      */
  132.     virtual BOOL IsFinalPage() const;
  133.     /**This function indicates the next page in the sequence used by the
  134.        PWizardFrame. This allows different paths to be taken through the
  135.        sequence depending on information entered in this (and other) pages.
  136.        The default function returns zero, indicating that the next page that
  137.        was added to the PWizardFrame is to be used.
  138.     
  139.        @return
  140.        identifier of page to display next.
  141.      */
  142.     virtual PRESOURCE_ID GetNextPage() const;
  143.   //@}
  144.   protected:
  145.     /// Unique ID for page
  146.     PRESOURCE_ID pageIdentifier;  
  147. };
  148. PDICTIONARY(PWizardPageDict, POrdinalKey, PWizardPage);
  149. PSTACK(PWizardPageStack, PWizardPage);
  150. /**An interactor layout that is used to manage a series of pages for the
  151.    gathering of complex information. A single instance of a descendant of
  152.    this class is used to frame a series of PWizardPage descendant layouts.
  153.    It is expected that this layout would be contained within a dialog or main
  154.    window of an application. A resource may be used to define the basics of
  155.    the wizard frame and then the final sizes are adhusted by the AddPage() and
  156.    ConstructEnd() functions to deliver a final layout.
  157.    A typical resource would look like:
  158. Layout {
  159.     Class  MainWizard : PWizardFrame;
  160.     PushButton { Pos  10, 10; Dim 45, 15; Title "< &Back"; Field PWizardFrame::back;   Notify PWizardFrame::Back;   }
  161.     PushButton { Pos  55, 10; Dim 45, 15; Title "&Next >"; Field PWizardFrame::next;   Notify PWizardFrame::Next;   Options default; }
  162.     PushButton { Pos  55, 10; Dim 45, 15; Title "&Finish"; Field PWizardFrame::finish; Notify PWizardFrame::Finish; }
  163.     PushButton { Pos 110, 10; Dim 45, 15; Title "Cancel";  Field PWizardFrame::abort;  Notify PWizardFrame::Abort;  }
  164. #inline hdr
  165.     void ConstructEnd(PRESOURCE_ID);
  166. #inline end
  167. }
  168.    It is usual for the ConstructEnd() function to be overidden and the
  169.    AddPage() function called for each PWizardPage needed. The ancestor
  170.    ConstructEnd() function MUST be called after all of the AddPage() calls.
  171.  */
  172. class PWizardFrame : public PInteractorLayout
  173. {
  174.   PCLASSINFO(PWizardFrame, PInteractorLayout);
  175.   
  176.   public:
  177.   /**@name Construction */
  178.   //@{
  179.     /**Create a new empty layout. There are no controls contained within the
  180.        layout and it is expected that these are to added manually by the
  181.        application.
  182.        Note that the parent must be a descendant of PDialog or PTitledWindow.
  183.      */
  184.     PWizardFrame(
  185.       PInteractor * parent  /// Interactor that owns the frame.
  186.     );
  187.     /**Create a new layout by loading it from a resource. The resource
  188.        description determines the position, dimensions of the layout as well
  189.        as the position, dimensions, title and other options for all of the
  190.        controls in the layout.
  191.        Note that the parent must be a descendant of PDialog or PTitledWindow.
  192.      */
  193.     PWizardFrame(
  194.       PInteractor * parent, /// Interactor that owns the page.
  195.       PRESOURCE_ID resID    /// Resource identifier for loading controls.
  196.     );
  197.   //@}
  198.   /**@name New functions for class */
  199.   //@{
  200.     /**Add a new page to the wizard. The wizard is expanded to allow space for
  201.        the page to fit in the top of the frame.
  202.      */
  203.     void AddPage(
  204.       PWizardPage * page    /// New page to add to the wizard.
  205.     );
  206.     /**Get a page that was added using the AddPage() function.
  207.        @return
  208.        page with specified ID, or NULL if none present.
  209.      */
  210.     PWizardPage * GetPage(
  211.       PRESOURCE_ID id       /// Identifier of page to obtain.
  212.     ) const { return pages.GetAt(id); }
  213.     /**Get the page that is currently being displayed.
  214.        @return
  215.        pointer to current page.
  216.      */
  217.     PWizardPage * GetCurrentPage() { return currentPage; }
  218.     /**Move to the page specified by the identifier. If the identifier is zero
  219.        then the next page as entered by the AddPage() function is displayed.
  220.        As the current pages OnLeavingPage() function is called, it is possible
  221.        that the specified page is not set, due to validation requirements by
  222.        the current page. In this case FALSE is returned.
  223.        @return
  224.        TRUE if a new page was displayed.
  225.      */
  226.     BOOL SetCurrentPage(PRESOURCE_ID id);
  227.     /**This call back function is executed when the wizard has completed.
  228.        The default behaviour is, if not aborted, to call the OnCompletedPages()
  229.        function on each page and then close the parent window. If the wizard had
  230.        been cancelled then it simply closes the parent window.
  231.        Note that this closes the parent window, not the frame itself. Of course,
  232.        when the parent closes it will in turn close the layout.
  233.      */
  234.     virtual void OnFinished(
  235.       BOOL aborted    /// Indicates if the wizard was cancelled
  236.     );
  237.   //@}
  238.   protected:
  239.   // Overrides from class PInteractorLayout
  240.     virtual void ConstructEnd(
  241.       PRESOURCE_ID resID     // Resource identifier for loading controls.
  242.     );
  243.     /* Complete construction of an interactor layout. This is primarily used
  244.        by the PWRC resource compiler generated code.
  245.        The behaviour in a PWizardFrame is to resize all of the PWizardPage
  246.        descendants that were added using the AddPage() function and move any
  247.        controls found on the frame out of the way of those pages.
  248.      */
  249.     void Back(class PTextButton &, int);
  250.       // Notifier for Back button
  251.     void Next(class PTextButton &, int);
  252.       // Notifier for Next button
  253.     void Abort(class PTextButton &, int);
  254.       // Notifier for Abort button
  255.     void Finish(class PTextButton &, int);
  256.       // Notifier for Finish button
  257.     // Member variables
  258.     /// The Back button
  259.     PPushButton    * back;        
  260.     /// The Next button
  261.     PPushButton    * next;        
  262.     /// The Cancel button
  263.     PPushButton    * abort;       
  264.     /// The FInish button
  265.     PPushButton    * finish;      
  266.     /// The active page
  267.     PWizardPage    * currentPage; 
  268.     /// All pages added via AddPage()
  269.     PWizardPageDict  pages;       
  270.     /// The pages that have been passed.
  271.     PWizardPageStack pageStack;   
  272.     /// Size of layout before AddPage() adjusts it.
  273.     PDim originalSize; 
  274. };
  275. /**This class is a wrapper around the PWizardFrame that presents a modal
  276.    dialog for the wizard.
  277.  */
  278. class PWizardDialog : public PModalDialog
  279. {
  280.   PCLASSINFO(PWizardDialog, PModalDialog);
  281.   public:
  282.     /**Create a dialog with the specified wizard frame contained within it.
  283.      */
  284.     PWizardDialog(
  285.       PInteractor * parent, /// Interactor that owns the frame.
  286.       PWizardFrame * frame  /// The wizard frame that the dialog wraps
  287.     );
  288. };
  289.   
  290. #endif
  291. // End Of File ///////////////////////////////////////////////////////////////