summaryrefslogtreecommitdiff
path: root/sw/source/ui/app/apphdl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/app/apphdl.cxx')
-rw-r--r--sw/source/ui/app/apphdl.cxx967
1 files changed, 967 insertions, 0 deletions
diff --git a/sw/source/ui/app/apphdl.cxx b/sw/source/ui/app/apphdl.cxx
new file mode 100644
index 000000000000..8d8fc095b5be
--- /dev/null
+++ b/sw/source/ui/app/apphdl.cxx
@@ -0,0 +1,967 @@
+/*************************************************************************
+ *
+ * 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
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+#include <hintids.hxx>
+#include <tools/urlobj.hxx>
+
+#include <tools/debug.hxx>
+#include <tools/link.hxx>
+
+#define _SVSTDARR_STRINGSDTOR
+#include <svl/svstdarr.hxx>
+#include <svl/urihelper.hxx>
+#include <unotools/undoopt.hxx>
+#include <unotools/pathoptions.hxx>
+#include <svtools/accessibilityoptions.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/event.hxx>
+#include <sfx2/objitem.hxx>
+#include <svx/dataaccessdescriptor.hxx>
+#include <svl/srchitem.hxx>
+#include <svtools/colorcfg.hxx>
+#include <svl/eitem.hxx>
+#include <svl/whiter.hxx>
+#include <svl/isethint.hxx>
+#include <svx/hyprlink.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/fcontnr.hxx>
+#include <svl/stritem.hxx>
+#include <svl/ctloptions.hxx>
+#include <unotools/useroptions.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/wrkwin.hxx>
+#include <svx/insctrl.hxx>
+#include <svx/selctrl.hxx>
+#include <com/sun/star/document/UpdateDocMode.hpp>
+#include <sfx2/docfile.hxx>
+#include <svx/xmlsecctrl.hxx>
+#include <navicfg.hxx>
+
+#include <sfx2/objface.hxx>
+#include <sfx2/app.hxx>
+
+#include <view.hxx>
+#include <pview.hxx>
+#include <srcview.hxx>
+#include <wrtsh.hxx>
+#include <docsh.hxx>
+#ifndef _CMDID_H
+#include <cmdid.h> // Funktion-Ids
+#endif
+#include <initui.hxx>
+#include <uitool.hxx>
+#include <swmodule.hxx>
+#include <wdocsh.hxx>
+#include <wview.hxx>
+#include <usrpref.hxx>
+#include <gloslst.hxx> // SwGlossaryList
+#include <glosdoc.hxx> // SwGlossaryList
+#include <doc.hxx>
+#include <cfgitems.hxx>
+#include <prtopt.hxx>
+#include <modcfg.hxx>
+#include <globals.h> // globale Konstanten z.B.
+#ifndef _APP_HRC
+#include <app.hrc>
+#endif
+#include <fontcfg.hxx>
+#include <barcfg.hxx>
+#include <uinums.hxx>
+#include <dbconfig.hxx>
+#include <mmconfigitem.hxx>
+#include <mailmergechildwindow.hxx>
+#include <linguistic/lngprops.hxx>
+#include <editeng/unolingu.hxx>
+#include <com/sun/star/beans/XMultiPropertySet.hpp>
+#include <com/sun/star/beans/XFastPropertySet.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/beans/XPropertyStateChangeListener.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/XPropertyAccess.hpp>
+#include <com/sun/star/beans/XPropertyContainer.hpp>
+#include <com/sun/star/container/XChild.hpp>
+#include <com/sun/star/sdbc/XConnection.hpp>
+#include <com/sun/star/sdbc/XDataSource.hpp>
+#include <swabstdlg.hxx>
+
+
+#include <vcl/status.hxx>
+
+#include "salhelper/simplereferenceobject.hxx"
+#include "rtl/ref.hxx"
+
+#include <unomid.h>
+
+using namespace ::com::sun::star;
+
+/*--------------------------------------------------------------------
+ Beschreibung: Slotmaps fuer Methoden der Applikation
+ --------------------------------------------------------------------*/
+
+
+// hier werden die SlotID's included
+// siehe Idl-File
+//
+#define SwModule
+#define ViewSettings
+#define WebViewSettings
+#define PrintSettings
+#define _ExecAddress ExecOther
+#define _StateAddress StateOther
+#include <sfx2/msg.hxx>
+#include <svx/svxslots.hxx>
+#include "swslots.hxx"
+#include <cfgid.h>
+
+#include <shells.hrc>
+
+SFX_IMPL_INTERFACE( SwModule, SfxModule, SW_RES(RID_SW_NAME) )
+{
+ SFX_CHILDWINDOW_REGISTRATION(SvxHyperlinkDlgWrapper::GetChildWindowId());
+ SFX_STATUSBAR_REGISTRATION(SW_RES(CFG_STATUSBAR));
+ SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_APPLICATION |
+ SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER,
+ SW_RES(RID_MODULE_TOOLBOX) );
+}
+
+
+/*--------------------------------------------------------------------
+ Beschreibung: Andere States
+ --------------------------------------------------------------------*/
+
+
+void SwModule::StateOther(SfxItemSet &rSet)
+{
+ SfxWhichIter aIter(rSet);
+ sal_uInt16 nWhich = aIter.FirstWhich();
+
+ SwView* pActView = ::GetActiveView();
+ sal_Bool bWebView = 0 != PTR_CAST(SwWebView, pActView);
+
+ while(nWhich)
+ {
+ switch(nWhich)
+ {
+ case FN_BUSINESS_CARD:
+ case FN_LABEL:
+ case FN_ENVELOP:
+ {
+ sal_Bool bDisable = sal_False;
+ SfxViewShell* pCurrView = SfxViewShell::Current();
+ if( !pCurrView || (pCurrView && !pCurrView->ISA(SwView)) )
+ bDisable = sal_True;
+ SwDocShell *pDocSh = (SwDocShell*) SfxObjectShell::Current();
+ if ( bDisable ||
+ (pDocSh && (pDocSh->IsReadOnly() ||
+ pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED)) )
+ rSet.DisableItem( nWhich );
+
+ }
+ break;
+ case FN_XFORMS_INIT:
+ // slot is always active!
+ break;
+ case FN_EDIT_FORMULA:
+ {
+ SwWrtShell* pSh = 0;
+ int nSelection = 0;
+ if( pActView )
+ pSh = &pActView->GetWrtShell();
+ if( pSh )
+ nSelection = pSh->GetSelectionType();
+
+ if( (pSh && pSh->HasSelection()) ||
+ !(nSelection & (nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL)))
+ rSet.DisableItem(nWhich);
+ }
+ break;
+ case SID_ATTR_METRIC:
+ rSet.Put( SfxUInt16Item( SID_ATTR_METRIC, static_cast< UINT16 >(::GetDfltMetric(bWebView))));
+ break;
+ case FN_SET_MODOPT_TBLNUMFMT:
+ rSet.Put( SfxBoolItem( nWhich, pModuleConfig->
+ IsInsTblFormatNum( bWebView )));
+ break;
+ default:
+ DBG_ERROR("::StateOther: default");
+ }
+ nWhich = aIter.NextWhich();
+ }
+}
+
+/*-- 06.04.2004 15:21:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SwView* lcl_LoadDoc(SwView* pView, const String& rURL)
+{
+ SwView* pNewView = 0;
+ if(rURL.Len())
+ {
+ SfxStringItem aURL(SID_FILE_NAME, rURL);
+ SfxStringItem aTargetFrameName( SID_TARGETNAME, String::CreateFromAscii("_blank") );
+ SfxBoolItem aHidden( SID_HIDDEN, TRUE );
+ SfxStringItem aReferer(SID_REFERER, pView->GetDocShell()->GetTitle());
+ SfxObjectItem* pItem = (SfxObjectItem*)pView->GetViewFrame()->GetDispatcher()->
+ Execute(SID_OPENDOC, SFX_CALLMODE_SYNCHRON,
+ &aURL, &aHidden, &aReferer, &aTargetFrameName, 0L);
+ SfxShell* pShell = pItem ? pItem->GetShell() : 0;
+
+ if(pShell)
+ {
+ SfxViewShell* pViewShell = pShell->GetViewShell();
+ if(pViewShell)
+ {
+ if( pViewShell->ISA(SwView) )
+ {
+ pNewView = PTR_CAST(SwView,pViewShell);
+ pNewView->GetViewFrame()->GetFrame().Appear();
+ }
+ else
+ {
+ pViewShell->GetViewFrame()->DoClose();
+ }
+ }
+ }
+ }
+ else
+ {
+ SfxStringItem aFactory(SID_NEWDOCDIRECT, SwDocShell::Factory().GetFilterContainer()->GetName());
+ const SfxFrameItem* pItem = (SfxFrameItem*)
+ pView->GetViewFrame()->GetDispatcher()->Execute(SID_NEWDOCDIRECT,
+ SFX_CALLMODE_SYNCHRON, &aFactory, 0L);
+ SfxFrame* pFrm = pItem ? pItem->GetFrame() : 0;
+ SfxViewFrame* pFrame = pFrm ? pFrm->GetCurrentViewFrame() : 0;
+ pNewView = pFrame ? PTR_CAST(SwView, pFrame->GetViewShell()) : 0;
+ }
+
+ return pNewView;
+}
+/*--------------------------------------------------------------------
+ Beschreibung: Felddialog starten
+ --------------------------------------------------------------------*/
+
+void NewXForms( SfxRequest& rReq ); // implementation: below
+
+namespace
+{
+
+class SwMailMergeWizardExecutor : public salhelper::SimpleReferenceObject
+{
+ SwView* m_pView; // never owner
+ SwView* m_pView2Close; // never owner
+ SwMailMergeConfigItem* m_pMMConfig; // sometimes owner
+ AbstractMailMergeWizard* m_pWizard; // always owner
+
+ DECL_LINK( EndDialogHdl, AbstractMailMergeWizard* );
+ DECL_LINK( DestroyDialogHdl, AbstractMailMergeWizard* );
+ DECL_LINK( DestroyWizardHdl, AbstractMailMergeWizard* );
+ DECL_LINK( CancelHdl, AbstractMailMergeWizard* );
+ DECL_LINK( CloseFrameHdl, AbstractMailMergeWizard* );
+
+ void ExecutionFinished( bool bDeleteConfigItem );
+ void ExecuteWizard();
+
+public:
+ SwMailMergeWizardExecutor();
+ ~SwMailMergeWizardExecutor();
+
+ void ExecuteMailMergeWizard( const SfxItemSet * pArgs );
+};
+
+SwMailMergeWizardExecutor::SwMailMergeWizardExecutor()
+ : m_pView( 0 ),
+ m_pView2Close( NULL ),
+ m_pMMConfig( 0 ),
+ m_pWizard( 0 )
+{
+}
+
+SwMailMergeWizardExecutor::~SwMailMergeWizardExecutor()
+{
+ DBG_ASSERT( m_pWizard == 0, "SwMailMergeWizardExecutor: m_pWizard must be Null!" );
+ DBG_ASSERT( m_pMMConfig == 0, "SwMailMergeWizardExecutor: m_pMMConfig must be Null!" );
+}
+
+void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs )
+{
+ if ( m_pView )
+ {
+ DBG_ERROR( "SwMailMergeWizardExecutor::ExecuteMailMergeWizard: Already executing the wizard!" );
+ return;
+ }
+
+ m_pView = ::GetActiveView(); // not owner!
+ DBG_ASSERT(m_pView, "no current view?");
+ if(m_pView)
+ {
+ // keep self alive until done.
+ acquire();
+
+ // if called from the child window - get the config item and close the ChildWindow, then restore
+ // the wizard
+ SwMailMergeChildWindow* pChildWin =
+ static_cast<SwMailMergeChildWindow*>(m_pView->GetViewFrame()->GetChildWindow(FN_MAILMERGE_CHILDWINDOW));
+ bool bRestoreWizard = false;
+ sal_uInt16 nRestartPage = 0;
+ if(pChildWin && pChildWin->IsVisible())
+ {
+ m_pMMConfig = m_pView->GetMailMergeConfigItem();
+ nRestartPage = m_pView->GetMailMergeRestartPage();
+ if(m_pView->IsMailMergeSourceView())
+ m_pMMConfig->SetSourceView( m_pView );
+ m_pView->SetMailMergeConfigItem(0, 0, sal_True);
+ SfxViewFrame* pViewFrame = m_pView->GetViewFrame();
+ pViewFrame->ShowChildWindow(FN_MAILMERGE_CHILDWINDOW, FALSE);
+ DBG_ASSERT(m_pMMConfig, "no MailMergeConfigItem available");
+ bRestoreWizard = true;
+ }
+ // to make it bullet proof ;-)
+ if(!m_pMMConfig)
+ {
+ m_pMMConfig = new SwMailMergeConfigItem;
+ m_pMMConfig->SetSourceView(m_pView);
+
+ //set the first used database as default source on the config item
+ const SfxPoolItem* pItem = 0;
+ if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(
+ FN_PARAM_DATABASE_PROPERTIES, sal_False, &pItem))
+ {
+ //mailmerge has been called from the database beamer
+ uno::Sequence< beans::PropertyValue> aDBValues;
+ if(static_cast<const SfxUsrAnyItem*>(pItem)->GetValue() >>= aDBValues)
+ {
+ SwDBData aDBData;
+ svx::ODataAccessDescriptor aDescriptor(aDBValues);
+ aDescriptor[svx::daDataSource] >>= aDBData.sDataSource;
+ aDescriptor[svx::daCommand] >>= aDBData.sCommand;
+ aDescriptor[svx::daCommandType] >>= aDBData.nCommandType;
+
+ uno::Sequence< uno::Any > aSelection;
+ uno::Reference< sdbc::XConnection> xConnection;
+ uno::Reference< sdbc::XDataSource> xSource;
+ uno::Reference< sdbcx::XColumnsSupplier> xColumnsSupplier;
+ if ( aDescriptor.has(svx::daSelection) )
+ aDescriptor[svx::daSelection] >>= aSelection;
+ if ( aDescriptor.has(svx::daConnection) )
+ aDescriptor[svx::daConnection] >>= xConnection;
+ uno::Reference<container::XChild> xChild(xConnection, uno::UNO_QUERY);
+ if(xChild.is())
+ xSource = uno::Reference<sdbc::XDataSource>(
+ xChild->getParent(), uno::UNO_QUERY);
+ m_pMMConfig->SetCurrentConnection(
+ xSource, SharedConnection( xConnection, SharedConnection::NoTakeOwnership ),
+ xColumnsSupplier, aDBData);
+ }
+ }
+ else
+ {
+ SvStringsDtor aDBNameList(5, 1);
+ SvStringsDtor aAllDBNames(5, 5);
+ m_pView->GetWrtShell().GetAllUsedDB( aDBNameList, &aAllDBNames );
+ if(aDBNameList.Count())
+ {
+ String sDBName = *aDBNameList[0];
+ SwDBData aDBData;
+ aDBData.sDataSource = sDBName.GetToken(0, DB_DELIM);
+ aDBData.sCommand = sDBName.GetToken(1, DB_DELIM);
+ aDBData.nCommandType = sDBName.GetToken(2, DB_DELIM ).ToInt32();
+ //set the currently used database for the wizard
+ m_pMMConfig->SetCurrentDBData( aDBData );
+ }
+ }
+ }
+
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ m_pWizard = pFact->CreateMailMergeWizard(*m_pView, *m_pMMConfig);
+
+ if(bRestoreWizard)
+ {
+ m_pWizard->ShowPage( nRestartPage );
+ }
+
+ ExecuteWizard();
+ }
+}
+
+void SwMailMergeWizardExecutor::ExecutionFinished( bool bDeleteConfigItem )
+{
+ m_pMMConfig->Commit();
+ if ( bDeleteConfigItem ) // owner?
+ delete m_pMMConfig;
+
+ m_pMMConfig = 0;
+
+ // release/destroy asynchronously
+ Application::PostUserEvent( LINK( this, SwMailMergeWizardExecutor, DestroyDialogHdl ) );
+}
+
+void SwMailMergeWizardExecutor::ExecuteWizard()
+{
+ m_pWizard->StartExecuteModal(
+ LINK( this, SwMailMergeWizardExecutor, EndDialogHdl ) );
+}
+
+#if OSL_DEBUG_LEVEL > 1
+IMPL_LINK( SwMailMergeWizardExecutor, EndDialogHdl, AbstractMailMergeWizard*, pDialog )
+#else
+IMPL_LINK( SwMailMergeWizardExecutor, EndDialogHdl, AbstractMailMergeWizard*, EMPTYARG )
+#endif
+{
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ASSERT( pDialog == m_pWizard, "wrong dialog passed to EndDialogHdl!" );
+ (void) pDialog;
+#endif
+
+ long nRet = m_pWizard->GetResult();
+ sal_uInt16 nRestartPage = m_pWizard->GetRestartPage();
+
+ switch ( nRet )
+ {
+ case RET_LOAD_DOC:
+ {
+ SwView* pNewView = lcl_LoadDoc(m_pView, m_pWizard->GetReloadDocument());
+
+ // destroy wizard asynchronously
+ Application::PostUserEvent(
+ LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), m_pWizard );
+
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ if(pNewView)
+ {
+ m_pView = pNewView;
+ m_pMMConfig->DocumentReloaded();
+ //new source view!
+ m_pMMConfig->SetSourceView( m_pView );
+ m_pWizard = pFact->CreateMailMergeWizard(*m_pView, *m_pMMConfig);
+ m_pWizard->ShowPage( nRestartPage );
+ }
+ else
+ {
+ m_pWizard = pFact->CreateMailMergeWizard(*m_pView, *m_pMMConfig);
+ }
+
+ // execute the wizard again
+ ExecuteWizard();
+ break;
+ }
+ case RET_TARGET_CREATED:
+ {
+ SwView* pTargetView = m_pMMConfig->GetTargetView();
+ uno::Reference< frame::XFrame > xFrame =
+ m_pView->GetViewFrame()->GetFrame().GetFrameInterface();
+ xFrame->getContainerWindow()->setVisible(sal_False);
+ DBG_ASSERT(pTargetView, "No target view has been created");
+ if(pTargetView)
+ {
+ // destroy wizard asynchronously
+ Application::PostUserEvent(
+ LINK( this, SwMailMergeWizardExecutor, DestroyWizardHdl ), m_pWizard );
+
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ m_pWizard = pFact->CreateMailMergeWizard(*pTargetView, *m_pMMConfig);
+ m_pWizard->ShowPage( nRestartPage );
+
+ // execute the wizard again
+ ExecuteWizard();
+ }
+ else
+ {
+ //should not happen - just in case no target view has been created
+ ExecutionFinished( true );
+ }
+ break;
+ }
+ case RET_EDIT_DOC:
+ case RET_EDIT_RESULT_DOC:
+ {
+ //create a non-modal dialog that allows to return to the wizard
+ //the ConfigItem ownership moves to this dialog
+ bool bResult = nRet == RET_EDIT_RESULT_DOC && m_pMMConfig->GetTargetView();
+ SwView* pTempView = bResult ? m_pMMConfig->GetTargetView() : m_pMMConfig->GetSourceView();
+ pTempView->SetMailMergeConfigItem(m_pMMConfig, m_pWizard->GetRestartPage(), !bResult);
+ SfxViewFrame* pViewFrame = pTempView->GetViewFrame();
+ pViewFrame->GetDispatcher()->Execute(
+ FN_MAILMERGE_CHILDWINDOW, SFX_CALLMODE_SYNCHRON);
+ ExecutionFinished( false );
+ break;
+ }
+ case RET_REMOVE_TARGET:
+ {
+ SwView* pTargetView = m_pMMConfig->GetTargetView();
+ SwView* pSourceView = m_pMMConfig->GetSourceView();
+ DBG_ASSERT(pTargetView && pSourceView, "source or target view not available" );
+ if(pTargetView && pSourceView)
+ {
+ m_pView2Close = pTargetView;
+ pTargetView->GetViewFrame()->GetTopViewFrame()->GetWindow().Hide();
+ pSourceView->GetViewFrame()->GetFrame().AppearWithUpdate();
+ // the current view has be be set when the target is destroyed
+ m_pView = pSourceView;
+ m_pMMConfig->SetTargetView(0);
+
+ // destroy wizard asynchronously
+ Application::PostUserEvent(
+ LINK( this, SwMailMergeWizardExecutor, CloseFrameHdl ), m_pWizard );
+
+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+ m_pWizard = pFact->CreateMailMergeWizard(*pSourceView, *m_pMMConfig);
+ m_pWizard->ShowPage( nRestartPage );
+
+ // execute the wizard again
+ ExecuteWizard();
+ }
+ else
+ {
+ //should not happen - just in case no target view has been created
+ ExecutionFinished( true );
+ }
+ break;
+ }
+ case RET_CANCEL:
+ {
+ // close frame and destroy wizard asynchronously
+ Application::PostUserEvent(
+ LINK( this, SwMailMergeWizardExecutor, CancelHdl ), m_pWizard );
+ break;
+ }
+ default: //finish
+ {
+ SwView* pSourceView = m_pMMConfig->GetSourceView();
+ if(pSourceView)
+ {
+ SwDocShell* pDocShell = pSourceView->GetDocShell();
+ if(pDocShell->HasName() && !pDocShell->IsModified())
+ m_pMMConfig->GetSourceView()->GetViewFrame()->DoClose();
+ else
+ m_pMMConfig->GetSourceView()->GetViewFrame()->GetFrame().Appear();
+ }
+ ExecutionFinished( true );
+ break;
+ }
+
+ } // switch
+
+ return 0L;
+}
+
+IMPL_LINK( SwMailMergeWizardExecutor, DestroyDialogHdl, AbstractMailMergeWizard*, EMPTYARG )
+{
+ delete m_pWizard;
+ m_pWizard = 0;
+
+ release();
+ return 0L;
+}
+
+IMPL_LINK( SwMailMergeWizardExecutor, DestroyWizardHdl, AbstractMailMergeWizard*, pDialog )
+{
+ delete pDialog;
+ return 0L;
+}
+
+IMPL_LINK( SwMailMergeWizardExecutor, CancelHdl, AbstractMailMergeWizard*, EMPTYARG )
+{
+ if(m_pMMConfig->GetTargetView())
+ {
+ m_pMMConfig->GetTargetView()->GetViewFrame()->DoClose();
+ m_pMMConfig->SetTargetView(0);
+ }
+ if(m_pMMConfig->GetSourceView())
+ m_pMMConfig->GetSourceView()->GetViewFrame()->GetFrame().AppearWithUpdate();
+
+ m_pMMConfig->Commit();
+ delete m_pMMConfig;
+ m_pMMConfig = 0;
+ // m_pWizard already deleted by closing the target view
+ m_pWizard = 0;
+ release();
+
+ return 0L;
+}
+
+IMPL_LINK( SwMailMergeWizardExecutor, CloseFrameHdl, AbstractMailMergeWizard*, EMPTYARG )
+{
+ if ( m_pView2Close )
+ {
+ m_pView2Close->GetViewFrame()->DoClose();
+ m_pView2Close = NULL;
+ }
+
+ return 0L;
+}
+
+} // namespace
+
+void SwModule::ExecOther(SfxRequest& rReq)
+{
+ const SfxItemSet *pArgs = rReq.GetArgs();
+ const SfxPoolItem* pItem = 0;
+
+ sal_uInt16 nWhich = rReq.GetSlot();
+ switch (nWhich)
+ {
+ case FN_ENVELOP:
+ InsertEnv( rReq );
+ break;
+
+ case FN_BUSINESS_CARD:
+ case FN_LABEL:
+ InsertLab(rReq, nWhich == FN_LABEL);
+ break;
+
+ case FN_XFORMS_INIT:
+ NewXForms( rReq );
+ break;
+
+ case SID_ATTR_METRIC:
+ if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(nWhich, sal_False, &pItem))
+ {
+ FieldUnit eUnit = (FieldUnit)((const SfxUInt16Item*)pItem)->GetValue();
+ switch( eUnit )
+ {
+ case FUNIT_MM:
+ case FUNIT_CM:
+ case FUNIT_INCH:
+ case FUNIT_PICA:
+ case FUNIT_POINT:
+ {
+ SwView* pActView = ::GetActiveView();
+ sal_Bool bWebView = 0 != PTR_CAST(SwWebView, pActView);
+ ::SetDfltMetric(eUnit, bWebView);
+ }
+ break;
+ default:;//prevent warning
+ }
+ }
+ break;
+
+ case FN_SET_MODOPT_TBLNUMFMT:
+ {
+ sal_Bool bWebView = 0 != PTR_CAST(SwWebView, ::GetActiveView() ),
+ bSet;
+
+ if( pArgs && SFX_ITEM_SET == pArgs->GetItemState(
+ nWhich, sal_False, &pItem ))
+ bSet = ((SfxBoolItem*)pItem)->GetValue();
+ else
+ bSet = !pModuleConfig->IsInsTblFormatNum( bWebView );
+
+ pModuleConfig->SetInsTblFormatNum( bWebView, bSet );
+ }
+ break;
+ case FN_MAILMERGE_WIZARD:
+ {
+ rtl::Reference< SwMailMergeWizardExecutor > xEx( new SwMailMergeWizardExecutor );
+ xEx->ExecuteMailMergeWizard( pArgs );
+ }
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Notifies abfangen
+ --------------------------------------------------------------------*/
+
+
+ // Hint abfangen fuer DocInfo
+void SwModule::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
+{
+ if( rHint.ISA( SfxEventHint ) )
+ {
+ SfxEventHint& rEvHint = (SfxEventHint&) rHint;
+ SwDocShell* pDocSh = PTR_CAST( SwDocShell, rEvHint.GetObjShell() );
+ if( pDocSh )
+ {
+ SwWrtShell* pWrtSh = pDocSh ? pDocSh->GetWrtShell() : 0;
+ switch( rEvHint.GetEventId() )
+ {
+/* MA 07. Mar. 96: UpdateInputFlds() nur noch bei Dokument neu.
+ (Und bei Einfuegen Textbaust.)
+ case SFX_EVENT_OPENDOC:
+ // dann am aktuellen Dokument die Input-Fedler updaten
+ if( pWrtSh )
+ pWrtSh->UpdateInputFlds();
+ break;
+*/
+ case SFX_EVENT_CREATEDOC:
+ // alle FIX-Date/Time Felder auf akt. setzen
+ if( pWrtSh )
+ {
+ SFX_ITEMSET_ARG( pDocSh->GetMedium()->GetItemSet(), pUpdateDocItem, SfxUInt16Item, SID_UPDATEDOCMODE, sal_False);
+ sal_Bool bUpdateFields = sal_True;
+ if( pUpdateDocItem && pUpdateDocItem->GetValue() == document::UpdateDocMode::NO_UPDATE)
+ bUpdateFields = sal_False;
+ pWrtSh->SetFixFields();
+ if(bUpdateFields)
+ {
+ pWrtSh->UpdateInputFlds();
+
+ // Sind Datenbankfelder enthalten?
+ // Erstmal alle verwendeten Datenbanken holen
+ SwDoc *pDoc = pDocSh->GetDoc();
+ SvStringsDtor aDBNameList;
+ pDoc->GetAllUsedDB( aDBNameList );
+ sal_uInt16 nCount = aDBNameList.Count();
+ if (nCount)
+ { // Datenbankbeamer oeffnen
+ ShowDBObj(pWrtSh->GetView(), pDoc->GetDBData());
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ else if(rHint.ISA(SfxItemSetHint))
+ {
+ if( SFX_ITEM_SET == ((SfxItemSetHint&)rHint).GetItemSet().GetItemState(SID_ATTR_PATHNAME))
+ {
+ ::GetGlossaries()->UpdateGlosPath( sal_False );
+ SwGlossaryList* pList = ::GetGlossaryList();
+ if(pList->IsActive())
+ pList->Update();
+ }
+ }
+ else if(rHint.ISA(SfxSimpleHint))
+ {
+ USHORT nHintId = ((SfxSimpleHint&)rHint).GetId();
+ if(SFX_HINT_DEINITIALIZING == nHintId)
+ {
+ DELETEZ(pWebUsrPref);
+ DELETEZ(pUsrPref) ;
+ DELETEZ(pModuleConfig);
+ DELETEZ(pPrtOpt) ;
+ DELETEZ(pWebPrtOpt) ;
+ DELETEZ(pChapterNumRules);
+ DELETEZ(pStdFontConfig) ;
+ DELETEZ(pNavigationConfig) ;
+ DELETEZ(pToolbarConfig) ;
+ DELETEZ(pWebToolbarConfig) ;
+ DELETEZ(pAuthorNames) ;
+ DELETEZ(pDBConfig);
+ pColorConfig->RemoveListener(this);
+ DELETEZ(pColorConfig);
+ pAccessibilityOptions->RemoveListener(this);
+ DELETEZ(pAccessibilityOptions);
+ pCTLOptions->RemoveListener(this);
+ DELETEZ(pCTLOptions);
+ pUserOptions->RemoveListener(this);
+ DELETEZ(pUserOptions);
+ pUndoOptions->RemoveListener(this);
+ DELETEZ(pUndoOptions);
+ }
+ }
+}
+
+void SwModule::ConfigurationChanged( utl::ConfigurationBroadcaster* pBrdCst, sal_uInt32 )
+{
+ if( pBrdCst == pUserOptions )
+ {
+ bAuthorInitialised = FALSE;
+ }
+ else if( pBrdCst == pUndoOptions )
+ {
+ const int nNew = GetUndoOptions().GetUndoCount();
+ const int nOld = SwEditShell::GetUndoActionCount();
+ if(!nNew || !nOld)
+ {
+ sal_Bool bUndo = nNew != 0;
+ //ueber DocShells iterieren und Undo umschalten
+
+ TypeId aType(TYPE(SwDocShell));
+ SwDocShell* pDocShell = (SwDocShell*)SfxObjectShell::GetFirst(&aType);
+ while( pDocShell )
+ {
+ pDocShell->GetDoc()->DoUndo( bUndo );
+ pDocShell = (SwDocShell*)SfxObjectShell::GetNext(*pDocShell, &aType);
+ }
+ }
+ SwEditShell::SetUndoActionCount( static_cast< USHORT >(nNew));
+ }
+ else if ( pBrdCst == pColorConfig || pBrdCst == pAccessibilityOptions )
+ {
+ sal_Bool bAccessibility = sal_False;
+ if( pBrdCst == pColorConfig )
+ SwViewOption::ApplyColorConfigValues(*pColorConfig);
+ else
+ bAccessibility = sal_True;
+
+ //invalidate all edit windows
+ const TypeId aSwViewTypeId = TYPE(SwView);
+ const TypeId aSwPreViewTypeId = TYPE(SwPagePreView);
+ const TypeId aSwSrcViewTypeId = TYPE(SwSrcView);
+ SfxViewShell* pViewShell = SfxViewShell::GetFirst();
+ while(pViewShell)
+ {
+ if(pViewShell->GetWindow())
+ {
+ if((pViewShell->IsA(aSwViewTypeId) ||
+ pViewShell->IsA(aSwPreViewTypeId) ||
+ pViewShell->IsA(aSwSrcViewTypeId)))
+ {
+ if(bAccessibility)
+ {
+ if(pViewShell->IsA(aSwViewTypeId))
+ ((SwView*)pViewShell)->ApplyAccessiblityOptions(*pAccessibilityOptions);
+ else if(pViewShell->IsA(aSwPreViewTypeId))
+ ((SwPagePreView*)pViewShell)->ApplyAccessiblityOptions(*pAccessibilityOptions);
+ }
+ pViewShell->GetWindow()->Invalidate();
+ }
+ }
+ pViewShell = SfxViewShell::GetNext( *pViewShell );
+ }
+ }
+ else if( pBrdCst == pCTLOptions )
+ {
+ const SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
+ while( pObjSh )
+ {
+ if( pObjSh->IsA(TYPE(SwDocShell)) )
+ {
+ const SwDoc* pDoc = ((SwDocShell*)pObjSh)->GetDoc();
+ ViewShell* pVSh = 0;
+ pDoc->GetEditShell( &pVSh );
+ if ( pVSh )
+ pVSh->ChgNumberDigits();
+ }
+ pObjSh = SfxObjectShell::GetNext(*pObjSh);
+ }
+ }
+
+}
+
+/* -----------------------------20.02.01 12:43--------------------------------
+
+ ---------------------------------------------------------------------------*/
+SwDBConfig* SwModule::GetDBConfig()
+{
+ if(!pDBConfig)
+ pDBConfig = new SwDBConfig;
+ return pDBConfig;
+}
+/* -----------------------------11.04.2002 15:27------------------------------
+
+ ---------------------------------------------------------------------------*/
+svtools::ColorConfig& SwModule::GetColorConfig()
+{
+ if(!pColorConfig)
+ {
+ pColorConfig = new svtools::ColorConfig;
+ SwViewOption::ApplyColorConfigValues(*pColorConfig);
+ pColorConfig->AddListener(this);
+ }
+ return *pColorConfig;
+}
+/* -----------------------------06.05.2002 09:42------------------------------
+
+ ---------------------------------------------------------------------------*/
+SvtAccessibilityOptions& SwModule::GetAccessibilityOptions()
+{
+ if(!pAccessibilityOptions)
+ {
+ pAccessibilityOptions = new SvtAccessibilityOptions;
+ pAccessibilityOptions->AddListener(this);
+ }
+ return *pAccessibilityOptions;
+}
+/* -----------------06.05.2003 14:52-----------------
+
+ --------------------------------------------------*/
+SvtCTLOptions& SwModule::GetCTLOptions()
+{
+ if(!pCTLOptions)
+ {
+ pCTLOptions = new SvtCTLOptions;
+ pCTLOptions->AddListener(this);
+ }
+ return *pCTLOptions;
+}
+/* -----------------07.07.2003 09:31-----------------
+
+ --------------------------------------------------*/
+SvtUserOptions& SwModule::GetUserOptions()
+{
+ if(!pUserOptions)
+ {
+ pUserOptions = new SvtUserOptions;
+ pUserOptions->AddListener(this);
+ }
+ return *pUserOptions;
+}
+/* -----------------18.07.2003 13:31-----------------
+
+ --------------------------------------------------*/
+SvtUndoOptions& SwModule::GetUndoOptions()
+{
+ if(!pUndoOptions)
+ {
+ pUndoOptions = new SvtUndoOptions;
+ pUndoOptions->AddListener(this);
+ }
+ return *pUndoOptions;
+}
+/*-----------------30.01.97 08.30-------------------
+
+--------------------------------------------------*/
+const SwMasterUsrPref *SwModule::GetUsrPref(sal_Bool bWeb) const
+{
+ SwModule* pNonConstModule = (SwModule*)this;
+ if(bWeb && !pWebUsrPref)
+ {
+ // im Load der SwMasterUsrPref wird der SpellChecker gebraucht, dort darf
+ // er aber nicht angelegt werden #58256#
+ pNonConstModule->pWebUsrPref = new SwMasterUsrPref(TRUE);
+ }
+ else if(!bWeb && !pUsrPref)
+ {
+ pNonConstModule->pUsrPref = new SwMasterUsrPref(FALSE);
+ }
+ return bWeb ? pWebUsrPref : pUsrPref;
+}
+
+
+
+void NewXForms( SfxRequest& rReq )
+{
+ // copied & excerpted from SwModule::InsertLab(..)
+
+ // create new document
+ SfxObjectShellRef xDocSh( new SwDocShell( SFX_CREATE_MODE_STANDARD) );
+ xDocSh->DoInitNew( 0 );
+
+ // initialize XForms
+ static_cast<SwDocShell*>( &xDocSh )->GetDoc()->initXForms( true );
+
+ // load document into frame
+ SfxViewFrame::DisplayNewDocument( *xDocSh, rReq );
+
+ // set return value
+ rReq.SetReturnValue( SfxVoidItem( rReq.GetSlot() ) );
+}