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:
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; }
......
......@@ -95,6 +95,9 @@ ScRangeName* ScDocument::GetRangeName()
void ScDocument::SetRangeName( ScRangeName* pNewRangeName )
{
if (pRangeName == pNewRangeName)
return;
if (pRangeName)
delete pRangeName;
pRangeName = pNewRangeName;
......
......@@ -160,7 +160,6 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr
newNameScope = nameScope;
//end of add
ScRangeName* pNewRanges = new ScRangeName( *pNames );
ScRangeData* pOld = (*pNames)[nPos];
String aInsName(pOld->GetName());
......@@ -185,18 +184,38 @@ void ScNamedRangeObj::Modify_Impl( const String* pNewRangeName, const ScTokenArr
pNew->SetIndex( pOld->GetIndex() );
pNew->SetRangeScope(newNameScope);
pNewRanges->AtFree( nPos );
if ( pNewRanges->Insert(pNew) )
const bool bSupportUndo(!pDoc->IsImportingXML());
if ( bSupportUndo )
{
ScDocFunc aFunc(*pDocShell);
aFunc.SetNewRangeNames( pNewRanges, sal_True );
aName = aInsName; //! broadcast?
aScopeName = pNewScopeName ? *pNewScopeName : aScopeName;
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
{
delete pNew; //! uno::Exception/Fehler oder so
delete pNewRanges;
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,23 +615,41 @@ void ScNamedRangesObj::ImplAddNewByScopeAndName(SCTAB aScope, const ::rtl::OUStr
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) )
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 );
bDone = true;
bDone = true;
}
else
{
delete pNew;
delete pNewRanges;
}
}
else
{
delete pNew;
delete pNewRanges;
if ( pNames->Insert(pNew) )
{
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