/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #ifdef SW_DLLIMPLEMENTATION #undef SW_DLLIMPLEMENTATION #endif #include #include #include #include #include #include #include #include #include #include #include #ifndef _DBUI_HRC #include #endif #include #ifndef _DBMGR_HXX #include #endif #include #include #include #include "vcl/msgbox.hxx" // RET_CANCEL #include #include #include using namespace svt; using namespace ::com::sun::star; /*-- 01.04.2004 16:52:49--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeWizard::SwMailMergeWizard(SwView& rView, SwMailMergeConfigItem& rItem) : RoadmapWizard(&rView.GetViewFrame()->GetWindow(), SW_RES(DLG_MAILMERGEWIZARD), WZB_NEXT|WZB_PREVIOUS|WZB_FINISH|WZB_CANCEL|WZB_HELP), m_pSwView(&rView), m_bDocumentLoad( false ), m_rConfigItem(rItem), m_sStarting( SW_RES( ST_STARTING )), m_sDocumentType( SW_RES( ST_DOCUMETNTYPE )), m_sAddressBlock( SW_RES( ST_ADDRESSBLOCK )), m_sAddressList( SW_RES( ST_ADDRESSLIST )), m_sGreetingsLine( SW_RES( ST_GREETINGSLINE )), m_sLayout( SW_RES( ST_LAYOUT )), m_sPrepareMerge( SW_RES( ST_PREPAREMERGE )), m_sMerge( SW_RES( ST_MERGE )), m_sOutput( SW_RES( ST_OUTPUT )), m_sFinish( SW_RES( ST_FINISH )), m_nRestartPage( MM_DOCUMENTSELECTPAGE ) { FreeResource(); ShowButtonFixedLine(sal_True); defaultButton(WZB_NEXT); enableButtons(WZB_FINISH, sal_False); m_pFinish->SetText(m_sFinish); m_pNextPage->SetHelpId(HID_MM_NEXT_PAGE); m_pPrevPage->SetHelpId(HID_MM_PREV_PAGE); //#i51949# no output type page visible if e-Mail is not supported if(rItem.IsMailAvailable()) declarePath( 0, MM_DOCUMENTSELECTPAGE, MM_OUTPUTTYPETPAGE, MM_ADDRESSBLOCKPAGE, MM_GREETINGSPAGE, MM_LAYOUTPAGE, MM_PREPAREMERGEPAGE, MM_MERGEPAGE, MM_OUTPUTPAGE, WZS_INVALID_STATE ); else declarePath( 0, MM_DOCUMENTSELECTPAGE, MM_ADDRESSBLOCKPAGE, MM_GREETINGSPAGE, MM_LAYOUTPAGE, MM_PREPAREMERGEPAGE, MM_MERGEPAGE, MM_OUTPUTPAGE, WZS_INVALID_STATE ); ActivatePage(); UpdateRoadmap(); } /*-- 01.04.2004 16:52:53--------------------------------------------------- -----------------------------------------------------------------------*/ SwMailMergeWizard::~SwMailMergeWizard() { } /*-- 01.04.2004 16:52:53--------------------------------------------------- -----------------------------------------------------------------------*/ OWizardPage* SwMailMergeWizard::createPage(WizardState _nState) { OWizardPage* pRet = 0; switch(_nState) { case MM_DOCUMENTSELECTPAGE : pRet = new SwMailMergeDocSelectPage(this); break; case MM_OUTPUTTYPETPAGE : pRet = new SwMailMergeOutputTypePage(this); break; case MM_ADDRESSBLOCKPAGE : pRet = new SwMailMergeAddressBlockPage(this); break; case MM_GREETINGSPAGE : pRet = new SwMailMergeGreetingsPage(this); break; case MM_LAYOUTPAGE : pRet = new SwMailMergeLayoutPage(this); break; case MM_PREPAREMERGEPAGE : pRet = new SwMailMergePrepareMergePage(this); break; case MM_MERGEPAGE : pRet = new SwMailMergeMergePage(this); break; case MM_OUTPUTPAGE : pRet = new SwMailMergeOutputPage(this); break; } DBG_ASSERT(pRet, "no page created in ::createPage"); return pRet; } /*-- 04.06.2004 13:18:47--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeWizard::enterState( WizardState _nState ) { ::svt::RoadmapWizard::enterState( _nState ); /* entering a page after the layoutpage requires the insertion of greeting and address block - if not yet done entering the merge or output page requires to create the output document */ if(_nState > MM_LAYOUTPAGE && m_rConfigItem.GetSourceView() && ((m_rConfigItem.IsAddressBlock() && !m_rConfigItem.IsAddressInserted()) || (m_rConfigItem.IsGreetingLine(sal_False) && !m_rConfigItem.IsGreetingInserted() ))) { SwMailMergeLayoutPage::InsertAddressAndGreeting(m_rConfigItem.GetSourceView(), m_rConfigItem, Point(-1, -1), true); } if(_nState >= MM_MERGEPAGE && !m_rConfigItem.GetTargetView()) { CreateTargetDocument(); m_nRestartPage = _nState; EndDialog(RET_TARGET_CREATED); return; } else if(_nState < MM_MERGEPAGE && m_rConfigItem.GetTargetView()) { //close the dialog, remove the target view, show the source view m_nRestartPage = _nState; //set ResultSet back to start m_rConfigItem.MoveResultSet(1); EndDialog(RET_REMOVE_TARGET); return; } bool bEnablePrev = true; bool bEnableNext = true; switch(_nState) { case MM_DOCUMENTSELECTPAGE : bEnablePrev = false; break; case MM_ADDRESSBLOCKPAGE : bEnableNext = m_rConfigItem.GetResultSet().is(); break; case MM_OUTPUTPAGE : bEnableNext = false; break; } enableButtons( WZB_PREVIOUS, bEnablePrev); enableButtons( WZB_NEXT, bEnableNext); UpdateRoadmap(); } /*-- 04.06.2004 12:54:13--------------------------------------------------- -----------------------------------------------------------------------*/ String SwMailMergeWizard::getStateDisplayName( WizardState _nState ) const { String sRet; switch(_nState) { case MM_DOCUMENTSELECTPAGE :sRet = m_sStarting; break; case MM_OUTPUTTYPETPAGE : sRet = m_sDocumentType; break; case MM_ADDRESSBLOCKPAGE : sRet = m_rConfigItem.IsOutputToLetter() ? m_sAddressBlock : m_sAddressList; break; case MM_GREETINGSPAGE : sRet = m_sGreetingsLine; break; case MM_LAYOUTPAGE : sRet = m_sLayout; break; case MM_PREPAREMERGEPAGE : sRet = m_sPrepareMerge; break; case MM_MERGEPAGE : sRet = m_sMerge; break; case MM_OUTPUTPAGE : sRet = m_sOutput; break; } return sRet; } /*-- 24.06.2004 09:24:45--------------------------------------------------- enables/disables pages in the roadmap depending on the current page and state -----------------------------------------------------------------------*/ void SwMailMergeWizard::UpdateRoadmap() { /* MM_DOCUMENTSELECTPAGE > inactive after the layoutpage MM_OUTPUTTYPETPAGE : > inactive after the layoutpage MM_ADDRESSBLOCKPAGE > inactive after the layoutpage MM_GREETINGSPAGE > inactive after the layoutpage MM_LAYOUTPAGE > inactive after the layoutpage inactive if address block and greeting are switched off or are already inserted into the source document MM_PREPAREMERGEPAGE > only active if address data has been selected inactive after preparemerge page MM_MERGEPAGE > only active if address data has been selected MM_OUTPUTPAGE > only active if address data has been selected */ // enableState( , false ); const sal_uInt16 nCurPage = GetCurLevel(); TabPage* pCurPage = GetPage( nCurPage ); if(!pCurPage) return; bool bEnable = false; bool bAddressFieldsConfigured = !m_rConfigItem.IsOutputToLetter() || !m_rConfigItem.IsAddressBlock() || m_rConfigItem.IsAddressFieldsAssigned(); bool bGreetingFieldsConfigured = !m_rConfigItem.IsGreetingLine(sal_False) || !m_rConfigItem.IsIndividualGreeting(sal_False)|| m_rConfigItem.IsGreetingFieldsAssigned(); //#i97436# if a document has to be loaded then enable output type page only m_bDocumentLoad = false; bool bEnableOutputTypePage = (nCurPage != MM_DOCUMENTSELECTPAGE) || static_cast(pCurPage)->commitPage( ::svt::WizardTypes::eValidate ); for(sal_uInt16 nPage = MM_DOCUMENTSELECTPAGE; nPage <= MM_OUTPUTPAGE; ++nPage) { switch(nPage) { case MM_DOCUMENTSELECTPAGE : bEnable = sal_True; break; case MM_OUTPUTTYPETPAGE : bEnable = bEnableOutputTypePage; break; case MM_ADDRESSBLOCKPAGE : bEnable = !m_bDocumentLoad && bEnableOutputTypePage; break; case MM_GREETINGSPAGE : bEnable = !m_bDocumentLoad && bEnableOutputTypePage && m_rConfigItem.GetResultSet().is() && bAddressFieldsConfigured; break; case MM_PREPAREMERGEPAGE : case MM_MERGEPAGE : case MM_OUTPUTPAGE : case MM_LAYOUTPAGE : bEnable = !m_bDocumentLoad && bEnableOutputTypePage && m_rConfigItem.GetResultSet().is() && bAddressFieldsConfigured && bGreetingFieldsConfigured; if(MM_LAYOUTPAGE == nPage) bEnable &= ((m_rConfigItem.IsAddressBlock() && !m_rConfigItem.IsAddressInserted()) || (m_rConfigItem.IsGreetingLine(sal_False) && !m_rConfigItem.IsGreetingInserted() )); break; } enableState( nPage, bEnable ); } } /*-- 24.06.2004 09:24:45--------------------------------------------------- enables/disables pages in the roadmap depending on the current page and state -----------------------------------------------------------------------*/ void SwMailMergeWizard::CreateTargetDocument() { GetSwView()->GetWrtShell().GetNewDBMgr()-> MergeDocuments( m_rConfigItem, *GetSwView() ); m_rConfigItem.SetMergeDone(); if( m_rConfigItem.GetTargetView() ) m_rConfigItem.GetTargetView()->GetViewFrame()->GetFrame().Appear(); } /*-- 23.08.2004 08:51:36--------------------------------------------------- -----------------------------------------------------------------------*/ void SwMailMergeWizard::updateRoadmapItemLabel( WizardState _nState ) { svt::RoadmapWizard::updateRoadmapItemLabel( _nState ); } // ------------------------------------------------------------------------ short SwMailMergeWizard::Execute() { DBG_ERROR( "SwMailMergeWizard cannot be executed via Dialog::Execute!\n" "It creates a thread (MailDispatcher instance) that will call" "back to VCL apartment => deadlock!\n" "Use Dialog::StartExecuteModal to execute the dialog!" ); return RET_CANCEL; } // ------------------------------------------------------------------------ void SwMailMergeWizard::StartExecuteModal( const Link& rEndDialogHdl ) { ::svt::RoadmapWizard::StartExecuteModal( rEndDialogHdl ); }