Author: steve_y Date: Fri Feb 14 08:44:17 2014 New Revision: 1568219 URL: http://svn.apache.org/r1568219 Log: Bug 124065 - [Performance] Low performance opening attached .ods
Modified:
openoffice/trunk/main/sc/inc/document.hxx
openoffice/trunk/main/sc/source/core/data/documen3.cxx
openoffice/trunk/main/sc/source/ui/unoobj/nameuno.cxx
Modified: openoffice/trunk/main/sc/inc/document.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sc/inc/document.hxx?rev=1568219&r1=1568218&r2=1568219&view=diff
==============================================================================
--- openoffice/trunk/main/sc/inc/document.hxx (original)
+++ openoffice/trunk/main/sc/inc/document.hxx Fri Feb 14 08:44:17 2014
@@ -503,6 +503,7 @@ public:
ScFieldEditEngine* CreateFieldEditEngine();
void
DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine);
+ // Note: the returned ScRangeName is volatile, and it can be changed at
any time.
SC_DLLPUBLIC ScRangeName* GetRangeName();
void SetRangeName( ScRangeName* pNewRangeName );
SCTAB GetMaxTableNumber() { return nMaxTableNumber; }
Modified: openoffice/trunk/main/sc/source/core/data/documen3.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sc/source/core/data/documen3.cxx?rev=1568219&r1=1568218&r2=1568219&view=diff
==============================================================================
--- openoffice/trunk/main/sc/source/core/data/documen3.cxx (original)
+++ openoffice/trunk/main/sc/source/core/data/documen3.cxx Fri Feb 14 08:44:17
2014
@@ -95,6 +95,9 @@ ScRangeName* ScDocument::GetRangeName()
void ScDocument::SetRangeName( ScRangeName* pNewRangeName )
{
+ if (pRangeName == pNewRangeName)
+ return;
+
if (pRangeName)
delete pRangeName;
pRangeName = pNewRangeName;
Modified: openoffice/trunk/main/sc/source/ui/unoobj/nameuno.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sc/source/ui/unoobj/nameuno.cxx?rev=1568219&r1=1568218&r2=1568219&view=diff
==============================================================================
--- openoffice/trunk/main/sc/source/ui/unoobj/nameuno.cxx (original)
+++ openoffice/trunk/main/sc/source/ui/unoobj/nameuno.cxx Fri Feb 14 08:44:17
2014
@@ -159,8 +159,7 @@ void ScNamedRangeObj::Modify_Impl( const
else if (!pNewScopeName
|| *pNewScopeName == EMPTY_STRING )
newNameScope =
nameScope;
//end of add
-
- ScRangeName* pNewRanges = new ScRangeName( *pNames
);
+
ScRangeData* pOld = (*pNames)[nPos];
String aInsName(pOld->GetName());
@@ -184,20 +183,40 @@ void ScNamedRangeObj::Modify_Impl( const
pNew = new ScRangeData( pDoc, aInsName,
aContent, aPos, nType, eGrammar );
pNew->SetIndex( pOld->GetIndex() );
pNew->SetRangeScope(newNameScope);
-
- pNewRanges->AtFree( nPos );
- if ( pNewRanges->Insert(pNew) )
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.SetNewRangeNames( pNewRanges, sal_True
);
- aName = aInsName; //! broadcast?
- aScopeName = pNewScopeName ? *pNewScopeName :
aScopeName;
- }
- else
- {
- delete pNew; //!
uno::Exception/Fehler oder so
- delete pNewRanges;
- }
+
+ const bool
bSupportUndo(!pDoc->IsImportingXML());
+ if ( bSupportUndo )
+ {
+ ScRangeName*
pNewRanges = new ScRangeName( *pNames );
+
pNewRanges->AtFree( nPos );
+ if (
pNewRanges->Insert(pNew) )
+ {
+
ScDocFunc aFunc(*pDocShell);
+
aFunc.SetNewRangeNames( pNewRanges, sal_True );
+ aName
= aInsName; //! broadcast?
+
aScopeName = pNewScopeName ? *pNewScopeName : aScopeName;
+ }
+ else
+ {
+ delete
pNew; //! uno::Exception/Fehler oder so
+ delete
pNewRanges;
+ }
+ }
+ else
+ {
+ pNames->AtFree(
nPos );
+ if (
pNames->Insert(pNew) )
+ {
+
ScDocFunc aFunc(*pDocShell);
+
aFunc.SetNewRangeNames( pNames, sal_True );
+ aName
= aInsName; //! broadcast?
+
aScopeName = pNewScopeName ? *pNewScopeName : aScopeName;
+ }
+ else
+ {
+ delete
pNew; //! uno::Exception/Fehler oder so
+ }
+ }
}
}
}
@@ -596,24 +615,42 @@ void ScNamedRangesObj::ImplAddNewByScope
String aContStr(aContent);
if (pNames && !pNames->SearchName(aNameStr, nIndex,aScope))
{
- ScRangeName* pNewRanges = new ScRangeName( *pNames );
+
// GRAM_PODF_A1 for API compatibility.
ScRangeData* pNew = new ScRangeData( pDoc, aNameStr,
aContStr,
aPos, nNewType,formula::FormulaGrammar::GRAM_PODF_A1
);//GRAM_ODFF,//
pNew->SetRangeScope(aScope);
- if ( pNewRanges->Insert(pNew) )
- {
- ScDocFunc aFunc(*pDocShell);
- aFunc.SetNewRangeNames( pNewRanges, sal_True );
- bDone = true;
- }
- else
- {
- delete pNew;
- delete pNewRanges;
- }
+ const bool
bSupportUndo(!pDoc->IsImportingXML());
+ if ( bSupportUndo )
+ {
+ ScRangeName* pNewRanges = new
ScRangeName( *pNames );
+ if ( pNewRanges->Insert(pNew) )
+ {
+ ScDocFunc
aFunc(*pDocShell);
+ aFunc.SetNewRangeNames(
pNewRanges, sal_True );
+ bDone = true;
+ }
+ else
+ {
+ delete pNew;
+ delete pNewRanges;
+ }
+ }
+ else
+ {
+ if ( pNames->Insert(pNew) )
+ {
+ ScDocFunc
aFunc(*pDocShell);
+ aFunc.SetNewRangeNames(
pNames, sal_True );
+ bDone = true;
+ }
+ else
+ {
+ delete pNew;
+ }
+ }
}
}
