diff options
Diffstat (limited to 'sc/source/ui/app/scmod.cxx')
-rw-r--r-- | sc/source/ui/app/scmod.cxx | 2209 |
1 files changed, 0 insertions, 2209 deletions
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx deleted file mode 100644 index 75cca3046..000000000 --- a/sc/source/ui/app/scmod.cxx +++ /dev/null @@ -1,2209 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * 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_sc.hxx" -#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> -#include <comphelper/processfactory.hxx> - - - - - -// INCLUDE --------------------------------------------------------------- - -#include "scitems.hxx" -#include <sfx2/app.hxx> -#include <editeng/eeitem.hxx> - -#include <editeng/flditem.hxx> -#include <editeng/outliner.hxx> -#include <basic/sbstar.hxx> - -#include <sfx2/sfxdlg.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/objface.hxx> - -#include "IAnyRefDialog.hxx" - -#include <svtools/ehdl.hxx> -#include <svtools/accessibilityoptions.hxx> -#include <svl/ctloptions.hxx> -#include <unotools/useroptions.hxx> -#include <vcl/status.hxx> -#include <sfx2/bindings.hxx> -#include <sfx2/request.hxx> -#include <sfx2/printer.hxx> -#include <editeng/langitem.hxx> -#include <svtools/colorcfg.hxx> - -#include <svl/whiter.hxx> -#include <svx/selctrl.hxx> -#include <svx/insctrl.hxx> -#include <svx/zoomctrl.hxx> -#include <svx/modctrl.hxx> -#include <svx/pszctrl.hxx> -#include <svx/zoomsliderctrl.hxx> -#include <vcl/msgbox.hxx> -#include <svl/inethist.hxx> -#include <vcl/waitobj.hxx> -#include <svx/svxerr.hxx> - - - -#include "scmod.hxx" -#include "global.hxx" -#include "viewopti.hxx" -#include "docoptio.hxx" -#include "appoptio.hxx" -#include "inputopt.hxx" -#include "printopt.hxx" -#include "navicfg.hxx" -#include "addincfg.hxx" -#include "tabvwsh.hxx" -#include "prevwsh.hxx" -#include "docsh.hxx" -#include "drwlayer.hxx" -#include "uiitems.hxx" -#include "sc.hrc" -#include "cfgids.hxx" -#include "inputhdl.hxx" -#include "inputwin.hxx" -#include "msgpool.hxx" -#include "scresid.hxx" -#include "anyrefdg.hxx" -#include "dwfunctr.hxx" -#include "formdata.hxx" -#include "tpprint.hxx" -#include "tpdefaults.hxx" -#include "transobj.hxx" -#include "detfunc.hxx" -#include "preview.hxx" - -#include <svx/xmlsecctrl.hxx> - -#define ScModule -#include "scslots.hxx" - -#include "scabstdlg.hxx" - -#define SC_IDLE_MIN 150 -#define SC_IDLE_MAX 3000 -#define SC_IDLE_STEP 75 -#define SC_IDLE_COUNT 50 - -static sal_uInt16 nIdleCount = 0; - -//------------------------------------------------------------------ - -SFX_IMPL_INTERFACE( ScModule, SfxShell, ScResId(RID_APPTITLE) ) -{ - SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_APPLICATION | SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER, - ScResId(RID_OBJECTBAR_APP) ); - SFX_STATUSBAR_REGISTRATION( ScResId(SCCFG_STATUSBAR) ); // nur ID wichtig -} - -//------------------------------------------------------------------ - -ScModule::ScModule( SfxObjectFactory* pFact ) : - SfxModule( SfxApplication::CreateResManager( "sc" ), false, pFact, NULL ), - pSelTransfer( NULL ), - pMessagePool( NULL ), - pRefInputHandler( NULL ), - pViewCfg( NULL ), - pDocCfg( NULL ), - pAppCfg( NULL ), - pInputCfg( NULL ), - pPrintCfg( NULL ), - pNavipiCfg( NULL ), - pAddInCfg( NULL ), - pColorConfig( NULL ), - pAccessOptions( NULL ), - pCTLOptions( NULL ), - pUserOptions( NULL ), - pErrorHdl( NULL ), - pSvxErrorHdl( NULL ), - pFormEditData( NULL ), - nCurRefDlgId( 0 ), - bIsWaterCan( false ), - bIsInEditCommand( false ), - bIsInExecuteDrop( false ), - mbIsInSharedDocLoading( false ), - mbIsInSharedDocSaving( false ) -{ - // im ctor ist der ResManager (DLL-Daten) noch nicht initialisiert! - - SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("StarCalc"))); // fuer Basic - - ResetDragObject(); - SetClipObject( NULL, NULL ); - - // InputHandler braucht nicht mehr angelegt zu werden - - // ErrorHandler anlegen - war in Init() - // zwischen OfficeApplication::Init und ScGlobal::Init - SvxErrorHandler::ensure(); - pErrorHdl = new SfxErrorHandler( RID_ERRHDLSC, - ERRCODE_AREA_SC, - ERRCODE_AREA_APP2-1, - GetResMgr() ); - - aSpellTimer.SetTimeout(10); - aSpellTimer.SetTimeoutHdl( LINK( this, ScModule, SpellTimerHdl ) ); - aIdleTimer.SetTimeout(SC_IDLE_MIN); - aIdleTimer.SetTimeoutHdl( LINK( this, ScModule, IdleHandler ) ); - aIdleTimer.Start(); - - pMessagePool = new ScMessagePool; - pMessagePool->FreezeIdRanges(); - SetPool( pMessagePool ); - ScGlobal::InitTextHeight( pMessagePool ); - - StartListening( *SFX_APP() ); // for SFX_HINT_DEINITIALIZING -} - -ScModule::~ScModule() -{ - OSL_ENSURE( !pSelTransfer, "Selection Transfer object not deleted" ); - - // InputHandler braucht nicht mehr geloescht zu werden (gibt keinen an der App mehr) - - SfxItemPool::Free(pMessagePool); - - DELETEZ( pFormEditData ); - - delete pErrorHdl; -// delete pSvxErrorHdl; - - ScGlobal::Clear(); // ruft auch ScDocumentPool::DeleteVersionMaps(); - - DeleteCfg(); // wurde mal aus Exit() gerufen -} - -//------------------------------------------------------------------ -void ScModule::ConfigurationChanged( utl::ConfigurationBroadcaster* p, sal_uInt32 ) -{ - if ( p == pColorConfig || p == pAccessOptions ) - { - // Test if detective objects have to be updated with new colors - // (if the detective colors haven't been used yet, there's nothing to update) - if ( ScDetectiveFunc::IsColorsInitialized() ) - { - const svtools::ColorConfig& rColors = GetColorConfig(); - sal_Bool bArrows = - ( ScDetectiveFunc::GetArrowColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVE).nColor || - ScDetectiveFunc::GetErrorColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVEERROR).nColor ); - sal_Bool bComments = - ( ScDetectiveFunc::GetCommentColor() != (ColorData)rColors.GetColorValue(svtools::CALCNOTESBACKGROUND).nColor ); - if ( bArrows || bComments ) - { - ScDetectiveFunc::InitializeColors(); // get the new colors - - // update detective objects in all open documents - SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); - while ( pObjSh ) - { - if ( pObjSh->Type() == TYPE(ScDocShell) ) - { - ScDocShell* pDocSh = ((ScDocShell*)pObjSh); - if ( bArrows ) - ScDetectiveFunc( pDocSh->GetDocument(), 0 ).UpdateAllArrowColors(); - if ( bComments ) - ScDetectiveFunc::UpdateAllComments( *pDocSh->GetDocument() ); - } - pObjSh = SfxObjectShell::GetNext( *pObjSh ); - } - } - } - - // force all views to repaint, using the new options - - SfxViewShell* pViewShell = SfxViewShell::GetFirst(); - while(pViewShell) - { - if ( pViewShell->ISA(ScTabViewShell) ) - { - ScTabViewShell* pViewSh = (ScTabViewShell*)pViewShell; - pViewSh->PaintGrid(); - pViewSh->PaintTop(); - pViewSh->PaintLeft(); - pViewSh->PaintExtras(); - - ScInputHandler* pHdl = pViewSh->GetInputHandler(); - if ( pHdl ) - pHdl->ForgetLastPattern(); // EditEngine BackgroundColor may change - } - else if ( pViewShell->ISA(ScPreviewShell) ) - { - Window* pWin = pViewShell->GetWindow(); - if (pWin) - pWin->Invalidate(); - } - pViewShell = SfxViewShell::GetNext( *pViewShell ); - } - } - else if ( p == pCTLOptions ) - { - // for all documents: set digit language for printer, recalc output factor, update row heights - SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); - while ( pObjSh ) - { - if ( pObjSh->Type() == TYPE(ScDocShell) ) - { - ScDocShell* pDocSh = ((ScDocShell*)pObjSh); - OutputDevice* pPrinter = pDocSh->GetPrinter(); - if ( pPrinter ) - pPrinter->SetDigitLanguage( GetOptDigitLanguage() ); - - pDocSh->CalcOutputFactor(); - - SCTAB nTabCount = pDocSh->GetDocument()->GetTableCount(); - for (SCTAB nTab=0; nTab<nTabCount; nTab++) - pDocSh->AdjustRowHeight( 0, MAXROW, nTab ); - } - pObjSh = SfxObjectShell::GetNext( *pObjSh ); - } - - // for all views (table and preview): update digit language - SfxViewShell* pSh = SfxViewShell::GetFirst(); - while ( pSh ) - { - if ( pSh->ISA( ScTabViewShell ) ) - { - ScTabViewShell* pViewSh = (ScTabViewShell*)pSh; - - // set ref-device for EditEngine (re-evaluates digit settings) - ScInputHandler* pHdl = GetInputHdl(pViewSh); - if (pHdl) - pHdl->UpdateRefDevice(); - - pViewSh->DigitLanguageChanged(); - pViewSh->PaintGrid(); - } - else if ( pSh->ISA( ScPreviewShell ) ) - { - ScPreviewShell* pPreviewSh = (ScPreviewShell*)pSh; - ScPreview* pPreview = pPreviewSh->GetPreview(); - - pPreview->SetDigitLanguage( GetOptDigitLanguage() ); - pPreview->Invalidate(); - } - - pSh = SfxViewShell::GetNext( *pSh ); - } - } -} - -void ScModule::Notify( SfxBroadcaster&, const SfxHint& rHint ) -{ - if ( rHint.ISA(SfxSimpleHint) ) - { - sal_uLong nHintId = ((SfxSimpleHint&)rHint).GetId(); - if ( nHintId == SFX_HINT_DEINITIALIZING ) - { - // ConfigItems must be removed before ConfigManager - DeleteCfg(); - } - } -} - -//------------------------------------------------------------------ - -void ScModule::DeleteCfg() -{ - DELETEZ( pViewCfg ); // Speichern passiert vor Exit() automatisch - DELETEZ( pDocCfg ); - DELETEZ( pAppCfg ); - DELETEZ( pInputCfg ); - DELETEZ( pPrintCfg ); - DELETEZ( pNavipiCfg ); - DELETEZ( pAddInCfg ); - - if ( pColorConfig ) - { - pColorConfig->RemoveListener(this); - DELETEZ( pColorConfig ); - } - if ( pAccessOptions ) - { - pAccessOptions->RemoveListener(this); - DELETEZ( pAccessOptions ); - } - if ( pCTLOptions ) - { - pCTLOptions->RemoveListener(this); - DELETEZ( pCTLOptions ); - } - if( pUserOptions ) - { - DELETEZ( pUserOptions ); - } -} - -//------------------------------------------------------------------ -// -// von der Applikation verschoben: -// -//------------------------------------------------------------------ - -void ScModule::Execute( SfxRequest& rReq ) -{ - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL; - - const SfxItemSet* pReqArgs = rReq.GetArgs(); - sal_uInt16 nSlot = rReq.GetSlot(); - - switch ( nSlot ) - { - case SID_CHOOSE_DESIGN: - { - String aMacroName = - String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Template.Samples.ShowStyles")); - SfxApplication::CallAppBasic( aMacroName ); - } - break; - case SID_EURO_CONVERTER: - { - String aMacroName = - String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Euro.ConvertRun.Main")); - SfxApplication::CallAppBasic( aMacroName ); - } - break; - case SID_AUTOSPELL_CHECK: - { - sal_Bool bSet; - const SfxPoolItem* pItem; - if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( nSlot, sal_True, &pItem ) ) - bSet = ((const SfxBoolItem*)pItem)->GetValue(); - else - { // Toggle - ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); - if ( pDocSh ) - bSet = !pDocSh->GetDocument()->GetDocOptions().IsAutoSpell(); - else - bSet = !GetDocOptions().IsAutoSpell(); - } - - SfxItemSet aSet( GetPool(), SID_AUTOSPELL_CHECK, SID_AUTOSPELL_CHECK ); - aSet.Put( SfxBoolItem( SID_AUTOSPELL_CHECK, bSet ) ); - ModifyOptions( aSet ); - rReq.Done(); - } - break; - - case SID_ATTR_METRIC: - { - const SfxPoolItem* pItem; - if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( nSlot, sal_True, &pItem ) ) - { - FieldUnit eUnit = (FieldUnit)((const SfxUInt16Item*)pItem)->GetValue(); - switch( eUnit ) - { - case FUNIT_MM: // nur die Einheiten, die auch im Dialog stehen - case FUNIT_CM: - case FUNIT_INCH: - case FUNIT_PICA: - case FUNIT_POINT: - { - PutItem( *pItem ); - ScAppOptions aNewOpts( GetAppOptions() ); - aNewOpts.SetAppMetric( eUnit ); - SetAppOptions( aNewOpts ); - rReq.Done(); - } - break; - default: - { - // added to avoid warnings - } - } - } - } - break; - - case FID_AUTOCOMPLETE: - { - ScAppOptions aNewOpts( GetAppOptions() ); - sal_Bool bNew = !aNewOpts.GetAutoComplete(); - aNewOpts.SetAutoComplete( bNew ); - SetAppOptions( aNewOpts ); - ScInputHandler::SetAutoComplete( bNew ); - if (pBindings) - pBindings->Invalidate( FID_AUTOCOMPLETE ); - rReq.Done(); - } - break; - - case SID_DETECTIVE_AUTO: - { - ScAppOptions aNewOpts( GetAppOptions() ); - sal_Bool bNew = !aNewOpts.GetDetectiveAuto(); - SFX_REQUEST_ARG( rReq, pAuto, SfxBoolItem, SID_DETECTIVE_AUTO, false ); - if ( pAuto ) - bNew = pAuto->GetValue(); - - aNewOpts.SetDetectiveAuto( bNew ); - SetAppOptions( aNewOpts ); - if (pBindings) - pBindings->Invalidate( SID_DETECTIVE_AUTO ); - rReq.AppendItem( SfxBoolItem( SID_DETECTIVE_AUTO, bNew ) ); - rReq.Done(); - } - break; - - case SID_PSZ_FUNCTION: - if (pReqArgs) - { - const SfxUInt16Item& rItem = (const SfxUInt16Item&)pReqArgs->Get(SID_PSZ_FUNCTION); - OSL_ENSURE(rItem.ISA(SfxUInt16Item),"falscher Parameter"); - - ScAppOptions aNewOpts( GetAppOptions() ); - aNewOpts.SetStatusFunc( rItem.GetValue() ); - SetAppOptions( aNewOpts ); - - if (pBindings) - { - pBindings->Invalidate( SID_TABLE_CELL ); - pBindings->Update( SID_TABLE_CELL ); // sofort - - pBindings->Invalidate( SID_PSZ_FUNCTION ); - pBindings->Update( SID_PSZ_FUNCTION ); - // falls Menue gleich wieder aufgeklappt wird - } - } - break; - - case SID_ATTR_LANGUAGE: - case SID_ATTR_CHAR_CJK_LANGUAGE: - case SID_ATTR_CHAR_CTL_LANGUAGE: - { - const SfxPoolItem* pItem; - if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( GetPool().GetWhich(nSlot), sal_True, &pItem ) ) - { - ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); - ScDocument* pDoc = pDocSh ? pDocSh->GetDocument() : NULL; - if ( pDoc ) - { - LanguageType eNewLang = ((SvxLanguageItem*)pItem)->GetLanguage(); - LanguageType eLatin, eCjk, eCtl; - pDoc->GetLanguage( eLatin, eCjk, eCtl ); - LanguageType eOld = ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE ) ? eCjk : - ( ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE ) ? eCtl : eLatin ); - if ( eNewLang != eOld ) - { - if ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE ) - eCjk = eNewLang; - else if ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE ) - eCtl = eNewLang; - else - eLatin = eNewLang; - - pDoc->SetLanguage( eLatin, eCjk, eCtl ); - - ScInputHandler* pInputHandler = GetInputHdl(); - if ( pInputHandler ) - pInputHandler->UpdateSpellSettings(); // EditEngine-Flags - ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current()); - if ( pViewSh ) - pViewSh->UpdateDrawTextOutliner(); // EditEngine-Flags - - pDocSh->SetDocumentModified(); - } - } - } - } - break; - - case FID_FOCUS_POSWND: - { - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - { - ScInputWindow* pWin = pHdl->GetInputWindow(); - if (pWin) - pWin->PosGrabFocus(); - } - rReq.Done(); - } - break; - - case SID_OPEN_XML_FILTERSETTINGS: - { - try - { - com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.ui.XSLTFilterDialog"))), com::sun::star::uno::UNO_QUERY); - if( xDialog.is() ) - { - xDialog->execute(); - } - } - catch( ::com::sun::star::uno::RuntimeException& ) - { - } - } - break; - - default: - OSL_FAIL( "ScApplication: Unknown Message." ); - break; - } -} - -void ScModule::GetState( SfxItemSet& rSet ) -{ - SfxWhichIter aIter(rSet); - sal_uInt16 nWhich = aIter.FirstWhich(); - while ( nWhich ) - { - switch ( nWhich ) - { - case FID_AUTOCOMPLETE: - rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetAutoComplete() ) ); - break; - case SID_DETECTIVE_AUTO: - rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetDetectiveAuto() ) ); - break; - case SID_PSZ_FUNCTION: - rSet.Put( SfxUInt16Item( nWhich, GetAppOptions().GetStatusFunc() ) ); - break; - case SID_ATTR_METRIC: - rSet.Put( SfxUInt16Item( nWhich, sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) ); - break; - case SID_AUTOSPELL_CHECK: - { - sal_Bool bAuto; - ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); - if ( pDocSh ) - bAuto = pDocSh->GetDocument()->GetDocOptions().IsAutoSpell(); - else - { - sal_uInt16 nDummyLang, nDummyCjk, nDummyCtl; - GetSpellSettings( nDummyLang, nDummyCjk, nDummyCtl, bAuto ); - } - rSet.Put( SfxBoolItem( nWhich, bAuto ) ); - } - break; - case SID_ATTR_LANGUAGE: - case ATTR_CJK_FONT_LANGUAGE: // WID for SID_ATTR_CHAR_CJK_LANGUAGE - case ATTR_CTL_FONT_LANGUAGE: // WID for SID_ATTR_CHAR_CTL_LANGUAGE - { - ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); - ScDocument* pDoc = pDocSh ? pDocSh->GetDocument() : NULL; - if ( pDoc ) - { - LanguageType eLatin, eCjk, eCtl; - pDoc->GetLanguage( eLatin, eCjk, eCtl ); - LanguageType eLang = ( nWhich == ATTR_CJK_FONT_LANGUAGE ) ? eCjk : - ( ( nWhich == ATTR_CTL_FONT_LANGUAGE ) ? eCtl : eLatin ); - rSet.Put( SvxLanguageItem( eLang, nWhich ) ); - } - } - break; - - } - nWhich = aIter.NextWhich(); - } -} - - -void ScModule::HideDisabledSlots( SfxItemSet& rSet ) -{ - if( SfxViewFrame* pViewFrm = SfxViewFrame::Current() ) - { - SfxBindings& rBindings = pViewFrm->GetBindings(); - SfxWhichIter aIter( rSet ); - for( sal_uInt16 nWhich = aIter.FirstWhich(); nWhich != 0; nWhich = aIter.NextWhich() ) - { - ScViewUtil::HideDisabledSlot( rSet, rBindings, nWhich ); - // always disable the slots - rSet.DisableItem( nWhich ); - } - } -} - - -//------------------------------------------------------------------ - -void ScModule::ResetDragObject() -{ - aDragData.pCellTransfer = NULL; - aDragData.pDrawTransfer = NULL; - - aDragData.aLinkDoc.Erase(); - aDragData.aLinkTable.Erase(); - aDragData.aLinkArea.Erase(); - aDragData.pJumpLocalDoc = NULL; - aDragData.aJumpTarget.Erase(); - aDragData.aJumpText.Erase(); -} - -void ScModule::SetDragObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj ) -{ - ResetDragObject(); - aDragData.pCellTransfer = pCellObj; - aDragData.pDrawTransfer = pDrawObj; -} - -void ScModule::SetDragLink( const String& rDoc, const String& rTab, const String& rArea ) -{ - ResetDragObject(); - - aDragData.aLinkDoc = rDoc; - aDragData.aLinkTable = rTab; - aDragData.aLinkArea = rArea; -} - -void ScModule::SetDragJump( ScDocument* pLocalDoc, const String& rTarget, const String& rText ) -{ - ResetDragObject(); - - aDragData.pJumpLocalDoc = pLocalDoc; - aDragData.aJumpTarget = rTarget; - aDragData.aJumpText = rText; -} - -//------------------------------------------------------------------ - -void ScModule::SetClipObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj ) -{ - OSL_ENSURE( !pCellObj || !pDrawObj, "SetClipObject: not allowed to set both objects" ); - - aClipData.pCellClipboard = pCellObj; - aClipData.pDrawClipboard = pDrawObj; -} - -ScDocument* ScModule::GetClipDoc() -{ - // called from document - - ScTransferObj* pObj = ScTransferObj::GetOwnClipboard( NULL ); - if (pObj) - return pObj->GetDocument(); - - return NULL; -} - -//------------------------------------------------------------------ - -void ScModule::SetSelectionTransfer( ScSelectionTransferObj* pNew ) -{ - pSelTransfer = pNew; -} - -//------------------------------------------------------------------ - -void ScModule::InitFormEditData() -{ - pFormEditData = new ScFormEditData; -} - -void ScModule::ClearFormEditData() -{ - DELETEZ( pFormEditData ); -} - -//------------------------------------------------------------------ - -void ScModule::SetViewOptions( const ScViewOptions& rOpt ) -{ - if ( !pViewCfg ) - pViewCfg = new ScViewCfg; - - pViewCfg->SetOptions( rOpt ); -} - -const ScViewOptions& ScModule::GetViewOptions() -{ - if ( !pViewCfg ) - pViewCfg = new ScViewCfg; - - return *pViewCfg; -} - -void ScModule::SetDocOptions( const ScDocOptions& rOpt ) -{ - if ( !pDocCfg ) - pDocCfg = new ScDocCfg; - - pDocCfg->SetOptions( rOpt ); -} - -const ScDocOptions& ScModule::GetDocOptions() -{ - if ( !pDocCfg ) - pDocCfg = new ScDocCfg; - - return *pDocCfg; -} - -#ifndef LRU_MAX -#define LRU_MAX 10 -#endif - -void ScModule::InsertEntryToLRUList(sal_uInt16 nFIndex) -{ - if(nFIndex != 0) - { - const ScAppOptions& rAppOpt = GetAppOptions(); - sal_uInt16 nLRUFuncCount = Min( rAppOpt.GetLRUFuncListCount(), (sal_uInt16)LRU_MAX ); - sal_uInt16* pLRUListIds = rAppOpt.GetLRUFuncList(); - - sal_uInt16 aIdxList[LRU_MAX]; - sal_uInt16 n = 0; - sal_Bool bFound = false; - - while ((n < LRU_MAX) && n<nLRUFuncCount) // alte Liste abklappern - { - if (!bFound && (pLRUListIds[n]== nFIndex)) - bFound = sal_True; // erster! Treffer - else if (bFound) - aIdxList[n ] = pLRUListIds[n]; // hinter Treffer kopieren - else if ((n+1) < LRU_MAX) - aIdxList[n+1] = pLRUListIds[n]; // vor Treffer verschieben - n++; - } - if (!bFound && (n < LRU_MAX)) // Eintrag nicht gefunden? - n++; // einen mehr - aIdxList[0] = nFIndex; // Current on Top - - ScAppOptions aNewOpts(rAppOpt); // an App melden - aNewOpts.SetLRUFuncList(aIdxList, n); - SetAppOptions(aNewOpts); - - RecentFunctionsChanged(); - } -} - -void ScModule::RecentFunctionsChanged() -{ - // update function list window - sal_uInt16 nFuncListID = ScFunctionChildWindow::GetChildWindowId(); - - //! notify all views - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - if ( pViewFrm && pViewFrm->HasChildWindow(nFuncListID) ) - { - ScFunctionChildWindow* pWnd =(ScFunctionChildWindow*)pViewFrm->GetChildWindow( nFuncListID ); - - ScFunctionDockWin* pFuncList=(ScFunctionDockWin*)pWnd->GetWindow(); - - pFuncList->InitLRUList(); - } -} - -void ScModule::SetAppOptions( const ScAppOptions& rOpt ) -{ - if ( !pAppCfg ) - pAppCfg = new ScAppCfg; - - pAppCfg->SetOptions( rOpt ); -} - -void global_InitAppOptions() -{ - SC_MOD()->GetAppOptions(); -} - -const ScAppOptions& ScModule::GetAppOptions() -{ - if ( !pAppCfg ) - pAppCfg = new ScAppCfg; - - return *pAppCfg; -} - -void ScModule::SetInputOptions( const ScInputOptions& rOpt ) -{ - if ( !pInputCfg ) - pInputCfg = new ScInputCfg; - - pInputCfg->SetOptions( rOpt ); -} - -const ScInputOptions& ScModule::GetInputOptions() -{ - if ( !pInputCfg ) - pInputCfg = new ScInputCfg; - - return *pInputCfg; -} - -void ScModule::SetPrintOptions( const ScPrintOptions& rOpt ) -{ - if ( !pPrintCfg ) - pPrintCfg = new ScPrintCfg; - - pPrintCfg->SetOptions( rOpt ); -} - -const ScPrintOptions& ScModule::GetPrintOptions() -{ - if ( !pPrintCfg ) - pPrintCfg = new ScPrintCfg; - - return *pPrintCfg; -} - -ScNavipiCfg& ScModule::GetNavipiCfg() -{ - if ( !pNavipiCfg ) - pNavipiCfg = new ScNavipiCfg; - - return *pNavipiCfg; -} - -ScAddInCfg& ScModule::GetAddInCfg() -{ - if ( !pAddInCfg ) - pAddInCfg = new ScAddInCfg; - - return *pAddInCfg; -} - -svtools::ColorConfig& ScModule::GetColorConfig() -{ - if ( !pColorConfig ) - { - pColorConfig = new svtools::ColorConfig; - pColorConfig->AddListener(this); - } - - return *pColorConfig; -} - -SvtAccessibilityOptions& ScModule::GetAccessOptions() -{ - if ( !pAccessOptions ) - { - pAccessOptions = new SvtAccessibilityOptions; - pAccessOptions->AddListener(this); - } - - return *pAccessOptions; -} - -SvtCTLOptions& ScModule::GetCTLOptions() -{ - if ( !pCTLOptions ) - { - pCTLOptions = new SvtCTLOptions; - pCTLOptions->AddListener(this); - } - - return *pCTLOptions; -} - -SvtUserOptions& ScModule::GetUserOptions() -{ - if( !pUserOptions ) - { - pUserOptions = new SvtUserOptions; - } - return *pUserOptions; -} - -sal_uInt16 ScModule::GetOptDigitLanguage() -{ - SvtCTLOptions::TextNumerals eNumerals = GetCTLOptions().GetCTLTextNumerals(); - return ( eNumerals == SvtCTLOptions::NUMERALS_ARABIC ) ? LANGUAGE_ENGLISH_US : - ( eNumerals == SvtCTLOptions::NUMERALS_HINDI) ? LANGUAGE_ARABIC_SAUDI_ARABIA : - LANGUAGE_SYSTEM; -} - -//------------------------------------------------------------------ -// -// Optionen -// -//------------------------------------------------------------------ - -// -// ModifyOptions - Items aus Calc-Options-Dialog -// und SID_AUTOSPELL_CHECK -// - -#define IS_AVAILABLE(w,item) (SFX_ITEM_SET==rOptSet.GetItemState((w),sal_True,&item)) - -void ScModule::ModifyOptions( const SfxItemSet& rOptSet ) -{ - sal_uInt16 nOldSpellLang, nOldCjkLang, nOldCtlLang; - sal_Bool bOldAutoSpell; - GetSpellSettings( nOldSpellLang, nOldCjkLang, nOldCtlLang, bOldAutoSpell ); - - if (!pAppCfg) - GetAppOptions(); - OSL_ENSURE( pAppCfg, "AppOptions not initialised :-(" ); - - if (!pInputCfg) - GetInputOptions(); - OSL_ENSURE( pInputCfg, "InputOptions not initialised :-(" ); - - //-------------------------------------------------------------- - - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL; - - ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current()); - ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current()); - ScDocument* pDoc = pDocSh ? pDocSh->GetDocument() : NULL; - const SfxPoolItem* pItem = NULL; - sal_Bool bRepaint = false; - sal_Bool bUpdateMarks = false; - sal_Bool bUpdateRefDev = false; - sal_Bool bCalcAll = false; - sal_Bool bSaveAppOptions = false; - sal_Bool bSaveInputOptions = false; - - //-------------------------------------------------------------------------- - - // SFX_APP()->SetOptions( rOptSet ); - - // Linguistik nicht mehr - - if ( IS_AVAILABLE(SID_ATTR_METRIC,pItem) ) - { - PutItem( *pItem ); - pAppCfg->SetAppMetric( (FieldUnit)((const SfxUInt16Item*)pItem)->GetValue() ); - bSaveAppOptions = sal_True; - } - - if ( IS_AVAILABLE(SCITEM_USERLIST,pItem) ) - { - ScGlobal::SetUserList( ((const ScUserListItem*)pItem)->GetUserList() ); - bSaveAppOptions = sal_True; - } - - if ( IS_AVAILABLE(SID_SC_OPT_SYNCZOOM,pItem) ) - { - pAppCfg->SetSynchronizeZoom( static_cast<const SfxBoolItem*>(pItem)->GetValue() ); - bSaveAppOptions = sal_True; - } - - //============================================ - // ViewOptions - //============================================ - - if ( IS_AVAILABLE(SID_SCVIEWOPTIONS,pItem) ) - { - const ScViewOptions& rNewOpt = ((const ScTpViewItem*)pItem)->GetViewOptions(); - - if ( pViewSh ) - { - ScViewData* pViewData = pViewSh->GetViewData(); - const ScViewOptions& rOldOpt = pViewData->GetOptions(); - - sal_Bool bAnchorList = ( rOldOpt.GetOption( VOPT_ANCHOR ) != - rNewOpt.GetOption( VOPT_ANCHOR ) ); - - if ( rOldOpt != rNewOpt ) - { - pViewData->SetOptions( rNewOpt ); // veraendert rOldOpt - pViewData->GetDocument()->SetViewOptions( rNewOpt ); - pDocSh->SetDocumentModified(); - bRepaint = sal_True; - } - if ( bAnchorList ) - pViewSh->UpdateAnchorHandles(); - } - SetViewOptions( rNewOpt ); - if (pBindings) - pBindings->Invalidate(SID_HELPLINES_MOVE); - } - - //============================================ - // GridOptions, Auswertung nach ViewOptions, - // da GridOptions Member der ViewOptions ist! - //============================================ - - if ( IS_AVAILABLE(SID_ATTR_GRID_OPTIONS,pItem) ) - { - ScGridOptions aNewGridOpt( (const SvxOptionsGrid&)((const SvxGridItem&)*pItem) ); - - if ( pViewSh ) - { - ScViewData* pViewData = pViewSh->GetViewData(); - ScViewOptions aNewViewOpt( pViewData->GetOptions() ); - const ScGridOptions& rOldGridOpt = aNewViewOpt.GetGridOptions(); - - if ( rOldGridOpt != aNewGridOpt ) - { - aNewViewOpt.SetGridOptions( aNewGridOpt ); - pViewData->SetOptions( aNewViewOpt ); - pViewData->GetDocument()->SetViewOptions( aNewViewOpt ); - pDocSh->SetDocumentModified(); - bRepaint = sal_True; - } - } - ScViewOptions aNewViewOpt ( GetViewOptions() ); - aNewViewOpt.SetGridOptions( aNewGridOpt ); - SetViewOptions( aNewViewOpt ); - if (pBindings) - { - pBindings->Invalidate(SID_GRID_VISIBLE); - pBindings->Invalidate(SID_GRID_USE); - } - } - - - //============================================ - // DocOptions - //============================================ - - if ( IS_AVAILABLE(SID_SCDOCOPTIONS,pItem) ) - { - const ScDocOptions& rNewOpt = ((const ScTpCalcItem*)pItem)->GetDocOptions(); - - if ( pDoc ) - { - const ScDocOptions& rOldOpt = pDoc->GetDocOptions(); - ScOptionsUtil::KeyBindingType eKeyOld = rOldOpt.GetKeyBindingType(); - ScOptionsUtil::KeyBindingType eKeyNew = rNewOpt.GetKeyBindingType(); - if (eKeyOld != eKeyNew) - pDocSh->ResetKeyBindings(eKeyNew); - - bRepaint = ( bRepaint || ( rOldOpt != rNewOpt ) ); - bCalcAll = bRepaint && - ( rOldOpt.IsIter() != rNewOpt.IsIter() - || rOldOpt.GetIterCount() != rNewOpt.GetIterCount() - || rOldOpt.GetIterEps() != rNewOpt.GetIterEps() - || rOldOpt.IsIgnoreCase() != rNewOpt.IsIgnoreCase() - || rOldOpt.IsCalcAsShown() != rNewOpt.IsCalcAsShown() - || (rNewOpt.IsCalcAsShown() && - rOldOpt.GetStdPrecision() != rNewOpt.GetStdPrecision()) - || rOldOpt.IsMatchWholeCell() != rNewOpt.IsMatchWholeCell() - || rOldOpt.GetYear2000() != rNewOpt.GetYear2000() - || rOldOpt.IsFormulaRegexEnabled() != rNewOpt.IsFormulaRegexEnabled() - ); - pDoc->SetDocOptions( rNewOpt ); - pDocSh->SetDocumentModified(); - } - SetDocOptions( rNewOpt ); - } - - // nach den eigentlichen DocOptions auch noch die TabDistance setzen - if ( IS_AVAILABLE(SID_ATTR_DEFTABSTOP,pItem) ) - { - sal_uInt16 nTabDist = ((SfxUInt16Item*)pItem)->GetValue(); - ScDocOptions aOpt(GetDocOptions()); - aOpt.SetTabDistance(nTabDist); - SetDocOptions( aOpt ); - - if ( pDoc ) - { - ScDocOptions aDocOpt(pDoc->GetDocOptions()); - aDocOpt.SetTabDistance(nTabDist); - pDoc->SetDocOptions( aDocOpt ); - pDocSh->SetDocumentModified(); - if(pDoc->GetDrawLayer()) - pDoc->GetDrawLayer()->SetDefaultTabulator(nTabDist); - } - } - - // AutoSpell nach den Doc-Options (weil Member) - - if ( IS_AVAILABLE(SID_AUTOSPELL_CHECK,pItem) ) // an Doc-Options - { - sal_Bool bDoAutoSpell = ((const SfxBoolItem*)pItem)->GetValue(); - - if (pDoc) - { - ScDocOptions aNewOpt = pDoc->GetDocOptions(); - if ( aNewOpt.IsAutoSpell() != bDoAutoSpell ) - { - aNewOpt.SetAutoSpell( bDoAutoSpell ); - pDoc->SetDocOptions( aNewOpt ); - - if (bDoAutoSpell) - pDoc->SetOnlineSpellPos( ScAddress(0,0,0) ); // vorne anfangen - else - { - WaitObject aWait( pDocSh->GetActiveDialogParent() ); - pDoc->RemoveAutoSpellObj(); // Edit-Text-Objekte wieder zurueckwandeln - } - - //#92038#; don't set document modified, because this flag is no longer saved -// pDocSh->SetDocumentModified(); - - bRepaint = sal_True; // weil HideAutoSpell evtl. ungueltig - //! alle Views painten ??? - } - } - - if ( bOldAutoSpell != bDoAutoSpell ) - SetAutoSpellProperty( bDoAutoSpell ); - if ( pDocSh ) - pDocSh->PostPaintGridAll(); // wegen Markierungen - ScInputHandler* pInputHandler = GetInputHdl(); - if ( pInputHandler ) - pInputHandler->UpdateSpellSettings(); // EditEngine-Flags - if ( pViewSh ) - pViewSh->UpdateDrawTextOutliner(); // EditEngine-Flags - - if (pBindings) - pBindings->Invalidate( SID_AUTOSPELL_CHECK ); - } - - //============================================ - // InputOptions - //============================================ - - if ( IS_AVAILABLE(SID_SC_INPUT_SELECTIONPOS,pItem) ) - { - pInputCfg->SetMoveDir( ((const SfxUInt16Item*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_SELECTION,pItem) ) - { - pInputCfg->SetMoveSelection( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_EDITMODE,pItem) ) - { - pInputCfg->SetEnterEdit( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_FMT_EXPAND,pItem) ) - { - pInputCfg->SetExtendFormat( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_RANGEFINDER,pItem) ) - { - pInputCfg->SetRangeFinder( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_REF_EXPAND,pItem) ) - { - pInputCfg->SetExpandRefs( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_MARK_HEADER,pItem) ) - { - pInputCfg->SetMarkHeader( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - bUpdateMarks = sal_True; - } - if ( IS_AVAILABLE(SID_SC_INPUT_TEXTWYSIWYG,pItem) ) - { - sal_Bool bNew = ((const SfxBoolItem*)pItem)->GetValue(); - if ( bNew != pInputCfg->GetTextWysiwyg() ) - { - pInputCfg->SetTextWysiwyg( bNew ); - bSaveInputOptions = sal_True; - bUpdateRefDev = sal_True; - } - } - if( IS_AVAILABLE( SID_SC_INPUT_REPLCELLSWARN, pItem ) ) - { - pInputCfg->SetReplaceCellsWarn( ((const SfxBoolItem*)pItem)->GetValue() ); - bSaveInputOptions = sal_True; - } - - //============================================ - // PrintOptions - //============================================ - - if ( IS_AVAILABLE(SID_SCPRINTOPTIONS,pItem) ) - { - const ScPrintOptions& rNewOpt = ((const ScTpPrintItem*)pItem)->GetPrintOptions(); - SetPrintOptions( rNewOpt ); - - // broadcast causes all previews to recalc page numbers - SFX_APP()->Broadcast( SfxSimpleHint( SID_SCPRINTOPTIONS ) ); - } - - //---------------------------------------------------------- - - if ( bSaveAppOptions ) - pAppCfg->OptionsChanged(); - - if ( bSaveInputOptions ) - pInputCfg->OptionsChanged(); - - // Neuberechnung anstossen? - - if ( pDoc && bCalcAll ) - { - WaitObject aWait( pDocSh->GetActiveDialogParent() ); - pDoc->CalcAll(); - if ( pViewSh ) - pViewSh->UpdateCharts( sal_True ); - else - ScDBFunc::DoUpdateCharts( ScAddress(), pDoc, sal_True ); - if (pBindings) - pBindings->Invalidate( SID_ATTR_SIZE ); //SvxPosSize-StatusControl-Update - } - - if ( pViewSh && bUpdateMarks ) - pViewSh->UpdateAutoFillMark(); - - // View neuzeichnen? - - if ( pViewSh && bRepaint ) - { - pViewSh->UpdateFixPos(); - pViewSh->PaintGrid(); - pViewSh->PaintTop(); - pViewSh->PaintLeft(); - pViewSh->PaintExtras(); - pViewSh->InvalidateBorder(); - if (pBindings) - { - pBindings->Invalidate( FID_TOGGLEHEADERS ); // -> Checks im Menue - pBindings->Invalidate( FID_TOGGLESYNTAX ); - } - } - - // update ref device (for all documents) - - if ( bUpdateRefDev ) - { - // for all documents: recalc output factor, update row heights - SfxObjectShell* pObjSh = SfxObjectShell::GetFirst(); - while ( pObjSh ) - { - if ( pObjSh->Type() == TYPE(ScDocShell) ) - { - ScDocShell* pOneDocSh = ((ScDocShell*)pObjSh); - pOneDocSh->CalcOutputFactor(); - SCTAB nTabCount = pOneDocSh->GetDocument()->GetTableCount(); - for (SCTAB nTab=0; nTab<nTabCount; nTab++) - pOneDocSh->AdjustRowHeight( 0, MAXROW, nTab ); - } - pObjSh = SfxObjectShell::GetNext( *pObjSh ); - } - - // for all (tab-) views: - TypeId aScType = TYPE(ScTabViewShell); - SfxViewShell* pSh = SfxViewShell::GetFirst( &aScType ); - while ( pSh ) - { - ScTabViewShell* pOneViewSh = (ScTabViewShell*)pSh; - - // set ref-device for EditEngine - ScInputHandler* pHdl = GetInputHdl(pOneViewSh); - if (pHdl) - pHdl->UpdateRefDevice(); - - // update view scale - ScViewData* pViewData = pOneViewSh->GetViewData(); - pOneViewSh->SetZoom( pViewData->GetZoomX(), pViewData->GetZoomY(), false ); - - // repaint - pOneViewSh->PaintGrid(); - pOneViewSh->PaintTop(); - pOneViewSh->PaintLeft(); - - pSh = SfxViewShell::GetNext( *pSh, &aScType ); - } - } -} - -#undef IS_AVAILABLE - -//------------------------------------------------------------------ -// -// Input-Handler -// -//------------------------------------------------------------------ - -ScInputHandler* ScModule::GetInputHdl( ScTabViewShell* pViewSh, sal_Bool bUseRef ) -{ - if ( pRefInputHandler && bUseRef ) - return pRefInputHandler; - - ScInputHandler* pHdl = NULL; - if ( !pViewSh ) - { - // in case a UIActive embedded object has no ViewShell ( UNO component ) - // the own calc view shell will be set as current, but no handling should happen - - ScTabViewShell* pCurViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() ); - if ( pCurViewSh && !pCurViewSh->GetUIActiveClient() ) - pViewSh = pCurViewSh; - } - - if ( pViewSh ) - pHdl = pViewSh->GetInputHandler(); // Viewshell hat jetzt immer einen - - // wenn keine ViewShell uebergeben oder aktiv, kann NULL herauskommen - OSL_ENSURE( pHdl || !pViewSh, "GetInputHdl: kein InputHandler gefunden" ); - return pHdl; -} - -void ScModule::ViewShellChanged() -{ - ScInputHandler* pHdl = GetInputHdl(); - ScTabViewShell* pShell = ScTabViewShell::GetActiveViewShell(); - if ( pShell && pHdl ) - pShell->UpdateInputHandler(); -} - -void ScModule::SetInputMode( ScInputMode eMode ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->SetMode( eMode ); -} - -sal_Bool ScModule::IsEditMode() -{ - ScInputHandler* pHdl = GetInputHdl(); - return pHdl && pHdl->IsEditMode(); -} - -sal_Bool ScModule::IsInputMode() -{ - ScInputHandler* pHdl = GetInputHdl(); - return pHdl && pHdl->IsInputMode(); -} - -sal_Bool ScModule::InputKeyEvent( const KeyEvent& rKEvt, sal_Bool bStartEdit ) -{ - ScInputHandler* pHdl = GetInputHdl(); - return ( pHdl ? pHdl->KeyInput( rKEvt, bStartEdit ) : false ); -} - -void ScModule::InputEnterHandler( sal_uInt8 nBlockMode ) -{ - if ( !SFX_APP()->IsDowning() ) // nicht beim Programmende - { - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->EnterHandler( nBlockMode ); - } -} - -void ScModule::InputCancelHandler() -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->CancelHandler(); -} - -void ScModule::InputSelection( EditView* pView ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->InputSelection( pView ); -} - -void ScModule::InputChanged( EditView* pView ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->InputChanged( pView ); -} - -void ScModule::ViewShellGone( ScTabViewShell* pViewSh ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->ViewShellGone( pViewSh ); -} - -void ScModule::SetRefInputHdl( ScInputHandler* pNew ) -{ - pRefInputHandler = pNew; -} - -ScInputHandler* ScModule::GetRefInputHdl() -{ - return pRefInputHandler; -} - -//------------------------------------------------------------------------ -// Olk's Krempel: - -void ScModule::InputGetSelection( xub_StrLen& rStart, xub_StrLen& rEnd ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->InputGetSelection( rStart, rEnd ); -} - -void ScModule::InputSetSelection( xub_StrLen nStart, xub_StrLen nEnd ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->InputSetSelection( nStart, nEnd ); -} - -void ScModule::InputReplaceSelection( const String& rStr ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->InputReplaceSelection( rStr ); -} - -String ScModule::InputGetFormulaStr() -{ - ScInputHandler* pHdl = GetInputHdl(); - String aStr; - if ( pHdl ) - aStr = pHdl->InputGetFormulaStr(); - return aStr; -} - -void ScModule::ActivateInputWindow( const String* pStrFormula, sal_Bool bMatrix ) -{ - ScInputHandler* pHdl = GetInputHdl(); - if ( pHdl ) - { - ScInputWindow* pWin = pHdl->GetInputWindow(); - if ( pStrFormula ) - { - // Formel uebernehmen - if ( pWin ) - { - pWin->SetFuncString( *pStrFormula, false ); - // SetSumAssignMode wegen sal_False nicht noetig - } - sal_uInt8 nMode = bMatrix ? SC_ENTER_MATRIX : SC_ENTER_NORMAL; - pHdl->EnterHandler( nMode ); - - // ohne Invalidate bleibt die Selektion stehen, wenn die Formel unveraendert ist - if (pWin) - pWin->TextInvalidate(); - } - else - { - // Abbrechen - if ( pWin ) - { - pWin->SetFuncString( EMPTY_STRING, false ); - // SetSumAssignMode wegen sal_False nicht noetig - } - pHdl->CancelHandler(); - } - } -} - -//------------------------------------------------------------------ -// -// Referenz - Dialoge -// -//------------------------------------------------------------------ - -void ScModule::SetRefDialog( sal_uInt16 nId, sal_Bool bVis, SfxViewFrame* pViewFrm ) -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - if(nCurRefDlgId==0 || (nId==nCurRefDlgId && !bVis)) - { - if ( !pViewFrm ) - pViewFrm = SfxViewFrame::Current(); - - // bindings update causes problems with update of stylist if - // current style family has changed - //if ( pViewFrm ) - // pViewFrm->GetBindings().Update(); // to avoid trouble in LockDispatcher - - nCurRefDlgId = bVis ? nId : 0 ; // before SetChildWindow - - if ( pViewFrm ) - { - // store the dialog id also in the view shell - SfxViewShell* pViewSh = pViewFrm->GetViewShell(); - if ( pViewSh && pViewSh->ISA( ScTabViewShell ) ) - ((ScTabViewShell*)pViewSh)->SetCurRefDlgId( nCurRefDlgId ); - else - { - // no ScTabViewShell - possible for example from a Basic macro - bVis = false; - nCurRefDlgId = 0; // don't set nCurRefDlgId if no dialog is created - } - - pViewFrm->SetChildWindow( nId, bVis ); - } - - SfxApplication* pSfxApp = SFX_APP(); - pSfxApp->Broadcast( SfxSimpleHint( FID_REFMODECHANGED ) ); - } -} - -SfxChildWindow* lcl_GetChildWinFromAnyView( sal_uInt16 nId ) -{ - // first try the current view - - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - // #i46999# current view frame can be null (for example, when closing help) - SfxChildWindow* pChildWnd = pViewFrm ? pViewFrm->GetChildWindow( nId ) : NULL; - if ( pChildWnd ) - return pChildWnd; // found in the current view - - // if not found there, get the child window from any open view - // it can be open only in one view because nCurRefDlgId is global - - pViewFrm = SfxViewFrame::GetFirst(); - while ( pViewFrm ) - { - pChildWnd = pViewFrm->GetChildWindow( nId ); - if ( pChildWnd ) - return pChildWnd; // found in any view - - pViewFrm = SfxViewFrame::GetNext( *pViewFrm ); - } - - return NULL; // none found -} - -sal_Bool ScModule::IsModalMode(SfxObjectShell* pDocSh) -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - sal_Bool bIsModal = false; - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - if ( pChildWnd ) - { - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()); - bIsModal = pChildWnd->IsVisible() && - !( pRefDlg->IsRefInputMode() && pRefDlg->IsDocAllowed(pDocSh) ); - } - else - { - // in 592 and above, the dialog isn't visible in other views - // if the dialog is open but can't be accessed, disable input - - bIsModal = sal_True; - } - - // pChildWnd kann 0 sein, wenn der Dialog nach dem Umschalten - // von einer anderen Shell noch nicht erzeugt wurde (z.B. in GetFocus) - } - else if (pDocSh) - { - ScInputHandler* pHdl = GetInputHdl(); - if ( pHdl ) - bIsModal = pHdl->IsModalMode(pDocSh); - } - - return bIsModal; -} - -sal_Bool ScModule::IsTableLocked() -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - sal_Bool bLocked = false; - - // bisher nur bei ScAnyRefDlg - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - if ( pChildWnd ) - bLocked = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow())->IsTableLocked(); - else - bLocked = sal_True; // for other views, see IsModalMode - } - - return bLocked; -} - -sal_Bool ScModule::IsRefDialogOpen() -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - sal_Bool bIsOpen = false; - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - if ( pChildWnd ) - bIsOpen = pChildWnd->IsVisible(); - else - bIsOpen = sal_True; // for other views, see IsModalMode - } - - return bIsOpen; -} - -sal_Bool ScModule::IsFormulaMode() -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - sal_Bool bIsFormula = false; - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - if ( pChildWnd ) - { - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()); - bIsFormula = pChildWnd->IsVisible() && pRefDlg->IsRefInputMode(); - } - } - else - { - ScInputHandler* pHdl = GetInputHdl(); - if ( pHdl ) - bIsFormula = pHdl->IsFormulaMode(); - } - - if (bIsInEditCommand) - bIsFormula = sal_True; - - return bIsFormula; -} - -void lcl_MarkedTabs( const ScMarkData& rMark, SCTAB& rStartTab, SCTAB& rEndTab ) -{ - if (rMark.GetSelectCount() > 1) - { - rEndTab = rMark.GetLastSelected(); - rStartTab = rMark.GetFirstSelected(); - } -} - -void ScModule::SetReference( const ScRange& rRef, ScDocument* pDoc, - const ScMarkData* pMarkData ) -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - // in Ref-Dialogen wird hiermit auch das Zoom-In ausgeloest, - // wenn Start und Ende der Ref unterschiedlich sind - - ScRange aNew = rRef; - aNew.Justify(); // immer "richtig herum" - - if( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - OSL_ENSURE( pChildWnd, "NoChildWin" ); - if ( pChildWnd ) - { - if ( nCurRefDlgId == SID_OPENDLG_CONSOLIDATE && pMarkData ) - { - SCTAB nStartTab = aNew.aStart.Tab(); - SCTAB nEndTab = aNew.aEnd.Tab(); - lcl_MarkedTabs( *pMarkData, nStartTab, nEndTab ); - aNew.aStart.SetTab(nStartTab); - aNew.aEnd.SetTab(nEndTab); - } - - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()); - - // hide the (color) selection now instead of later from LoseFocus, - // don't abort the ref input that causes this call (bDoneRefMode = sal_False) - pRefDlg->HideReference( false ); - pRefDlg->SetReference( aNew, pDoc ); - } - } - else - { - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->SetReference( aNew, pDoc ); - else - { - OSL_FAIL("SetReference ohne Empfaenger"); - } - } -} - -void ScModule::AddRefEntry() // "Mehrfachselektion" -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - OSL_ENSURE( pChildWnd, "NoChildWin" ); - if ( pChildWnd ) - { - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()); - pRefDlg->AddRefEntry(); - } - } - else - { - ScInputHandler* pHdl = GetInputHdl(); - if (pHdl) - pHdl->AddRefEntry(); - } -} - -void ScModule::EndReference() -{ - //! move reference dialog handling to view - //! (only keep function autopilot here for references to other documents) - - // in Ref-Dialogen wird hiermit auch das Zoom-In wieder aufgehoben - - //! ShowRefFrame am InputHdl, wenn der Funktions-AP offen ist ??? - - if ( nCurRefDlgId ) - { - SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId ); - OSL_ENSURE( pChildWnd, "NoChildWin" ); - if ( pChildWnd ) - { - IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()); - pRefDlg->SetActive(); - } - } -} - -//------------------------------------------------------------------ -// -// Idle / Online-Spelling -// -//------------------------------------------------------------------ - -void ScModule::AnythingChanged() -{ - sal_uLong nOldTime = aIdleTimer.GetTimeout(); - if ( nOldTime != SC_IDLE_MIN ) - aIdleTimer.SetTimeout( SC_IDLE_MIN ); - - nIdleCount = 0; -} - -void lcl_CheckNeedsRepaint( ScDocShell* pDocShell ) -{ - SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocShell ); - while ( pFrame ) - { - SfxViewShell* p = pFrame->GetViewShell(); - ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,p); - if ( pViewSh ) - pViewSh->CheckNeedsRepaint(); - pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell ); - } -} - -IMPL_LINK( ScModule, IdleHandler, Timer*, EMPTYARG ) -{ - if ( Application::AnyInput( INPUT_MOUSEANDKEYBOARD ) ) - { - aIdleTimer.Start(); // Timeout unveraendert - return 0; - } - - sal_Bool bMore = false; - ScDocShell* pDocSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() ); - if ( pDocSh ) - { - ScDocument* pDoc = pDocSh->GetDocument(); - - sal_Bool bLinks = pDoc->IdleCheckLinks(); - sal_Bool bWidth = pDoc->IdleCalcTextWidth(); - sal_Bool bSpell = pDoc->ContinueOnlineSpelling(); - if ( bSpell ) - aSpellTimer.Start(); // da ist noch was - - bMore = bLinks || bWidth || bSpell; // ueberhaupt noch was? - - // While calculating a Basic formula, a paint event may have occurred, - // so check the bNeedsRepaint flags for this document's views - if (bWidth) - lcl_CheckNeedsRepaint( pDocSh ); - } - - sal_uLong nOldTime = aIdleTimer.GetTimeout(); - sal_uLong nNewTime = nOldTime; - if ( bMore ) - { - nNewTime = SC_IDLE_MIN; - nIdleCount = 0; - } - else - { - // SC_IDLE_COUNT mal mit initialem Timeout, dann hochzaehlen - - if ( nIdleCount < SC_IDLE_COUNT ) - ++nIdleCount; - else - { - nNewTime += SC_IDLE_STEP; - if ( nNewTime > SC_IDLE_MAX ) - nNewTime = SC_IDLE_MAX; - } - } - if ( nNewTime != nOldTime ) - aIdleTimer.SetTimeout( nNewTime ); - - aIdleTimer.Start(); - return 0; -} - -IMPL_LINK( ScModule, SpellTimerHdl, Timer*, EMPTYARG ) -{ - if ( Application::AnyInput( INPUT_KEYBOARD ) ) - { - aSpellTimer.Start(); - return 0; // dann spaeter wieder... - } - - ScDocShell* pDocSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() ); - if ( pDocSh ) - { - ScDocument* pDoc = pDocSh->GetDocument(); - if ( pDoc->ContinueOnlineSpelling() ) - aSpellTimer.Start(); - } - return 0; -} - - //virtuelle Methoden fuer den Optionendialog -SfxItemSet* ScModule::CreateItemSet( sal_uInt16 nId ) -{ - SfxItemSet* pRet = 0; - if(SID_SC_EDITOPTIONS == nId) - { - pRet = new SfxItemSet( GetPool(), - // TP_CALC: - SID_SCDOCOPTIONS, SID_SCDOCOPTIONS, - // TP_VIEW: - SID_SCVIEWOPTIONS, SID_SCVIEWOPTIONS, - SID_SC_OPT_SYNCZOOM, SID_SC_OPT_SYNCZOOM, - // TP_INPUT: - SID_SC_INPUT_SELECTION,SID_SC_INPUT_MARK_HEADER, - SID_SC_INPUT_TEXTWYSIWYG,SID_SC_INPUT_TEXTWYSIWYG, - SID_SC_INPUT_REPLCELLSWARN,SID_SC_INPUT_REPLCELLSWARN, - // TP_USERLISTS: - SCITEM_USERLIST, SCITEM_USERLIST, - // TP_PRINT: - SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS, - // TP_GRID: - SID_ATTR_GRID_OPTIONS, SID_ATTR_GRID_OPTIONS, - // - SID_ATTR_METRIC, SID_ATTR_METRIC, - SID_ATTR_DEFTABSTOP, SID_ATTR_DEFTABSTOP, - 0 ); - - ScDocShell* pDocSh = PTR_CAST(ScDocShell, - SfxObjectShell::Current()); - ScDocOptions aCalcOpt = pDocSh - ? pDocSh->GetDocument()->GetDocOptions() - : GetDocOptions(); - - ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, - SfxViewShell::Current()); - ScViewOptions aViewOpt = pViewSh - ? pViewSh->GetViewData()->GetOptions() - : GetViewOptions(); - - ScUserListItem aULItem( SCITEM_USERLIST ); - ScUserList* pUL = ScGlobal::GetUserList(); - - // SFX_APP()->GetOptions( aSet ); - - pRet->Put( SfxUInt16Item( SID_ATTR_METRIC, - sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) ); - - // TP_CALC - pRet->Put( SfxUInt16Item( SID_ATTR_DEFTABSTOP, - aCalcOpt.GetTabDistance())); - pRet->Put( ScTpCalcItem( SID_SCDOCOPTIONS, aCalcOpt ) ); - - // TP_VIEW - pRet->Put( ScTpViewItem( SID_SCVIEWOPTIONS, aViewOpt ) ); - pRet->Put( SfxBoolItem( SID_SC_OPT_SYNCZOOM, GetAppOptions().GetSynchronizeZoom() ) ); - - // TP_INPUT - const ScInputOptions& rInpOpt = GetInputOptions(); - pRet->Put( SfxUInt16Item( SID_SC_INPUT_SELECTIONPOS, - rInpOpt.GetMoveDir() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_SELECTION, - rInpOpt.GetMoveSelection() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_EDITMODE, - rInpOpt.GetEnterEdit() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_FMT_EXPAND, - rInpOpt.GetExtendFormat() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_RANGEFINDER, - rInpOpt.GetRangeFinder() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_REF_EXPAND, - rInpOpt.GetExpandRefs() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_MARK_HEADER, - rInpOpt.GetMarkHeader() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_TEXTWYSIWYG, - rInpOpt.GetTextWysiwyg() ) ); - pRet->Put( SfxBoolItem( SID_SC_INPUT_REPLCELLSWARN, - rInpOpt.GetReplaceCellsWarn() ) ); - - // RID_SC_TP_PRINT - pRet->Put( ScTpPrintItem( SID_SCPRINTOPTIONS, GetPrintOptions() ) ); - - // TP_GRID - SvxGridItem* pSvxGridItem = aViewOpt.CreateGridItem(); - pRet->Put( *pSvxGridItem ); - delete pSvxGridItem; - - // TP_USERLISTS - if ( pUL ) - aULItem.SetUserList( *pUL ); - pRet->Put( aULItem ); - - } - return pRet; -} - -void ScModule::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet ) -{ - if(SID_SC_EDITOPTIONS == nId) - { - ModifyOptions( rSet ); - } -} - -SfxTabPage* ScModule::CreateTabPage( sal_uInt16 nId, Window* pParent, const SfxItemSet& rSet ) -{ - SfxTabPage* pRet = NULL; - ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - OSL_ENSURE(pFact, "ScAbstractFactory create fail!"); - switch(nId) - { - case SID_SC_TP_LAYOUT: - { - ::CreateTabPage ScTpLayoutOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_LAYOUT ); - if ( ScTpLayoutOptionsCreate ) - pRet = (*ScTpLayoutOptionsCreate) (pParent, rSet); - } - break; - case SID_SC_TP_CONTENT: - { - ::CreateTabPage ScTpContentOptionsCreate = pFact->GetTabPageCreatorFunc(RID_SCPAGE_CONTENT); - if ( ScTpContentOptionsCreate ) - pRet = (*ScTpContentOptionsCreate)(pParent, rSet); - } - break; - case SID_SC_TP_GRID: pRet = SvxGridTabPage::Create(pParent, rSet); break; - case SID_SC_TP_USERLISTS: - { - ::CreateTabPage ScTpUserListsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_USERLISTS ); - if ( ScTpUserListsCreate ) - pRet = (*ScTpUserListsCreate)( pParent, rSet); - } - break; - case SID_SC_TP_CALC: - { - ::CreateTabPage ScTpCalcOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_CALC ); - if ( ScTpCalcOptionsCreate ) - pRet = (*ScTpCalcOptionsCreate)(pParent, rSet); - } - break; - case SID_SC_TP_FORMULA: - { - ::CreateTabPage ScTpFormulaOptionsCreate = pFact->GetTabPageCreatorFunc (RID_SCPAGE_FORMULA); - if (ScTpFormulaOptionsCreate) - pRet = (*ScTpFormulaOptionsCreate)(pParent, rSet); - } - break; - case SID_SC_TP_COMPATIBILITY: - { - ::CreateTabPage ScTpCompatOptionsCreate = pFact->GetTabPageCreatorFunc (RID_SCPAGE_COMPATIBILITY); - if (ScTpCompatOptionsCreate) - pRet = (*ScTpCompatOptionsCreate)(pParent, rSet); - } - break; - case SID_SC_TP_CHANGES: - { - ::CreateTabPage ScRedlineOptionsTabPageCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_OPREDLINE ); - if ( ScRedlineOptionsTabPageCreate ) - pRet =(*ScRedlineOptionsTabPageCreate)(pParent, rSet); - } - break; - case RID_SC_TP_PRINT: - { - ::CreateTabPage ScTpPrintOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_PRINT ); - if ( ScTpPrintOptionsCreate ) - pRet = (*ScTpPrintOptionsCreate)( pParent, rSet); - } - break; - case RID_SC_TP_DEFAULTS: - { - ::CreateTabPage ScTpDefaultsOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_DEFAULTS ); - if ( ScTpDefaultsOptionsCreate ) - pRet = (*ScTpDefaultsOptionsCreate)( pParent, rSet); - } - break; - - case RID_OFA_TP_INTERNATIONAL: - { - SfxAbstractDialogFactory* pSfxFact = SfxAbstractDialogFactory::Create(); - if ( pSfxFact ) - { - ::CreateTabPage fnCreatePage = pSfxFact->GetTabPageCreatorFunc( nId ); - if ( fnCreatePage ) - pRet = (*fnCreatePage)( pParent, rSet ); - } - } - } - - OSL_ENSURE( pRet, "ScModule::CreateTabPage(): no valid ID for TabPage!" ); - - return pRet; -} - -//------------------------------------------------------------------ - -IMPL_LINK( ScModule, CalcFieldValueHdl, EditFieldInfo*, pInfo ) -{ - //! mit ScFieldEditEngine zusammenfassen !!! - - if (pInfo) - { - const SvxFieldItem& rField = pInfo->GetField(); - const SvxFieldData* pField = rField.GetField(); - - if (pField && pField->ISA(SvxURLField)) - { - /****************************************************************** - * URL-Field - ******************************************************************/ - - const SvxURLField* pURLField = (const SvxURLField*) pField; - String aURL = pURLField->GetURL(); - - switch ( pURLField->GetFormat() ) - { - case SVXURLFORMAT_APPDEFAULT: //!!! einstellbar an App??? - case SVXURLFORMAT_REPR: - { - pInfo->SetRepresentation( pURLField->GetRepresentation() ); - } - break; - - case SVXURLFORMAT_URL: - { - pInfo->SetRepresentation( aURL ); - } - break; - } - - svtools::ColorConfigEntry eEntry = - INetURLHistory::GetOrCreate()->QueryUrl( aURL ) ? svtools::LINKSVISITED : svtools::LINKS; - pInfo->SetTxtColor( GetColorConfig().GetColorValue(eEntry).nColor ); - } - else - { - OSL_FAIL("unbekannter Feldbefehl"); - pInfo->SetRepresentation(String('?')); - } - } - - return 0; -} - -sal_Bool ScModule::RegisterRefWindow( sal_uInt16 nSlotId, Window *pWnd ) -{ - std::list<Window*> & rlRefWindow = m_mapRefWindow[nSlotId]; - - if( std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd ) == rlRefWindow.end() ) - { - rlRefWindow.push_back( pWnd ); - return sal_True; - } - - return false; -} - -sal_Bool ScModule::UnregisterRefWindow( sal_uInt16 nSlotId, Window *pWnd ) -{ - std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId ); - - if( iSlot == m_mapRefWindow.end() ) - return false; - - std::list<Window*> & rlRefWindow = iSlot->second; - - std::list<Window*>::iterator i = std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd ); - - if( i == rlRefWindow.end() ) - return false; - - rlRefWindow.erase( i ); - - if( !rlRefWindow.size() ) - m_mapRefWindow.erase( nSlotId ); - - return sal_True; -} - -sal_Bool ScModule::IsAliveRefDlg( sal_uInt16 nSlotId, Window *pWnd ) -{ - std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId ); - - if( iSlot == m_mapRefWindow.end() ) - return false; - - std::list<Window*> & rlRefWindow = iSlot->second; - - return rlRefWindow.end() != std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd ); -} - -Window * ScModule::Find1RefWindow( sal_uInt16 nSlotId, Window *pWndAncestor ) -{ - if (!pWndAncestor) - return NULL; - - std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId ); - - if( iSlot == m_mapRefWindow.end() ) - return NULL; - - std::list<Window*> & rlRefWindow = iSlot->second; - - while( Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent; - - for( std::list<Window*>::iterator i = rlRefWindow.begin(); i!=rlRefWindow.end(); ++i ) - if ( pWndAncestor->IsWindowOrChild( *i, (*i)->IsSystemWindow() ) ) - return *i; - - return NULL; -} - -Window * ScModule::Find1RefWindow( Window *pWndAncestor ) -{ - if (!pWndAncestor) - return NULL; - - while( Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent; - - for( std::map<sal_uInt16, std::list<Window*> >::iterator i = m_mapRefWindow.begin(); - i!=m_mapRefWindow.end(); ++i ) - for( std::list<Window*>::iterator j = i->second.begin(); j!=i->second.end(); ++j ) - if ( pWndAncestor->IsWindowOrChild( *j, (*j)->IsSystemWindow() ) ) - return *j; - - return NULL; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |