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); } } }