summaryrefslogtreecommitdiff
path: root/sc/source/ui/unoobj/nameuno.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/unoobj/nameuno.cxx')
-rw-r--r--sc/source/ui/unoobj/nameuno.cxx1163
1 files changed, 0 insertions, 1163 deletions
diff --git a/sc/source/ui/unoobj/nameuno.cxx b/sc/source/ui/unoobj/nameuno.cxx
deleted file mode 100644
index d392c9bf9..000000000
--- a/sc/source/ui/unoobj/nameuno.cxx
+++ /dev/null
@@ -1,1163 +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 <svl/smplhint.hxx>
-#include <vcl/svapp.hxx>
-
-#include <com/sun/star/sheet/NamedRangeFlag.hpp>
-#include <com/sun/star/awt/XBitmap.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-
-#include <comphelper/servicehelper.hxx>
-
-using namespace ::com::sun::star;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Any;
-
-
-#include "nameuno.hxx"
-#include "miscuno.hxx"
-#include "cellsuno.hxx"
-#include "convuno.hxx"
-#include "targuno.hxx"
-#include "tokenuno.hxx"
-#include "tokenarray.hxx"
-#include "docsh.hxx"
-#include "docfunc.hxx"
-#include "rangenam.hxx"
-#include "unonames.hxx"
-
-#include "scui_def.hxx"
-
-//------------------------------------------------------------------------
-
-const SfxItemPropertyMapEntry* lcl_GetNamedRangeMap()
-{
- static SfxItemPropertyMapEntry aNamedRangeMap_Impl[] =
- {
- {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), 0, &getCppuType((uno::Reference<awt::XBitmap>*)0), beans::PropertyAttribute::READONLY, 0 },
- {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), 0, &getCppuType((rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 },
- {MAP_CHAR_LEN(SC_UNONAME_TOKENINDEX), 0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY, 0 },
- {MAP_CHAR_LEN(SC_UNONAME_ISSHAREDFMLA), 0, &getBooleanCppuType(), 0, 0 },
- {0,0,0,0,0,0}
- };
- return aNamedRangeMap_Impl;
-}
-
-const SfxItemPropertyMapEntry* lcl_GetNamedRangesMap()
-{
- static SfxItemPropertyMapEntry aNamedRangesMap_Impl[] =
- {
- {MAP_CHAR_LEN(SC_UNO_MODIFY_BROADCAST), 0, &getBooleanCppuType(), 0, 0 },
- {0,0,0,0,0,0}
- };
- return aNamedRangesMap_Impl;
-}
-
-//------------------------------------------------------------------------
-
-#define SCNAMEDRANGEOBJ_SERVICE "com.sun.star.sheet.NamedRange"
-
-SC_SIMPLE_SERVICE_INFO( ScLabelRangeObj, "ScLabelRangeObj", "com.sun.star.sheet.LabelRange" )
-SC_SIMPLE_SERVICE_INFO( ScLabelRangesObj, "ScLabelRangesObj", "com.sun.star.sheet.LabelRanges" )
-SC_SIMPLE_SERVICE_INFO( ScNamedRangesObj, "ScNamedRangesObj", "com.sun.star.sheet.NamedRanges" )
-
-bool lcl_UserVisibleName(const ScRangeData& rData)
-{
- //! als Methode an ScRangeData
-
- return !rData.HasType(RT_DATABASE) && !rData.HasType(RT_SHARED);
-}
-
-ScNamedRangeObj::ScNamedRangeObj(ScNamedRangesObj* pParent, ScDocShell* pDocSh, const String& rNm) :
- mpParent(pParent),
- pDocShell( pDocSh ),
- aName( rNm )
-{
- pDocShell->GetDocument()->AddUnoObject(*this);
-}
-
-ScNamedRangeObj::~ScNamedRangeObj()
-{
- if (pDocShell)
- pDocShell->GetDocument()->RemoveUnoObject(*this);
-}
-
-void ScNamedRangeObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
-{
- // Ref-Update interessiert nicht
-
- if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
- pDocShell = NULL; // ungueltig geworden
-}
-
-// Hilfsfuntionen
-
-ScRangeData* ScNamedRangeObj::GetRangeData_Impl()
-{
- ScRangeData* pRet = NULL;
- if (pDocShell)
- {
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (pNames)
- {
- pRet = pNames->findByName(aName);
- if (pRet)
- pRet->ValidateTabRefs(); // adjust relative tab refs to valid tables
- }
- }
- return pRet;
-}
-
-// sheet::XNamedRange
-
-void ScNamedRangeObj::Modify_Impl( const String* pNewName, const ScTokenArray* pNewTokens, const String* pNewContent,
- const ScAddress* pNewPos, const sal_uInt16* pNewType,
- const formula::FormulaGrammar::Grammar eGrammar )
-{
- if (!pDocShell)
- return;
-
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangeName* pNames = pDoc->GetRangeName();
- if (!pNames)
- return;
-
- const ScRangeData* pOld = pNames->findByName(aName);
- if (!pOld)
- return;
-
- ScRangeName* pNewRanges = new ScRangeName(*pNames);
-
- String aInsName = pOld->GetName();
- if (pNewName)
- aInsName = *pNewName;
-
- String aContent; // Content string based =>
- pOld->GetSymbol( aContent, eGrammar); // no problems with changed positions and such.
- if (pNewContent)
- aContent = *pNewContent;
-
- ScAddress aPos = pOld->GetPos();
- if (pNewPos)
- aPos = *pNewPos;
-
- sal_uInt16 nType = pOld->GetType();
- if (pNewType)
- nType = *pNewType;
-
- ScRangeData* pNew = NULL;
- if (pNewTokens)
- pNew = new ScRangeData( pDoc, aInsName, *pNewTokens, aPos, nType );
- else
- pNew = new ScRangeData( pDoc, aInsName, aContent, aPos, nType, eGrammar );
-
- pNew->SetIndex( pOld->GetIndex() );
-
- pNewRanges->erase(*pOld);
- if (pNewRanges->insert(pNew))
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.SetNewRangeNames(pNewRanges, mpParent->IsModifyAndBroadcast());
-
- aName = aInsName; //! broadcast?
- }
- else
- {
- delete pNew; //! uno::Exception/Fehler oder so
- delete pNewRanges;
- }
-}
-
-
-rtl::OUString SAL_CALL ScNamedRangeObj::getName() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return aName;
-}
-
-void SAL_CALL ScNamedRangeObj::setName( const rtl::OUString& aNewName )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- //! Formeln anpassen ?????
-
- String aNewStr(aNewName);
- // GRAM_PODF_A1 for API compatibility.
- Modify_Impl( &aNewStr, NULL, NULL, NULL, NULL,formula::FormulaGrammar::GRAM_PODF_A1 );
-
- if ( aName != aNewStr ) // some error occurred...
- throw uno::RuntimeException(); // no other exceptions specified
-}
-
-rtl::OUString SAL_CALL ScNamedRangeObj::getContent() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- String aContent;
- ScRangeData* pData = GetRangeData_Impl();
- if (pData)
- // GRAM_PODF_A1 for API compatibility.
- pData->GetSymbol( aContent,formula::FormulaGrammar::GRAM_PODF_A1);
- return aContent;
-}
-
-void SAL_CALL ScNamedRangeObj::setContent( const rtl::OUString& aContent )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- String aContStr(aContent);
- // GRAM_PODF_A1 for API compatibility.
- Modify_Impl( NULL, NULL, &aContStr, NULL, NULL,formula::FormulaGrammar::GRAM_PODF_A1 );
-}
-
-void ScNamedRangeObj::SetContentWithGrammar( const ::rtl::OUString& aContent,
- const formula::FormulaGrammar::Grammar eGrammar )
- throw(::com::sun::star::uno::RuntimeException)
-{
- String aContStr(aContent);
- Modify_Impl( NULL, NULL, &aContStr, NULL, NULL, eGrammar );
-}
-
-table::CellAddress SAL_CALL ScNamedRangeObj::getReferencePosition()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScAddress aPos;
- ScRangeData* pData = GetRangeData_Impl();
- if (pData)
- aPos = pData->GetPos();
- table::CellAddress aAddress;
- aAddress.Column = aPos.Col();
- aAddress.Row = aPos.Row();
- aAddress.Sheet = aPos.Tab();
- if (pDocShell)
- {
- SCTAB nDocTabs = pDocShell->GetDocument()->GetTableCount();
- if ( aAddress.Sheet >= nDocTabs && nDocTabs > 0 )
- {
- // Even after ValidateTabRefs, the position can be invalid if
- // the content points to preceding tables. The resulting string
- // is invalid in any case, so the position is just shifted.
- aAddress.Sheet = nDocTabs - 1;
- }
- }
- return aAddress;
-}
-
-void SAL_CALL ScNamedRangeObj::setReferencePosition( const table::CellAddress& aReferencePosition )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScAddress aPos( (SCCOL)aReferencePosition.Column, (SCROW)aReferencePosition.Row, aReferencePosition.Sheet );
- // GRAM_PODF_A1 for API compatibility.
- Modify_Impl( NULL, NULL, NULL, &aPos, NULL,formula::FormulaGrammar::GRAM_PODF_A1 );
-}
-
-sal_Int32 SAL_CALL ScNamedRangeObj::getType() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- sal_Int32 nType=0;
- ScRangeData* pData = GetRangeData_Impl();
- if (pData)
- {
- // do not return internal RT_* flags
- // see property 'IsSharedFormula' for RT_SHARED
- if ( pData->HasType(RT_CRITERIA) ) nType |= sheet::NamedRangeFlag::FILTER_CRITERIA;
- if ( pData->HasType(RT_PRINTAREA) ) nType |= sheet::NamedRangeFlag::PRINT_AREA;
- if ( pData->HasType(RT_COLHEADER) ) nType |= sheet::NamedRangeFlag::COLUMN_HEADER;
- if ( pData->HasType(RT_ROWHEADER) ) nType |= sheet::NamedRangeFlag::ROW_HEADER;
- }
- return nType;
-}
-
-void SAL_CALL ScNamedRangeObj::setType( sal_Int32 nUnoType ) throw(uno::RuntimeException)
-{
- // see property 'IsSharedFormula' for RT_SHARED
- SolarMutexGuard aGuard;
- sal_uInt16 nNewType = RT_NAME;
- if ( nUnoType & sheet::NamedRangeFlag::FILTER_CRITERIA ) nNewType |= RT_CRITERIA;
- if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= RT_PRINTAREA;
- if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= RT_COLHEADER;
- if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= RT_ROWHEADER;
-
- // GRAM_PODF_A1 for API compatibility.
- Modify_Impl( NULL, NULL, NULL, NULL, &nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );
-}
-
-// XFormulaTokens
-
-uno::Sequence<sheet::FormulaToken> SAL_CALL ScNamedRangeObj::getTokens() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- uno::Sequence<sheet::FormulaToken> aSequence;
- ScRangeData* pData = GetRangeData_Impl();
- if (pData && pDocShell)
- {
- ScTokenArray* pTokenArray = pData->GetCode();
- if ( pTokenArray )
- (void)ScTokenConversion::ConvertToTokenSequence( *pDocShell->GetDocument(), aSequence, *pTokenArray );
- }
- return aSequence;
-}
-
-void SAL_CALL ScNamedRangeObj::setTokens( const uno::Sequence<sheet::FormulaToken>& rTokens ) throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if( pDocShell )
- {
- ScTokenArray aTokenArray;
- (void)ScTokenConversion::ConvertToTokenArray( *pDocShell->GetDocument(), aTokenArray, rTokens );
- // GRAM_PODF_A1 for API compatibility.
- Modify_Impl( NULL, &aTokenArray, NULL, NULL, NULL, formula::FormulaGrammar::GRAM_PODF_A1 );
- }
-}
-
-
-// XCellRangeSource
-
-uno::Reference<table::XCellRange> SAL_CALL ScNamedRangeObj::getReferredCells()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScRange aRange;
- ScRangeData* pData = GetRangeData_Impl();
- if ( pData && pData->IsValidReference( aRange ) )
- {
- //! static Funktion um ScCellObj/ScCellRangeObj zu erzeugen am ScCellRangeObj ???
-
- if ( aRange.aStart == aRange.aEnd )
- return new ScCellObj( pDocShell, aRange.aStart );
- else
- return new ScCellRangeObj( pDocShell, aRange );
- }
- return NULL;
-}
-
-// beans::XPropertySet
-
-uno::Reference<beans::XPropertySetInfo> SAL_CALL ScNamedRangeObj::getPropertySetInfo()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- static uno::Reference< beans::XPropertySetInfo > aRef(new SfxItemPropertySetInfo( lcl_GetNamedRangeMap() ));
- return aRef;
-}
-
-void SAL_CALL ScNamedRangeObj::setPropertyValue(
- const rtl::OUString& rPropertyName, const uno::Any& aValue )
- throw(beans::UnknownPropertyException, beans::PropertyVetoException,
- lang::IllegalArgumentException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_UNONAME_ISSHAREDFMLA ) ) )
- {
- bool bIsShared = false;
- if( aValue >>= bIsShared )
- {
- sal_uInt16 nNewType = bIsShared ? RT_SHARED : RT_NAME;
- Modify_Impl( NULL, NULL, NULL, NULL, &nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );
- }
- }
-}
-
-uno::Any SAL_CALL ScNamedRangeObj::getPropertyValue( const rtl::OUString& rPropertyName )
- throw(beans::UnknownPropertyException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- uno::Any aRet;
- if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_UNO_LINKDISPBIT ) ) )
- {
- // no target bitmaps for individual entries (would be all equal)
- // ScLinkTargetTypeObj::SetLinkTargetBitmap( aRet, SC_LINKTARGETTYPE_RANGENAME );
- }
- else if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_UNO_LINKDISPNAME ) ) )
- aRet <<= rtl::OUString( aName );
- else if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_UNONAME_TOKENINDEX ) ) )
- {
- // get index for use in formula tokens (read-only)
- ScRangeData* pData = GetRangeData_Impl();
- if (pData)
- aRet <<= static_cast<sal_Int32>(pData->GetIndex());
- }
- else if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_UNONAME_ISSHAREDFMLA ) ) )
- {
- if( ScRangeData* pData = GetRangeData_Impl() )
- aRet <<= static_cast< bool >( pData->HasType( RT_SHARED ) );
- }
- return aRet;
-}
-
-SC_IMPL_DUMMY_PROPERTY_LISTENER( ScNamedRangeObj )
-
-// lang::XServiceInfo
-
-rtl::OUString SAL_CALL ScNamedRangeObj::getImplementationName() throw(uno::RuntimeException)
-{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScNamedRangeObj" ) );
-}
-
-sal_Bool SAL_CALL ScNamedRangeObj::supportsService( const rtl::OUString& rServiceName )
- throw(uno::RuntimeException)
-{
- return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SCNAMEDRANGEOBJ_SERVICE ) ) ||
- rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SCLINKTARGET_SERVICE ) );
-}
-
-uno::Sequence<rtl::OUString> SAL_CALL ScNamedRangeObj::getSupportedServiceNames()
- throw(uno::RuntimeException)
-{
- uno::Sequence<rtl::OUString> aRet(2);
- aRet[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SCNAMEDRANGEOBJ_SERVICE ) );
- aRet[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SCLINKTARGET_SERVICE ) );
- return aRet;
-}
-
-
-// XUnoTunnel
-
-sal_Int64 SAL_CALL ScNamedRangeObj::getSomething(
- const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
-{
- if ( rId.getLength() == 16 &&
- 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
- rId.getConstArray(), 16 ) )
- {
- return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
- }
- return 0;
-}
-
-namespace
-{
- class theScNamedRangeObjUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theScNamedRangeObjUnoTunnelId> {};
-}
-
-const uno::Sequence<sal_Int8>& ScNamedRangeObj::getUnoTunnelId()
-{
- return theScNamedRangeObjUnoTunnelId::get().getSeq();
-}
-
-ScNamedRangeObj* ScNamedRangeObj::getImplementation( const uno::Reference<uno::XInterface> xObj )
-{
- ScNamedRangeObj* pRet = NULL;
- uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
- if (xUT.is())
- pRet = reinterpret_cast<ScNamedRangeObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
- return pRet;
-}
-
-//------------------------------------------------------------------------
-
-ScNamedRangesObj::ScNamedRangesObj(ScDocShell* pDocSh) :
- pDocShell( pDocSh ),
- mbModifyAndBroadcast(true)
-{
- pDocShell->GetDocument()->AddUnoObject(*this);
-}
-
-ScNamedRangesObj::~ScNamedRangesObj()
-{
- if (pDocShell)
- pDocShell->GetDocument()->RemoveUnoObject(*this);
-}
-
-void ScNamedRangesObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
-{
- // Referenz-Update interessiert hier nicht
-
- if ( rHint.ISA( SfxSimpleHint ) &&
- ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
- {
- pDocShell = NULL; // ungueltig geworden
- }
-}
-
-bool ScNamedRangesObj::IsModifyAndBroadcast() const
-{
- return mbModifyAndBroadcast;
-}
-
-// sheet::XNamedRanges
-
-ScNamedRangeObj* ScNamedRangesObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
-{
- if (!pDocShell)
- return NULL;
-
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (!pNames)
- return NULL;
-
- ScRangeName::const_iterator itr = pNames->begin(), itrEnd = pNames->end();
- sal_uInt16 nPos = 0;
- for (; itr != itrEnd; ++itr)
- {
- if (lcl_UserVisibleName(*itr))
- {
- if (nPos == nIndex)
- return new ScNamedRangeObj(this, pDocShell, itr->GetName());
- }
- ++nPos;
- }
- return NULL;
-}
-
-ScNamedRangeObj* ScNamedRangesObj::GetObjectByName_Impl(const rtl::OUString& aName)
-{
- if ( pDocShell && hasByName(aName) )
- return new ScNamedRangeObj(this, pDocShell, String(aName));
- return NULL;
-}
-
-void SAL_CALL ScNamedRangesObj::addNewByName( const rtl::OUString& aName,
- const rtl::OUString& aContent, const table::CellAddress& aPosition,
- sal_Int32 nUnoType ) throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, aPosition.Sheet );
-
- sal_uInt16 nNewType = RT_NAME;
- if ( nUnoType & sheet::NamedRangeFlag::FILTER_CRITERIA ) nNewType |= RT_CRITERIA;
- if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= RT_PRINTAREA;
- if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= RT_COLHEADER;
- if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= RT_ROWHEADER;
-
- sal_Bool bDone = false;
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangeName* pNames = pDoc->GetRangeName();
- if (pNames && !pNames->findByName(aName))
- {
- ScRangeName* pNewRanges = new ScRangeName( *pNames );
- // GRAM_PODF_A1 for API compatibility.
- ScRangeData* pNew = new ScRangeData( pDoc, aName, aContent,
- aPos, nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );
- if ( pNewRanges->insert(pNew) )
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.SetNewRangeNames(pNewRanges, mbModifyAndBroadcast);
- bDone = true;
- }
- else
- {
- delete pNew;
- delete pNewRanges;
- }
- }
- }
-
- if (!bDone)
- throw uno::RuntimeException(); // no other exceptions specified
-}
-
-void SAL_CALL ScNamedRangesObj::addNewFromTitles( const table::CellRangeAddress& aSource,
- sheet::Border aBorder ) throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- //! das darf kein enum sein, weil mehrere Bits gesetzt sein koennen !!!
-
- sal_Bool bTop = ( aBorder == sheet::Border_TOP );
- sal_Bool bLeft = ( aBorder == sheet::Border_LEFT );
- sal_Bool bBottom = ( aBorder == sheet::Border_BOTTOM );
- sal_Bool bRight = ( aBorder == sheet::Border_RIGHT );
-
- ScRange aRange;
- ScUnoConversion::FillScRange( aRange, aSource );
-
- sal_uInt16 nFlags = 0;
- if (bTop) nFlags |= NAME_TOP;
- if (bLeft) nFlags |= NAME_LEFT;
- if (bBottom) nFlags |= NAME_BOTTOM;
- if (bRight) nFlags |= NAME_RIGHT;
-
- if (nFlags)
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.CreateNames( aRange, nFlags, sal_True );
- }
-}
-
-void SAL_CALL ScNamedRangesObj::removeByName( const rtl::OUString& aName )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- bool bDone = false;
- if (pDocShell)
- {
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (pNames)
- {
- const ScRangeData* pData = pNames->findByName(aName);
- if (pData && lcl_UserVisibleName(*pData))
- {
- ScRangeName* pNewRanges = new ScRangeName(*pNames);
- pNewRanges->erase(*pData);
- ScDocFunc aFunc(*pDocShell);
- aFunc.SetNewRangeNames( pNewRanges, mbModifyAndBroadcast);
- bDone = true;
- }
- }
- }
-
- if (!bDone)
- throw uno::RuntimeException(); // no other exceptions specified
-}
-
-void SAL_CALL ScNamedRangesObj::outputList( const table::CellAddress& aOutputPosition )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScAddress aPos( (SCCOL)aOutputPosition.Column, (SCROW)aOutputPosition.Row, aOutputPosition.Sheet );
- if (pDocShell)
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.InsertNameList( aPos, sal_True );
- }
-}
-
-// container::XEnumerationAccess
-
-uno::Reference<container::XEnumeration> SAL_CALL ScNamedRangesObj::createEnumeration()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.NamedRangesEnumeration")));
-}
-
-// container::XIndexAccess
-
-sal_Int32 SAL_CALL ScNamedRangesObj::getCount() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- long nRet = 0;
- if (pDocShell)
- {
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (pNames)
- {
- ScRangeName::const_iterator itr = pNames->begin(), itrEnd = pNames->end();
- for (; itr != itrEnd; ++itr)
- if (lcl_UserVisibleName(*itr))
- ++nRet;
- }
- }
- return nRet;
-}
-
-uno::Any SAL_CALL ScNamedRangesObj::getByIndex( sal_Int32 nIndex )
- throw(lang::IndexOutOfBoundsException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- uno::Reference< sheet::XNamedRange > xRange(GetObjectByIndex_Impl((sal_uInt16)nIndex));
- if ( xRange.is() )
- return uno::makeAny(xRange);
- else
- throw lang::IndexOutOfBoundsException();
-}
-
-uno::Type SAL_CALL ScNamedRangesObj::getElementType() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return ::getCppuType((const uno::Reference< sheet::XNamedRange >*)0); // muss zu getByIndex passen
-}
-
-sal_Bool SAL_CALL ScNamedRangesObj::hasElements() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return ( getCount() != 0 );
-}
-
-Reference<beans::XPropertySetInfo> SAL_CALL ScNamedRangesObj::getPropertySetInfo()
- throw(uno::RuntimeException)
-{
- static Reference<beans::XPropertySetInfo> aRef(
- new SfxItemPropertySetInfo(lcl_GetNamedRangesMap()));
- return aRef;
-}
-
-void SAL_CALL ScNamedRangesObj::setPropertyValue(
- const rtl::OUString& rPropertyName, const uno::Any& aValue )
- throw(beans::UnknownPropertyException, beans::PropertyVetoException,
- lang::IllegalArgumentException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- if (rPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(SC_UNO_MODIFY_BROADCAST)))
- {
- aValue >>= mbModifyAndBroadcast;
- }
-}
-
-Any SAL_CALL ScNamedRangesObj::getPropertyValue( const rtl::OUString& rPropertyName )
- throw(beans::UnknownPropertyException, lang::WrappedTargetException,
- uno::RuntimeException)
-{
- Any aRet;
- if (rPropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(SC_UNO_MODIFY_BROADCAST)))
- {
- aRet <<= mbModifyAndBroadcast;
- }
-
- return aRet;
-}
-
-SC_IMPL_DUMMY_PROPERTY_LISTENER( ScNamedRangesObj )
-
-uno::Any SAL_CALL ScNamedRangesObj::getByName( const rtl::OUString& aName )
- throw(container::NoSuchElementException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- uno::Reference< sheet::XNamedRange > xRange(GetObjectByName_Impl(aName));
- if ( xRange.is() )
- return uno::makeAny(xRange);
- else
- throw container::NoSuchElementException();
-}
-
-uno::Sequence<rtl::OUString> SAL_CALL ScNamedRangesObj::getElementNames()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (pDocShell)
- {
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (pNames)
- {
- long nVisCount = getCount(); // Namen mit lcl_UserVisibleName
- uno::Sequence<rtl::OUString> aSeq(nVisCount);
- rtl::OUString* pAry = aSeq.getArray();
- sal_uInt16 nVisPos = 0;
- ScRangeName::const_iterator itr = pNames->begin(), itrEnd = pNames->end();
- for (; itr != itrEnd; ++itr)
- {
- if (lcl_UserVisibleName(*itr))
- pAry[nVisPos++] = itr->GetName();
- }
- return aSeq;
- }
- }
- return uno::Sequence<rtl::OUString>(0);
-}
-
-sal_Bool SAL_CALL ScNamedRangesObj::hasByName( const rtl::OUString& aName )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (pDocShell)
- {
- ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName();
- if (pNames)
- {
- const ScRangeData* pData = pNames->findByName(aName);
- if (pData && lcl_UserVisibleName(*pData))
- return sal_True;
- }
- }
- return false;
-}
-
-/** called from the XActionLockable interface methods on initial locking */
-void ScNamedRangesObj::lock()
-{
- pDocShell->GetDocument()->CompileNameFormula( sal_True ); // CreateFormulaString
-}
-
-/** called from the XActionLockable interface methods on final unlock */
-void ScNamedRangesObj::unlock()
-{
- pDocShell->GetDocument()->CompileNameFormula( false ); // CompileFormulaString
-}
-
-// document::XActionLockable
-
-sal_Bool ScNamedRangesObj::isActionLocked() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return pDocShell->GetDocument()->GetNamedRangesLockCount() != 0;
-}
-
-void ScNamedRangesObj::addActionLock() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScDocument* pDoc = pDocShell->GetDocument();
- sal_Int16 nLockCount = pDoc->GetNamedRangesLockCount();
- ++nLockCount;
- if ( nLockCount == 1 )
- {
- lock();
- }
- pDoc->SetNamedRangesLockCount( nLockCount );
-}
-
-void ScNamedRangesObj::removeActionLock() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScDocument* pDoc = pDocShell->GetDocument();
- sal_Int16 nLockCount = pDoc->GetNamedRangesLockCount();
- if ( nLockCount > 0 )
- {
- --nLockCount;
- if ( nLockCount == 0 )
- {
- unlock();
- }
- pDoc->SetNamedRangesLockCount( nLockCount );
- }
-}
-
-void ScNamedRangesObj::setActionLocks( sal_Int16 nLock ) throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if ( nLock >= 0 )
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- sal_Int16 nLockCount = pDoc->GetNamedRangesLockCount();
- if ( nLock == 0 && nLockCount > 0 )
- {
- unlock();
- }
- if ( nLock > 0 && nLockCount == 0 )
- {
- lock();
- }
- pDoc->SetNamedRangesLockCount( nLock );
- }
-}
-
-sal_Int16 ScNamedRangesObj::resetActionLocks() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScDocument* pDoc = pDocShell->GetDocument();
- sal_Int16 nLockCount = pDoc->GetNamedRangesLockCount();
- if ( nLockCount > 0 )
- {
- unlock();
- }
- pDoc->SetNamedRangesLockCount( 0 );
- return nLockCount;
-}
-
-//------------------------------------------------------------------------
-
-ScLabelRangeObj::ScLabelRangeObj(ScDocShell* pDocSh, sal_Bool bCol, const ScRange& rR) :
- pDocShell( pDocSh ),
- bColumn( bCol ),
- aRange( rR )
-{
- pDocShell->GetDocument()->AddUnoObject(*this);
-}
-
-ScLabelRangeObj::~ScLabelRangeObj()
-{
- if (pDocShell)
- pDocShell->GetDocument()->RemoveUnoObject(*this);
-}
-
-void ScLabelRangeObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
-{
- //! Ref-Update !!!
-
- if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
- pDocShell = NULL; // ungueltig geworden
-}
-
-// Hilfsfuntionen
-
-ScRangePair* ScLabelRangeObj::GetData_Impl()
-{
- ScRangePair* pRet = NULL;
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
- if (pList)
- pRet = pList->Find( aRange );
- }
- return pRet;
-}
-
-void ScLabelRangeObj::Modify_Impl( const ScRange* pLabel, const ScRange* pData )
-{
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
- if (pOldList)
- {
- ScRangePairListRef xNewList(pOldList->Clone());
- ScRangePair* pEntry = xNewList->Find( aRange );
- if (pEntry)
- {
- xNewList->Remove( pEntry ); // nur aus der Liste entfernt, nicht geloescht
-
- if ( pLabel )
- pEntry->GetRange(0) = *pLabel;
- if ( pData )
- pEntry->GetRange(1) = *pData;
-
- xNewList->Join( *pEntry );
- delete pEntry;
-
- if (bColumn)
- pDoc->GetColNameRangesRef() = xNewList;
- else
- pDoc->GetRowNameRangesRef() = xNewList;
-
- pDoc->CompileColRowNameFormula();
- pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID );
- pDocShell->SetDocumentModified();
-
- //! Undo ?!?! (hier und aus Dialog)
-
- if ( pLabel )
- aRange = *pLabel; // Objekt anpassen, um Range wiederzufinden
- }
- }
- }
-}
-
-// sheet::XLabelRange
-
-table::CellRangeAddress SAL_CALL ScLabelRangeObj::getLabelArea()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- table::CellRangeAddress aRet;
- ScRangePair* pData = GetData_Impl();
- if (pData)
- ScUnoConversion::FillApiRange( aRet, pData->GetRange(0) );
- return aRet;
-}
-
-void SAL_CALL ScLabelRangeObj::setLabelArea( const table::CellRangeAddress& aLabelArea )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScRange aLabelRange;
- ScUnoConversion::FillScRange( aLabelRange, aLabelArea );
- Modify_Impl( &aLabelRange, NULL );
-}
-
-table::CellRangeAddress SAL_CALL ScLabelRangeObj::getDataArea()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- table::CellRangeAddress aRet;
- ScRangePair* pData = GetData_Impl();
- if (pData)
- ScUnoConversion::FillApiRange( aRet, pData->GetRange(1) );
- return aRet;
-}
-
-void SAL_CALL ScLabelRangeObj::setDataArea( const table::CellRangeAddress& aDataArea )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- ScRange aDataRange;
- ScUnoConversion::FillScRange( aDataRange, aDataArea );
- Modify_Impl( NULL, &aDataRange );
-}
-
-//------------------------------------------------------------------------
-
-ScLabelRangesObj::ScLabelRangesObj(ScDocShell* pDocSh, sal_Bool bCol) :
- pDocShell( pDocSh ),
- bColumn( bCol )
-{
- pDocShell->GetDocument()->AddUnoObject(*this);
-}
-
-ScLabelRangesObj::~ScLabelRangesObj()
-{
- if (pDocShell)
- pDocShell->GetDocument()->RemoveUnoObject(*this);
-}
-
-void ScLabelRangesObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
-{
- // Referenz-Update interessiert hier nicht
-
- if ( rHint.ISA( SfxSimpleHint ) &&
- ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
- {
- pDocShell = NULL; // ungueltig geworden
- }
-}
-
-// sheet::XLabelRanges
-
-ScLabelRangeObj* ScLabelRangesObj::GetObjectByIndex_Impl(size_t nIndex)
-{
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
- if ( pList && nIndex < pList->size() )
- {
- ScRangePair* pData = (*pList)[nIndex];
- if (pData)
- return new ScLabelRangeObj( pDocShell, bColumn, pData->GetRange(0) );
- }
- }
- return NULL;
-}
-
-void SAL_CALL ScLabelRangesObj::addNew( const table::CellRangeAddress& aLabelArea,
- const table::CellRangeAddress& aDataArea )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
- if (pOldList)
- {
- ScRangePairListRef xNewList(pOldList->Clone());
-
- ScRange aLabelRange;
- ScRange aDataRange;
- ScUnoConversion::FillScRange( aLabelRange, aLabelArea );
- ScUnoConversion::FillScRange( aDataRange, aDataArea );
- xNewList->Join( ScRangePair( aLabelRange, aDataRange ) );
-
- if (bColumn)
- pDoc->GetColNameRangesRef() = xNewList;
- else
- pDoc->GetRowNameRangesRef() = xNewList;
-
- pDoc->CompileColRowNameFormula();
- pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID );
- pDocShell->SetDocumentModified();
-
- //! Undo ?!?! (hier und aus Dialog)
- }
- }
-}
-
-void SAL_CALL ScLabelRangesObj::removeByIndex( sal_Int32 nIndex )
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- sal_Bool bDone = false;
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
-
- if ( pOldList && nIndex >= 0 && nIndex < (sal_Int32)pOldList->size() )
- {
- ScRangePairListRef xNewList(pOldList->Clone());
-
- ScRangePair* pEntry = (*xNewList)[nIndex];
- if (pEntry)
- {
- xNewList->Remove( pEntry );
- delete pEntry;
-
- if (bColumn)
- pDoc->GetColNameRangesRef() = xNewList;
- else
- pDoc->GetRowNameRangesRef() = xNewList;
-
- pDoc->CompileColRowNameFormula();
- pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID );
- pDocShell->SetDocumentModified();
- bDone = sal_True;
-
- //! Undo ?!?! (hier und aus Dialog)
- }
- }
- }
- if (!bDone)
- throw uno::RuntimeException(); // no other exceptions specified
-}
-
-// container::XEnumerationAccess
-
-uno::Reference<container::XEnumeration> SAL_CALL ScLabelRangesObj::createEnumeration()
- throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.LabelRangesEnumeration")));
-}
-
-// container::XIndexAccess
-
-sal_Int32 SAL_CALL ScLabelRangesObj::getCount() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- if (pDocShell)
- {
- ScDocument* pDoc = pDocShell->GetDocument();
- ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges();
- if (pList)
- return pList->size();
- }
- return 0;
-}
-
-uno::Any SAL_CALL ScLabelRangesObj::getByIndex( sal_Int32 nIndex )
- throw(lang::IndexOutOfBoundsException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- uno::Reference< sheet::XLabelRange > xRange(GetObjectByIndex_Impl((sal_uInt16)nIndex));
- if ( xRange.is() )
- return uno::makeAny(xRange);
- else
- throw lang::IndexOutOfBoundsException();
-}
-
-uno::Type SAL_CALL ScLabelRangesObj::getElementType() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return ::getCppuType((const uno::Reference< sheet::XLabelRange >*)0); // muss zu getByIndex passen
-
-}
-
-sal_Bool SAL_CALL ScLabelRangesObj::hasElements() throw(uno::RuntimeException)
-{
- SolarMutexGuard aGuard;
- return ( getCount() != 0 );
-}
-
-//------------------------------------------------------------------------
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */