sc/source/ui/docshell/docsh3.cxx       |   35 ++++++-----
 sc/source/ui/inc/conflictsdlg.hxx      |   12 +--
 sc/source/ui/miscdlgs/conflictsdlg.cxx |  101 ++++++++++++++-------------------
 3 files changed, 67 insertions(+), 81 deletions(-)

New commits:
commit b3ff9cf60efa2fc6d29c5581bd895f71daf55611
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri May 2 12:56:05 2025 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri May 2 14:02:49 2025 +0200

    ScConflictsDlg: pass ScViewData by ref
    
    and other related changes
    
    Change-Id: I13f8c81e5715d9adea05e4d89443ec6ef8faf24a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184899
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index cff0de599843..23aa5dcf3a79 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -1216,25 +1216,28 @@ bool ScDocShell::MergeSharedDocument( ScDocShell* 
pSharedDocShell )
             if ( aFinder.Find() )
             {
                 ScConflictsListHelper::TransformConflictsList( aConflictsList, 
nullptr, &aOwnInverseMergeMap );
-                bool bLoop = true;
-                while ( bLoop )
+                if (ScViewData* pViewData = GetViewData())
                 {
-                    bLoop = false;
-                    weld::Window* pWin = GetActiveDialogParent();
-                    ScConflictsDlg aDlg(pWin, GetViewData(), &rSharedDoc, 
aConflictsList);
-                    if (aDlg.run() == RET_CANCEL)
+                    bool bLoop = true;
+                    while ( bLoop )
                     {
-                        std::unique_ptr<weld::MessageDialog> 
xQueryBox(Application::CreateMessageDialog(pWin,
-                                                                       
VclMessageType::Question, VclButtonsType::YesNo,
-                                                                       
ScResId(STR_DOC_WILLNOTBESAVED)));
-                        xQueryBox->set_default_response(RET_YES);
-                        if (xQueryBox->run() == RET_YES)
+                        bLoop = false;
+                        weld::Window* pWin = GetActiveDialogParent();
+                        ScConflictsDlg aDlg(pWin, *pViewData, rSharedDoc, 
aConflictsList);
+                        if (aDlg.run() == RET_CANCEL)
                         {
-                            return false;
-                        }
-                        else
-                        {
-                            bLoop = true;
+                            std::unique_ptr<weld::MessageDialog> 
xQueryBox(Application::CreateMessageDialog(pWin,
+                                                                           
VclMessageType::Question, VclButtonsType::YesNo,
+                                                                           
ScResId(STR_DOC_WILLNOTBESAVED)));
+                            xQueryBox->set_default_response(RET_YES);
+                            if (xQueryBox->run() == RET_YES)
+                            {
+                                return false;
+                            }
+                            else
+                            {
+                                bLoop = true;
+                            }
                         }
                     }
                 }
diff --git a/sc/source/ui/inc/conflictsdlg.hxx 
b/sc/source/ui/inc/conflictsdlg.hxx
index f0ab643e0533..2c2c0c6d576b 100644
--- a/sc/source/ui/inc/conflictsdlg.hxx
+++ b/sc/source/ui/inc/conflictsdlg.hxx
@@ -107,11 +107,9 @@ class ScConflictsDlg : public weld::GenericDialogController
 private:
     OUString            maStrUnknownUser;
 
-    ScViewData* const   mpViewData;
-    ScDocument*         mpOwnDoc;
-    ScChangeTrack*      mpOwnTrack;
-    ScDocument* const   mpSharedDoc;
-    ScChangeTrack*      mpSharedTrack;
+    ScViewData&         mrViewData;
+    ScDocument&         mrOwnDoc;
+    ScDocument&         mrSharedDoc;
     ScConflictsList&    mrConflictsList;
 
     Idle                maSelectionIdle;
@@ -124,7 +122,7 @@ private:
     std::unique_ptr<SvxRedlinTable> m_xLbConflicts;
 
     OUString            GetConflictString( const ScConflictsListEntry& 
rConflictEntry );
-    void                SetActionString(const ScChangeAction* pAction, 
ScDocument* pDoc, const weld::TreeIter& rEntry);
+    void                SetActionString(ScChangeAction& rAction, ScDocument& 
rDoc, const weld::TreeIter& rEntry);
     void                HandleListBoxSelection();
 
     void                SetConflictAction(const weld::TreeIter& rRootEntry, 
ScConflictAction eConflictAction);
@@ -139,7 +137,7 @@ private:
     DECL_LINK( KeepAllOthersHandle, weld::Button&, void );
 
 public:
-    ScConflictsDlg(weld::Window* pParent, ScViewData* pViewData, ScDocument* 
pSharedDoc, ScConflictsList& rConflictsList);
+    ScConflictsDlg(weld::Window* pParent, ScViewData& rViewData, ScDocument& 
rSharedDoc, ScConflictsList& rConflictsList);
     virtual ~ScConflictsDlg() override;
 
     void                UpdateView();
diff --git a/sc/source/ui/miscdlgs/conflictsdlg.cxx 
b/sc/source/ui/miscdlgs/conflictsdlg.cxx
index 524b887816da..f461995d1c9a 100644
--- a/sc/source/ui/miscdlgs/conflictsdlg.cxx
+++ b/sc/source/ui/miscdlgs/conflictsdlg.cxx
@@ -319,14 +319,12 @@ void ScConflictsResolver::HandleAction( ScChangeAction* 
pAction, bool bIsSharedA
 }
 
 
-ScConflictsDlg::ScConflictsDlg(weld::Window* pParent, ScViewData* pViewData, 
ScDocument* pSharedDoc, ScConflictsList& rConflictsList)
+ScConflictsDlg::ScConflictsDlg(weld::Window* pParent, ScViewData& rViewData, 
ScDocument& rSharedDoc, ScConflictsList& rConflictsList)
     : GenericDialogController(pParent, 
u"modules/scalc/ui/conflictsdialog.ui"_ustr, u"ConflictsDialog"_ustr)
     , maStrUnknownUser   ( ScResId( STR_UNKNOWN_USER_CONFLICT ) )
-    , mpViewData         ( pViewData )
-    , mpOwnDoc           ( nullptr )
-    , mpOwnTrack         ( nullptr )
-    , mpSharedDoc        ( pSharedDoc )
-    , mpSharedTrack      ( nullptr )
+    , mrViewData         ( rViewData )
+    , mrOwnDoc           ( mrViewData.GetDocument() )
+    , mrSharedDoc        ( rSharedDoc )
     , mrConflictsList    ( rConflictsList )
     , maSelectionIdle    ( "ScConflictsDlg maSelectionIdle" )
     , mbInSelectHdl      ( false )
@@ -337,14 +335,6 @@ ScConflictsDlg::ScConflictsDlg(weld::Window* pParent, 
ScViewData* pViewData, ScD
     , m_xLbConflicts(new 
SvxRedlinTable(m_xBuilder->weld_tree_view(u"container"_ustr), nullptr,
                                         nullptr))
 {
-    OSL_ENSURE( mpViewData, "ScConflictsDlg CTOR: mpViewData is null!" );
-    mpOwnDoc = ( mpViewData ? &mpViewData->GetDocument() : nullptr );
-    OSL_ENSURE( mpOwnDoc, "ScConflictsDlg CTOR: mpOwnDoc is null!" );
-    mpOwnTrack = ( mpOwnDoc ? mpOwnDoc->GetChangeTrack() : nullptr );
-    OSL_ENSURE( mpOwnTrack, "ScConflictsDlg CTOR: mpOwnTrack is null!" );
-    OSL_ENSURE( mpSharedDoc, "ScConflictsDlg CTOR: mpSharedDoc is null!" );
-    mpSharedTrack = ( mpSharedDoc ? mpSharedDoc->GetChangeTrack() : nullptr );
-    OSL_ENSURE( mpSharedTrack, "ScConflictsDlg CTOR: mpSharedTrack is null!" );
 
     weld::TreeView& rTreeView = m_xLbConflicts->GetWidget();
 
@@ -382,37 +372,33 @@ ScConflictsDlg::~ScConflictsDlg()
 OUString ScConflictsDlg::GetConflictString( const ScConflictsListEntry& 
rConflictEntry )
 {
     OUString aString;
-    if ( mpOwnTrack )
+    if ( ScChangeTrack* pOwnTrack = mrOwnDoc.GetChangeTrack() )
     {
-        const ScChangeAction* pAction = mpOwnTrack->GetAction( 
rConflictEntry.maOwnActions[ 0 ] );
-        if ( pAction && mpOwnDoc )
+        const ScChangeAction* pAction = pOwnTrack->GetAction( 
rConflictEntry.maOwnActions[ 0 ] );
+        if ( pAction )
         {
-            SCTAB nTab = pAction->GetBigRange().MakeRange( *mpOwnDoc 
).aStart.Tab();
-            mpOwnDoc->GetName( nTab, aString );
+            SCTAB nTab = pAction->GetBigRange().MakeRange( mrOwnDoc 
).aStart.Tab();
+            mrOwnDoc.GetName( nTab, aString );
         }
     }
     return aString;
 }
 
-void ScConflictsDlg::SetActionString(const ScChangeAction* pAction, 
ScDocument* pDoc, const weld::TreeIter& rEntry)
+void ScConflictsDlg::SetActionString(ScChangeAction& rAction, ScDocument& 
rDoc, const weld::TreeIter& rEntry)
 {
-    OSL_ENSURE( pAction, "ScConflictsDlg::GetActionString(): pAction is null!" 
);
-    OSL_ENSURE( pDoc, "ScConflictsDlg::GetActionString(): pDoc is null!" );
-    if (!pAction || !pDoc)
-        return;
 
     weld::TreeView& rTreeView = m_xLbConflicts->GetWidget();
-    OUString aDesc = pAction->GetDescription(*pDoc, true, false);
+    OUString aDesc = rAction.GetDescription(rDoc, true, false);
     rTreeView.set_text(rEntry, aDesc, 0);
 
-    OUString aUser = comphelper::string::strip(pAction->GetUser(), ' ');
+    OUString aUser = comphelper::string::strip(rAction.GetUser(), ' ');
     if ( aUser.isEmpty() )
     {
         aUser = maStrUnknownUser;
     }
     rTreeView.set_text(rEntry, aUser, 1);
 
-    DateTime aDateTime = pAction->GetDateTime();
+    DateTime aDateTime = rAction.GetDateTime();
     OUString aString = ScGlobal::getLocaleData().getDate( aDateTime ) + " " +
         ScGlobal::getLocaleData().getTime( aDateTime, false );
     rTreeView.set_text(rEntry, aString, 2);
@@ -460,12 +446,7 @@ IMPL_LINK_NOARG(ScConflictsDlg, SelectHandle, 
weld::TreeView&, void)
 
 IMPL_LINK_NOARG(ScConflictsDlg, UpdateSelectionHdl, Timer *, void)
 {
-    if ( !mpViewData || !mpOwnDoc )
-    {
-        return;
-    }
-
-    ScTabView* pTabView = mpViewData->GetView();
+    ScTabView* pTabView = mrViewData.GetView();
     pTabView->DoneBlockMode();
 
     std::vector<const ScChangeAction*> aActions;
@@ -492,10 +473,10 @@ IMPL_LINK_NOARG(ScConflictsDlg, UpdateSelectionHdl, Timer 
*, void)
     for (size_t i = 0, nCount = aActions.size(); i < nCount; ++i)
     {
         const ScBigRange& rBigRange = aActions[i]->GetBigRange();
-        if (rBigRange.IsValid(*mpOwnDoc))
+        if (rBigRange.IsValid(mrOwnDoc))
         {
             bool bSetCursor = i == nCount - 1;
-            pTabView->MarkRange(rBigRange.MakeRange( *mpOwnDoc ), bSetCursor, 
bContMark);
+            pTabView->MarkRange(rBigRange.MakeRange( mrOwnDoc ), bSetCursor, 
bContMark);
             bContMark = true;
         }
     }
@@ -595,44 +576,48 @@ void ScConflictsDlg::UpdateView()
 
             for ( const auto& aSharedAction : rConflictEntry.maSharedActions )
             {
-                ScChangeAction* pAction = mpSharedTrack ? 
mpSharedTrack->GetAction(aSharedAction) : nullptr;
-                if ( pAction )
+                if ( ScChangeTrack* pSharedTrack = 
mrSharedDoc.GetChangeTrack() )
                 {
-                    // only display shared top content entries
-                    if ( pAction->GetType() == SC_CAT_CONTENT )
+                    if (ScChangeAction* pAction = 
pSharedTrack->GetAction(aSharedAction))
                     {
-                        ScChangeActionContent* pNextContent = 
dynamic_cast<ScChangeActionContent&>(*pAction).GetNextContent();
-                        if ( pNextContent && rConflictEntry.HasSharedAction( 
pNextContent->GetActionNumber() ) )
+                        // only display shared top content entries
+                        if ( pAction->GetType() == SC_CAT_CONTENT )
                         {
-                            continue;
+                            ScChangeActionContent* pNextContent = 
dynamic_cast<ScChangeActionContent&>(*pAction).GetNextContent();
+                            if ( pNextContent && 
rConflictEntry.HasSharedAction( pNextContent->GetActionNumber() ) )
+                            {
+                                continue;
+                            }
                         }
-                    }
 
-                    rTreeView.insert(xRootEntry.get(), -1, nullptr, nullptr, 
nullptr, nullptr, false, xEntry.get());
-                    SetActionString(pAction, mpSharedDoc, *xEntry);
+                        rTreeView.insert(xRootEntry.get(), -1, nullptr, 
nullptr, nullptr, nullptr, false, xEntry.get());
+                        SetActionString(*pAction, mrSharedDoc, *xEntry);
+                    }
                 }
             }
 
             for ( const auto& aOwnAction : rConflictEntry.maOwnActions )
             {
-                ScChangeAction* pAction = mpOwnTrack ? 
mpOwnTrack->GetAction(aOwnAction) : nullptr;
-                if ( pAction )
+                if ( ScChangeTrack* pOwnTrack = mrOwnDoc.GetChangeTrack() )
                 {
-                    // only display own top content entries
-                    if ( pAction->GetType() == SC_CAT_CONTENT )
+                    if (ScChangeAction* pAction = 
pOwnTrack->GetAction(aOwnAction))
                     {
-                        ScChangeActionContent* pNextContent = 
dynamic_cast<ScChangeActionContent&>(*pAction).GetNextContent();
-                        if ( pNextContent && rConflictEntry.HasOwnAction( 
pNextContent->GetActionNumber() ) )
+                        // only display own top content entries
+                        if ( pAction->GetType() == SC_CAT_CONTENT )
                         {
-                            continue;
+                            ScChangeActionContent* pNextContent = 
dynamic_cast<ScChangeActionContent&>(*pAction).GetNextContent();
+                            if ( pNextContent && rConflictEntry.HasOwnAction( 
pNextContent->GetActionNumber() ) )
+                            {
+                                continue;
+                            }
                         }
-                    }
 
-                    std::unique_ptr<RedlinData> pUserData(new RedlinData());
-                    pUserData->pData = static_cast< void* >( pAction );
-                    OUString aId(weld::toId(pUserData.release()));
-                    rTreeView.insert(xRootEntry.get(), -1, nullptr, &aId, 
nullptr, nullptr, false, xEntry.get());
-                    SetActionString(pAction, mpOwnDoc, *xEntry);
+                        std::unique_ptr<RedlinData> pUserData(new 
RedlinData());
+                        pUserData->pData = static_cast< void* >( pAction );
+                        OUString aId(weld::toId(pUserData.release()));
+                        rTreeView.insert(xRootEntry.get(), -1, nullptr, &aId, 
nullptr, nullptr, false, xEntry.get());
+                        SetActionString(*pAction, mrOwnDoc, *xEntry);
+                    }
                 }
             }
 

Reply via email to