summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-01-10 15:10:23 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-01-10 15:22:20 -0500
commit3e87471b6815a3cad48cab2ef81073bad5453c56 (patch)
tree8ddecec61394f3fe541382bfc68e553a9b43dc12
parent4e7333c6a66382e740748ee7dd8c48179ba62b7b (diff)
fdo#73484: Ensure that we import all tab settings from Excel.
The old code would not import settings of the last sheet if maTabData was not large enough before the loop begins. Enlarge maTabData ahead of time to ensure we load all tab settings. Change-Id: I9093a93ef26ccba9fef06a8929d1d86311f5c55d
-rw-r--r--sc/inc/scextopt.hxx7
-rw-r--r--sc/source/ui/view/scextopt.cxx12
-rw-r--r--sc/source/ui/view/viewdata.cxx4
3 files changed, 23 insertions, 0 deletions
diff --git a/sc/inc/scextopt.hxx b/sc/inc/scextopt.hxx
index a4893cf17309..bcdaa2c2a070 100644
--- a/sc/inc/scextopt.hxx
+++ b/sc/inc/scextopt.hxx
@@ -96,6 +96,13 @@ public:
/** @return read access to the settings of a sheet, if extant; otherwise 0. */
const ScExtTabSettings* GetTabSettings( SCTAB nTab ) const;
+
+ /**
+ * @return index of the last sheet that has settings, or -1 if no tab
+ * settings are present.
+ */
+ SCTAB GetLastTab() const;
+
/** @return read/write access to the settings of a sheet, may create a new struct. */
ScExtTabSettings& GetOrCreateTabSettings( SCTAB nTab );
diff --git a/sc/source/ui/view/scextopt.cxx b/sc/source/ui/view/scextopt.cxx
index 4390d4604e31..800f5236a6fb 100644
--- a/sc/source/ui/view/scextopt.cxx
+++ b/sc/source/ui/view/scextopt.cxx
@@ -68,6 +68,8 @@ public:
const ScExtTabSettings* GetTabSettings( SCTAB nTab ) const;
ScExtTabSettings& GetOrCreateTabSettings( SCTAB nTab );
+ SCTAB GetLastTab() const;
+
private:
typedef ::boost::shared_ptr< ScExtTabSettings > ScExtTabSettingsRef;
typedef ::std::map< SCTAB, ScExtTabSettingsRef > ScExtTabSettingsMap;
@@ -109,6 +111,11 @@ ScExtTabSettings& ScExtTabSettingsCont::GetOrCreateTabSettings( SCTAB nTab )
return *rxTabSett;
}
+SCTAB ScExtTabSettingsCont::GetLastTab() const
+{
+ return maMap.empty() ? -1 : maMap.rbegin()->first;
+}
+
void ScExtTabSettingsCont::CopyFromMap( const ScExtTabSettingsMap& rMap )
{
maMap.clear();
@@ -183,6 +190,11 @@ const ScExtTabSettings* ScExtDocOptions::GetTabSettings( SCTAB nTab ) const
return mxImpl->maTabSett.GetTabSettings( nTab );
}
+SCTAB ScExtDocOptions::GetLastTab() const
+{
+ return mxImpl->maTabSett.GetLastTab();
+}
+
ScExtTabSettings& ScExtDocOptions::GetOrCreateTabSettings( SCTAB nTab )
{
return mxImpl->maTabSett.GetOrCreateTabSettings( nTab );
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 7c91dfb42c5f..8444ce8e10ae 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -2466,6 +2466,10 @@ void ScViewData::ReadExtOptions( const ScExtDocOptions& rDocOpt )
pView->SetPendingRelTabBarWidth( rDocSett.mfTabBarWidth );
// sheet settings
+ SCTAB nLastTab = rDocOpt.GetLastTab();
+ if (static_cast<SCTAB>(maTabData.size()) <= nLastTab)
+ maTabData.resize(nLastTab+1);
+
for( SCTAB nTab = 0; nTab < static_cast<SCTAB>(maTabData.size()); ++nTab )
{
if( const ScExtTabSettings* pTabSett = rDocOpt.GetTabSettings( nTab ) )