sw/inc/crsrsh.hxx                  |    9 +++++----
 sw/source/core/crsr/crstrvl.cxx    |   24 ++++++++++++++++++++++++
 sw/source/uibase/docvw/edtwin2.cxx |   28 ++++++++++++++++++----------
 3 files changed, 47 insertions(+), 14 deletions(-)

New commits:
commit 84fbb3398f7486f00e7b7dea415e1ea2510a9535
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Thu Dec 9 10:13:39 2021 +0100
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Thu Dec 9 14:06:04 2021 +0100

    tdf#146144 sw: add tooltip to table rows with change tracking
    
    Showing "Row Deleted" and "Row Inserted" with Author and
    Date (of the associated SwRangeRedline: latest tracked deletion
    in deleted rows, and first tracked insertion in inserted rows).
    
    Follow-up to commit c6af542a31e167e5a01908d049e399ce06a5e4e4
    "tdf#146120 sw: show tracked table changes with different color"
    and
    
    Change-Id: I913e234de1a60311306fbebdfb1ae16dcea7cd8c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126575
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 4ff84bff5d93..dc633a7bc9f2 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -80,14 +80,15 @@ enum class IsAttrAtPos
     NumLabel         = 0x0200,
     ContentCheck     = 0x0400,
     SmartTag         = 0x0800,
-    FormControl      = 0x1000
+    FormControl      = 0x1000,
+    TableRedline     = 0x2000
 #ifdef DBG_UTIL
-    ,CurrAttrs       = 0x2000        ///< only for debugging
-    ,TableBoxValue   = 0x4000        ///< only for debugging
+    ,CurrAttrs       = 0x4000        ///< only for debugging
+    ,TableBoxValue   = 0x8000        ///< only for debugging
 #endif
 };
 namespace o3tl {
-    template<> struct typed_flags<IsAttrAtPos> : is_typed_flags<IsAttrAtPos, 
0x7fff> {};
+    template<> struct typed_flags<IsAttrAtPos> : is_typed_flags<IsAttrAtPos, 
0xffff> {};
 }
 
 struct SwContentAtPos
diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index b7ec27fcb6a2..da22013cc31f 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -1708,6 +1708,30 @@ bool SwCursorShell::GetContentAtPos( const Point& rPt,
                 }
             }
 
+            if( !bRet && ( IsAttrAtPos::TableRedline & 
rContentAtPos.eContentAtPos ) )
+            {
+                const SwTableNode* pTableNd;
+                const SwTableBox* pBox;
+                const SwTableLine* pTableLine;
+                const SwStartNode* pSttNd = pTextNd->FindTableBoxStartNode();
+                if( pSttNd && nullptr != ( pTableNd = 
pTextNd->FindTableNode()) &&
+                    nullptr != ( pBox = pTableNd->GetTable().GetTableBox(
+                    pSttNd->GetIndex() )) &&
+                    nullptr != ( pTableLine = pBox->GetUpper() ) &&
+                    RedlineType::None != pTableLine->GetRedlineType() )
+                {
+                    SwRedlineTable::size_type nPos = 0;
+                    nPos = pTableLine->UpdateTextChangesOnly(nPos);
+                    if ( nPos != SwRedlineTable::npos )
+                    {
+                        rContentAtPos.aFnd.pRedl = 
GetDoc()->getIDocumentRedlineAccess().GetRedlineTable()[nPos];
+                        rContentAtPos.eContentAtPos = 
IsAttrAtPos::TableRedline;
+                        bRet = true;
+                    }
+
+                }
+            }
+
             if( !bRet
                  && ( IsAttrAtPos::TableBoxFml & rContentAtPos.eContentAtPos
 #ifdef DBG_UTIL
diff --git a/sw/source/uibase/docvw/edtwin2.cxx 
b/sw/source/uibase/docvw/edtwin2.cxx
index 8117db026e92..a87ae42d45e3 100644
--- a/sw/source/uibase/docvw/edtwin2.cxx
+++ b/sw/source/uibase/docvw/edtwin2.cxx
@@ -55,18 +55,22 @@
 #include <comphelper/lok.hxx>
 #include <authfld.hxx>
 
-static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool bBalloon 
)
+static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool 
bBalloon, bool bTableChange )
 {
     TranslateId pResId;
     switch( rRedl.GetType() )
     {
-    case RedlineType::Insert:   pResId = rRedl.IsMoved()
-        ? STR_REDLINE_INSERT_MOVED
-        : STR_REDLINE_INSERT;
+    case RedlineType::Insert:   pResId = bTableChange
+        ? STR_REDLINE_TABLE_ROW_INSERT
+        :  rRedl.IsMoved()
+            ? STR_REDLINE_INSERT_MOVED
+            : STR_REDLINE_INSERT;
         break;
-    case RedlineType::Delete:   pResId = rRedl.IsMoved()
-        ? STR_REDLINE_DELETE_MOVED
-        : STR_REDLINE_DELETE;
+    case RedlineType::Delete:   pResId = bTableChange
+        ? STR_REDLINE_TABLE_ROW_DELETE
+        : rRedl.IsMoved()
+            ? STR_REDLINE_DELETE_MOVED
+            : STR_REDLINE_DELETE;
         break;
     case RedlineType::Format:   pResId = STR_REDLINE_FORMAT; break;
     case RedlineType::Table:    pResId = STR_REDLINE_TABLE; break;
@@ -139,7 +143,8 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
                                     IsAttrAtPos::TableBoxValue |
                                     ( bBalloon ? IsAttrAtPos::CurrAttrs : 
IsAttrAtPos::NONE) |
 #endif
-                                    IsAttrAtPos::TableBoxFml );
+                                    IsAttrAtPos::TableBoxFml |
+                                    IsAttrAtPos::TableRedline );
 
         if( rSh.GetContentAtPos( aPos, aContentAtPos, false, &aFieldRect ) )
         {
@@ -246,12 +251,15 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
                 }
                 break;
 
+            case IsAttrAtPos::TableRedline:
             case IsAttrAtPos::Redline:
             {
                 const bool bShowTrackChanges = 
IDocumentRedlineAccess::IsShowChanges( 
m_rView.GetDocShell()->GetDoc()->getIDocumentRedlineAccess().GetRedlineFlags() 
);
                 const bool bShowInlineTooltips = 
rSh.GetViewOptions()->IsShowInlineTooltips();
                 if ( bShowTrackChanges && bShowInlineTooltips )
-                     sText = lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, 
bBalloon);
+                {
+                     sText = lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, 
bBalloon, IsAttrAtPos::TableRedline == aContentAtPos.eContentAtPos );
+                }
                 break;
             }
 
@@ -376,7 +384,7 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
                         {
                             aContentAtPos.eContentAtPos = IsAttrAtPos::Redline;
                             if( rSh.GetContentAtPos( aPos, aContentAtPos, 
false, &aFieldRect ) )
-                                sText = 
lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, bBalloon);
+                                sText = 
lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, bBalloon, /*bTableChange=*/false);
                         }
                     }
                 }

Reply via email to