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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * wizard.cxx
  3.  *
  4.  * Wizard dialog 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.cxx,v $
  30.  * Revision 1.4  1998/12/20 09:14:48  robertj
  31.  * Added pragma implementation for GNU compiler.
  32.  *
  33.  * Revision 1.3  1998/11/30 04:52:21  robertj
  34.  * New directory structure
  35.  *
  36.  * Revision 1.2  1998/09/23 06:29:59  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.1  1998/09/15 11:47:20  robertj
  40.  * Initial revision
  41.  *
  42.  */
  43. #ifdef __GNUC__
  44. #pragma implementation "wizard.h"
  45. #endif
  46. #include <pwlib.h>
  47. #include <pwclib/wizard.h>
  48. #define new PNEW
  49. //////////////////////////////////////////////////////////////////////////////
  50. // PWizardPage
  51. PWizardPage::PWizardPage(PInteractor * parent, PRESOURCE_ID resID)
  52.   : PInteractorLayout(parent, resID)
  53. {
  54.   SetBackgroundColour(owner->GetButtonBkColour());
  55.   pageIdentifier = resID;
  56. }
  57. void PWizardPage::OnInitialisePage()
  58. {
  59. }
  60. void PWizardPage::OnCompletedPages()
  61. {
  62. }
  63. void PWizardPage::OnEnteringPage()
  64. {
  65. }
  66. BOOL PWizardPage::OnLeavingPage()
  67. {
  68.   return TRUE;
  69. }
  70. BOOL PWizardPage::IsFinalPage() const
  71. {
  72.   return FALSE;
  73. }
  74. PRESOURCE_ID PWizardPage::GetNextPage() const
  75. {
  76.   return 0;  // Next page as in AddPage() sequence.
  77. }
  78. //////////////////////////////////////////////////////////////////////////////
  79. // PWizardFrame
  80. PWizardFrame::PWizardFrame(PInteractor * parent, PRESOURCE_ID resID)
  81.   : PInteractorLayout(parent, resID),
  82.     originalSize(GetDimensions(PixelCoords))
  83. {
  84.   pages.DisallowDeleteObjects();
  85.   SetBackgroundColour(owner->GetButtonBkColour());
  86.   currentPage = NULL;
  87.   back = next = abort = finish = NULL;
  88. }
  89. void PWizardFrame::ConstructEnd(PRESOURCE_ID resID)
  90. {
  91.   PInteractorLayout::ConstructEnd(resID);
  92.   PDim dim = GetDimensions(PixelCoords);
  93.   PDim offset = dim - originalSize;
  94.   dim.SetHeight(offset.Height());
  95.   PINDEX idx;
  96.   for (idx = 0; idx < children.GetSize(); idx++) {
  97.     PInteractor & child = children[idx];
  98.     child.ShowAll();
  99.     if (child.IsDescendant(PWizardPage::Class())) {
  100.       if (&child != currentPage)
  101.         child.Hide();
  102.       child.SetDimensions(dim, PixelCoords);
  103.       PWizardPage & page = (PWizardPage &)child;
  104.       page.OnInitialisePage();
  105.       page.UpdateControls();
  106.     }
  107.     else
  108.       child.SetPosition(child.GetPosition(PixelCoords)+offset, TopLeftPixels, TopLeftPixels);
  109.   }
  110.   if (back != NULL)
  111.     back->Disable();
  112.   if (finish != NULL)
  113.     finish->Hide();
  114.   Show();
  115. }
  116. void PWizardFrame::AddPage(PWizardPage * page)
  117. {
  118.   if (currentPage == NULL)
  119.     currentPage = page;
  120.   pages.SetAt(page->GetIdentifier(), page);
  121.   PDim wiz_dim = GetDimensions(PixelCoords);
  122.   wiz_dim.AddHeight(-(int)originalSize.Height());
  123.   PDim page_dim = page->GetDimensions(PixelCoords);
  124.   if (page_dim.Width() > wiz_dim.Width())
  125.     wiz_dim.SetWidth(page_dim.Width());
  126.   if (page_dim.Height() > wiz_dim.Height())
  127.     wiz_dim.SetHeight(page_dim.Height());
  128.   wiz_dim.AddHeight(originalSize.Height());
  129.   SetDimensions(wiz_dim, PixelCoords);
  130. }
  131. void PWizardFrame::Back(class PTextButton &, int)
  132. {
  133.   if (pageStack.IsEmpty())
  134.     return;
  135.   PAssert(currentPage != NULL, PLogicError);
  136.   currentPage->Hide();
  137.   currentPage = pageStack.Pop();
  138.   currentPage->Show();
  139.   if (back != NULL && pageStack.IsEmpty())
  140.     back->Disable();
  141.   if (next != NULL)
  142.     next->Show();
  143.   if (finish != NULL)
  144.     finish->Hide();
  145. }
  146. void PWizardFrame::Next(class PTextButton &, int)
  147. {
  148.   PAssert(currentPage != NULL, PLogicError);
  149.   SetCurrentPage(currentPage->GetNextPage());
  150. }
  151. void PWizardFrame::Abort(class PTextButton &, int)
  152. {
  153.   OnFinished(TRUE);
  154. }
  155. void PWizardFrame::Finish(class PTextButton &, int)
  156. {
  157.   if (currentPage->OnLeavingPage())
  158.     OnFinished(FALSE);
  159. }
  160. void PWizardFrame::OnFinished(BOOL aborted)
  161. {
  162.   if (!aborted) {
  163.     PINDEX idx;
  164.     for (idx = 0; idx < pages.GetSize(); idx++)
  165.       pages.GetDataAt(idx).OnCompletedPages();
  166.   }
  167.   if (parent->IsDescendant(PDialog::Class()))
  168.     ((PDialog *)parent)->Close();
  169.   else if (parent->IsDescendant(PTitledWindow::Class()))
  170.     ((PTitledWindow *)parent)->Close();
  171. }
  172. BOOL PWizardFrame::SetCurrentPage(PRESOURCE_ID nextId)
  173. {
  174.   PAssert(currentPage != NULL, PLogicError);
  175.   if (currentPage->GetIdentifier() == nextId)
  176.     return FALSE;
  177.   if (!currentPage->OnLeavingPage())
  178.     return FALSE;
  179.   PWizardPage * nextPage = NULL;
  180.   if (nextId != 0)
  181.     nextPage = pages.GetAt(nextId);
  182.   else {
  183.     PINDEX idx = children.GetObjectsIndex(currentPage);
  184.     if (idx != P_MAX_INDEX) {
  185.       while (++idx < children.GetSize()) {
  186.         if (children[idx].IsDescendant(PWizardPage::Class())) {
  187.           nextPage = (PWizardPage *)&children[idx];
  188.           break;
  189.         }
  190.       }
  191.     }
  192.   }
  193.   if (nextPage == NULL)
  194.     return FALSE;
  195.   pageStack.Push(currentPage);
  196.   currentPage->Hide();
  197.   currentPage = nextPage;
  198.   currentPage->OnEnteringPage();
  199.   currentPage->Show();
  200.   if (back != NULL)
  201.     back->Enable();
  202.   if (!currentPage->IsFinalPage())
  203.     return TRUE;
  204.   if (next != NULL)
  205.     next->Hide();
  206.   if (finish != NULL)
  207.     finish->Show();
  208.   return TRUE;
  209. }
  210. //////////////////////////////////////////////////////////////////////////////
  211. // PWizardDialog
  212. PWizardDialog::PWizardDialog(PInteractor * parent, PWizardFrame * frame)
  213.   : PModalDialog(parent)
  214. {
  215.   SetDimensions(frame->GetDimensions(PixelCoords), PixelCoords);
  216. }
  217. // End Of File ///////////////////////////////////////////////////////////////