diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2024-01-22 08:36:28 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2024-01-24 06:58:14 +0100 |
commit | 76e9023c8abc823447b1128056e55238f90da8d6 (patch) | |
tree | de637aa9059a5baee266de2e48e9568a6b40e70f /sc/source | |
parent | 0d37cbb937e4c8a72de07621ae7d4943b4a032e8 (diff) |
convert more calc dialogs to async
Change-Id: I6349942f0a4d6156ef59f43a6e96049128f47524
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162360
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/ui/attrdlg/scdlgfact.cxx | 35 | ||||
-rw-r--r-- | sc/source/ui/attrdlg/scdlgfact.hxx | 39 | ||||
-rw-r--r-- | sc/source/ui/docshell/arealink.cxx | 30 | ||||
-rw-r--r-- | sc/source/ui/docshell/docsh4.cxx | 23 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/drawsh.cxx | 54 | ||||
-rw-r--r-- | sc/source/ui/pagedlg/tphfedit.cxx | 27 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 67 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh2.cxx | 10 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin2.cxx | 42 | ||||
-rw-r--r-- | sc/source/ui/view/pivotsh.cxx | 42 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwshb.cxx | 9 |
11 files changed, 246 insertions, 132 deletions
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx index 7fe3435d1bce..24fecf8e9966 100644 --- a/sc/source/ui/attrdlg/scdlgfact.cxx +++ b/sc/source/ui/attrdlg/scdlgfact.cxx @@ -148,6 +148,11 @@ short AbstractScDataFormDlg_Impl::Execute() return m_xDlg->run(); } +bool AbstractScDataFormDlg_Impl::StartExecuteAsync(AsyncContext& rCtx) +{ + return ScDataFormDlg::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + BitmapEx AbstractScDataFormDlg_Impl::createScreenshot() const { VclPtr<VirtualDevice> xDialogSurface(m_xDlg->getDialog()->screenshot()); @@ -245,6 +250,11 @@ short AbstractScPivotFilterDlg_Impl::Execute() return m_xDlg->run(); } +bool AbstractScPivotFilterDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) +{ + return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + short AbstractScDPFunctionDlg_Impl::Execute() { return m_xDlg->run(); @@ -270,21 +280,41 @@ short AbstractScDPNumGroupDlg_Impl::Execute() return m_xDlg->run(); } +bool AbstractScDPNumGroupDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) +{ + return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + short AbstractScDPDateGroupDlg_Impl::Execute() { return m_xDlg->run(); } +bool AbstractScDPDateGroupDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) +{ + return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + short AbstractScDPShowDetailDlg_Impl::Execute() { return m_xDlg->run(); } +bool AbstractScDPShowDetailDlg_Impl::StartExecuteAsync(AsyncContext& rCtx) +{ + return ScDPShowDetailDlg::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + short AbstractScNewScenarioDlg_Impl::Execute() { return m_xDlg->run(); } +bool AbstractScNewScenarioDlg_Impl::StartExecuteAsync(AsyncContext& rCtx) +{ + return ScNewScenarioDlg::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + short AbstractScShowTabDlg_Impl::Execute() { return m_xDlg->run(); @@ -334,6 +364,11 @@ short AbstractScLinkedAreaDlg_Impl::Execute() return m_xDlg->run(); } +bool AbstractScLinkedAreaDlg_Impl::StartExecuteAsync(AsyncContext& rCtx) +{ + return ScLinkedAreaDlg::runAsync(m_xDlg, rCtx.maEndDialogFn); +} + void AbstractScImportAsciiDlg_Impl::GetOptions( ScAsciiOptions& rOpt ) { m_xDlg->GetOptions( rOpt ); diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx index 880c1f153652..954e58f0f2a8 100644 --- a/sc/source/ui/attrdlg/scdlgfact.hxx +++ b/sc/source/ui/attrdlg/scdlgfact.hxx @@ -176,7 +176,7 @@ class AbstractScDeleteCellDlg_Impl : public AbstractScDeleteCellDlg { std::shared_ptr<ScDeleteCellDlg> m_xDlg; public: - explicit AbstractScDeleteCellDlg_Impl(std::unique_ptr<ScDeleteCellDlg> p) + explicit AbstractScDeleteCellDlg_Impl(std::shared_ptr<ScDeleteCellDlg> p) : m_xDlg(std::move(p)) { } @@ -192,13 +192,14 @@ public: //for dataform class AbstractScDataFormDlg_Impl : public AbstractScDataFormDlg { - std::unique_ptr<ScDataFormDlg> m_xDlg; + std::shared_ptr<ScDataFormDlg> m_xDlg; public: - explicit AbstractScDataFormDlg_Impl(std::unique_ptr<ScDataFormDlg> p) + explicit AbstractScDataFormDlg_Impl(std::shared_ptr<ScDataFormDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(AsyncContext& rCtx) override; // screenshotting virtual BitmapEx createScreenshot() const override; @@ -258,7 +259,7 @@ class AbstractScInsertCellDlg_Impl : public AbstractScInsertCellDlg { std::shared_ptr<ScInsertCellDlg> m_xDlg; public: - explicit AbstractScInsertCellDlg_Impl(std::unique_ptr<ScInsertCellDlg> p) + explicit AbstractScInsertCellDlg_Impl(std::shared_ptr<ScInsertCellDlg> p) : m_xDlg(std::move(p)) { } @@ -328,14 +329,15 @@ public: class AbstractScLinkedAreaDlg_Impl : public AbstractScLinkedAreaDlg { - std::unique_ptr<ScLinkedAreaDlg> m_xDlg; + std::shared_ptr<ScLinkedAreaDlg> m_xDlg; public: - explicit AbstractScLinkedAreaDlg_Impl(std::unique_ptr<ScLinkedAreaDlg> p) + explicit AbstractScLinkedAreaDlg_Impl(std::shared_ptr<ScLinkedAreaDlg> p) : m_xDlg(std::move(p)) { } virtual ~AbstractScLinkedAreaDlg_Impl() override; virtual short Execute() override; + virtual bool StartExecuteAsync(AsyncContext& rCtx) override; virtual void InitFromOldLink( const OUString& rFile, const OUString& rFilter, const OUString& rOptions, const OUString& rSource, sal_Int32 nRefreshDelaySeconds ) override; @@ -412,13 +414,14 @@ public: class AbstractScPivotFilterDlg_Impl : public AbstractScPivotFilterDlg { - std::unique_ptr<ScPivotFilterDlg> m_xDlg; + std::shared_ptr<ScPivotFilterDlg> m_xDlg; public: - explicit AbstractScPivotFilterDlg_Impl(std::unique_ptr<ScPivotFilterDlg> p) + explicit AbstractScPivotFilterDlg_Impl(std::shared_ptr<ScPivotFilterDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(AsyncContext& rCtx) override; virtual const ScQueryItem& GetOutputItem() override; }; @@ -454,50 +457,54 @@ public: class AbstractScDPNumGroupDlg_Impl : public AbstractScDPNumGroupDlg { - std::unique_ptr<ScDPNumGroupDlg> m_xDlg; + std::shared_ptr<ScDPNumGroupDlg> m_xDlg; public: - explicit AbstractScDPNumGroupDlg_Impl(std::unique_ptr<ScDPNumGroupDlg> p) + explicit AbstractScDPNumGroupDlg_Impl(std::shared_ptr<ScDPNumGroupDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override; virtual ScDPNumGroupInfo GetGroupInfo() const override; }; class AbstractScDPDateGroupDlg_Impl : public AbstractScDPDateGroupDlg { - std::unique_ptr<ScDPDateGroupDlg> m_xDlg; + std::shared_ptr<ScDPDateGroupDlg> m_xDlg; public: - explicit AbstractScDPDateGroupDlg_Impl(std::unique_ptr<ScDPDateGroupDlg> p) + explicit AbstractScDPDateGroupDlg_Impl(std::shared_ptr<ScDPDateGroupDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override; virtual ScDPNumGroupInfo GetGroupInfo() const override; virtual sal_Int32 GetDatePart() const override; }; class AbstractScDPShowDetailDlg_Impl : public AbstractScDPShowDetailDlg { - std::unique_ptr<ScDPShowDetailDlg> m_xDlg; + std::shared_ptr<ScDPShowDetailDlg> m_xDlg; public: - explicit AbstractScDPShowDetailDlg_Impl(std::unique_ptr<ScDPShowDetailDlg> p) + explicit AbstractScDPShowDetailDlg_Impl(std::shared_ptr<ScDPShowDetailDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override; virtual OUString GetDimensionName() const override; }; class AbstractScNewScenarioDlg_Impl : public AbstractScNewScenarioDlg { - std::unique_ptr<ScNewScenarioDlg> m_xDlg; + std::shared_ptr<ScNewScenarioDlg> m_xDlg; public: - explicit AbstractScNewScenarioDlg_Impl(std::unique_ptr<ScNewScenarioDlg> p) + explicit AbstractScNewScenarioDlg_Impl(std::shared_ptr<ScNewScenarioDlg> p) : m_xDlg(std::move(p)) { } virtual short Execute() override; + virtual bool StartExecuteAsync(AsyncContext& rCtx) override; virtual void SetScenarioData( const OUString& rName, const OUString& rComment, const Color& rColor, ScScenarioFlags nFlags ) override; diff --git a/sc/source/ui/docshell/arealink.cxx b/sc/source/ui/docshell/arealink.cxx index 31636bd148af..1ebd60763654 100644 --- a/sc/source/ui/docshell/arealink.cxx +++ b/sc/source/ui/docshell/arealink.cxx @@ -77,19 +77,25 @@ void ScAreaLink::Edit(weld::Window* pParent, const Link<SvBaseLink&,void>& /* rE // use own dialog instead of SvBaseLink::Edit... ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScLinkedAreaDlg> pDlg(pFact->CreateScLinkedAreaDlg(pParent)); + VclPtr<AbstractScLinkedAreaDlg> pDlg(pFact->CreateScLinkedAreaDlg(pParent)); pDlg->InitFromOldLink( aFileName, aFilterName, aOptions, aSourceArea, GetRefreshDelaySeconds() ); - if ( pDlg->Execute() == RET_OK ) - { - aOptions = pDlg->GetOptions(); - Refresh( pDlg->GetURL(), pDlg->GetFilter(), - pDlg->GetSource(), pDlg->GetRefreshDelaySeconds() ); - - // copy source data from members (set in Refresh) into link name for dialog - OUString aNewLinkName; - sfx2::MakeLnkName( aNewLinkName, nullptr, aFileName, aSourceArea, &aFilterName ); - SetName( aNewLinkName ); - } + pDlg->StartExecuteAsync( + [this, pDlg] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + aOptions = pDlg->GetOptions(); + Refresh( pDlg->GetURL(), pDlg->GetFilter(), + pDlg->GetSource(), pDlg->GetRefreshDelaySeconds() ); + + // copy source data from members (set in Refresh) into link name for dialog + OUString aNewLinkName; + sfx2::MakeLnkName( aNewLinkName, nullptr, aFileName, aSourceArea, &aFilterName ); + SetName( aNewLinkName ); + } + pDlg->disposeOnce(); + } + ); } ::sfx2::SvBaseLink::UpdateResult ScAreaLink::DataChanged( diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index e6fa6417dacb..9396b59518fe 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -973,14 +973,23 @@ void ScDocShell::Execute( SfxRequest& rReq ) ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScNewScenarioDlg> pNewDlg(pFact->CreateScNewScenarioDlg(GetActiveDialogParent(), aName, true, bSheetProtected)); + VclPtr<AbstractScNewScenarioDlg> pNewDlg(pFact->CreateScNewScenarioDlg(GetActiveDialogParent(), aName, true, bSheetProtected)); pNewDlg->SetScenarioData( aName, aComment, aColor, nFlags ); - if ( pNewDlg->Execute() == RET_OK ) - { - pNewDlg->GetScenarioData( aName, aComment, aColor, nFlags ); - ModifyScenario( nTab, aName, aComment, aColor, nFlags ); - rReq.Done(); - } + pNewDlg->StartExecuteAsync( + [this, pNewDlg, nTab] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + OUString aName2, aComment2; + Color aColor2; + ScScenarioFlags nFlags2; + pNewDlg->GetScenarioData( aName2, aComment2, aColor2, nFlags2 ); + ModifyScenario( nTab, aName2, aComment2, aColor2, nFlags2 ); + } + pNewDlg->disposeOnce(); + } + ); + rReq.Done(); } } } diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx index 43ef902ddd6b..dfc3d94ef79f 100644 --- a/sc/source/ui/drawfunc/drawsh.cxx +++ b/sc/source/ui/drawfunc/drawsh.cxx @@ -557,20 +557,25 @@ void ScDrawShell::ExecuteTextAttrDlg( SfxRequest& rReq ) SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); weld::Window* pWin = rViewData.GetDialogParent(); - ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateTextTabDialog(pWin, &aNewAttr, pView)); + VclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateTextTabDialog(pWin, &aNewAttr, pView)); - sal_uInt16 nResult = pDlg->Execute(); + pDlg->StartExecuteAsync( + [pDlg, bHasMarked, pView] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + if ( bHasMarked ) + pView->SetAttributes( *pDlg->GetOutputItemSet() ); + else + pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false ); - if ( RET_OK == nResult ) - { - if ( bHasMarked ) - pView->SetAttributes( *pDlg->GetOutputItemSet() ); - else - pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false ); + pView->InvalidateAttribs(); + } + pDlg->disposeOnce(); + } + ); - pView->InvalidateAttribs(); - rReq.Done(); - } + rReq.Done(); } void ScDrawShell::ExecuteMeasureDlg( SfxRequest& rReq ) @@ -584,20 +589,25 @@ void ScDrawShell::ExecuteMeasureDlg( SfxRequest& rReq ) SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); weld::Window* pWin = rViewData.GetDialogParent(); - ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog(pWin, aNewAttr, pView, RID_SVXPAGE_MEASURE)); + VclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog(pWin, aNewAttr, pView, RID_SVXPAGE_MEASURE)); - sal_uInt16 nResult = pDlg->Execute(); + pDlg->StartExecuteAsync( + [pDlg, bHasMarked, pView] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + if ( bHasMarked ) + pView->SetAttrToMarked( *pDlg->GetOutputItemSet(), false ); + else + pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false ); - if ( RET_OK == nResult ) - { - if ( bHasMarked ) - pView->SetAttrToMarked( *pDlg->GetOutputItemSet(), false ); - else - pView->SetDefaultAttr( *pDlg->GetOutputItemSet(), false ); + pView->InvalidateAttribs(); + } + pDlg->disposeOnce(); + } + ); - pView->InvalidateAttribs(); - rReq.Done(); - } + rReq.Done(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx index 617f2208a9f9..ffcdd167ae32 100644 --- a/sc/source/ui/pagedlg/tphfedit.cxx +++ b/sc/source/ui/pagedlg/tphfedit.cxx @@ -189,21 +189,26 @@ void ScEditWindow::SetCharAttributes() if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(true); - SfxItemSet aSet( m_xEditView->GetAttribs() ); + std::shared_ptr<SfxItemSet> xSet = std::make_shared<SfxItemSet>( m_xEditView->GetAttribs() ); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateScCharDlg( - mpDialog, &aSet, pDocSh, false)); + VclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateScCharDlg( + mpDialog, xSet.get(), pDocSh, false)); pDlg->SetText( ScResId( STR_TEXTATTRS ) ); - if ( pDlg->Execute() == RET_OK ) - { - aSet.ClearItem(); - aSet.Put( *pDlg->GetOutputItemSet() ); - m_xEditView->SetAttribs( aSet ); - } - - if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(false); + pDlg->StartExecuteAsync( + [this, pDlg, pTabViewSh, xSet] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + xSet->ClearItem(); + xSet->Put( *pDlg->GetOutputItemSet() ); + m_xEditView->SetAttribs( *xSet ); + } + pDlg->disposeOnce(); + if(pTabViewSh!=nullptr) pTabViewSh->SetInFormatDialog(false); + } + ); } bool ScEditWindow::KeyInput( const KeyEvent& rKEvt ) diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index ea9c1d948cc6..b54837ea763a 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -1213,13 +1213,19 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) if ( pTabViewShell->HasSelectionForDrillDown( nOrientation ) ) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScDPShowDetailDlg> pDlg( pFact->CreateScDPShowDetailDlg( + VclPtr<AbstractScDPShowDetailDlg> pDlg( pFact->CreateScDPShowDetailDlg( pTabViewShell->GetFrameWeld(), *pDPObj, nOrientation ) ); - if ( pDlg->Execute() == RET_OK ) - { - OUString aNewDimName( pDlg->GetDimensionName() ); - pTabViewShell->SetDataPilotDetails( true, &aNewDimName ); - } + pDlg->StartExecuteAsync( + [pDlg, pTabViewShell] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + OUString aNewDimName( pDlg->GetDimensionName() ); + pTabViewShell->SetDataPilotDetails( true, &aNewDimName ); + } + pDlg->disposeOnce(); + } + ); } else if ( !pDPObj->IsServiceData() && pDPObj->GetDataFieldPositionData( @@ -1252,22 +1258,31 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); const Date& rNullDate( GetViewData().GetDocument().GetFormatTable()->GetNullDate() ); - ScopedVclPtr<AbstractScDPDateGroupDlg> pDlg( pFact->CreateScDPDateGroupDlg( + VclPtr<AbstractScDPDateGroupDlg> pDlg( pFact->CreateScDPDateGroupDlg( pTabViewShell->GetFrameWeld(), aNumInfo, nParts, rNullDate ) ); - if( pDlg->Execute() == RET_OK ) - { - aNumInfo = pDlg->GetGroupInfo(); - pTabViewShell->DateGroupDataPilot( aNumInfo, pDlg->GetDatePart() ); - } + pDlg->StartExecuteAsync( + [pDlg, pTabViewShell] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + pTabViewShell->DateGroupDataPilot( pDlg->GetGroupInfo(), pDlg->GetDatePart() ); + pDlg->disposeOnce(); + } + ); } else if ( pTabViewShell->HasSelectionForNumGroup( aNumInfo ) ) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScDPNumGroupDlg> pDlg( pFact->CreateScDPNumGroupDlg( + VclPtr<AbstractScDPNumGroupDlg> pDlg( pFact->CreateScDPNumGroupDlg( pTabViewShell->GetFrameWeld(), aNumInfo ) ); - if( pDlg->Execute() == RET_OK ) - pTabViewShell->NumGroupDataPilot( pDlg->GetGroupInfo() ); + pDlg->StartExecuteAsync( + [pDlg, pTabViewShell] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + pTabViewShell->NumGroupDataPilot( pDlg->GetGroupInfo() ); + pDlg->disposeOnce(); + } + ); } else pTabViewShell->GroupDataPilot(); @@ -1719,14 +1734,20 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) ScAddress aCellPos(nPosX, nPosY, GetViewData().GetTabNo()); auto pObj = std::make_shared<ScImportExport>(GetViewData().GetDocument(), aCellPos); pObj->SetOverwriting(true); - if (pDlg->Execute()) { - ScAsciiOptions aOptions; - pDlg->GetOptions(aOptions); - pDlg->SaveParameters(); - pObj->SetExtOptions(aOptions); - pObj->ImportString(sStrBuffer, format); - } - pDlg->disposeOnce(); + pDlg->StartExecuteAsync( + [pDlg, pObj, sStrBuffer, format] (sal_Int32 nResult)->void + { + if (nResult) + { + ScAsciiOptions aOptions; + pDlg->GetOptions(aOptions); + pDlg->SaveParameters(); + pObj->SetExtOptions(aOptions); + pObj->ImportString(sStrBuffer, format); + } + pDlg->disposeOnce(); + } + ); rReq.SetReturnValue(SfxInt16Item(nSlot, 1)); // 1 = success, 0 = fail rReq.Done(); } diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index 71bcd6cac315..8911cb33fbc1 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -355,10 +355,14 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) { ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScDataFormDlg> pDlg(pFact->CreateScDataFormDlg( + VclPtr<AbstractScDataFormDlg> pDlg(pFact->CreateScDataFormDlg( pTabViewShell->GetFrameWeld(), pTabViewShell)); - - pDlg->Execute(); + pDlg->StartExecuteAsync( + [pDlg] (sal_Int32 /*nResult*/)->void + { + pDlg->disposeOnce(); + } + ); rReq.Done(); } diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx index 01f5f39dd7d3..c6af2c2cd74f 100644 --- a/sc/source/ui/view/gridwin2.cxx +++ b/sc/source/ui/view/gridwin2.cxx @@ -150,10 +150,9 @@ bool ScGridWindow::DoAutoFilterButton( SCCOL nCol, SCROW nRow, const MouseEvent& void ScGridWindow::DoPushPivotButton( SCCOL nCol, SCROW nRow, const MouseEvent& rMEvt, bool bButton, bool bPopup, bool bMultiField ) { - ScDocument& rDoc = mrViewData.GetDocument(); SCTAB nTab = mrViewData.GetTabNo(); - ScDPObject* pDPObj = rDoc.GetDPAtCursor(nCol, nRow, nTab); + ScDPObject* pDPObj = mrViewData.GetDocument().GetDPAtCursor(nCol, nRow, nTab); if (pDPObj) { @@ -211,24 +210,31 @@ void ScGridWindow::DoPushPivotButton( SCCOL nCol, SCROW nRow, const MouseEvent& ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScPivotFilterDlg> pDlg( + VclPtr<AbstractScPivotFilterDlg> pDlg( pFact->CreateScPivotFilterDlg( mrViewData.GetViewShell()->GetFrameWeld(), aArgSet, nSrcTab)); - if ( pDlg->Execute() == RET_OK ) - { - ScSheetSourceDesc aNewDesc(&rDoc); - if (pDesc) - aNewDesc = *pDesc; - - const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); - aNewDesc.SetQueryParam(rQueryItem.GetQueryData()); - - ScDPObject aNewObj( *pDPObj ); - aNewObj.SetSheetDesc( aNewDesc ); - ScDBDocFunc aFunc( *mrViewData.GetDocShell() ); - aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false ); - mrViewData.GetView()->CursorPosChanged(); // shells may be switched - } + pDlg->StartExecuteAsync( + [this, pDlg, pDesc, pDPObj] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + ScDocument& rDoc = mrViewData.GetDocument(); + ScSheetSourceDesc aNewDesc(&rDoc); + if (pDesc) + aNewDesc = *pDesc; + + const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); + aNewDesc.SetQueryParam(rQueryItem.GetQueryData()); + + ScDPObject aNewObj( *pDPObj ); + aNewObj.SetSheetDesc( aNewDesc ); + ScDBDocFunc aFunc( *mrViewData.GetDocShell() ); + aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false ); + mrViewData.GetView()->CursorPosChanged(); // shells may be switched + } + pDlg->disposeOnce(); + } + ); } } else diff --git a/sc/source/ui/view/pivotsh.cxx b/sc/source/ui/view/pivotsh.cxx index b4ef807ffa46..efef27ba8a9c 100644 --- a/sc/source/ui/view/pivotsh.cxx +++ b/sc/source/ui/view/pivotsh.cxx @@ -93,30 +93,36 @@ void ScPivotShell::Execute( const SfxRequest& rReq ) nSrcTab = pDesc->GetSourceRange().aStart.Tab(); } - ScViewData& rViewData = pViewShell->GetViewData(); SfxItemSetFixed<SCITEM_QUERYDATA, SCITEM_QUERYDATA> aArgSet( pViewShell->GetPool() ); - aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &rViewData, &aQueryParam ) ); + aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &pViewShell->GetViewData(), &aQueryParam ) ); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractScPivotFilterDlg> pDlg(pFact->CreateScPivotFilterDlg( + VclPtr<AbstractScPivotFilterDlg> pDlg(pFact->CreateScPivotFilterDlg( pViewShell->GetFrameWeld(), aArgSet, nSrcTab)); - if( pDlg->Execute() == RET_OK ) - { - ScSheetSourceDesc aNewDesc(&rViewData.GetDocument()); - if( pDesc ) - aNewDesc = *pDesc; - - const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); - aNewDesc.SetQueryParam(rQueryItem.GetQueryData()); - - ScDPObject aNewObj( *pDPObj ); - aNewObj.SetSheetDesc( aNewDesc ); - ScDBDocFunc aFunc( *rViewData.GetDocShell() ); - aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false ); - rViewData.GetView()->CursorPosChanged(); // shells may be switched - } + pDlg->StartExecuteAsync( + [this, pDlg, pDesc, pDPObj] (sal_Int32 nResult)->void + { + if (nResult == RET_OK) + { + ScViewData& rViewData = pViewShell->GetViewData(); + ScSheetSourceDesc aNewDesc(&rViewData.GetDocument()); + if( pDesc ) + aNewDesc = *pDesc; + + const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); + aNewDesc.SetQueryParam(rQueryItem.GetQueryData()); + + ScDPObject aNewObj( *pDPObj ); + aNewObj.SetSheetDesc( aNewDesc ); + ScDBDocFunc aFunc( *rViewData.GetDocShell() ); + aFunc.DataPilotUpdate( pDPObj, &aNewObj, true, false ); + rViewData.GetView()->CursorPosChanged(); // shells may be switched + } + pDlg->disposeOnce(); + } + ); } } break; diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx index 098ea68d33d5..57fb7f63b72d 100644 --- a/sc/source/ui/view/tabvwshb.cxx +++ b/sc/source/ui/view/tabvwshb.cxx @@ -443,9 +443,14 @@ void ScTabViewShell::ExecDrawIns(SfxRequest& rReq) const uno::Reference<frame::XModel> xModel( GetViewData().GetDocShell()->GetBaseModel() ); VclAbstractDialogFactory* pFact = VclAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractQrCodeGenDialog> pDialog(pFact->CreateQrCodeGenDialog( + VclPtr<AbstractQrCodeGenDialog> pDialog(pFact->CreateQrCodeGenDialog( pWin->GetFrameWeld(), xModel, rReq.GetSlot() == SID_EDIT_QRCODE)); - pDialog->Execute(); + pDialog->StartExecuteAsync( + [pDialog] (sal_Int32 /*nResult*/)->void + { + pDialog->disposeOnce(); + } + ); break; } |