summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-29 10:43:11 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-29 21:50:14 +0200
commitefdc9425394e790c325644cd32f537341594f0b8 (patch)
treea0967762c5ea56da435135fd4091816984b692ea /sfx2
parent5dc1b50e952765b160395aef15730c71864786ff (diff)
we need to be able to query the ranges before creating the pages
so don't create the pages until the first execute Change-Id: I5ecc31d5a08bae44c0a912e39b786420f2da86ee Reviewed-on: https://gerrit.libreoffice.org/55015 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/dialog/tabdlg.cxx40
1 files changed, 25 insertions, 15 deletions
diff --git a/sfx2/source/dialog/tabdlg.cxx b/sfx2/source/dialog/tabdlg.cxx
index 31be0ca30543..5ccfb377fd0b 100644
--- a/sfx2/source/dialog/tabdlg.cxx
+++ b/sfx2/source/dialog/tabdlg.cxx
@@ -1615,6 +1615,8 @@ IMPL_LINK(SfxTabDialogController, ActivatePageHdl, const OString&, rPage, void)
}
VclPtr<SfxTabPage> pTabPage = pDataObject->pTabPage;
+ if (!pTabPage)
+ return;
if (pDataObject->bRefresh)
pTabPage->Reset(m_pSet);
@@ -1935,24 +1937,30 @@ void SfxTabDialogController::AddTabPage
)
{
m_pImpl->aData.push_back(new Data_Impl(m_pImpl->aData.size(), rName, pCreateFunc, pRangesFunc));
- Data_Impl* pDataObject = m_pImpl->aData.back();
+}
- assert(pDataObject->pTabPage == nullptr && "create TabPage more than once");
- weld::Container* pPage = m_xTabCtrl->get_page(rName);
- pDataObject->pTabPage = (pDataObject->fnCreatePage)(pPage, m_pSet);
- pDataObject->pTabPage->SetDialogController(this);
+void SfxTabDialogController::CreatePages()
+{
+ for (auto pDataObject : m_pImpl->aData)
+ {
+ if (pDataObject->pTabPage)
+ continue;
+ weld::Container* pPage = m_xTabCtrl->get_page(pDataObject->sId);
+ pDataObject->pTabPage = (pDataObject->fnCreatePage)(pPage, m_pSet);
+ pDataObject->pTabPage->SetDialogController(this);
- OUString sConfigId = OStringToOUString(pDataObject->pTabPage->GetConfigId(), RTL_TEXTENCODING_UTF8);
- SvtViewOptions aPageOpt(EViewType::TabPage, sConfigId);
- OUString sUserData;
- Any aUserItem = aPageOpt.GetUserItem(USERITEM_NAME);
- OUString aTemp;
- if ( aUserItem >>= aTemp )
- sUserData = aTemp;
- pDataObject->pTabPage->SetUserData(sUserData);
+ OUString sConfigId = OStringToOUString(pDataObject->pTabPage->GetConfigId(), RTL_TEXTENCODING_UTF8);
+ SvtViewOptions aPageOpt(EViewType::TabPage, sConfigId);
+ OUString sUserData;
+ Any aUserItem = aPageOpt.GetUserItem(USERITEM_NAME);
+ OUString aTemp;
+ if ( aUserItem >>= aTemp )
+ sUserData = aTemp;
+ pDataObject->pTabPage->SetUserData(sUserData);
- PageCreated(rName, *pDataObject->pTabPage);
- pDataObject->pTabPage->Reset(m_pSet);
+ PageCreated(pDataObject->sId, *pDataObject->pTabPage);
+ pDataObject->pTabPage->Reset(m_pSet);
+ }
}
void SfxTabDialogController::RemoveTabPage(const OString& rId)
@@ -1996,6 +2004,8 @@ void SfxTabDialogController::RemoveTabPage(const OString& rId)
void SfxTabDialogController::Start_Impl()
{
+ CreatePages();
+
assert(m_pImpl->aData.size() == static_cast<size_t>(m_xTabCtrl->get_n_pages())
&& "not all pages registered");