Kaydet (Commit) d89ee4f6 authored tarafından Steve Yin's avatar Steve Yin

Bug 124065 - [Performance] Low performance opening attached .ods

üst 95eeed58
...@@ -503,6 +503,7 @@ public: ...@@ -503,6 +503,7 @@ public:
ScFieldEditEngine* CreateFieldEditEngine(); ScFieldEditEngine* CreateFieldEditEngine();
void DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine); void DisposeFieldEditEngine(ScFieldEditEngine*& rpEditEngine);
// Note: the returned ScRangeName is volatile, and it can be changed at any time.
SC_DLLPUBLIC ScRangeName* GetRangeName(); SC_DLLPUBLIC ScRangeName* GetRangeName();
void SetRangeName( ScRangeName* pNewRangeName ); void SetRangeName( ScRangeName* pNewRangeName );
SCTAB GetMaxTableNumber() { return nMaxTableNumber; } SCTAB GetMaxTableNumber() { return nMaxTableNumber; }
......
...@@ -95,6 +95,9 @@ ScRangeName* ScDocument::GetRangeName() ...@@ -95,6 +95,9 @@ ScRangeName* ScDocument::GetRangeName()
void ScDocument::SetRangeName( ScRangeName* pNewRangeName ) void ScDocument::SetRangeName( ScRangeName* pNewRangeName )
{ {
if (pRangeName == pNewRangeName)
return;
if (pRangeName) if (pRangeName)
delete pRangeName; delete pRangeName;
pRangeName = pNewRangeName; pRangeName = pNewRangeName;
......
...@@ -160,7 +160,6 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr ...@@ -160,7 +160,6 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr
newNameScope = nameScope; newNameScope = nameScope;
//end of add //end of add
ScRangeName* pNewRanges = new ScRangeName( *pNames );
ScRangeData* pOld = (*pNames)[nPos]; ScRangeData* pOld = (*pNames)[nPos];
String aInsName(pOld->GetName()); String aInsName(pOld->GetName());
...@@ -185,18 +184,38 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr ...@@ -185,18 +184,38 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr
pNew->SetIndex( pOld->GetIndex() ); pNew->SetIndex( pOld->GetIndex() );
pNew->SetRangeScope(newNameScope); pNew->SetRangeScope(newNameScope);
pNewRanges->AtFree( nPos ); const bool bSupportUndo(!pDoc->IsImportingXML());
if ( pNewRanges->Insert(pNew) ) if ( bSupportUndo )
{ {
ScDocFunc aFunc(*pDocShell); ScRangeName* pNewRanges = new ScRangeName( *pNames );
aFunc.SetNewRangeNames( pNewRanges, sal_True ); pNewRanges->AtFree( nPos );
aName = aInsName; //! broadcast? if ( pNewRanges->Insert(pNew) )
aScopeName = pNewScopeName ? *pNewScopeName : aScopeName; {
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 else
{ {
delete pNew; //! uno::Exception/Fehler oder so pNames->AtFree( nPos );
delete pNewRanges; 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,23 +615,41 @@ void ScNamedRangesObj::ImplAddNewByScopeAndName(SCTAB aScope, const ::rtl::OUStr ...@@ -596,23 +615,41 @@ void ScNamedRangesObj::ImplAddNewByScopeAndName(SCTAB aScope, const ::rtl::OUStr
String aContStr(aContent); String aContStr(aContent);
if (pNames && !pNames->SearchName(aNameStr, nIndex,aScope)) if (pNames && !pNames->SearchName(aNameStr, nIndex,aScope))
{ {
ScRangeName* pNewRanges = new ScRangeName( *pNames );
// GRAM_PODF_A1 for API compatibility. // GRAM_PODF_A1 for API compatibility.
ScRangeData* pNew = new ScRangeData( pDoc, aNameStr, aContStr, ScRangeData* pNew = new ScRangeData( pDoc, aNameStr, aContStr,
aPos, nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );//GRAM_ODFF,// aPos, nNewType,formula::FormulaGrammar::GRAM_PODF_A1 );//GRAM_ODFF,//
pNew->SetRangeScope(aScope); pNew->SetRangeScope(aScope);
if ( pNewRanges->Insert(pNew) ) const bool bSupportUndo(!pDoc->IsImportingXML());
if ( bSupportUndo )
{ {
ScDocFunc aFunc(*pDocShell); ScRangeName* pNewRanges = new ScRangeName( *pNames );
if ( pNewRanges->Insert(pNew) )
{
ScDocFunc aFunc(*pDocShell);
aFunc.SetNewRangeNames( pNewRanges, sal_True ); aFunc.SetNewRangeNames( pNewRanges, sal_True );
bDone = true; bDone = true;
}
else
{
delete pNew;
delete pNewRanges;
}
} }
else else
{ {
delete pNew; if ( pNames->Insert(pNew) )
delete pNewRanges; {
ScDocFunc aFunc(*pDocShell);
aFunc.SetNewRangeNames( pNames, sal_True );
bDone = true;
}
else
{
delete pNew;
}
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment