[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