/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_extensions.hxx" #include "oemwiz.hxx" #include "componentmodule.hxx" #include #include #include #include #include #include #ifndef _EXTENSIONS_PRELOAD_PRELOAD_HRC_ #include "preload.hrc" #endif #ifndef _SVX_SVXIDS_HRC #include #endif #include #include #include "osl/diagnose.h" #include "tools/urlobj.hxx" #include #include #include //......................................................................... namespace preload { //......................................................................... using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; //......................................................................... struct OEMPreloadDialog_Impl { SfxItemSet* pSet; TabPage* pWelcomePage; TabPage* pLicensePage; TabPage* pUserDataPage; OEMPreloadDialog_Impl(OEMPreloadDialog* pDialog); ~OEMPreloadDialog_Impl() { delete pWelcomePage; delete pLicensePage; delete pUserDataPage; delete pSet; } void WriteUserData(); }; /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ OEMPreloadDialog_Impl::OEMPreloadDialog_Impl(OEMPreloadDialog* pDialog) { SfxItemPool& rPool = SFX_APP()->GetPool(); pSet = new SfxItemSet(rPool, SID_FIELD_GRABFOCUS, SID_FIELD_GRABFOCUS); SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); if ( pFact ) { CreateTabPage pFunc = pFact->GetTabPageCreatorFunc(RID_SFXPAGE_GENERAL); pUserDataPage = (*pFunc)(pDialog, *pSet); ((SfxTabPage*)pUserDataPage)->Reset(*pSet); } else pUserDataPage = NULL; pWelcomePage = new OEMWelcomeTabPage(pDialog); pLicensePage = new OEMLicenseTabPage(pDialog); } /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ void OEMPreloadDialog_Impl::WriteUserData() { if ( pUserDataPage ) ((SfxTabPage*)pUserDataPage)->FillItemSet(*pSet); } /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ //===================================================================== //= OEMPreloadDialog //===================================================================== //--------------------------------------------------------------------- OEMPreloadDialog::OEMPreloadDialog( Window* _pParent, const Reference< XPropertySet >& /*_rxObjectModel*/, const Reference< XMultiServiceFactory >& /*_rxORB*/ ) :WizardDialog(_pParent, ModuleRes(RID_DLG_OEMWIZARD)/*, _rxObjectModel, _rxORB*/) ,aPrevPB(this, ModuleRes(PB_PREV )) ,aNextPB(this, ModuleRes(PB_NEXT )) ,aCancelPB(this, ModuleRes(PB_CANCEL )) ,aAcceptST(ModuleRes(ST_ACCEPT)) ,aFinishST(ModuleRes(ST_FINISH)) ,aLicense(ModuleRes(ST_LICENSE_AGREEMENT)) ,aUserData(ModuleRes(ST_INSERT_USER_DATA)) ,pImpl(new OEMPreloadDialog_Impl(this)) { FreeResource(); aDlgTitle = GetText(); aPrevPB.Enable(sal_False); aNextST = aNextPB.GetText(); aPrevPB.SetClickHdl(LINK(this, OEMPreloadDialog, NextPrevPageHdl)); aNextPB.SetClickHdl(LINK(this, OEMPreloadDialog, NextPrevPageHdl)); AddButton( &aPrevPB, WIZARDDIALOG_BUTTON_STDOFFSET_X ); AddButton( &aNextPB, WIZARDDIALOG_BUTTON_STDOFFSET_X ); AddButton( &aCancelPB, WIZARDDIALOG_BUTTON_STDOFFSET_X ); SetPrevButton(&aPrevPB); SetNextButton(&aNextPB); AddPage( pImpl->pWelcomePage ); AddPage( pImpl->pLicensePage ); if ( pImpl->pUserDataPage ) AddPage( pImpl->pUserDataPage ); SetPage( OEM_WELCOME, pImpl->pWelcomePage ); SetPage( OEM_LICENSE, pImpl->pLicensePage ); if ( pImpl->pUserDataPage ) SetPage( OEM_USERDATA, pImpl->pUserDataPage ); ShowPage( OEM_WELCOME ); } /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ OEMPreloadDialog::~OEMPreloadDialog( ) { delete pImpl; } /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ IMPL_LINK(OEMPreloadDialog, NextPrevPageHdl, PushButton*, pButton) { if(pButton == &aPrevPB) { if(GetCurLevel()) ShowPage(GetCurLevel() - 1); } else if(OEM_USERDATA > GetCurLevel()) ShowPage(GetCurLevel() + 1); else { pImpl->WriteUserData(); Finnish(RET_OK); } String sTitle(aDlgTitle); switch(GetCurLevel()) { case OEM_WELCOME: aNextPB.SetText(aNextST); aNextPB.Enable(sal_True); break; case OEM_LICENSE: sTitle += aLicense; aNextPB.SetText(aNextST); aCancelPB.GrabFocus(); break; case OEM_USERDATA: sTitle += aUserData; aNextPB.SetText(aFinishST); break; } SetText(sTitle); aPrevPB.Enable(GetCurLevel() != OEM_WELCOME); return 0; } /* -----------------------------14.11.2001 11:33------------------------------ ---------------------------------------------------------------------------*/ sal_Bool OEMPreloadDialog::LoadFromLocalFile(const String& rFileName, String& rContent) { SvtPathOptions aPathOpt; String sFileName = aPathOpt.GetUserConfigPath();//GetModulePath(); INetURLObject aURLObject(sFileName); OSL_ASSERT(aURLObject.getSegmentCount() >= 2); aURLObject.removeSegment(); //remove '/config' aURLObject.removeSegment(); //remove '/user' sFileName = aURLObject.GetMainURL(INetURLObject::DECODE_TO_IURI); sFileName += rFileName; SfxMedium aMedium( sFileName,STREAM_READ, sal_True ); SvStream* pInStream = aMedium.GetInStream(); if( !pInStream ) return sal_False; pInStream->ReadCString( rContent, RTL_TEXTENCODING_UTF8 ); xub_StrLen nPos; while ( ( nPos = rContent.Search( 12 )) != STRING_NOTFOUND ) rContent.Erase( nPos, 1 ); return sal_True; } void OEMPreloadDialog::SetCancelString( const String& rText ) { aCancelPB.SetText(rText); } /* -----------------------------13.11.2001 12:29------------------------------ ---------------------------------------------------------------------------*/ OEMWelcomeTabPage::OEMWelcomeTabPage(Window* pParent) : TabPage(pParent, ModuleRes(RID_TP_WELCOME)), aInfoFT(this, ModuleRes(FT_INFO)) { FreeResource(); } /* -----------------------------13.11.2001 12:30------------------------------ ---------------------------------------------------------------------------*/ OEMWelcomeTabPage::~OEMWelcomeTabPage() { } /* -----------------------------13.11.2001 12:29------------------------------ ---------------------------------------------------------------------------*/ OEMLicenseTabPage::OEMLicenseTabPage(OEMPreloadDialog* pParent) : TabPage(pParent, ModuleRes(RID_TP_LICENSE)), aLicenseML(this, ModuleRes(ML_LICENSE)), aInfo1FT(this, ModuleRes(FT_INFO1)), aInfo2FT(this, ModuleRes(FT_INFO2)), aInfo3FT(this, ModuleRes(FT_INFO3)), aInfo2_1FT(this, ModuleRes(FT_INFO2_1)), aInfo3_1FT(this, ModuleRes(FT_INFO3_1)), aCBAccept(this, ModuleRes(CB_ACCEPT)), aPBPageDown(this, ModuleRes(PB_PAGEDOWN)), aArrow(this, ModuleRes(IMG_ARROW)), aStrAccept( ModuleRes(LICENCE_ACCEPT) ), aStrNotAccept( ModuleRes(LICENCE_NOTACCEPT) ), bEndReached(sal_False), pPreloadDialog(pParent) { FreeResource(); aLicenseML.SetEndReachedHdl( LINK(this, OEMLicenseTabPage, EndReachedHdl) ); aLicenseML.SetScrolledHdl( LINK(this, OEMLicenseTabPage, ScrolledHdl) ); aPBPageDown.SetClickHdl( LINK(this, OEMLicenseTabPage, PageDownHdl) ); aCBAccept.SetClickHdl( LINK(this, OEMLicenseTabPage, AcceptHdl) ); // We want a automatic repeating page down button WinBits aStyle = aPBPageDown.GetStyle(); aStyle |= WB_REPEAT; aPBPageDown.SetStyle( aStyle ); aOldCancelText = pPreloadDialog->GetCancelString(); pPreloadDialog->SetCancelString( aStrNotAccept ); String aText = aInfo2FT.GetText(); aText.SearchAndReplaceAll( UniString::CreateFromAscii("%PAGEDOWN"), aPBPageDown.GetText() ); aInfo2FT.SetText( aText ); } /* -----------------------------13.11.2001 12:30------------------------------ ---------------------------------------------------------------------------*/ OEMLicenseTabPage::~OEMLicenseTabPage() { } /* ---------------------------14.11.2001 11:24---------------------------- -----------------------------------------------------------------------*/ void OEMLicenseTabPage::ActivatePage() { if(!aLicenseML.GetText().Len()) { aLicenseML.SetLeftMargin( 5 ); String sLicense; #ifdef UNX OEMPreloadDialog::LoadFromLocalFile(String::CreateFromAscii("LICENSE"), sLicense); #else OEMPreloadDialog::LoadFromLocalFile(String::CreateFromAscii("license.txt"), sLicense); #endif aLicenseML.SetText( sLicense ); } EnableControls(); } //------------------------------------------------------------------------ IMPL_LINK( OEMLicenseTabPage, AcceptHdl, CheckBox *, EMPTYARG ) { EnableControls(); return 0; } //------------------------------------------------------------------------ IMPL_LINK( OEMLicenseTabPage, PageDownHdl, PushButton *, EMPTYARG ) { aLicenseML.ScrollDown( SCROLL_PAGEDOWN ); return 0; } //------------------------------------------------------------------------ IMPL_LINK( OEMLicenseTabPage, EndReachedHdl, LicenceView *, EMPTYARG ) { bEndReached = sal_True; EnableControls(); aCBAccept.GrabFocus(); return 0; } //------------------------------------------------------------------------ IMPL_LINK( OEMLicenseTabPage, ScrolledHdl, LicenceView *, EMPTYARG ) { EnableControls(); return 0; } //------------------------------------------------------------------------ void OEMLicenseTabPage::EnableControls() { if( !bEndReached && ( aLicenseML.IsEndReached() || !aLicenseML.GetText().Len() ) ) bEndReached = sal_True; if ( bEndReached ) { Point aPos( 0, aInfo3_1FT.GetPosPixel().Y() ); aArrow.SetPosPixel( aPos ); aCBAccept.Enable(); } else { Point aPos( 0, aInfo2_1FT.GetPosPixel().Y() ); aArrow.SetPosPixel( aPos ); aCBAccept.Disable(); } if ( aLicenseML.IsEndReached() ) aPBPageDown.Disable(); else aPBPageDown.Enable(); if ( aCBAccept.IsChecked() ) { PushButton *pNext = pPreloadDialog->GetNextButton(); if ( ! pNext->IsEnabled() ) { pPreloadDialog->SetCancelString( aOldCancelText ); pNext->Enable(sal_True); } } else { PushButton *pNext = pPreloadDialog->GetNextButton(); if ( pNext->IsEnabled() ) { pPreloadDialog->SetCancelString( aStrNotAccept ); pNext->Enable(sal_False); } } } //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ LicenceView::LicenceView( Window* pParent, const ResId& rResId ) : MultiLineEdit( pParent, rResId ) { SetLeftMargin( 5 ); mbEndReached = IsEndReached(); StartListening( *GetTextEngine() ); } //------------------------------------------------------------------------ LicenceView::~LicenceView() { maEndReachedHdl = Link(); maScrolledHdl = Link(); EndListeningAll(); } //------------------------------------------------------------------------ void LicenceView::ScrollDown( ScrollType eScroll ) { ScrollBar* pScroll = GetVScrollBar(); if ( pScroll ) pScroll->DoScrollAction( eScroll ); } //------------------------------------------------------------------------ sal_Bool LicenceView::IsEndReached() const { sal_Bool bEndReached; ExtTextView* pView = GetTextView(); ExtTextEngine* pEdit = GetTextEngine(); sal_uLong nHeight = pEdit->GetTextHeight(); Size aOutSize = pView->GetWindow()->GetOutputSizePixel(); Point aBottom( 0, aOutSize.Height() ); if ( (sal_uLong) pView->GetDocPos( aBottom ).Y() >= nHeight - 1 ) bEndReached = sal_True; else bEndReached = sal_False; return bEndReached; } //------------------------------------------------------------------------ void LicenceView::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) { if ( rHint.IsA( TYPE(TextHint) ) ) { sal_Bool bLastVal = EndReached(); sal_uLong nId = ((const TextHint&)rHint).GetId(); if ( nId == TEXT_HINT_PARAINSERTED ) { if ( bLastVal ) mbEndReached = IsEndReached(); } else if ( nId == TEXT_HINT_VIEWSCROLLED ) { if ( ! mbEndReached ) mbEndReached = IsEndReached(); maScrolledHdl.Call( this ); } if ( EndReached() && !bLastVal ) { maEndReachedHdl.Call( this ); } } } //------------------------------------------------------------------------ //......................................................................... } // namespace preload //.........................................................................