1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #include "precompiled_svtools.hxx" 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "../unowizard.hxx" 27*b1cdbd2cSJim Jagielski #include "wizardshell.hxx" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XComponentContext.hpp> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/AlreadyInitializedException.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XWizardController.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/WizardButton.hpp> 36*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h> 39*b1cdbd2cSJim Jagielski #include <rtl/strbuf.hxx> 40*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx> 41*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx> 42*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx> 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski //...................................................................................................................... 45*b1cdbd2cSJim Jagielski namespace svt { namespace uno 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski //...................................................................................................................... 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski /** === begin UNO using === **/ 50*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference; 51*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XInterface; 52*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY; 53*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY_THROW; 54*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_SET_THROW; 55*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Exception; 56*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::RuntimeException; 57*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any; 58*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::makeAny; 59*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence; 60*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Type; 61*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::XServiceInfo; 62*b1cdbd2cSJim Jagielski using ::com::sun::star::ui::dialogs::XWizard; 63*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::XInitialization; 64*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySetInfo; 65*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XComponentContext; 66*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::Property; 67*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::IllegalArgumentException; 68*b1cdbd2cSJim Jagielski using ::com::sun::star::ucb::AlreadyInitializedException; 69*b1cdbd2cSJim Jagielski using ::com::sun::star::ui::dialogs::XWizardController; 70*b1cdbd2cSJim Jagielski using ::com::sun::star::ui::dialogs::XWizardPage; 71*b1cdbd2cSJim Jagielski using ::com::sun::star::container::NoSuchElementException; 72*b1cdbd2cSJim Jagielski using ::com::sun::star::util::InvalidStateException; 73*b1cdbd2cSJim Jagielski using ::com::sun::star::awt::XWindow; 74*b1cdbd2cSJim Jagielski /** === end UNO using === **/ 75*b1cdbd2cSJim Jagielski namespace WizardButton = ::com::sun::star::ui::dialogs::WizardButton; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ 78*b1cdbd2cSJim Jagielski namespace 79*b1cdbd2cSJim Jagielski { lcl_convertWizardButtonToWZB(const sal_Int16 i_nWizardButton)80*b1cdbd2cSJim Jagielski sal_uInt32 lcl_convertWizardButtonToWZB( const sal_Int16 i_nWizardButton ) 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski switch ( i_nWizardButton ) 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski case WizardButton::NONE: return WZB_NONE; 85*b1cdbd2cSJim Jagielski case WizardButton::NEXT: return WZB_NEXT; 86*b1cdbd2cSJim Jagielski case WizardButton::PREVIOUS: return WZB_PREVIOUS; 87*b1cdbd2cSJim Jagielski case WizardButton::FINISH: return WZB_FINISH; 88*b1cdbd2cSJim Jagielski case WizardButton::CANCEL: return WZB_CANCEL; 89*b1cdbd2cSJim Jagielski case WizardButton::HELP: return WZB_HELP; 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "lcl_convertWizardButtonToWZB: invalid WizardButton constant!" ); 92*b1cdbd2cSJim Jagielski return WZB_NONE; 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski //================================================================================================================== 97*b1cdbd2cSJim Jagielski //= Wizard - implementation 98*b1cdbd2cSJim Jagielski //================================================================================================================== 99*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ Wizard(const Reference<XComponentContext> & _rxContext)100*b1cdbd2cSJim Jagielski Wizard::Wizard( const Reference< XComponentContext >& _rxContext ) 101*b1cdbd2cSJim Jagielski :Wizard_Base( _rxContext ) 102*b1cdbd2cSJim Jagielski ,m_aContext( _rxContext ) 103*b1cdbd2cSJim Jagielski { 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- ~Wizard()107*b1cdbd2cSJim Jagielski Wizard::~Wizard() 108*b1cdbd2cSJim Jagielski { 109*b1cdbd2cSJim Jagielski // we do this here cause the base class' call to destroyDialog won't reach us anymore : we're within an dtor, 110*b1cdbd2cSJim Jagielski // so this virtual-method-call the base class does does not work, we're already dead then ... 111*b1cdbd2cSJim Jagielski if ( m_pDialog ) 112*b1cdbd2cSJim Jagielski { 113*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 114*b1cdbd2cSJim Jagielski if ( m_pDialog ) 115*b1cdbd2cSJim Jagielski destroyDialog(); 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- Create(const Reference<XComponentContext> & _rxContext)120*b1cdbd2cSJim Jagielski Reference< XInterface > SAL_CALL Wizard::Create( const Reference< XComponentContext >& _rxContext ) 121*b1cdbd2cSJim Jagielski { 122*b1cdbd2cSJim Jagielski return *(new Wizard( _rxContext ) ); 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- 126*b1cdbd2cSJim Jagielski namespace 127*b1cdbd2cSJim Jagielski { lcl_checkPaths(const Sequence<Sequence<sal_Int16>> & i_rPaths,const Reference<XInterface> & i_rContext)128*b1cdbd2cSJim Jagielski static void lcl_checkPaths( const Sequence< Sequence< sal_Int16 > >& i_rPaths, const Reference< XInterface >& i_rContext ) 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski // need at least one path 131*b1cdbd2cSJim Jagielski if ( i_rPaths.getLength() == 0 ) 132*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), i_rContext, 2 ); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski // each path must be of length 1, at least 135*b1cdbd2cSJim Jagielski for ( sal_Int32 i = 0; i < i_rPaths.getLength(); ++i ) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski if ( i_rPaths[i].getLength() == 0 ) 138*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), i_rContext, 2 ); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski // page IDs must be in ascending order 141*b1cdbd2cSJim Jagielski sal_Int16 nPreviousPageID = i_rPaths[i][0]; 142*b1cdbd2cSJim Jagielski for ( sal_Int32 j=1; j<i_rPaths[i].getLength(); ++j ) 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski if ( i_rPaths[i][j] <= nPreviousPageID ) 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski ::rtl::OStringBuffer message; 147*b1cdbd2cSJim Jagielski message.append( "Path " ); 148*b1cdbd2cSJim Jagielski message.append( i ); 149*b1cdbd2cSJim Jagielski message.append( ": invalid page ID sequence - each page ID must be greater than the previous one." ); 150*b1cdbd2cSJim Jagielski throw IllegalArgumentException( 151*b1cdbd2cSJim Jagielski ::rtl::OStringToOUString( message.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ), 152*b1cdbd2cSJim Jagielski i_rContext, 2 ); 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski nPreviousPageID = i_rPaths[i][j]; 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski // if we have one path, that's okay 159*b1cdbd2cSJim Jagielski if ( i_rPaths.getLength() == 1 ) 160*b1cdbd2cSJim Jagielski return; 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski // if we have multiple paths, they must start with the same page id 163*b1cdbd2cSJim Jagielski const sal_Int16 nFirstPageId = i_rPaths[0][0]; 164*b1cdbd2cSJim Jagielski for ( sal_Int32 i = 0; i < i_rPaths.getLength(); ++i ) 165*b1cdbd2cSJim Jagielski { 166*b1cdbd2cSJim Jagielski if ( i_rPaths[i][0] != nFirstPageId ) 167*b1cdbd2cSJim Jagielski throw IllegalArgumentException( 168*b1cdbd2cSJim Jagielski ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "All paths must start with the same page id." ) ), 169*b1cdbd2cSJim Jagielski i_rContext, 2 ); 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- initialize(const Sequence<Any> & i_Arguments)175*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::initialize( const Sequence< Any >& i_Arguments ) throw (Exception, RuntimeException) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 178*b1cdbd2cSJim Jagielski if ( m_bInitialized ) 179*b1cdbd2cSJim Jagielski throw AlreadyInitializedException( ::rtl::OUString(), *this ); 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski if ( i_Arguments.getLength() != 2 ) 182*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), *this, -1 ); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski // the second argument must be a XWizardController, for each constructor 185*b1cdbd2cSJim Jagielski m_xController.set( i_Arguments[1], UNO_QUERY ); 186*b1cdbd2cSJim Jagielski if ( !m_xController.is() ) 187*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), *this, 2 ); 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski // the first arg is either a single path (short[]), or multiple paths (short[][]) 190*b1cdbd2cSJim Jagielski Sequence< sal_Int16 > aSinglePath; 191*b1cdbd2cSJim Jagielski i_Arguments[0] >>= aSinglePath; 192*b1cdbd2cSJim Jagielski Sequence< Sequence< sal_Int16 > > aMultiplePaths; 193*b1cdbd2cSJim Jagielski i_Arguments[0] >>= aMultiplePaths; 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski if ( !aMultiplePaths.getLength() ) 196*b1cdbd2cSJim Jagielski { 197*b1cdbd2cSJim Jagielski aMultiplePaths.realloc(1); 198*b1cdbd2cSJim Jagielski aMultiplePaths[0] = aSinglePath; 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski lcl_checkPaths( aMultiplePaths, *this ); 201*b1cdbd2cSJim Jagielski // if we survived this, the paths are valid, and we're done here ... 202*b1cdbd2cSJim Jagielski m_aWizardSteps = aMultiplePaths; 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski m_bInitialized = true; 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski lcl_getHelpId(const::rtl::OUString & _rHelpURL)207*b1cdbd2cSJim Jagielski static rtl::OString lcl_getHelpId( const ::rtl::OUString& _rHelpURL ) 208*b1cdbd2cSJim Jagielski { 209*b1cdbd2cSJim Jagielski INetURLObject aHID( _rHelpURL ); 210*b1cdbd2cSJim Jagielski if ( aHID.GetProtocol() == INET_PROT_HID ) 211*b1cdbd2cSJim Jagielski return rtl::OUStringToOString( aHID.GetURLPath(), RTL_TEXTENCODING_UTF8 ); 212*b1cdbd2cSJim Jagielski else 213*b1cdbd2cSJim Jagielski return rtl::OUStringToOString( _rHelpURL, RTL_TEXTENCODING_UTF8 ); 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------ lcl_getHelpURL(const rtl::OString & sHelpId)217*b1cdbd2cSJim Jagielski static ::rtl::OUString lcl_getHelpURL( const rtl::OString& sHelpId ) 218*b1cdbd2cSJim Jagielski { 219*b1cdbd2cSJim Jagielski ::rtl::OUStringBuffer aBuffer; 220*b1cdbd2cSJim Jagielski ::rtl::OUString aTmp( OStringToOUString( sHelpId, RTL_TEXTENCODING_UTF8 )); 221*b1cdbd2cSJim Jagielski INetURLObject aHID( aTmp ); 222*b1cdbd2cSJim Jagielski if ( aHID.GetProtocol() == INET_PROT_NOT_VALID ) 223*b1cdbd2cSJim Jagielski aBuffer.appendAscii( INET_HID_SCHEME ); 224*b1cdbd2cSJim Jagielski aBuffer.append( aTmp.getStr() ); 225*b1cdbd2cSJim Jagielski return aBuffer.makeStringAndClear(); 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- createDialog(Window * i_pParent)229*b1cdbd2cSJim Jagielski Dialog* Wizard::createDialog( Window* i_pParent ) 230*b1cdbd2cSJim Jagielski { 231*b1cdbd2cSJim Jagielski WizardShell* pDialog( new WizardShell( i_pParent, this, m_xController, m_aWizardSteps ) ); 232*b1cdbd2cSJim Jagielski pDialog->SetHelpId( lcl_getHelpId( m_sHelpURL ) ); 233*b1cdbd2cSJim Jagielski pDialog->setTitleBase( m_sTitle ); 234*b1cdbd2cSJim Jagielski return pDialog; 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- destroyDialog()238*b1cdbd2cSJim Jagielski void Wizard::destroyDialog() 239*b1cdbd2cSJim Jagielski { 240*b1cdbd2cSJim Jagielski if ( m_pDialog ) 241*b1cdbd2cSJim Jagielski m_sHelpURL = lcl_getHelpURL( m_pDialog->GetHelpId() ); 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski Wizard_Base::destroyDialog(); 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getImplementationName_static()247*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL Wizard::getImplementationName_static() throw(RuntimeException) 248*b1cdbd2cSJim Jagielski { 249*b1cdbd2cSJim Jagielski return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.svtools.uno.Wizard" ) ); 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getSupportedServiceNames_static()253*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > SAL_CALL Wizard::getSupportedServiceNames_static() throw(RuntimeException) 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aServices(1); 256*b1cdbd2cSJim Jagielski aServices[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.Wizard" ) ); 257*b1cdbd2cSJim Jagielski return aServices; 258*b1cdbd2cSJim Jagielski } 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getImplementationName()261*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL Wizard::getImplementationName() throw(RuntimeException) 262*b1cdbd2cSJim Jagielski { 263*b1cdbd2cSJim Jagielski return getImplementationName_static(); 264*b1cdbd2cSJim Jagielski } 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getSupportedServiceNames()267*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > SAL_CALL Wizard::getSupportedServiceNames() throw(RuntimeException) 268*b1cdbd2cSJim Jagielski { 269*b1cdbd2cSJim Jagielski return getSupportedServiceNames_static(); 270*b1cdbd2cSJim Jagielski } 271*b1cdbd2cSJim Jagielski 272*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getPropertySetInfo()273*b1cdbd2cSJim Jagielski Reference< XPropertySetInfo > SAL_CALL Wizard::getPropertySetInfo() throw(RuntimeException) 274*b1cdbd2cSJim Jagielski { 275*b1cdbd2cSJim Jagielski return createPropertySetInfo( getInfoHelper() ); 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getInfoHelper()279*b1cdbd2cSJim Jagielski ::cppu::IPropertyArrayHelper& SAL_CALL Wizard::getInfoHelper() 280*b1cdbd2cSJim Jagielski { 281*b1cdbd2cSJim Jagielski return *const_cast< Wizard* >( this )->getArrayHelper(); 282*b1cdbd2cSJim Jagielski } 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- createArrayHelper() const285*b1cdbd2cSJim Jagielski ::cppu::IPropertyArrayHelper* Wizard::createArrayHelper( ) const 286*b1cdbd2cSJim Jagielski { 287*b1cdbd2cSJim Jagielski Sequence< Property > aProps; 288*b1cdbd2cSJim Jagielski describeProperties( aProps ); 289*b1cdbd2cSJim Jagielski return new ::cppu::OPropertyArrayHelper( aProps ); 290*b1cdbd2cSJim Jagielski } 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ getHelpURL()293*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL Wizard::getHelpURL() throw (RuntimeException) 294*b1cdbd2cSJim Jagielski { 295*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 296*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 297*b1cdbd2cSJim Jagielski 298*b1cdbd2cSJim Jagielski if ( !m_pDialog ) 299*b1cdbd2cSJim Jagielski return m_sHelpURL; 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski return lcl_getHelpURL( m_pDialog->GetHelpId() ); 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ setHelpURL(const::rtl::OUString & i_HelpURL)305*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::setHelpURL( const ::rtl::OUString& i_HelpURL ) throw (RuntimeException) 306*b1cdbd2cSJim Jagielski { 307*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 308*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 309*b1cdbd2cSJim Jagielski 310*b1cdbd2cSJim Jagielski if ( !m_pDialog ) 311*b1cdbd2cSJim Jagielski m_sHelpURL = i_HelpURL; 312*b1cdbd2cSJim Jagielski else 313*b1cdbd2cSJim Jagielski m_pDialog->SetHelpId( lcl_getHelpId( i_HelpURL ) ); 314*b1cdbd2cSJim Jagielski } 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ getDialogWindow()317*b1cdbd2cSJim Jagielski Reference< XWindow > SAL_CALL Wizard::getDialogWindow() throw (RuntimeException) 318*b1cdbd2cSJim Jagielski { 319*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 320*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN( m_pDialog, "Wizard::getDialogWindow: illegal call (execution did not start, yet)!", NULL ); 323*b1cdbd2cSJim Jagielski return Reference< XWindow >( m_pDialog->GetComponentInterface(), UNO_QUERY ); 324*b1cdbd2cSJim Jagielski } 325*b1cdbd2cSJim Jagielski 326*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ enableButton(::sal_Int16 i_WizardButton,::sal_Bool i_Enable)327*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::enableButton( ::sal_Int16 i_WizardButton, ::sal_Bool i_Enable ) throw (RuntimeException) 328*b1cdbd2cSJim Jagielski { 329*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 330*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 333*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::enableButtons: invalid dialog implementation!" ); 334*b1cdbd2cSJim Jagielski 335*b1cdbd2cSJim Jagielski pWizardImpl->enableButtons( lcl_convertWizardButtonToWZB( i_WizardButton ), i_Enable ); 336*b1cdbd2cSJim Jagielski } 337*b1cdbd2cSJim Jagielski 338*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ setDefaultButton(::sal_Int16 i_WizardButton)339*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::setDefaultButton( ::sal_Int16 i_WizardButton ) throw (RuntimeException) 340*b1cdbd2cSJim Jagielski { 341*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 342*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 343*b1cdbd2cSJim Jagielski 344*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 345*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::setDefaultButton: invalid dialog implementation!" ); 346*b1cdbd2cSJim Jagielski 347*b1cdbd2cSJim Jagielski pWizardImpl->defaultButton( lcl_convertWizardButtonToWZB( i_WizardButton ) ); 348*b1cdbd2cSJim Jagielski } 349*b1cdbd2cSJim Jagielski 350*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ travelNext()351*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL Wizard::travelNext( ) throw (RuntimeException) 352*b1cdbd2cSJim Jagielski { 353*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 354*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 355*b1cdbd2cSJim Jagielski 356*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 357*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::travelNext: invalid dialog implementation!" ); 358*b1cdbd2cSJim Jagielski 359*b1cdbd2cSJim Jagielski return pWizardImpl->travelNext(); 360*b1cdbd2cSJim Jagielski } 361*b1cdbd2cSJim Jagielski 362*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ travelPrevious()363*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL Wizard::travelPrevious( ) throw (RuntimeException) 364*b1cdbd2cSJim Jagielski { 365*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 366*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 367*b1cdbd2cSJim Jagielski 368*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 369*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::travelPrevious: invalid dialog implementation!" ); 370*b1cdbd2cSJim Jagielski 371*b1cdbd2cSJim Jagielski return pWizardImpl->travelPrevious(); 372*b1cdbd2cSJim Jagielski } 373*b1cdbd2cSJim Jagielski 374*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ enablePage(::sal_Int16 i_PageID,::sal_Bool i_Enable)375*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::enablePage( ::sal_Int16 i_PageID, ::sal_Bool i_Enable ) throw (NoSuchElementException, InvalidStateException, RuntimeException) 376*b1cdbd2cSJim Jagielski { 377*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 378*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 379*b1cdbd2cSJim Jagielski 380*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 381*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::enablePage: invalid dialog implementation!" ); 382*b1cdbd2cSJim Jagielski 383*b1cdbd2cSJim Jagielski if ( !pWizardImpl->knowsPage( i_PageID ) ) 384*b1cdbd2cSJim Jagielski throw NoSuchElementException( ::rtl::OUString(), *this ); 385*b1cdbd2cSJim Jagielski 386*b1cdbd2cSJim Jagielski if ( i_PageID == pWizardImpl->getCurrentPage() ) 387*b1cdbd2cSJim Jagielski throw InvalidStateException( ::rtl::OUString(), *this ); 388*b1cdbd2cSJim Jagielski 389*b1cdbd2cSJim Jagielski pWizardImpl->enablePage( i_PageID, i_Enable ); 390*b1cdbd2cSJim Jagielski } 391*b1cdbd2cSJim Jagielski 392*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ updateTravelUI()393*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::updateTravelUI( ) throw (RuntimeException) 394*b1cdbd2cSJim Jagielski { 395*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 396*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 399*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::updateTravelUI: invalid dialog implementation!" ); 400*b1cdbd2cSJim Jagielski 401*b1cdbd2cSJim Jagielski pWizardImpl->updateTravelUI(); 402*b1cdbd2cSJim Jagielski } 403*b1cdbd2cSJim Jagielski 404*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ advanceTo(::sal_Int16 i_PageId)405*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL Wizard::advanceTo( ::sal_Int16 i_PageId ) throw (RuntimeException) 406*b1cdbd2cSJim Jagielski { 407*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 408*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 409*b1cdbd2cSJim Jagielski 410*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 411*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::advanceTo: invalid dialog implementation!" ); 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski return pWizardImpl->advanceTo( i_PageId ); 414*b1cdbd2cSJim Jagielski } 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ goBackTo(::sal_Int16 i_PageId)417*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL Wizard::goBackTo( ::sal_Int16 i_PageId ) throw (RuntimeException) 418*b1cdbd2cSJim Jagielski { 419*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 420*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 421*b1cdbd2cSJim Jagielski 422*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 423*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_FALSE( pWizardImpl, "Wizard::goBackTo: invalid dialog implementation!" ); 424*b1cdbd2cSJim Jagielski 425*b1cdbd2cSJim Jagielski return pWizardImpl->goBackTo( i_PageId ); 426*b1cdbd2cSJim Jagielski } 427*b1cdbd2cSJim Jagielski 428*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ getCurrentPage()429*b1cdbd2cSJim Jagielski Reference< XWizardPage > SAL_CALL Wizard::getCurrentPage( ) throw (RuntimeException) 430*b1cdbd2cSJim Jagielski { 431*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 432*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 433*b1cdbd2cSJim Jagielski 434*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 435*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN( pWizardImpl, "Wizard::getCurrentPage: invalid dialog implementation!", Reference< XWizardPage >() ); 436*b1cdbd2cSJim Jagielski 437*b1cdbd2cSJim Jagielski return pWizardImpl->getCurrentWizardPage(); 438*b1cdbd2cSJim Jagielski } 439*b1cdbd2cSJim Jagielski 440*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ activatePath(::sal_Int16 i_PathIndex,::sal_Bool i_Final)441*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::activatePath( ::sal_Int16 i_PathIndex, ::sal_Bool i_Final ) throw (NoSuchElementException, InvalidStateException, RuntimeException) 442*b1cdbd2cSJim Jagielski { 443*b1cdbd2cSJim Jagielski ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 444*b1cdbd2cSJim Jagielski ::osl::MutexGuard aGuard( m_aMutex ); 445*b1cdbd2cSJim Jagielski 446*b1cdbd2cSJim Jagielski if ( ( i_PathIndex < 0 ) || ( i_PathIndex >= m_aWizardSteps.getLength() ) ) 447*b1cdbd2cSJim Jagielski throw NoSuchElementException( ::rtl::OUString(), *this ); 448*b1cdbd2cSJim Jagielski 449*b1cdbd2cSJim Jagielski WizardShell* pWizardImpl = dynamic_cast< WizardShell* >( m_pDialog ); 450*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( pWizardImpl, "Wizard::activatePath: invalid dialog implementation!" ); 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski pWizardImpl->activatePath( i_PathIndex, i_Final ); 453*b1cdbd2cSJim Jagielski } 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ setTitle(const::rtl::OUString & i_Title)456*b1cdbd2cSJim Jagielski void SAL_CALL Wizard::setTitle( const ::rtl::OUString& i_Title ) throw (RuntimeException) 457*b1cdbd2cSJim Jagielski { 458*b1cdbd2cSJim Jagielski // simply disambiguate 459*b1cdbd2cSJim Jagielski Wizard_Base::OGenericUnoDialog::setTitle( i_Title ); 460*b1cdbd2cSJim Jagielski } 461*b1cdbd2cSJim Jagielski 462*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ execute()463*b1cdbd2cSJim Jagielski ::sal_Int16 SAL_CALL Wizard::execute( ) throw (RuntimeException) 464*b1cdbd2cSJim Jagielski { 465*b1cdbd2cSJim Jagielski return Wizard_Base::OGenericUnoDialog::execute(); 466*b1cdbd2cSJim Jagielski } 467*b1cdbd2cSJim Jagielski 468*b1cdbd2cSJim Jagielski //...................................................................................................................... 469*b1cdbd2cSJim Jagielski } } // namespace svt::uno 470*b1cdbd2cSJim Jagielski //...................................................................................................................... 471