1*5900e8ecSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*5900e8ecSAndrew Rist * distributed with this work for additional information 6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance 9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at 10*5900e8ecSAndrew Rist * 11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*5900e8ecSAndrew Rist * 13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an 15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the 17*5900e8ecSAndrew Rist * specific language governing permissions and limitations 18*5900e8ecSAndrew Rist * under the License. 19*5900e8ecSAndrew Rist * 20*5900e8ecSAndrew Rist *************************************************************/ 21*5900e8ecSAndrew Rist 22*5900e8ecSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svtools.hxx" 26cdf0e10cSrcweir #include <svtools/wizardmachine.hxx> 27cdf0e10cSrcweir #include <svtools/helpid.hrc> 28cdf0e10cSrcweir #include <tools/debug.hxx> 29cdf0e10cSrcweir #include <tools/diagnose_ex.h> 30cdf0e10cSrcweir #include <vcl/msgbox.hxx> 31cdf0e10cSrcweir #include <svtools/svtdata.hxx> 32cdf0e10cSrcweir #ifndef _SVTOOLS_HRC 33cdf0e10cSrcweir #include <svtools/svtools.hrc> 34cdf0e10cSrcweir #endif 35cdf0e10cSrcweir 36cdf0e10cSrcweir //......................................................................... 37cdf0e10cSrcweir namespace svt 38cdf0e10cSrcweir { 39cdf0e10cSrcweir //......................................................................... 40cdf0e10cSrcweir 41cdf0e10cSrcweir //===================================================================== 42cdf0e10cSrcweir //= WizardPageImplData 43cdf0e10cSrcweir //===================================================================== 44cdf0e10cSrcweir struct WizardPageImplData 45cdf0e10cSrcweir { WizardPageImplDatasvt::WizardPageImplData46cdf0e10cSrcweir WizardPageImplData() 47cdf0e10cSrcweir { 48cdf0e10cSrcweir } 49cdf0e10cSrcweir }; 50cdf0e10cSrcweir 51cdf0e10cSrcweir //===================================================================== 52cdf0e10cSrcweir //= OWizardPage 53cdf0e10cSrcweir //===================================================================== 54cdf0e10cSrcweir //--------------------------------------------------------------------- OWizardPage(Window * _pParent,WinBits _nStyle)55cdf0e10cSrcweir OWizardPage::OWizardPage( Window* _pParent, WinBits _nStyle ) 56cdf0e10cSrcweir :TabPage( _pParent, _nStyle ) 57cdf0e10cSrcweir ,m_pImpl( new WizardPageImplData ) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir } 60cdf0e10cSrcweir 61cdf0e10cSrcweir //--------------------------------------------------------------------- OWizardPage(Window * _pParent,const ResId & _rResId)62cdf0e10cSrcweir OWizardPage::OWizardPage( Window* _pParent, const ResId& _rResId ) 63cdf0e10cSrcweir :TabPage( _pParent, _rResId ) 64cdf0e10cSrcweir ,m_pImpl( new WizardPageImplData ) 65cdf0e10cSrcweir { 66cdf0e10cSrcweir } 67cdf0e10cSrcweir 68cdf0e10cSrcweir //--------------------------------------------------------------------- ~OWizardPage()69cdf0e10cSrcweir OWizardPage::~OWizardPage() 70cdf0e10cSrcweir { 71cdf0e10cSrcweir delete m_pImpl; 72cdf0e10cSrcweir } 73cdf0e10cSrcweir 74cdf0e10cSrcweir //--------------------------------------------------------------------- initializePage()75cdf0e10cSrcweir void OWizardPage::initializePage() 76cdf0e10cSrcweir { 77cdf0e10cSrcweir } 78cdf0e10cSrcweir 79cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()80cdf0e10cSrcweir void OWizardPage::ActivatePage() 81cdf0e10cSrcweir { 82cdf0e10cSrcweir TabPage::ActivatePage(); 83cdf0e10cSrcweir updateDialogTravelUI(); 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir //--------------------------------------------------------------------- updateDialogTravelUI()87cdf0e10cSrcweir void OWizardPage::updateDialogTravelUI() 88cdf0e10cSrcweir { 89cdf0e10cSrcweir OWizardMachine* pWizardMachine = dynamic_cast< OWizardMachine* >( GetParent() ); 90cdf0e10cSrcweir if ( pWizardMachine ) 91cdf0e10cSrcweir pWizardMachine->updateTravelUI(); 92cdf0e10cSrcweir } 93cdf0e10cSrcweir 94cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const95cdf0e10cSrcweir bool OWizardPage::canAdvance() const 96cdf0e10cSrcweir { 97cdf0e10cSrcweir return true; 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir //--------------------------------------------------------------------- commitPage(WizardTypes::CommitPageReason)101cdf0e10cSrcweir sal_Bool OWizardPage::commitPage( WizardTypes::CommitPageReason ) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir return sal_True; 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir //===================================================================== 107cdf0e10cSrcweir //= WizardMachineImplData 108cdf0e10cSrcweir //===================================================================== 109cdf0e10cSrcweir struct WizardMachineImplData : public WizardTypes 110cdf0e10cSrcweir { 111cdf0e10cSrcweir String sTitleBase; // the base for the title 112cdf0e10cSrcweir ::std::stack< WizardState > aStateHistory; // the history of all states (used for implementing "Back") 113cdf0e10cSrcweir 114cdf0e10cSrcweir WizardState nFirstUnknownPage; 115cdf0e10cSrcweir // the WizardDialog does not allow non-linear transitions (e.g. it's 116cdf0e10cSrcweir // not possible to add pages in a non-linear order), so we need some own maintainance data 117cdf0e10cSrcweir 118cdf0e10cSrcweir sal_Bool m_bAutoNextButtonState; 119cdf0e10cSrcweir 120cdf0e10cSrcweir bool m_bTravelingSuspended; 121cdf0e10cSrcweir WizardMachineImplDatasvt::WizardMachineImplData122cdf0e10cSrcweir WizardMachineImplData() 123cdf0e10cSrcweir :nFirstUnknownPage( 0 ) 124cdf0e10cSrcweir ,m_bAutoNextButtonState( sal_False ) 125cdf0e10cSrcweir ,m_bTravelingSuspended( false ) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir } 128cdf0e10cSrcweir }; 129cdf0e10cSrcweir calcRightHelpOffset(sal_uInt32 _nButtonFlags)130cdf0e10cSrcweir long OWizardMachine::calcRightHelpOffset(sal_uInt32 _nButtonFlags) 131cdf0e10cSrcweir { 132cdf0e10cSrcweir sal_Int32 nMask = 1; 133cdf0e10cSrcweir sal_Int32 nRightAlignedButtonCount = -1; 134cdf0e10cSrcweir for (unsigned int i = 0; i < 8*sizeof(_nButtonFlags); i++ ) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir if( ( _nButtonFlags & nMask ) != 0 ) 137cdf0e10cSrcweir nRightAlignedButtonCount++; 138cdf0e10cSrcweir nMask <<= 1; 139cdf0e10cSrcweir } 140cdf0e10cSrcweir Size aSize = GetPageSizePixel(); 141cdf0e10cSrcweir sal_Int32 nTotButtonWidth = nRightAlignedButtonCount * LogicalCoordinateToPixel(50); 142cdf0e10cSrcweir sal_Int32 nTotRightButtonSpaceOffset = (nRightAlignedButtonCount) * WIZARDDIALOG_BUTTON_STDOFFSET_X; 143cdf0e10cSrcweir if ((_nButtonFlags & WZB_NEXT) && (_nButtonFlags & WZB_NEXT)) 144cdf0e10cSrcweir nTotRightButtonSpaceOffset = (nTotRightButtonSpaceOffset - WIZARDDIALOG_BUTTON_STDOFFSET_X) + WIZARDDIALOG_BUTTON_SMALLSTDOFFSET_X; 145cdf0e10cSrcweir return aSize.Width() - nTotButtonWidth - nTotRightButtonSpaceOffset; 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir //===================================================================== 149cdf0e10cSrcweir //= OWizardMachine 150cdf0e10cSrcweir //===================================================================== 151cdf0e10cSrcweir //--------------------------------------------------------------------- OWizardMachine(Window * _pParent,const ResId & _rRes,sal_uInt32 _nButtonFlags)152cdf0e10cSrcweir OWizardMachine::OWizardMachine(Window* _pParent, const ResId& _rRes, sal_uInt32 _nButtonFlags ) 153cdf0e10cSrcweir :WizardDialog( _pParent, _rRes ) 154cdf0e10cSrcweir ,m_pFinish(NULL) 155cdf0e10cSrcweir ,m_pCancel(NULL) 156cdf0e10cSrcweir ,m_pNextPage(NULL) 157cdf0e10cSrcweir ,m_pPrevPage(NULL) 158cdf0e10cSrcweir ,m_pHelp(NULL) 159cdf0e10cSrcweir ,m_pImpl( new WizardMachineImplData ) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir implConstruct( _nButtonFlags ); 162cdf0e10cSrcweir } 163cdf0e10cSrcweir 164cdf0e10cSrcweir //--------------------------------------------------------------------- OWizardMachine(Window * _pParent,const WinBits i_nStyle,sal_uInt32 _nButtonFlags)165cdf0e10cSrcweir OWizardMachine::OWizardMachine(Window* _pParent, const WinBits i_nStyle, sal_uInt32 _nButtonFlags ) 166cdf0e10cSrcweir :WizardDialog( _pParent, i_nStyle ) 167cdf0e10cSrcweir ,m_pFinish(NULL) 168cdf0e10cSrcweir ,m_pCancel(NULL) 169cdf0e10cSrcweir ,m_pNextPage(NULL) 170cdf0e10cSrcweir ,m_pPrevPage(NULL) 171cdf0e10cSrcweir ,m_pHelp(NULL) 172cdf0e10cSrcweir ,m_pImpl( new WizardMachineImplData ) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir implConstruct( _nButtonFlags ); 175cdf0e10cSrcweir } 176cdf0e10cSrcweir 177cdf0e10cSrcweir //--------------------------------------------------------------------- implConstruct(const sal_uInt32 _nButtonFlags)178cdf0e10cSrcweir void OWizardMachine::implConstruct( const sal_uInt32 _nButtonFlags ) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir m_pImpl->sTitleBase = GetText(); 181cdf0e10cSrcweir 182cdf0e10cSrcweir // create the buttons according to the wizard button flags 183cdf0e10cSrcweir // the help button 184cdf0e10cSrcweir if (_nButtonFlags & WZB_HELP) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir m_pHelp= new HelpButton(this, WB_TABSTOP); 187cdf0e10cSrcweir m_pHelp->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) ); 188cdf0e10cSrcweir m_pHelp->Show(); 189cdf0e10cSrcweir AddButton( m_pHelp, WIZARDDIALOG_BUTTON_STDOFFSET_X); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir // the previous button 193cdf0e10cSrcweir if (_nButtonFlags & WZB_PREVIOUS) 194cdf0e10cSrcweir { 195cdf0e10cSrcweir m_pPrevPage = new PushButton(this, WB_TABSTOP); 196cdf0e10cSrcweir m_pPrevPage->SetHelpId( HID_WIZARD_PREVIOUS ); 197cdf0e10cSrcweir m_pPrevPage->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) ); 198cdf0e10cSrcweir m_pPrevPage->SetText(String(SvtResId(STR_WIZDLG_PREVIOUS))); 199cdf0e10cSrcweir m_pPrevPage->Show(); 200cdf0e10cSrcweir 201cdf0e10cSrcweir if (_nButtonFlags & WZB_NEXT) 202cdf0e10cSrcweir AddButton( m_pPrevPage, ( WIZARDDIALOG_BUTTON_SMALLSTDOFFSET_X) ); // half x-offset to the next button 203cdf0e10cSrcweir else 204cdf0e10cSrcweir AddButton( m_pPrevPage, WIZARDDIALOG_BUTTON_STDOFFSET_X ); 205cdf0e10cSrcweir SetPrevButton( m_pPrevPage ); 206cdf0e10cSrcweir m_pPrevPage->SetClickHdl( LINK( this, OWizardMachine, OnPrevPage ) ); 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir // the next button 210cdf0e10cSrcweir if (_nButtonFlags & WZB_NEXT) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir m_pNextPage = new PushButton(this, WB_TABSTOP); 213cdf0e10cSrcweir m_pNextPage->SetHelpId( HID_WIZARD_NEXT ); 214cdf0e10cSrcweir m_pNextPage->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) ); 215cdf0e10cSrcweir m_pNextPage->SetText(String(SvtResId(STR_WIZDLG_NEXT))); 216cdf0e10cSrcweir m_pNextPage->Show(); 217cdf0e10cSrcweir 218cdf0e10cSrcweir AddButton( m_pNextPage, WIZARDDIALOG_BUTTON_STDOFFSET_X ); 219cdf0e10cSrcweir SetNextButton( m_pNextPage ); 220cdf0e10cSrcweir m_pNextPage->SetClickHdl( LINK( this, OWizardMachine, OnNextPage ) ); 221cdf0e10cSrcweir } 222cdf0e10cSrcweir 223cdf0e10cSrcweir // the finish button 224cdf0e10cSrcweir if (_nButtonFlags & WZB_FINISH) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir m_pFinish = new OKButton(this, WB_TABSTOP); 227cdf0e10cSrcweir m_pFinish->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) ); 228cdf0e10cSrcweir m_pFinish->SetText(String(SvtResId(STR_WIZDLG_FINISH))); 229cdf0e10cSrcweir m_pFinish->Show(); 230cdf0e10cSrcweir 231cdf0e10cSrcweir AddButton( m_pFinish, WIZARDDIALOG_BUTTON_STDOFFSET_X ); 232cdf0e10cSrcweir m_pFinish->SetClickHdl( LINK( this, OWizardMachine, OnFinish ) ); 233cdf0e10cSrcweir } 234cdf0e10cSrcweir 235cdf0e10cSrcweir // the cancel button 236cdf0e10cSrcweir if (_nButtonFlags & WZB_CANCEL) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir m_pCancel = new CancelButton(this, WB_TABSTOP); 239cdf0e10cSrcweir m_pCancel->SetSizePixel( LogicToPixel( Size( 50, 14 ), MAP_APPFONT ) ); 240cdf0e10cSrcweir m_pCancel->Show(); 241cdf0e10cSrcweir 242cdf0e10cSrcweir AddButton( m_pCancel, WIZARDDIALOG_BUTTON_STDOFFSET_X ); 243cdf0e10cSrcweir } 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir //--------------------------------------------------------------------- ~OWizardMachine()247cdf0e10cSrcweir OWizardMachine::~OWizardMachine() 248cdf0e10cSrcweir { 249cdf0e10cSrcweir delete m_pFinish; 250cdf0e10cSrcweir delete m_pCancel; 251cdf0e10cSrcweir delete m_pNextPage; 252cdf0e10cSrcweir delete m_pPrevPage; 253cdf0e10cSrcweir delete m_pHelp; 254cdf0e10cSrcweir 255cdf0e10cSrcweir for (WizardState i=0; i<m_pImpl->nFirstUnknownPage; ++i) 256cdf0e10cSrcweir delete GetPage(i); 257cdf0e10cSrcweir 258cdf0e10cSrcweir delete m_pImpl; 259cdf0e10cSrcweir } 260cdf0e10cSrcweir 261cdf0e10cSrcweir //--------------------------------------------------------------------- implUpdateTitle()262cdf0e10cSrcweir void OWizardMachine::implUpdateTitle() 263cdf0e10cSrcweir { 264cdf0e10cSrcweir String sCompleteTitle(m_pImpl->sTitleBase); 265cdf0e10cSrcweir 266cdf0e10cSrcweir // append the page title 267cdf0e10cSrcweir TabPage* pCurrentPage = GetPage(getCurrentState()); 268cdf0e10cSrcweir if ( pCurrentPage && pCurrentPage->GetText().Len() ) 269cdf0e10cSrcweir { 270cdf0e10cSrcweir sCompleteTitle += String::CreateFromAscii(" - "); 271cdf0e10cSrcweir sCompleteTitle += pCurrentPage->GetText(); 272cdf0e10cSrcweir } 273cdf0e10cSrcweir 274cdf0e10cSrcweir SetText(sCompleteTitle); 275cdf0e10cSrcweir } 276cdf0e10cSrcweir 277cdf0e10cSrcweir //--------------------------------------------------------------------- getTitleBase() const278cdf0e10cSrcweir const String& OWizardMachine::getTitleBase() const 279cdf0e10cSrcweir { 280cdf0e10cSrcweir return m_pImpl->sTitleBase; 281cdf0e10cSrcweir } 282cdf0e10cSrcweir 283cdf0e10cSrcweir //--------------------------------------------------------------------- setTitleBase(const String & _rTitleBase)284cdf0e10cSrcweir void OWizardMachine::setTitleBase(const String& _rTitleBase) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir m_pImpl->sTitleBase = _rTitleBase; 287cdf0e10cSrcweir implUpdateTitle(); 288cdf0e10cSrcweir } 289cdf0e10cSrcweir 290cdf0e10cSrcweir //--------------------------------------------------------------------- GetOrCreatePage(const WizardState i_nState)291cdf0e10cSrcweir TabPage* OWizardMachine::GetOrCreatePage( const WizardState i_nState ) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir if ( NULL == GetPage( i_nState ) ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir TabPage* pNewPage = createPage( i_nState ); 296cdf0e10cSrcweir DBG_ASSERT( pNewPage, "OWizardMachine::GetOrCreatePage: invalid new page (NULL)!" ); 297cdf0e10cSrcweir 298cdf0e10cSrcweir // fill up the page sequence of our base class (with dummies) 299cdf0e10cSrcweir while ( m_pImpl->nFirstUnknownPage < i_nState ) 300cdf0e10cSrcweir { 301cdf0e10cSrcweir AddPage( NULL ); 302cdf0e10cSrcweir ++m_pImpl->nFirstUnknownPage; 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir if ( m_pImpl->nFirstUnknownPage == i_nState ) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir // encountered this page number the first time 308cdf0e10cSrcweir AddPage( pNewPage ); 309cdf0e10cSrcweir ++m_pImpl->nFirstUnknownPage; 310cdf0e10cSrcweir } 311cdf0e10cSrcweir else 312cdf0e10cSrcweir // already had this page - just change it 313cdf0e10cSrcweir SetPage( i_nState, pNewPage ); 314cdf0e10cSrcweir } 315cdf0e10cSrcweir return GetPage( i_nState ); 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir //--------------------------------------------------------------------- ActivatePage()319cdf0e10cSrcweir void OWizardMachine::ActivatePage() 320cdf0e10cSrcweir { 321cdf0e10cSrcweir WizardDialog::ActivatePage(); 322cdf0e10cSrcweir 323cdf0e10cSrcweir WizardState nCurrentLevel = GetCurLevel(); 324cdf0e10cSrcweir GetOrCreatePage( nCurrentLevel ); 325cdf0e10cSrcweir 326cdf0e10cSrcweir enterState( nCurrentLevel ); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir //--------------------------------------------------------------------- DeactivatePage()330cdf0e10cSrcweir long OWizardMachine::DeactivatePage() 331cdf0e10cSrcweir { 332cdf0e10cSrcweir WizardState nCurrentState = getCurrentState(); 333cdf0e10cSrcweir if (!leaveState(nCurrentState) || !WizardDialog::DeactivatePage()) 334cdf0e10cSrcweir return sal_False; 335cdf0e10cSrcweir return sal_True; 336cdf0e10cSrcweir } 337cdf0e10cSrcweir 338cdf0e10cSrcweir //--------------------------------------------------------------------- defaultButton(sal_uInt32 _nWizardButtonFlags)339cdf0e10cSrcweir void OWizardMachine::defaultButton(sal_uInt32 _nWizardButtonFlags) 340cdf0e10cSrcweir { 341cdf0e10cSrcweir // the new default button 342cdf0e10cSrcweir PushButton* pNewDefButton = NULL; 343cdf0e10cSrcweir if (m_pFinish && (_nWizardButtonFlags & WZB_FINISH)) 344cdf0e10cSrcweir pNewDefButton = m_pFinish; 345cdf0e10cSrcweir if (m_pNextPage && (_nWizardButtonFlags & WZB_NEXT)) 346cdf0e10cSrcweir pNewDefButton = m_pNextPage; 347cdf0e10cSrcweir if (m_pPrevPage && (_nWizardButtonFlags & WZB_PREVIOUS)) 348cdf0e10cSrcweir pNewDefButton = m_pPrevPage; 349cdf0e10cSrcweir if (m_pHelp && (_nWizardButtonFlags & WZB_HELP)) 350cdf0e10cSrcweir pNewDefButton = m_pHelp; 351cdf0e10cSrcweir if (m_pCancel && (_nWizardButtonFlags & WZB_CANCEL)) 352cdf0e10cSrcweir pNewDefButton = m_pCancel; 353cdf0e10cSrcweir 354cdf0e10cSrcweir if ( pNewDefButton ) 355cdf0e10cSrcweir defaultButton( pNewDefButton ); 356cdf0e10cSrcweir else 357cdf0e10cSrcweir implResetDefault( this ); 358cdf0e10cSrcweir } 359cdf0e10cSrcweir 360cdf0e10cSrcweir //--------------------------------------------------------------------- implResetDefault(Window * _pWindow)361cdf0e10cSrcweir void OWizardMachine::implResetDefault(Window* _pWindow) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir Window* pChildLoop = _pWindow->GetWindow(WINDOW_FIRSTCHILD); 364cdf0e10cSrcweir while (pChildLoop) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir // does the window participate in the tabbing order? 367cdf0e10cSrcweir if (pChildLoop->GetStyle() & WB_DIALOGCONTROL) 368cdf0e10cSrcweir implResetDefault(pChildLoop); 369cdf0e10cSrcweir 370cdf0e10cSrcweir // is it a button? 371cdf0e10cSrcweir WindowType eType = pChildLoop->GetType(); 372cdf0e10cSrcweir if ( (WINDOW_BUTTON == eType) 373cdf0e10cSrcweir || (WINDOW_PUSHBUTTON == eType) 374cdf0e10cSrcweir || (WINDOW_OKBUTTON == eType) 375cdf0e10cSrcweir || (WINDOW_CANCELBUTTON == eType) 376cdf0e10cSrcweir || (WINDOW_HELPBUTTON == eType) 377cdf0e10cSrcweir || (WINDOW_IMAGEBUTTON == eType) 378cdf0e10cSrcweir || (WINDOW_MENUBUTTON == eType) 379cdf0e10cSrcweir || (WINDOW_MOREBUTTON == eType) 380cdf0e10cSrcweir ) 381cdf0e10cSrcweir { 382cdf0e10cSrcweir pChildLoop->SetStyle(pChildLoop->GetStyle() & ~WB_DEFBUTTON); 383cdf0e10cSrcweir } 384cdf0e10cSrcweir 385cdf0e10cSrcweir // the next one ... 386cdf0e10cSrcweir pChildLoop = pChildLoop->GetWindow(WINDOW_NEXT); 387cdf0e10cSrcweir } 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir //--------------------------------------------------------------------- defaultButton(PushButton * _pNewDefButton)391cdf0e10cSrcweir void OWizardMachine::defaultButton(PushButton* _pNewDefButton) 392cdf0e10cSrcweir { 393cdf0e10cSrcweir // loop through all (direct and indirect) descendants which participate in our tabbing order, and 394cdf0e10cSrcweir // reset the WB_DEFBUTTON for every window which is a button 395cdf0e10cSrcweir implResetDefault(this); 396cdf0e10cSrcweir 397cdf0e10cSrcweir // set it's new style 398cdf0e10cSrcweir if (_pNewDefButton) 399cdf0e10cSrcweir _pNewDefButton->SetStyle(_pNewDefButton->GetStyle() | WB_DEFBUTTON); 400cdf0e10cSrcweir } 401cdf0e10cSrcweir 402cdf0e10cSrcweir //--------------------------------------------------------------------- enableButtons(sal_uInt32 _nWizardButtonFlags,sal_Bool _bEnable)403cdf0e10cSrcweir void OWizardMachine::enableButtons(sal_uInt32 _nWizardButtonFlags, sal_Bool _bEnable) 404cdf0e10cSrcweir { 405cdf0e10cSrcweir if (m_pFinish && (_nWizardButtonFlags & WZB_FINISH)) 406cdf0e10cSrcweir m_pFinish->Enable(_bEnable); 407cdf0e10cSrcweir if (m_pNextPage && (_nWizardButtonFlags & WZB_NEXT)) 408cdf0e10cSrcweir m_pNextPage->Enable(_bEnable); 409cdf0e10cSrcweir if (m_pPrevPage && (_nWizardButtonFlags & WZB_PREVIOUS)) 410cdf0e10cSrcweir m_pPrevPage->Enable(_bEnable); 411cdf0e10cSrcweir if (m_pHelp && (_nWizardButtonFlags & WZB_HELP)) 412cdf0e10cSrcweir m_pHelp->Enable(_bEnable); 413cdf0e10cSrcweir if (m_pCancel && (_nWizardButtonFlags & WZB_CANCEL)) 414cdf0e10cSrcweir m_pCancel->Enable(_bEnable); 415cdf0e10cSrcweir } 416cdf0e10cSrcweir 417cdf0e10cSrcweir //--------------------------------------------------------------------- enterState(WizardState _nState)418cdf0e10cSrcweir void OWizardMachine::enterState(WizardState _nState) 419cdf0e10cSrcweir { 420cdf0e10cSrcweir // tell the page 421cdf0e10cSrcweir IWizardPageController* pController = getPageController( GetPage( _nState ) ); 422cdf0e10cSrcweir OSL_ENSURE( pController, "OWizardMachine::enterState: no controller for the given page!" ); 423cdf0e10cSrcweir if ( pController ) 424cdf0e10cSrcweir pController->initializePage(); 425cdf0e10cSrcweir 426cdf0e10cSrcweir if ( isAutomaticNextButtonStateEnabled() ) 427cdf0e10cSrcweir enableButtons( WZB_NEXT, canAdvance() ); 428cdf0e10cSrcweir 429cdf0e10cSrcweir enableButtons( WZB_PREVIOUS, !m_pImpl->aStateHistory.empty() ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir // set the new title - it depends on the current page (i.e. state) 432cdf0e10cSrcweir implUpdateTitle(); 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir //--------------------------------------------------------------------- leaveState(WizardState)436cdf0e10cSrcweir sal_Bool OWizardMachine::leaveState(WizardState) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir // no need to ask the page here. 439cdf0e10cSrcweir // If we reach this point, we already gave the current page the chance to commit it's data, 440cdf0e10cSrcweir // and it was allowed to commit it's data 441cdf0e10cSrcweir 442cdf0e10cSrcweir return sal_True; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir 445cdf0e10cSrcweir //--------------------------------------------------------------------- onFinish()446cdf0e10cSrcweir sal_Bool OWizardMachine::onFinish() 447cdf0e10cSrcweir { 448cdf0e10cSrcweir return Finnish( RET_OK ); 449cdf0e10cSrcweir } 450cdf0e10cSrcweir 451cdf0e10cSrcweir //--------------------------------------------------------------------- IMPL_LINK(OWizardMachine,OnFinish,PushButton *,EMPTYARG)452cdf0e10cSrcweir IMPL_LINK(OWizardMachine, OnFinish, PushButton*, EMPTYARG) 453cdf0e10cSrcweir { 454cdf0e10cSrcweir if ( isTravelingSuspended() ) 455cdf0e10cSrcweir return 0; 456cdf0e10cSrcweir WizardTravelSuspension aTravelGuard( *this ); 457cdf0e10cSrcweir if ( !prepareLeaveCurrentState( eFinish ) ) 458cdf0e10cSrcweir { 459cdf0e10cSrcweir return 0L; 460cdf0e10cSrcweir } 461cdf0e10cSrcweir return onFinish() ? 1L : 0L; 462cdf0e10cSrcweir } 463cdf0e10cSrcweir 464cdf0e10cSrcweir //--------------------------------------------------------------------- determineNextState(WizardState _nCurrentState) const465cdf0e10cSrcweir OWizardMachine::WizardState OWizardMachine::determineNextState( WizardState _nCurrentState ) const 466cdf0e10cSrcweir { 467cdf0e10cSrcweir return _nCurrentState + 1; 468cdf0e10cSrcweir } 469cdf0e10cSrcweir 470cdf0e10cSrcweir //--------------------------------------------------------------------- prepareLeaveCurrentState(CommitPageReason _eReason)471cdf0e10cSrcweir sal_Bool OWizardMachine::prepareLeaveCurrentState( CommitPageReason _eReason ) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir IWizardPageController* pController = getPageController( GetPage( getCurrentState() ) ); 474cdf0e10cSrcweir ENSURE_OR_RETURN( pController != NULL, "OWizardMachine::prepareLeaveCurrentState: no controller for the current page!", sal_True ); 475cdf0e10cSrcweir return pController->commitPage( _eReason ); 476cdf0e10cSrcweir } 477cdf0e10cSrcweir 478cdf0e10cSrcweir //--------------------------------------------------------------------- skipBackwardUntil(WizardState _nTargetState)479cdf0e10cSrcweir sal_Bool OWizardMachine::skipBackwardUntil( WizardState _nTargetState ) 480cdf0e10cSrcweir { 481cdf0e10cSrcweir // alowed to leave the current page? 482cdf0e10cSrcweir if ( !prepareLeaveCurrentState( eTravelBackward ) ) 483cdf0e10cSrcweir return sal_False; 484cdf0e10cSrcweir 485cdf0e10cSrcweir // don't travel directly on m_pImpl->aStateHistory, in case something goes wrong 486cdf0e10cSrcweir ::std::stack< WizardState > aTravelVirtually = m_pImpl->aStateHistory; 487cdf0e10cSrcweir ::std::stack< WizardState > aOldStateHistory = m_pImpl->aStateHistory; 488cdf0e10cSrcweir 489cdf0e10cSrcweir WizardState nCurrentRollbackState = getCurrentState(); 490cdf0e10cSrcweir while ( nCurrentRollbackState != _nTargetState ) 491cdf0e10cSrcweir { 492cdf0e10cSrcweir DBG_ASSERT( !aTravelVirtually.empty(), "OWizardMachine::skipBackwardUntil: this target state does not exist in the history!" ); 493cdf0e10cSrcweir nCurrentRollbackState = aTravelVirtually.top(); 494cdf0e10cSrcweir aTravelVirtually.pop(); 495cdf0e10cSrcweir } 496cdf0e10cSrcweir m_pImpl->aStateHistory = aTravelVirtually; 497cdf0e10cSrcweir if ( !ShowPage( _nTargetState ) ) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir m_pImpl->aStateHistory = aOldStateHistory; 500cdf0e10cSrcweir return sal_False; 501cdf0e10cSrcweir } 502cdf0e10cSrcweir return sal_True; 503cdf0e10cSrcweir } 504cdf0e10cSrcweir 505cdf0e10cSrcweir //--------------------------------------------------------------------- skipUntil(WizardState _nTargetState)506cdf0e10cSrcweir sal_Bool OWizardMachine::skipUntil( WizardState _nTargetState ) 507cdf0e10cSrcweir { 508cdf0e10cSrcweir WizardState nCurrentState = getCurrentState(); 509cdf0e10cSrcweir 510cdf0e10cSrcweir // alowed to leave the current page? 511cdf0e10cSrcweir if ( !prepareLeaveCurrentState( nCurrentState < _nTargetState ? eTravelForward : eTravelBackward ) ) 512cdf0e10cSrcweir return sal_False; 513cdf0e10cSrcweir 514cdf0e10cSrcweir // don't travel directly on m_pImpl->aStateHistory, in case something goes wrong 515cdf0e10cSrcweir ::std::stack< WizardState > aTravelVirtually = m_pImpl->aStateHistory; 516cdf0e10cSrcweir ::std::stack< WizardState > aOldStateHistory = m_pImpl->aStateHistory; 517cdf0e10cSrcweir while ( nCurrentState != _nTargetState ) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir WizardState nNextState = determineNextState( nCurrentState ); 520cdf0e10cSrcweir if ( WZS_INVALID_STATE == nNextState ) 521cdf0e10cSrcweir { 522cdf0e10cSrcweir DBG_ERROR( "OWizardMachine::skipUntil: the given target state does not exist!" ); 523cdf0e10cSrcweir return sal_False; 524cdf0e10cSrcweir } 525cdf0e10cSrcweir 526cdf0e10cSrcweir // remember the skipped state in the history 527cdf0e10cSrcweir aTravelVirtually.push( nCurrentState ); 528cdf0e10cSrcweir 529cdf0e10cSrcweir // get the next state 530cdf0e10cSrcweir nCurrentState = nNextState; 531cdf0e10cSrcweir } 532cdf0e10cSrcweir m_pImpl->aStateHistory = aTravelVirtually; 533cdf0e10cSrcweir // show the target page 534cdf0e10cSrcweir if ( !ShowPage( nCurrentState ) ) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir // argh! prepareLeaveCurrentPage succeeded, determineNextState succeeded, 537cdf0e10cSrcweir // but ShowPage doesn't? Somebody behaves very strange here .... 538cdf0e10cSrcweir DBG_ERROR( "OWizardMachine::skipUntil: very unpolite ...." ); 539cdf0e10cSrcweir m_pImpl->aStateHistory = aOldStateHistory; 540cdf0e10cSrcweir return sal_False; 541cdf0e10cSrcweir } 542cdf0e10cSrcweir return sal_True; 543cdf0e10cSrcweir } 544cdf0e10cSrcweir 545cdf0e10cSrcweir //--------------------------------------------------------------------- skip(sal_Int32 _nSteps)546cdf0e10cSrcweir sal_Bool OWizardMachine::skip(sal_Int32 _nSteps) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir DBG_ASSERT(_nSteps > 0, "OWizardMachine::skip: invalid number of steps!"); 549cdf0e10cSrcweir // alowed to leave the current page? 550cdf0e10cSrcweir if ( !prepareLeaveCurrentState( eTravelForward ) ) 551cdf0e10cSrcweir return sal_False; 552cdf0e10cSrcweir 553cdf0e10cSrcweir WizardState nCurrentState = getCurrentState(); 554cdf0e10cSrcweir WizardState nNextState = determineNextState(nCurrentState); 555cdf0e10cSrcweir // loop _nSteps steps 556cdf0e10cSrcweir while (_nSteps-- > 0) 557cdf0e10cSrcweir { 558cdf0e10cSrcweir if (WZS_INVALID_STATE == nNextState) 559cdf0e10cSrcweir return sal_False; 560cdf0e10cSrcweir 561cdf0e10cSrcweir // remember the skipped state in the history 562cdf0e10cSrcweir m_pImpl->aStateHistory.push(nCurrentState); 563cdf0e10cSrcweir 564cdf0e10cSrcweir // get the next state 565cdf0e10cSrcweir nCurrentState = nNextState; 566cdf0e10cSrcweir nNextState = determineNextState(nCurrentState); 567cdf0e10cSrcweir } 568cdf0e10cSrcweir 569cdf0e10cSrcweir // show the (n+1)th page 570cdf0e10cSrcweir if (!ShowPage(nCurrentState)) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir // TODO: this leaves us in a state where we have no current page and an inconsistent state history. 573cdf0e10cSrcweir // Perhaps we should rollback the skipping here .... 574cdf0e10cSrcweir DBG_ERROR("OWizardMachine::skip: very unpolite ...."); 575cdf0e10cSrcweir // if somebody does a skip and then does not allow to leave ... 576cdf0e10cSrcweir // (can't be a commit error, as we've already committed the current page. So if ShowPage fails here, 577cdf0e10cSrcweir // somebody behaves really strange ...) 578cdf0e10cSrcweir return sal_False; 579cdf0e10cSrcweir } 580cdf0e10cSrcweir 581cdf0e10cSrcweir // all fine 582cdf0e10cSrcweir return sal_True; 583cdf0e10cSrcweir } 584cdf0e10cSrcweir 585cdf0e10cSrcweir //--------------------------------------------------------------------- travelNext()586cdf0e10cSrcweir sal_Bool OWizardMachine::travelNext() 587cdf0e10cSrcweir { 588cdf0e10cSrcweir // allowed to leave the current page? 589cdf0e10cSrcweir if ( !prepareLeaveCurrentState( eTravelForward ) ) 590cdf0e10cSrcweir return sal_False; 591cdf0e10cSrcweir 592cdf0e10cSrcweir // determine the next state to travel to 593cdf0e10cSrcweir WizardState nCurrentState = getCurrentState(); 594cdf0e10cSrcweir WizardState nNextState = determineNextState(nCurrentState); 595cdf0e10cSrcweir if (WZS_INVALID_STATE == nNextState) 596cdf0e10cSrcweir return sal_False; 597cdf0e10cSrcweir 598cdf0e10cSrcweir // the state history is used by the enterState method 599cdf0e10cSrcweir // all fine 600cdf0e10cSrcweir m_pImpl->aStateHistory.push(nCurrentState); 601cdf0e10cSrcweir if (!ShowPage(nNextState)) 602cdf0e10cSrcweir { 603cdf0e10cSrcweir m_pImpl->aStateHistory.pop(); 604cdf0e10cSrcweir return sal_False; 605cdf0e10cSrcweir } 606cdf0e10cSrcweir 607cdf0e10cSrcweir return sal_True; 608cdf0e10cSrcweir } 609cdf0e10cSrcweir 610cdf0e10cSrcweir //--------------------------------------------------------------------- travelPrevious()611cdf0e10cSrcweir sal_Bool OWizardMachine::travelPrevious() 612cdf0e10cSrcweir { 613cdf0e10cSrcweir DBG_ASSERT(m_pImpl->aStateHistory.size() > 0, "OWizardMachine::travelPrevious: have no previous page!"); 614cdf0e10cSrcweir 615cdf0e10cSrcweir // alowed to leave the current page? 616cdf0e10cSrcweir if ( !prepareLeaveCurrentState( eTravelBackward ) ) 617cdf0e10cSrcweir return sal_False; 618cdf0e10cSrcweir 619cdf0e10cSrcweir // the next state to switch to 620cdf0e10cSrcweir WizardState nPreviousState = m_pImpl->aStateHistory.top(); 621cdf0e10cSrcweir 622cdf0e10cSrcweir // the state history is used by the enterState method 623cdf0e10cSrcweir m_pImpl->aStateHistory.pop(); 624cdf0e10cSrcweir // show this page 625cdf0e10cSrcweir if (!ShowPage(nPreviousState)) 626cdf0e10cSrcweir { 627cdf0e10cSrcweir m_pImpl->aStateHistory.push(nPreviousState); 628cdf0e10cSrcweir return sal_False; 629cdf0e10cSrcweir } 630cdf0e10cSrcweir 631cdf0e10cSrcweir // all fine 632cdf0e10cSrcweir return sal_True; 633cdf0e10cSrcweir } 634cdf0e10cSrcweir 635cdf0e10cSrcweir //--------------------------------------------------------------------- removePageFromHistory(WizardState nToRemove)636cdf0e10cSrcweir void OWizardMachine::removePageFromHistory( WizardState nToRemove ) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir 639cdf0e10cSrcweir ::std::stack< WizardState > aTemp; 640cdf0e10cSrcweir while(!m_pImpl->aStateHistory.empty()) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir WizardState nPreviousState = m_pImpl->aStateHistory.top(); 643cdf0e10cSrcweir m_pImpl->aStateHistory.pop(); 644cdf0e10cSrcweir if(nPreviousState != nToRemove) 645cdf0e10cSrcweir aTemp.push( nPreviousState ); 646cdf0e10cSrcweir else 647cdf0e10cSrcweir break; 648cdf0e10cSrcweir } 649cdf0e10cSrcweir while(!aTemp.empty()) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir m_pImpl->aStateHistory.push( aTemp.top() ); 652cdf0e10cSrcweir aTemp.pop(); 653cdf0e10cSrcweir } 654cdf0e10cSrcweir } 655cdf0e10cSrcweir 656cdf0e10cSrcweir //--------------------------------------------------------------------- enableAutomaticNextButtonState(bool _bEnable)657cdf0e10cSrcweir void OWizardMachine::enableAutomaticNextButtonState( bool _bEnable ) 658cdf0e10cSrcweir { 659cdf0e10cSrcweir m_pImpl->m_bAutoNextButtonState = _bEnable; 660cdf0e10cSrcweir } 661cdf0e10cSrcweir 662cdf0e10cSrcweir //--------------------------------------------------------------------- isAutomaticNextButtonStateEnabled() const663cdf0e10cSrcweir bool OWizardMachine::isAutomaticNextButtonStateEnabled() const 664cdf0e10cSrcweir { 665cdf0e10cSrcweir return m_pImpl->m_bAutoNextButtonState; 666cdf0e10cSrcweir } 667cdf0e10cSrcweir 668cdf0e10cSrcweir //--------------------------------------------------------------------- IMPL_LINK(OWizardMachine,OnPrevPage,PushButton *,EMPTYARG)669cdf0e10cSrcweir IMPL_LINK(OWizardMachine, OnPrevPage, PushButton*, EMPTYARG) 670cdf0e10cSrcweir { 671cdf0e10cSrcweir if ( isTravelingSuspended() ) 672cdf0e10cSrcweir return 0; 673cdf0e10cSrcweir WizardTravelSuspension aTravelGuard( *this ); 674cdf0e10cSrcweir sal_Int32 nRet = travelPrevious(); 675cdf0e10cSrcweir return nRet; 676cdf0e10cSrcweir } 677cdf0e10cSrcweir 678cdf0e10cSrcweir //--------------------------------------------------------------------- IMPL_LINK(OWizardMachine,OnNextPage,PushButton *,EMPTYARG)679cdf0e10cSrcweir IMPL_LINK(OWizardMachine, OnNextPage, PushButton*, EMPTYARG) 680cdf0e10cSrcweir { 681cdf0e10cSrcweir if ( isTravelingSuspended() ) 682cdf0e10cSrcweir return 0; 683cdf0e10cSrcweir WizardTravelSuspension aTravelGuard( *this ); 684cdf0e10cSrcweir sal_Int32 nRet = travelNext(); 685cdf0e10cSrcweir return nRet; 686cdf0e10cSrcweir } 687cdf0e10cSrcweir 688cdf0e10cSrcweir //--------------------------------------------------------------------- getPageController(TabPage * _pCurrentPage) const689cdf0e10cSrcweir IWizardPageController* OWizardMachine::getPageController( TabPage* _pCurrentPage ) const 690cdf0e10cSrcweir { 691cdf0e10cSrcweir IWizardPageController* pController = dynamic_cast< IWizardPageController* >( _pCurrentPage ); 692cdf0e10cSrcweir return pController; 693cdf0e10cSrcweir } 694cdf0e10cSrcweir 695cdf0e10cSrcweir //--------------------------------------------------------------------- getStateHistory(::std::vector<WizardState> & _out_rHistory)696cdf0e10cSrcweir void OWizardMachine::getStateHistory( ::std::vector< WizardState >& _out_rHistory ) 697cdf0e10cSrcweir { 698cdf0e10cSrcweir ::std::stack< WizardState > aHistoryCopy( m_pImpl->aStateHistory ); 699cdf0e10cSrcweir while ( !aHistoryCopy.empty() ) 700cdf0e10cSrcweir { 701cdf0e10cSrcweir _out_rHistory.push_back( aHistoryCopy.top() ); 702cdf0e10cSrcweir aHistoryCopy.pop(); 703cdf0e10cSrcweir } 704cdf0e10cSrcweir } 705cdf0e10cSrcweir 706cdf0e10cSrcweir //--------------------------------------------------------------------- canAdvance() const707cdf0e10cSrcweir bool OWizardMachine::canAdvance() const 708cdf0e10cSrcweir { 709cdf0e10cSrcweir return WZS_INVALID_STATE != determineNextState( getCurrentState() ); 710cdf0e10cSrcweir } 711cdf0e10cSrcweir 712cdf0e10cSrcweir //--------------------------------------------------------------------- updateTravelUI()713cdf0e10cSrcweir void OWizardMachine::updateTravelUI() 714cdf0e10cSrcweir { 715cdf0e10cSrcweir const IWizardPageController* pController = getPageController( GetPage( getCurrentState() ) ); 716cdf0e10cSrcweir OSL_ENSURE( pController != NULL, "RoadmapWizard::updateTravelUI: no controller for the current page!" ); 717cdf0e10cSrcweir 718cdf0e10cSrcweir bool bCanAdvance = 719cdf0e10cSrcweir ( !pController || pController->canAdvance() ) // the current page allows to advance 720cdf0e10cSrcweir && canAdvance(); // the dialog as a whole allows to advance 721cdf0e10cSrcweir enableButtons( WZB_NEXT, bCanAdvance ); 722cdf0e10cSrcweir } 723cdf0e10cSrcweir 724cdf0e10cSrcweir //--------------------------------------------------------------------- isTravelingSuspended() const725cdf0e10cSrcweir bool OWizardMachine::isTravelingSuspended() const 726cdf0e10cSrcweir { 727cdf0e10cSrcweir return m_pImpl->m_bTravelingSuspended; 728cdf0e10cSrcweir } 729cdf0e10cSrcweir 730cdf0e10cSrcweir //--------------------------------------------------------------------- suspendTraveling(AccessGuard)731cdf0e10cSrcweir void OWizardMachine::suspendTraveling( AccessGuard ) 732cdf0e10cSrcweir { 733cdf0e10cSrcweir DBG_ASSERT( !m_pImpl->m_bTravelingSuspended, "OWizardMachine::suspendTraveling: already suspended!" ); 734cdf0e10cSrcweir m_pImpl->m_bTravelingSuspended = true; 735cdf0e10cSrcweir } 736cdf0e10cSrcweir 737cdf0e10cSrcweir //--------------------------------------------------------------------- resumeTraveling(AccessGuard)738cdf0e10cSrcweir void OWizardMachine::resumeTraveling( AccessGuard ) 739cdf0e10cSrcweir { 740cdf0e10cSrcweir DBG_ASSERT( m_pImpl->m_bTravelingSuspended, "OWizardMachine::resumeTraveling: nothing to resume!" ); 741cdf0e10cSrcweir m_pImpl->m_bTravelingSuspended = false; 742cdf0e10cSrcweir } 743cdf0e10cSrcweir 744cdf0e10cSrcweir //......................................................................... 745cdf0e10cSrcweir } // namespace svt 746cdf0e10cSrcweir //......................................................................... 747