cui/source/dialogs/splitcelldlg.cxx  |   35 ++++++++++++++++++++++++++++++-----
 cui/source/factory/dlgfact.cxx       |    2 +-
 cui/source/inc/splitcelldlg.hxx      |   20 ++++++++++++++++++--
 svx/source/table/tablecontroller.cxx |    9 +++++----
 sw/source/uibase/shells/tabsh.cxx    |   33 +++++++++++++++++++--------------
 5 files changed, 73 insertions(+), 26 deletions(-)

New commits:
commit ca189b78bc9bfb0e6fad72e3374bf8e8408093f0
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Sep 30 10:49:12 2020 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Oct 6 13:33:45 2020 +0200

    Make Split Table Cell dialog async
    
    Change-Id: I4efbb24f721aa50cc4dbbe78ae1e7e6087f8c876
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103670
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/cui/source/dialogs/splitcelldlg.cxx 
b/cui/source/dialogs/splitcelldlg.cxx
index 40b798b7c2c9..3de8082c939a 100644
--- a/cui/source/dialogs/splitcelldlg.cxx
+++ b/cui/source/dialogs/splitcelldlg.cxx
@@ -74,15 +74,40 @@ long SvxSplitTableDlg::GetCount() const
     return m_xCountEdit->get_value();
 }
 
-short SvxSplitTableDlg::Execute()
-{
-    return run();
-}
-
 void SvxSplitTableDlg::SetSplitVerticalByDefault()
 {
     if( mnMaxVertical >= 2 )
         m_xVertBox->set_active(true); // tdf#60242
 }
 
+bool SvxAbstractSplitTableDialog_Impl::IsHorizontal() const
+{
+    return m_xDlg->IsHorizontal();
+}
+
+bool SvxAbstractSplitTableDialog_Impl::IsProportional() const
+{
+    return m_xDlg->IsProportional();
+}
+
+long SvxAbstractSplitTableDialog_Impl::GetCount() const
+{
+    return m_xDlg->GetCount();
+}
+
+void SvxAbstractSplitTableDialog_Impl::SetSplitVerticalByDefault()
+{
+    m_xDlg->SetSplitVerticalByDefault();
+}
+
+short SvxAbstractSplitTableDialog_Impl::Execute()
+{
+    return m_xDlg->run();
+}
+
+bool SvxAbstractSplitTableDialog_Impl::StartExecuteAsync(AsyncContext& 
rContext)
+{
+    return weld::DialogController::runAsync(m_xDlg, rContext.maEndDialogFn);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 46180fc4435c..be6351d04b8b 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -1619,7 +1619,7 @@ std::shared_ptr<AbstractTabController> 
AbstractDialogFactory_Impl::CreateSvxForm
 
 VclPtr<SvxAbstractSplitTableDialog> 
AbstractDialogFactory_Impl::CreateSvxSplitTableDialog(weld::Window* pParent, 
bool bIsTableVertical, long nMaxVertical)
 {
-    return VclPtr<SvxSplitTableDlg>::Create( pParent, bIsTableVertical, 
nMaxVertical, 99 );
+    return VclPtr<SvxAbstractSplitTableDialog_Impl>::Create( 
std::make_shared<SvxSplitTableDlg>(pParent, bIsTableVertical, nMaxVertical, 99 
));
 }
 
 std::shared_ptr<SvxAbstractNewTableDialog> 
AbstractDialogFactory_Impl::CreateSvxNewTableDialog(weld::Window* pParent)
diff --git a/cui/source/inc/splitcelldlg.hxx b/cui/source/inc/splitcelldlg.hxx
index b0c2fddae3c7..44df027d3a93 100644
--- a/cui/source/inc/splitcelldlg.hxx
+++ b/cui/source/inc/splitcelldlg.hxx
@@ -22,7 +22,7 @@
 #include <svx/svxdlg.hxx>
 #include <vcl/weld.hxx>
 
-class SvxSplitTableDlg : public SvxAbstractSplitTableDialog, public 
weld::GenericDialogController
+class SvxSplitTableDlg : public weld::GenericDialogController
 {
 private:
     std::unique_ptr<weld::SpinButton> m_xCountEdit;
@@ -38,12 +38,28 @@ public:
 
     DECL_LINK(ClickHdl, weld::Button&, void);
 
+    virtual bool IsHorizontal() const;
+    virtual bool IsProportional() const;
+    virtual long GetCount() const;
+
+    virtual void SetSplitVerticalByDefault();
+};
+
+class SvxAbstractSplitTableDialog_Impl : public SvxAbstractSplitTableDialog
+{
+    std::shared_ptr<SvxSplitTableDlg> m_xDlg;
+
+public:
+    SvxAbstractSplitTableDialog_Impl(std::shared_ptr<SvxSplitTableDlg> pDlg) : 
m_xDlg(std::move(pDlg)) {}
+
     virtual bool IsHorizontal() const override;
     virtual bool IsProportional() const override;
     virtual long GetCount() const override;
 
-    virtual short Execute() override;
     virtual void SetSplitVerticalByDefault() override;
+
+    virtual short Execute() override;
+    virtual bool StartExecuteAsync(AsyncContext& rContext) override;
 };
 
 #endif
diff --git a/svx/source/table/tablecontroller.cxx 
b/svx/source/table/tablecontroller.cxx
index 48a73e528143..d6541073be6e 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -1279,10 +1279,9 @@ void SvxTableController::SplitMarkedCells(const 
SfxRequest& rReq)
         return;
 
     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
-    ScopedVclPtr<SvxAbstractSplitTableDialog> 
xDlg(pFact->CreateSvxSplitTableDialog(rReq.GetFrameWeld(), false, 99));
+    VclPtr<SvxAbstractSplitTableDialog> 
xDlg(pFact->CreateSvxSplitTableDialog(rReq.GetFrameWeld(), false, 99));
 
-    if( xDlg->Execute() )
-    {
+    xDlg->StartExecuteAsync([xDlg, this](int) {
         const sal_Int32 nCount = xDlg->GetCount() - 1;
 
         if( nCount < 1 )
@@ -1324,7 +1323,9 @@ void SvxTableController::SplitMarkedCells(const 
SfxRequest& rReq)
         aEnd.mnCol += mxTable->getColumnCount() - nColCount;
 
         setSelectedCells( aStart, aEnd );
-    }
+
+        xDlg->disposeOnce();
+    });
 }
 
 void SvxTableController::DistributeColumns(const bool bOptimize, const bool 
bMinimize)
diff --git a/sw/source/uibase/shells/tabsh.cxx 
b/sw/source/uibase/shells/tabsh.cxx
index 073fe280c924..10ad72aff6a0 100644
--- a/sw/source/uibase/shells/tabsh.cxx
+++ b/sw/source/uibase/shells/tabsh.cxx
@@ -987,23 +987,28 @@ void SwTableShell::Execute(SfxRequest &rReq)
             else
             {
                 SvxAbstractDialogFactory* pFact = 
SvxAbstractDialogFactory::Create();
+                SwWrtShell* pSh = &rSh;
                 const long nMaxVert = rSh.GetAnyCurRect( CurRectType::Frame 
).Width() / MINLAY;
-                ScopedVclPtr<SvxAbstractSplitTableDialog> 
pDlg(pFact->CreateSvxSplitTableDialog(GetView().GetFrameWeld(), 
rSh.IsTableVertical(), nMaxVert));
+                VclPtr<SvxAbstractSplitTableDialog> 
pDlg(pFact->CreateSvxSplitTableDialog(GetView().GetFrameWeld(), 
rSh.IsTableVertical(), nMaxVert));
                 if(rSh.IsSplitVerticalByDefault())
                     pDlg->SetSplitVerticalByDefault();
-                if( pDlg->Execute() == RET_OK )
-                {
-                    nCount = pDlg->GetCount();
-                    bHorizontal = pDlg->IsHorizontal();
-                    bProportional = pDlg->IsProportional();
-                    rReq.AppendItem( SfxInt32Item( FN_TABLE_SPLIT_CELLS, 
nCount ) );
-                    rReq.AppendItem( SfxBoolItem( FN_PARAM_1, bHorizontal ) );
-                    rReq.AppendItem( SfxBoolItem( FN_PARAM_2, bProportional ) 
);
-
-                    // tdf#60242: remember choice for next time
-                    bool bVerticalWasChecked = !pDlg->IsHorizontal();
-                    rSh.SetSplitVerticalByDefault(bVerticalWasChecked);
-                }
+                pDlg->StartExecuteAsync([pDlg, pSh](int nResult) {
+                    if (nResult == RET_OK)
+                    {
+                        long nCount2 = pDlg->GetCount();
+                        bool bHorizontal2 = pDlg->IsHorizontal();
+                        bool bProportional2 = pDlg->IsProportional();
+
+                        // tdf#60242: remember choice for next time
+                        bool bVerticalWasChecked = !pDlg->IsHorizontal();
+                        pSh->SetSplitVerticalByDefault(bVerticalWasChecked);
+
+                        if ( nCount2 > 1 )
+                            pSh->SplitTab(!bHorizontal2, static_cast< 
sal_uInt16 >( nCount2-1 ), bProportional2 );
+                    }
+
+                    pDlg->disposeOnce();
+                });
             }
 
             if ( nCount>1 )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to