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.k...@collabora.com> AuthorDate: Wed Jul 22 16:17:37 2020 +0200 Commit: Szymon Kłos <szymon.k...@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 <jenkinscollaboraoff...@gmail.com> Reviewed-by: Szymon Kłos <szymon.k...@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.k...@collabora.com> AuthorDate: Tue Jul 21 11:40:22 2020 +0200 Commit: Szymon Kłos <szymon.k...@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 <jenkinscollaboraoff...@gmail.com> Reviewed-by: Szymon Kłos <szymon.k...@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); } } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits