1*2722ceddSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*2722ceddSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*2722ceddSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*2722ceddSAndrew Rist * distributed with this work for additional information
6*2722ceddSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*2722ceddSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*2722ceddSAndrew Rist * "License"); you may not use this file except in compliance
9*2722ceddSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*2722ceddSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*2722ceddSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*2722ceddSAndrew Rist * software distributed under the License is distributed on an
15*2722ceddSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2722ceddSAndrew Rist * KIND, either express or implied. See the License for the
17*2722ceddSAndrew Rist * specific language governing permissions and limitations
18*2722ceddSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*2722ceddSAndrew Rist *************************************************************/
21*2722ceddSAndrew Rist
22*2722ceddSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_desktop.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "pages.hxx"
28cdf0e10cSrcweir #include "wizard.hrc"
29cdf0e10cSrcweir #include "wizard.hxx"
30cdf0e10cSrcweir #include "migration.hxx"
31cdf0e10cSrcweir #include <vcl/msgbox.hxx>
32cdf0e10cSrcweir #include <vcl/mnemonic.hxx>
33cdf0e10cSrcweir #include <vos/security.hxx>
34cdf0e10cSrcweir #include <app.hxx>
35cdf0e10cSrcweir #include <rtl/ustring.hxx>
36cdf0e10cSrcweir #include <osl/file.hxx>
37cdf0e10cSrcweir #include <unotools/bootstrap.hxx>
38cdf0e10cSrcweir #include <unotools/configmgr.hxx>
39cdf0e10cSrcweir #include <unotools/useroptions.hxx>
40cdf0e10cSrcweir #include <sfx2/basedlgs.hxx>
41cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
42cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
43cdf0e10cSrcweir #include <com/sun/star/lang/XInitialization.hpp>
44cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp>
45cdf0e10cSrcweir #include <com/sun/star/beans/XMaterialHolder.hpp>
46cdf0e10cSrcweir #include <com/sun/star/beans/NamedValue.hpp>
47cdf0e10cSrcweir #include <com/sun/star/container/XNameReplace.hpp>
48cdf0e10cSrcweir #include <com/sun/star/task/XJobExecutor.hpp>
49cdf0e10cSrcweir #include <comphelper/configurationhelper.hxx>
50cdf0e10cSrcweir #include <rtl/bootstrap.hxx>
51cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
52cdf0e10cSrcweir #include <osl/file.hxx>
53cdf0e10cSrcweir #include <osl/thread.hxx>
54cdf0e10cSrcweir #include <unotools/bootstrap.hxx>
55cdf0e10cSrcweir #include <tools/config.hxx>
56cdf0e10cSrcweir
57cdf0e10cSrcweir using namespace rtl;
58cdf0e10cSrcweir using namespace osl;
59cdf0e10cSrcweir using namespace utl;
60cdf0e10cSrcweir using namespace svt;
61cdf0e10cSrcweir using namespace com::sun::star;
62cdf0e10cSrcweir using namespace com::sun::star::frame;
63cdf0e10cSrcweir using namespace com::sun::star::lang;
64cdf0e10cSrcweir using namespace com::sun::star::util;
65cdf0e10cSrcweir using namespace com::sun::star::beans;
66cdf0e10cSrcweir using namespace com::sun::star::uno;
67cdf0e10cSrcweir using namespace com::sun::star::container;
68cdf0e10cSrcweir
69cdf0e10cSrcweir #define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
70cdf0e10cSrcweir
71cdf0e10cSrcweir namespace desktop {
72cdf0e10cSrcweir
_setBold(FixedText & ft)73cdf0e10cSrcweir static void _setBold(FixedText& ft)
74cdf0e10cSrcweir {
75cdf0e10cSrcweir Font f = ft.GetControlFont();
76cdf0e10cSrcweir f.SetWeight(WEIGHT_BOLD);
77cdf0e10cSrcweir ft.SetControlFont(f);
78cdf0e10cSrcweir }
79cdf0e10cSrcweir
WelcomePage(svt::OWizardMachine * parent,const ResId & resid,sal_Bool bLicenseNeedsAcceptance)80cdf0e10cSrcweir WelcomePage::WelcomePage( svt::OWizardMachine* parent, const ResId& resid, sal_Bool bLicenseNeedsAcceptance )
81cdf0e10cSrcweir : OWizardPage(parent, resid)
82cdf0e10cSrcweir , m_ftHead(this, WizardResId(FT_WELCOME_HEADER))
83cdf0e10cSrcweir , m_ftBody(this, WizardResId(FT_WELCOME_BODY))
84cdf0e10cSrcweir , m_pParent(parent)
85cdf0e10cSrcweir , m_bLicenseNeedsAcceptance( bLicenseNeedsAcceptance )
86cdf0e10cSrcweir , bIsEvalVersion(false)
87cdf0e10cSrcweir , bNoEvalText(false)
88cdf0e10cSrcweir {
89cdf0e10cSrcweir FreeResource();
90cdf0e10cSrcweir
91cdf0e10cSrcweir _setBold(m_ftHead);
92cdf0e10cSrcweir
93cdf0e10cSrcweir checkEval();
94cdf0e10cSrcweir
95cdf0e10cSrcweir // check for migration
96cdf0e10cSrcweir if (Migration::checkMigration())
97cdf0e10cSrcweir {
98cdf0e10cSrcweir String aText(WizardResId(STR_WELCOME_MIGRATION));
99cdf0e10cSrcweir // replace %OLDPRODUCT with found version name
100cdf0e10cSrcweir aText.SearchAndReplaceAll( UniString::CreateFromAscii("%OLD_VERSION"), Migration::getOldVersionName());
101cdf0e10cSrcweir m_ftBody.SetText( aText );
102cdf0e10cSrcweir }
103cdf0e10cSrcweir else if ( ! m_bLicenseNeedsAcceptance )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir String aText(WizardResId(STR_WELCOME_WITHOUT_LICENSE));
106cdf0e10cSrcweir m_ftBody.SetText( aText );
107cdf0e10cSrcweir }
108cdf0e10cSrcweir }
109cdf0e10cSrcweir
110cdf0e10cSrcweir
checkEval()111cdf0e10cSrcweir void WelcomePage::checkEval()
112cdf0e10cSrcweir {
113cdf0e10cSrcweir Reference< XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory();
114cdf0e10cSrcweir Reference< XMaterialHolder > xHolder(xFactory->createInstance(
115cdf0e10cSrcweir OUString::createFromAscii("com.sun.star.tab.tabreg")), UNO_QUERY);
116cdf0e10cSrcweir if (xHolder.is()) {
117cdf0e10cSrcweir Any aData = xHolder->getMaterial();
118cdf0e10cSrcweir Sequence < NamedValue > aSeq;
119cdf0e10cSrcweir if (aData >>= aSeq) {
120cdf0e10cSrcweir bIsEvalVersion = true;
121cdf0e10cSrcweir for (int i=0; i< aSeq.getLength(); i++) {
122cdf0e10cSrcweir if (aSeq[i].Name.equalsAscii("NoEvalText")) {
123cdf0e10cSrcweir aSeq[i].Value >>= bNoEvalText;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir }
126cdf0e10cSrcweir }
127cdf0e10cSrcweir }
128cdf0e10cSrcweir }
129cdf0e10cSrcweir
130cdf0e10cSrcweir
ActivatePage()131cdf0e10cSrcweir void WelcomePage::ActivatePage()
132cdf0e10cSrcweir {
133cdf0e10cSrcweir OWizardPage::ActivatePage();
134cdf0e10cSrcweir // this page has no controls, so forwarding to default
135cdf0e10cSrcweir // button (next) won't work if we grap focus
136cdf0e10cSrcweir // GrabFocus();
137cdf0e10cSrcweir }
138cdf0e10cSrcweir
139cdf0e10cSrcweir // -------------------------------------------------------------------
140cdf0e10cSrcweir
141cdf0e10cSrcweir class MigrationThread : public ::osl::Thread
142cdf0e10cSrcweir {
143cdf0e10cSrcweir public:
144cdf0e10cSrcweir MigrationThread();
145cdf0e10cSrcweir
146cdf0e10cSrcweir virtual void SAL_CALL run();
147cdf0e10cSrcweir virtual void SAL_CALL onTerminated();
148cdf0e10cSrcweir };
149cdf0e10cSrcweir
MigrationThread()150cdf0e10cSrcweir MigrationThread::MigrationThread()
151cdf0e10cSrcweir {
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
run()154cdf0e10cSrcweir void MigrationThread::run()
155cdf0e10cSrcweir {
156cdf0e10cSrcweir try
157cdf0e10cSrcweir {
158cdf0e10cSrcweir Migration::doMigration();
159cdf0e10cSrcweir }
160cdf0e10cSrcweir catch ( uno::Exception& )
161cdf0e10cSrcweir {
162cdf0e10cSrcweir }
163cdf0e10cSrcweir }
164cdf0e10cSrcweir
onTerminated()165cdf0e10cSrcweir void MigrationThread::onTerminated()
166cdf0e10cSrcweir {
167cdf0e10cSrcweir }
168cdf0e10cSrcweir
169cdf0e10cSrcweir // -------------------------------------------------------------------
170cdf0e10cSrcweir
MigrationPage(svt::OWizardMachine * parent,const ResId & resid,Throbber & i_throbber)171cdf0e10cSrcweir MigrationPage::MigrationPage(
172cdf0e10cSrcweir svt::OWizardMachine* parent,
173cdf0e10cSrcweir const ResId& resid, Throbber& i_throbber )
174cdf0e10cSrcweir : OWizardPage(parent, resid)
175cdf0e10cSrcweir , m_ftHead(this, WizardResId(FT_MIGRATION_HEADER))
176cdf0e10cSrcweir , m_ftBody(this, WizardResId(FT_MIGRATION_BODY))
177cdf0e10cSrcweir , m_cbMigration(this, WizardResId(CB_MIGRATION))
178cdf0e10cSrcweir , m_rThrobber(i_throbber)
179cdf0e10cSrcweir , m_bMigrationDone(sal_False)
180cdf0e10cSrcweir {
181cdf0e10cSrcweir FreeResource();
182cdf0e10cSrcweir _setBold(m_ftHead);
183cdf0e10cSrcweir
184cdf0e10cSrcweir // replace %OLDPRODUCT with found version name
185cdf0e10cSrcweir String aText = m_ftBody.GetText();
186cdf0e10cSrcweir aText.SearchAndReplaceAll( UniString::CreateFromAscii("%OLDPRODUCT"), Migration::getOldVersionName());
187cdf0e10cSrcweir m_ftBody.SetText( aText );
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
commitPage(svt::WizardTypes::CommitPageReason _eReason)190cdf0e10cSrcweir sal_Bool MigrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir if (_eReason == svt::WizardTypes::eTravelForward && m_cbMigration.IsChecked() && !m_bMigrationDone)
193cdf0e10cSrcweir {
194cdf0e10cSrcweir GetParent()->EnterWait();
195cdf0e10cSrcweir FirstStartWizard* pWizard = dynamic_cast< FirstStartWizard* >( GetParent() );
196cdf0e10cSrcweir if ( pWizard )
197cdf0e10cSrcweir pWizard->DisableButtonsWhileMigration();
198cdf0e10cSrcweir
199cdf0e10cSrcweir m_rThrobber.Show();
200cdf0e10cSrcweir m_rThrobber.start();
201cdf0e10cSrcweir MigrationThread* pMigThread = new MigrationThread();
202cdf0e10cSrcweir pMigThread->create();
203cdf0e10cSrcweir
204cdf0e10cSrcweir while ( pMigThread->isRunning() )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir Application::Reschedule();
207cdf0e10cSrcweir }
208cdf0e10cSrcweir
209cdf0e10cSrcweir m_rThrobber.stop();
210cdf0e10cSrcweir GetParent()->LeaveWait();
211cdf0e10cSrcweir // Next state will enable buttons - so no EnableButtons necessary!
212cdf0e10cSrcweir m_rThrobber.Hide();
213cdf0e10cSrcweir pMigThread->join();
214cdf0e10cSrcweir delete pMigThread;
215cdf0e10cSrcweir m_bMigrationDone = sal_True;
216cdf0e10cSrcweir }
217cdf0e10cSrcweir else
218cdf0e10cSrcweir Migration::cancelMigration();
219cdf0e10cSrcweir return sal_True;
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
ActivatePage()222cdf0e10cSrcweir void MigrationPage::ActivatePage()
223cdf0e10cSrcweir {
224cdf0e10cSrcweir OWizardPage::ActivatePage();
225cdf0e10cSrcweir GrabFocus();
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
UserPage(svt::OWizardMachine * parent,const ResId & resid)228cdf0e10cSrcweir UserPage::UserPage( svt::OWizardMachine* parent, const ResId& resid)
229cdf0e10cSrcweir : OWizardPage(parent, resid)
230cdf0e10cSrcweir , m_ftHead(this, WizardResId(FT_USER_HEADER))
231cdf0e10cSrcweir , m_ftBody(this, WizardResId(FT_USER_BODY))
232cdf0e10cSrcweir , m_ftFirst(this, WizardResId(FT_USER_FIRST))
233cdf0e10cSrcweir , m_edFirst(this, WizardResId(ED_USER_FIRST))
234cdf0e10cSrcweir , m_ftLast(this, WizardResId(FT_USER_LAST))
235cdf0e10cSrcweir , m_edLast(this, WizardResId(ED_USER_LAST))
236cdf0e10cSrcweir , m_ftInitials(this, WizardResId(FT_USER_INITIALS))
237cdf0e10cSrcweir , m_edInitials(this, WizardResId(ED_USER_INITIALS))
238cdf0e10cSrcweir , m_ftFather(this, WizardResId(FT_USER_FATHER))
239cdf0e10cSrcweir , m_edFather(this, WizardResId(ED_USER_FATHER))
240cdf0e10cSrcweir , m_lang(Application::GetSettings().GetUILanguage())
241cdf0e10cSrcweir {
242cdf0e10cSrcweir FreeResource();
243cdf0e10cSrcweir _setBold(m_ftHead);
244cdf0e10cSrcweir
245cdf0e10cSrcweir // check whether this is a russian version. otherwise
246cdf0e10cSrcweir // we'll hide the 'Fathers name' field
247cdf0e10cSrcweir SvtUserOptions aUserOpt;
248cdf0e10cSrcweir m_edFirst.SetText(aUserOpt.GetFirstName());
249cdf0e10cSrcweir m_edLast.SetText(aUserOpt.GetLastName());
250cdf0e10cSrcweir #if 0
251cdf0e10cSrcweir rtl::OUString aUserName;
252cdf0e10cSrcweir vos::OSecurity().getUserName( aUserName );
253cdf0e10cSrcweir aUserOpt.SetID( aUserName );
254cdf0e10cSrcweir #endif
255cdf0e10cSrcweir
256cdf0e10cSrcweir m_edInitials.SetText(aUserOpt.GetID());
257cdf0e10cSrcweir if (m_lang == LANGUAGE_RUSSIAN)
258cdf0e10cSrcweir {
259cdf0e10cSrcweir m_ftFather.Show();
260cdf0e10cSrcweir m_edFather.Show();
261cdf0e10cSrcweir m_edFather.SetText(aUserOpt.GetFathersName());
262cdf0e10cSrcweir }
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
commitPage(svt::WizardTypes::CommitPageReason)265cdf0e10cSrcweir sal_Bool UserPage::commitPage( svt::WizardTypes::CommitPageReason )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir SvtUserOptions aUserOpt;
268cdf0e10cSrcweir aUserOpt.SetFirstName(m_edFirst.GetText());
269cdf0e10cSrcweir aUserOpt.SetLastName(m_edLast.GetText());
270cdf0e10cSrcweir aUserOpt.SetID( m_edInitials.GetText());
271cdf0e10cSrcweir
272cdf0e10cSrcweir if (m_lang == LANGUAGE_RUSSIAN)
273cdf0e10cSrcweir aUserOpt.SetFathersName(m_edFather.GetText());
274cdf0e10cSrcweir
275cdf0e10cSrcweir return sal_True;
276cdf0e10cSrcweir }
277cdf0e10cSrcweir
ActivatePage()278cdf0e10cSrcweir void UserPage::ActivatePage()
279cdf0e10cSrcweir {
280cdf0e10cSrcweir OWizardPage::ActivatePage();
281cdf0e10cSrcweir GrabFocus();
282cdf0e10cSrcweir }
283cdf0e10cSrcweir
284cdf0e10cSrcweir // -------------------------------------------------------------------
UpdateCheckPage(svt::OWizardMachine * parent,const ResId & resid)285cdf0e10cSrcweir UpdateCheckPage::UpdateCheckPage( svt::OWizardMachine* parent, const ResId& resid)
286cdf0e10cSrcweir : OWizardPage(parent, resid)
287cdf0e10cSrcweir , m_ftHead(this, WizardResId(FT_UPDATE_CHECK_HEADER))
288cdf0e10cSrcweir , m_ftBody(this, WizardResId(FT_UPDATE_CHECK_BODY))
289cdf0e10cSrcweir , m_cbUpdateCheck(this, WizardResId(CB_UPDATE_CHECK))
290cdf0e10cSrcweir {
291cdf0e10cSrcweir FreeResource();
292cdf0e10cSrcweir _setBold(m_ftHead);
293cdf0e10cSrcweir }
294cdf0e10cSrcweir
commitPage(svt::WizardTypes::CommitPageReason _eReason)295cdf0e10cSrcweir sal_Bool UpdateCheckPage::commitPage( svt::WizardTypes::CommitPageReason _eReason )
296cdf0e10cSrcweir {
297cdf0e10cSrcweir if ( _eReason == svt::WizardTypes::eTravelForward )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir try {
300cdf0e10cSrcweir Reference < XNameReplace > xUpdateAccess;
301cdf0e10cSrcweir Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
302cdf0e10cSrcweir
303cdf0e10cSrcweir xUpdateAccess = Reference < XNameReplace >(
304cdf0e10cSrcweir xFactory->createInstance( UNISTRING( "com.sun.star.setup.UpdateCheckConfig" ) ), UNO_QUERY_THROW );
305cdf0e10cSrcweir
306cdf0e10cSrcweir if ( !xUpdateAccess.is() )
307cdf0e10cSrcweir return sal_False;
308cdf0e10cSrcweir
309cdf0e10cSrcweir sal_Bool bAutoUpdChk = m_cbUpdateCheck.IsChecked();
310cdf0e10cSrcweir xUpdateAccess->replaceByName( UNISTRING("AutoCheckEnabled"), makeAny( bAutoUpdChk ) );
311cdf0e10cSrcweir
312cdf0e10cSrcweir Reference< XChangesBatch > xChangesBatch( xUpdateAccess, UNO_QUERY);
313cdf0e10cSrcweir if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() )
314cdf0e10cSrcweir xChangesBatch->commitChanges();
315cdf0e10cSrcweir } catch (RuntimeException)
316cdf0e10cSrcweir {
317cdf0e10cSrcweir }
318cdf0e10cSrcweir }
319cdf0e10cSrcweir
320cdf0e10cSrcweir return sal_True;
321cdf0e10cSrcweir }
322cdf0e10cSrcweir
ActivatePage()323cdf0e10cSrcweir void UpdateCheckPage::ActivatePage()
324cdf0e10cSrcweir {
325cdf0e10cSrcweir OWizardPage::ActivatePage();
326cdf0e10cSrcweir GrabFocus();
327cdf0e10cSrcweir }
328cdf0e10cSrcweir
329cdf0e10cSrcweir } // namespace desktop
330288ab9e2SHerbert Dürr
331