sw/inc/crsrsh.hxx                  |   11 ++++++-----
 sw/inc/strings.hrc                 |    2 ++
 sw/source/core/crsr/crstrvl.cxx    |   36 +++++++++++++++++++++++++++---------
 sw/source/uibase/docvw/edtwin2.cxx |   22 ++++++++++++++++------
 4 files changed, 51 insertions(+), 20 deletions(-)

New commits:
commit 5facae7614a1a82ed51241f50cec8e82bfb2cbda
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Fri May 19 10:29:29 2023 +0200
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Fri May 19 16:10:05 2023 +0200

    tdf#155343 sw tracked table column: add tooltip
    
    Tooltip of a deleted table column shows "Column Deleted",
    an inserted table column (will) show "Column Inserted".
    
    Follow-up to commit ffd8d20d368a885d6d786749278fa438573227a7
    "tdf#150673 sw xmloff: import/export tracked table column" and
    commit 84fbb3398f7486f00e7b7dea415e1ea2510a9535
    "tdf#146144 sw: add tooltip to table rows with change tracking".
    
    Change-Id: I79fd2397410328b320bd2536285cc5cc835da9fd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151998
    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 57bb90a11a5d..6efdceee2838 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -87,15 +87,16 @@ enum class IsAttrAtPos
     ContentCheck     = 0x0400,
     SmartTag         = 0x0800,
     FormControl      = 0x1000,
-    TableRedline     = 0x2000
+    TableRedline     = 0x2000,
+    TableColRedline  = 0x4000
 #ifdef DBG_UTIL
-    ,CurrAttrs       = 0x4000        ///< only for debugging
-    ,TableBoxValue   = 0x8000        ///< only for debugging
+    ,CurrAttrs       = 0x8000        ///< only for debugging
+    ,TableBoxValue   = 0x10000       ///< only for debugging
 #endif
-    , ContentControl = 0x10000
+    , ContentControl = 0x20000
 };
 namespace o3tl {
-    template<> struct typed_flags<IsAttrAtPos> : is_typed_flags<IsAttrAtPos, 
0x1ffff> {};
+    template<> struct typed_flags<IsAttrAtPos> : is_typed_flags<IsAttrAtPos, 
0x3ffff> {};
 }
 
 struct SwContentAtPos
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index b7c8137c8275..c18aff49639a 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -1268,6 +1268,8 @@
 #define STR_REDLINE_PARAGRAPH_FORMAT            
NC_("STR_REDLINE_PARAGRAPH_FORMAT", "Paragraph formatting changed")
 #define STR_REDLINE_TABLE_ROW_INSERT            
NC_("STR_REDLINE_TABLE_ROW_INSERT", "Row Inserted")
 #define STR_REDLINE_TABLE_ROW_DELETE            
NC_("STR_REDLINE_TABLE_ROW_DELETE", "Row Deleted")
+#define STR_REDLINE_TABLE_COLUMN_INSERT         
NC_("STR_REDLINE_TABLE_COLUMN_INSERT", "Column Inserted")
+#define STR_REDLINE_TABLE_COLUMN_DELETE         
NC_("STR_REDLINE_TABLE_COLUMN_DELETE", "Column Deleted")
 #define STR_REDLINE_TABLE_CELL_INSERT           
NC_("STR_REDLINE_TABLE_CELL_INSERT", "Cell Inserted")
 #define STR_REDLINE_TABLE_CELL_DELETE           
NC_("STR_REDLINE_TABLE_CELL_DELETE", "Cell Deleted")
 #define STR_REDLINE_INSERT_MOVED                
NC_("STR_REDLINE_INSERT_MOVED", "Moved (insertion)")
diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index 3ea5db46ccc9..a1656233cfc9 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -1879,7 +1879,8 @@ bool SwCursorShell::GetContentAtPos( const Point& rPt,
             }
         }
 
-        if( !bRet && ( IsAttrAtPos::TableRedline & rContentAtPos.eContentAtPos 
) )
+        if( !bRet && ( ( IsAttrAtPos::TableRedline & 
rContentAtPos.eContentAtPos ) ||
+                     ( IsAttrAtPos::TableColRedline & 
rContentAtPos.eContentAtPos ) ) )
         {
             const SwTableNode* pTableNd;
             const SwTableBox* pBox;
@@ -1889,17 +1890,34 @@ bool SwCursorShell::GetContentAtPos( const Point& rPt,
                 nullptr != ( pBox = pTableNd->GetTable().GetTableBox(
                 pSttNd->GetIndex() )) &&
                 nullptr != ( pTableLine = pBox->GetUpper() ) &&
-                RedlineType::None != pTableLine->GetRedlineType() )
+                ( RedlineType::None != pBox->GetRedlineType() ||
+                RedlineType::None != pTableLine->GetRedlineType() ) )
             {
-                SwRedlineTable::size_type nPos = 0;
-                nPos = pTableLine->UpdateTextChangesOnly(nPos);
-                if ( nPos != SwRedlineTable::npos )
+                const SwRedlineTable& aRedlineTable = 
GetDoc()->getIDocumentRedlineAccess().GetRedlineTable();
+                if ( RedlineType::None != pTableLine->GetRedlineType() )
                 {
-                    rContentAtPos.aFnd.pRedl = 
GetDoc()->getIDocumentRedlineAccess().GetRedlineTable()[nPos];
-                    rContentAtPos.eContentAtPos = IsAttrAtPos::TableRedline;
-                    bRet = true;
+                    SwRedlineTable::size_type nPos = 0;
+                    nPos = pTableLine->UpdateTextChangesOnly(nPos);
+                    if ( nPos != SwRedlineTable::npos )
+                    {
+                        rContentAtPos.aFnd.pRedl = aRedlineTable[nPos];
+                        rContentAtPos.eContentAtPos = 
IsAttrAtPos::TableRedline;
+                        bRet = true;
+                    }
+                }
+                else
+                {
+                    SwRedlineTable::size_type n = 0;
+                    SwNodeIndex aIdx( *pSttNd, 1 );
+                    const SwPosition aBoxStart(aIdx);
+                    const SwRangeRedline* pFnd = aRedlineTable.FindAtPosition( 
aBoxStart, n, /*next=*/true );
+                    if( pFnd && RedlineType::Delete == pFnd->GetType() )
+                    {
+                        rContentAtPos.aFnd.pRedl = aRedlineTable[n];
+                        rContentAtPos.eContentAtPos = 
IsAttrAtPos::TableColRedline;
+                        bRet = true;
+                    }
                 }
-
             }
         }
 
diff --git a/sw/source/uibase/docvw/edtwin2.cxx 
b/sw/source/uibase/docvw/edtwin2.cxx
index 1c9563782050..0efbd852df7d 100644
--- a/sw/source/uibase/docvw/edtwin2.cxx
+++ b/sw/source/uibase/docvw/edtwin2.cxx
@@ -253,19 +253,24 @@ bool PSCSDFPropsQuickHelp(const HelpEvent &rEvt, 
SwWrtShell& rSh)
 }
 }
 
-static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool 
bBalloon, bool bTableChange )
+static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool bBalloon,
+                                    bool bTableChange, bool bTableColChange )
 {
     TranslateId pResId;
     switch( rRedl.GetType() )
     {
     case RedlineType::Insert:   pResId = bTableChange
-        ? STR_REDLINE_TABLE_ROW_INSERT
+        ? !bTableColChange
+            ? STR_REDLINE_TABLE_ROW_INSERT
+            : STR_REDLINE_TABLE_COLUMN_INSERT
         :  rRedl.IsMoved()
             ? STR_REDLINE_INSERT_MOVED
             : STR_REDLINE_INSERT;
         break;
     case RedlineType::Delete:   pResId = bTableChange
-        ? STR_REDLINE_TABLE_ROW_DELETE
+        ? !bTableColChange
+            ? STR_REDLINE_TABLE_ROW_DELETE
+            : STR_REDLINE_TABLE_COLUMN_DELETE
         : rRedl.IsMoved()
             ? STR_REDLINE_DELETE_MOVED
             : STR_REDLINE_DELETE;
@@ -344,7 +349,8 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
                                     ( bBalloon ? IsAttrAtPos::CurrAttrs : 
IsAttrAtPos::NONE) |
 #endif
                                     IsAttrAtPos::TableBoxFml |
-                                    IsAttrAtPos::TableRedline );
+                                    IsAttrAtPos::TableRedline |
+                                    IsAttrAtPos::TableColRedline );
 
         if( rSh.GetContentAtPos( aPos, aContentAtPos, false, &aFieldRect ) )
         {
@@ -454,13 +460,17 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt)
                 break;
 
             case IsAttrAtPos::TableRedline:
+            case IsAttrAtPos::TableColRedline:
             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, IsAttrAtPos::TableRedline == aContentAtPos.eContentAtPos );
+                     sText = lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, 
bBalloon,
+                         IsAttrAtPos::TableRedline == 
aContentAtPos.eContentAtPos ||
+                         IsAttrAtPos::TableColRedline == 
aContentAtPos.eContentAtPos,
+                         IsAttrAtPos::TableColRedline == 
aContentAtPos.eContentAtPos);
                 }
                 break;
             }
@@ -598,7 +608,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, /*bTableChange=*/false);
+                                sText = 
lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, bBalloon, /*bTableChange=*/false, 
/*bTableColChange=*/false);
                         }
                     }
                 }

Reply via email to