[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - 2 commits - cui/source include/svx sc/inc sc/source svx/source
Szymon KÅos (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jul 23 08:39:31 UTC 2020
cui/source/factory/dlgfact.cxx | 19 +++++++++-
cui/source/factory/dlgfact.hxx | 15 +++++++-
include/svx/svxdlg.hxx | 11 +++++
sc/inc/scabstdlg.hxx | 11 +++++
sc/source/ui/attrdlg/scdlgfact.cxx | 19 +++++++++-
sc/source/ui/attrdlg/scdlgfact.hxx | 15 +++++++-
sc/source/ui/view/cellsh2.cxx | 65 ++++++++---------------------------
svx/source/table/tablecontroller.cxx | 63 ++++++++++++++++++---------------
8 files changed, 131 insertions(+), 87 deletions(-)
New commits:
commit f5c74d4deecce1e0adc9fc0ac4545b880e3b2564
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Jul 22 16:17:37 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Thu Jul 23 10:39:09 2020 +0200
Make Table Properties dialog async
Change-Id: I0fb84ed3660f9a153ad89126a927299954360c2f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99228
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 5c1979943ac3..46180fc4435c 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -385,6 +385,21 @@ OString CuiAbstractTabController_Impl::GetScreenshotId() const
return m_xDlg->GetScreenshotId();
}
+bool CuiAsyncAbstractTabController_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx)
+{
+ return SfxTabDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
+void CuiAsyncAbstractTabController_Impl::SetCurPageId( const OString &rName )
+{
+ m_xDlg->SetCurPageId( rName );
+}
+
+const SfxItemSet* CuiAsyncAbstractTabController_Impl::GetOutputItemSet() const
+{
+ return m_xDlg->GetOutputItemSet();
+}
+
const SfxItemSet* CuiAbstractSingleTabController_Impl::GetOutputItemSet() const
{
return m_xDlg->GetOutputItemSet();
@@ -1597,9 +1612,9 @@ VclPtr<SfxAbstractLinksDialog> AbstractDialogFactory_Impl::CreateLinksDialog(wel
return VclPtr<AbstractLinksDialog_Impl>::Create(std::move(xLinkDlg));
}
-VclPtr<SfxAbstractTabDialog> AbstractDialogFactory_Impl::CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel)
+std::shared_ptr<AbstractTabController> AbstractDialogFactory_Impl::CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel)
{
- return VclPtr<CuiAbstractTabController_Impl>::Create(std::make_unique<SvxFormatCellsDialog>(pParent, pAttr, rModel));
+ return std::make_shared<CuiAsyncAbstractTabController_Impl>(std::make_unique<SvxFormatCellsDialog>(pParent, pAttr, rModel));
}
VclPtr<SvxAbstractSplitTableDialog> AbstractDialogFactory_Impl::CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical)
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index c7e66c44556d..27566e6a7224 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -161,6 +161,19 @@ public:
virtual OString GetScreenshotId() const override;
};
+class CuiAsyncAbstractTabController_Impl : public AbstractTabController
+{
+ std::shared_ptr<SfxTabDialogController> m_xDlg;
+public:
+ explicit CuiAsyncAbstractTabController_Impl(std::unique_ptr<SfxTabDialogController> p)
+ : m_xDlg(std::move(p))
+ {
+ }
+ virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override;
+ virtual void SetCurPageId( const OString &rName ) override;
+ virtual const SfxItemSet* GetOutputItemSet() const override;
+};
+
class SvxDistributeDialog;
class AbstractSvxDistributeDialog_Impl: public AbstractSvxDistributeDialog
{
@@ -922,7 +935,7 @@ public:
const sal_uInt16 _nInitiallySelectedEvent
) override;
- virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel) override;
+ virtual std::shared_ptr<AbstractTabController> CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel) override;
virtual VclPtr<SvxAbstractSplitTableDialog> CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical) override;
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index b0be803adbd7..f81a8d983539 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -67,6 +67,15 @@ namespace weld{
class Window;
}
+class AbstractTabController
+{
+public:
+ virtual ~AbstractTabController() = default;
+ virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) = 0;
+ virtual void SetCurPageId( const OString &rName ) = 0;
+ virtual const SfxItemSet* GetOutputItemSet() const = 0;
+};
+
class AbstractSvxDistributeDialog :public VclAbstractDialog
{
protected:
@@ -461,7 +470,7 @@ public:
const sal_uInt16 _nInitiallySelectedEvent
) = 0;
- virtual VclPtr<SfxAbstractTabDialog> CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel )=0;
+ virtual std::shared_ptr<AbstractTabController> CreateSvxFormatCellsDialog(weld::Window* pParent, const SfxItemSet* pAttr, const SdrModel& rModel )=0;
virtual VclPtr<SvxAbstractSplitTableDialog> CreateSvxSplitTableDialog(weld::Window* pParent, bool bIsTableVertical, long nMaxVertical) = 0;
diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx
index a153c2b6db62..d5d0468c530f 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -910,46 +910,51 @@ void SvxTableController::onFormatTable(const SfxRequest& rReq)
aNewAttr.Put( aBoxInfoItem );
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
- ScopedVclPtr<SfxAbstractTabDialog> xDlg( pFact->CreateSvxFormatCellsDialog(
+ std::shared_ptr<AbstractTabController> xDlg( pFact->CreateSvxFormatCellsDialog(
rReq.GetFrameWeld(),
&aNewAttr,
rModel) );
- // Even Cancel Button is returning positive(101) value,
- if (xDlg->Execute() == RET_OK)
- {
- SfxItemSet aNewSet(*(xDlg->GetOutputItemSet()));
-
- //Only properties that were unchanged by the dialog appear in this
- //itemset. We had constructed these two properties from other
- //ones, so if they were not changed, then forcible set them back to
- //their originals in the new result set so we can decompose that
- //unchanged state back to their input properties
- if (aNewSet.GetItemState(SDRATTR_TABLE_BORDER, false) != SfxItemState::SET)
- {
- aNewSet.Put(aBoxItem);
- }
- if (aNewSet.GetItemState(SDRATTR_TABLE_BORDER_INNER, false) != SfxItemState::SET)
+ SvxTableController* pThis = this;
+ VclAbstractDialog::AsyncContext aContext;
+ aContext.maEndDialogFn = [xDlg, pThis, aBoxItem, aBoxInfoItem](int nResult){
+ if (nResult == RET_OK)
{
- aNewSet.Put(aBoxInfoItem);
- }
+ SfxItemSet aNewSet(*(xDlg->GetOutputItemSet()));
+
+ //Only properties that were unchanged by the dialog appear in this
+ //itemset. We had constructed these two properties from other
+ //ones, so if they were not changed, then forcible set them back to
+ //their originals in the new result set so we can decompose that
+ //unchanged state back to their input properties
+ if (aNewSet.GetItemState(SDRATTR_TABLE_BORDER, false) != SfxItemState::SET)
+ {
+ aNewSet.Put(aBoxItem);
+ }
+ if (aNewSet.GetItemState(SDRATTR_TABLE_BORDER_INNER, false) != SfxItemState::SET)
+ {
+ aNewSet.Put(aBoxInfoItem);
+ }
- SvxBoxItem aNewBoxItem( aNewSet.Get( SDRATTR_TABLE_BORDER ) );
+ SvxBoxItem aNewBoxItem( aNewSet.Get( SDRATTR_TABLE_BORDER ) );
- if( aNewBoxItem.GetDistance( SvxBoxItemLine::LEFT ) != aBoxItem.GetDistance( SvxBoxItemLine::LEFT ) )
- aNewSet.Put(makeSdrTextLeftDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::LEFT ) ) );
+ if( aNewBoxItem.GetDistance( SvxBoxItemLine::LEFT ) != aBoxItem.GetDistance( SvxBoxItemLine::LEFT ) )
+ aNewSet.Put(makeSdrTextLeftDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::LEFT ) ) );
- if( aNewBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) != aBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) )
- aNewSet.Put(makeSdrTextRightDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) ) );
+ if( aNewBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) != aBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) )
+ aNewSet.Put(makeSdrTextRightDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::RIGHT ) ) );
- if( aNewBoxItem.GetDistance( SvxBoxItemLine::TOP ) != aBoxItem.GetDistance( SvxBoxItemLine::TOP ) )
- aNewSet.Put(makeSdrTextUpperDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::TOP ) ) );
+ if( aNewBoxItem.GetDistance( SvxBoxItemLine::TOP ) != aBoxItem.GetDistance( SvxBoxItemLine::TOP ) )
+ aNewSet.Put(makeSdrTextUpperDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::TOP ) ) );
- if( aNewBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) != aBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) )
- aNewSet.Put(makeSdrTextLowerDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) ) );
+ if( aNewBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) != aBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) )
+ aNewSet.Put(makeSdrTextLowerDistItem( aNewBoxItem.GetDistance( SvxBoxItemLine::BOTTOM ) ) );
- SetAttrToSelectedCells(aNewSet, false);
- }
+ pThis->SetAttrToSelectedCells(aNewSet, false);
+ }
+ };
+
+ xDlg->StartExecuteAsync(aContext);
}
}
commit 353a093c508562c14dada49c2e1d937e5e02e642
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Jul 21 11:40:22 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Thu Jul 23 10:38:53 2020 +0200
Make Sort dialog async
Change-Id: I914e09e59561e261dc2807ad00615d3b58afa541
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99127
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index 16690afefcc0..2991a224f3ea 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -52,6 +52,15 @@ namespace com { namespace sun { namespace star { namespace sheet {
struct DataPilotFieldReference;
} } } }
+class ScAsyncTabController
+{
+public:
+ virtual ~ScAsyncTabController() = default;
+ virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) = 0;
+ virtual const SfxItemSet* GetOutputItemSet() const = 0;
+ virtual void SetCurPageId( const OString &rName ) = 0;
+};
+
class AbstractScImportAsciiDlg : public VclAbstractDialog
{
protected:
@@ -537,7 +546,7 @@ public:
virtual VclPtr<SfxAbstractTabDialog> CreateScParagraphDlg(weld::Window* pParent,
const SfxItemSet* pAttr) = 0;
- virtual VclPtr<SfxAbstractTabDialog> CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet) = 0;
+ virtual std::shared_ptr<ScAsyncTabController> CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet) = 0;
// for tabpage
virtual CreateTabPage GetTabPageCreatorFunc( sal_uInt16 nId ) = 0;
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index af0bcfdef27e..238a46fb725e 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -935,6 +935,21 @@ OString ScAbstractTabController_Impl::GetScreenshotId() const
return m_xDlg->GetScreenshotId();
}
+bool ScAsyncTabController_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx)
+{
+ return SfxTabDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
+}
+
+void ScAsyncTabController_Impl::SetCurPageId( const OString &rName )
+{
+ m_xDlg->SetCurPageId( rName );
+}
+
+const SfxItemSet* ScAsyncTabController_Impl::GetOutputItemSet() const
+{
+ return m_xDlg->GetOutputItemSet();
+}
+
// =========================Factories for createdialog ===================
VclPtr<AbstractScImportAsciiDlg> ScAbstractDialogFactory_Impl::CreateScImportAsciiDlg(weld::Window* pParent,
const OUString& aDatName,
@@ -1236,9 +1251,9 @@ VclPtr<SfxAbstractTabDialog> ScAbstractDialogFactory_Impl::CreateScParagraphDlg(
return VclPtr<ScAbstractTabController_Impl>::Create(std::make_unique<ScParagraphDlg>(pParent, pAttr));
}
-VclPtr<SfxAbstractTabDialog> ScAbstractDialogFactory_Impl::CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet)
+std::shared_ptr<ScAsyncTabController> ScAbstractDialogFactory_Impl::CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet)
{
- return VclPtr<ScAbstractTabController_Impl>::Create(std::make_unique<ScSortDlg>(pParent, pArgSet));
+ return std::make_shared<ScAsyncTabController_Impl>(std::make_unique<ScSortDlg>(pParent, pArgSet));
}
//------------------ Factories for TabPages--------------------
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index 60e5a6bc35d8..aa9c28a35ebb 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -652,6 +652,19 @@ public:
virtual OString GetScreenshotId() const override;
};
+class ScAsyncTabController_Impl : public ScAsyncTabController
+{
+ std::shared_ptr<SfxTabDialogController> m_xDlg;
+public:
+ explicit ScAsyncTabController_Impl(std::unique_ptr<SfxTabDialogController> p)
+ : m_xDlg(std::move(p))
+ {
+ }
+ virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override;
+ virtual const SfxItemSet* GetOutputItemSet() const override;
+ virtual void SetCurPageId( const OString &rName ) override;
+};
+
//AbstractDialogFactory_Impl implementations
class ScAbstractDialogFactory_Impl : public ScAbstractDialogFactory
{
@@ -801,7 +814,7 @@ public:
virtual VclPtr<SfxAbstractTabDialog> CreateScParagraphDlg(weld::Window* pParent,
const SfxItemSet* pAttr) override;
- virtual VclPtr<SfxAbstractTabDialog> CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet) override;
+ virtual std::shared_ptr<ScAsyncTabController> CreateScSortDlg(weld::Window* pParent, const SfxItemSet* pArgSet) override;
// For TabPage
virtual CreateTabPage GetTabPageCreatorFunc( sal_uInt16 nId ) override;
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index 8be53409fb9b..805212fae00f 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -514,64 +514,29 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
aArgSet.Put( ScSortItem( SCITEM_SORTDATA, GetViewData(), &aSortParam ) );
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
- ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateScSortDlg(pTabViewShell->GetFrameWeld(), &aArgSet));
+ std::shared_ptr<ScAsyncTabController> pDlg(pFact->CreateScSortDlg(pTabViewShell->GetFrameWeld(), &aArgSet));
pDlg->SetCurPageId("criteria"); // 1=sort field tab 2=sort options tab
- if ( pDlg->Execute() == RET_OK )
- {
- const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
- const ScSortParam& rOutParam = static_cast<const ScSortItem&>(
- pOutSet->Get( SCITEM_SORTDATA )).GetSortData();
-
- // subtotal when needed new
-
- pTabViewShell->UISort( rOutParam );
-
- if ( rOutParam.bInplace )
+ VclAbstractDialog::AsyncContext aContext;
+ aContext.maEndDialogFn = [pDlg, pData, pTabViewShell](sal_Int32 nResult)
{
- rReq.AppendItem( SfxBoolItem( SID_SORT_BYROW,
- rOutParam.bByRow ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_HASHEADER,
- rOutParam.bHasHeader ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_CASESENS,
- rOutParam.bCaseSens ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_NATURALSORT,
- rOutParam.bNaturalSort ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_INCCOMMENTS,
- rOutParam.bIncludeComments ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_INCIMAGES,
- rOutParam.bIncludeGraphicObjects ) );
- rReq.AppendItem( SfxBoolItem( SID_SORT_ATTRIBS,
- rOutParam.bIncludePattern ) );
- sal_uInt16 nUser = rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0;
- rReq.AppendItem( SfxUInt16Item( SID_SORT_USERDEF, nUser ) );
- if ( rOutParam.maKeyState[0].bDoSort )
- {
- rReq.AppendItem( SfxInt32Item( FN_PARAM_1,
- rOutParam.maKeyState[0].nField + 1 ) );
- rReq.AppendItem( SfxBoolItem( FN_PARAM_2,
- rOutParam.maKeyState[0].bAscending ) );
- }
- if ( rOutParam.maKeyState[1].bDoSort )
+ if ( nResult == RET_OK )
{
- rReq.AppendItem( SfxInt32Item( FN_PARAM_3,
- rOutParam.maKeyState[1].nField + 1 ) );
- rReq.AppendItem( SfxBoolItem( FN_PARAM_4,
- rOutParam.maKeyState[1].bAscending ) );
+ const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
+ const ScSortParam& rOutParam = static_cast<const ScSortItem&>(
+ pOutSet->Get( SCITEM_SORTDATA )).GetSortData();
+
+ // subtotal when needed new
+
+ pTabViewShell->UISort( rOutParam );
}
- if ( rOutParam.maKeyState[2].bDoSort )
+ else
{
- rReq.AppendItem( SfxInt32Item( FN_PARAM_5,
- rOutParam.maKeyState[2].nField + 1 ) );
- rReq.AppendItem( SfxBoolItem( FN_PARAM_6,
- rOutParam.maKeyState[2].bAscending ) );
+ pData->GetDocShell()->CancelAutoDBRange();
}
- }
+ };
- rReq.Done();
- }
- else
- GetViewData()->GetDocShell()->CancelAutoDBRange();
+ pDlg->StartExecuteAsync(aContext);
}
}
}
More information about the Libreoffice-commits
mailing list