tdf#147435 sw: enable Accept Change for table selection
Accept/Reject Track Change options were only enabled for
table selections, if the first cell of the selected cell range
contains a redline. Now they are enabled, when arbitrary cell
of the table selection contains a redline.
Note: if the selected columns don't contain any redlines and
any tracked row changes, but the adjacent not selected columns
contain a redline, there is a false Enable.
Follow-up to commit 23846867ea
"tdf#147182 sw: accept/reject all changes of a table selection".
Change-Id: I1d7af04aa3fe5232bb1ff7f9af6116bcdc621ae7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129811
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
This commit is contained in:
@@ -107,4 +107,51 @@ class tdf146145(UITestCase):
|
||||
xToolkit.processEventsToIdle()
|
||||
self.assertEqual(len(tables[0].getRows()), 3)
|
||||
|
||||
def test_Related_tdf147182(self):
|
||||
with self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as self.document:
|
||||
|
||||
# Check enabling Accept/Reject Track Change icons
|
||||
# and Accept Change/Reject Change context menu items
|
||||
# on table rows with tracked deletion or insertion
|
||||
|
||||
# enable Track Changes toolbar
|
||||
self.xUITest.executeCommand(".uno:AvailableToolbars?Toolbar:string=changes")
|
||||
|
||||
xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
|
||||
xToolkit.processEventsToIdle()
|
||||
|
||||
# cursor at changed text: Accept Track Change is enabled
|
||||
self.assertTrue(self.is_enabled_Accept_Track_Change())
|
||||
|
||||
# cursor in a changed row, but not at changed text: Accept Track Change is enabled now
|
||||
self.xUITest.executeCommand(".uno:GoRight")
|
||||
xToolkit.processEventsToIdle()
|
||||
# This was false
|
||||
self.assertTrue(self.is_enabled_Accept_Track_Change())
|
||||
|
||||
# delete first row
|
||||
self.xUITest.executeCommand(".uno:AcceptTrackedChange")
|
||||
xToolkit.processEventsToIdle()
|
||||
# disabled Accept Track Change
|
||||
while self.is_enabled_Accept_Track_Change():
|
||||
time.sleep(0.1)
|
||||
self.assertFalse(self.is_enabled_Accept_Track_Change())
|
||||
|
||||
# delete first row
|
||||
self.xUITest.executeCommand(".uno:SelectAll")
|
||||
self.xUITest.executeCommand(".uno:SelectAll")
|
||||
xToolkit.processEventsToIdle()
|
||||
# This was false
|
||||
while not self.is_enabled_Accept_Track_Change():
|
||||
time.sleep(0.1)
|
||||
self.assertTrue(self.is_enabled_Accept_Track_Change())
|
||||
|
||||
# delete all changes in the selected table
|
||||
self.xUITest.executeCommand(".uno:AcceptTrackedChange")
|
||||
xToolkit.processEventsToIdle()
|
||||
while self.is_enabled_Accept_Track_Change():
|
||||
time.sleep(0.1)
|
||||
# disabled Accept Track Change
|
||||
self.assertFalse(self.is_enabled_Accept_Track_Change())
|
||||
|
||||
# vim: set shiftwidth=4 softtabstop=4 expandtab:
|
||||
|
@@ -389,10 +389,28 @@ void SwView::GetState(SfxItemSet &rSet)
|
||||
redline = nullptr;
|
||||
if( redline == nullptr )
|
||||
{
|
||||
// for table selections, GetCursor() gives only PaM of the first cell,
|
||||
// so extend the redline limit to end of last cell of the selection
|
||||
// TODO: adjust this for column selections, where the selected columns
|
||||
// don't contain any redlines and any tracked row changes, but the
|
||||
// adjacent not selected columns do to avoid false Enable
|
||||
std::unique_ptr<SwPosition> pSelectionEnd;
|
||||
if ( m_pWrtShell->IsTableMode() &&
|
||||
m_pWrtShell->GetTableCursor()->GetSelectedBoxesCount() )
|
||||
{
|
||||
const SwSelBoxes& rBoxes = m_pWrtShell->GetTableCursor()->GetSelectedBoxes();
|
||||
const SwStartNode *pSttNd = rBoxes.back()->GetSttNd();
|
||||
const SwNode* pEndNode = pSttNd->GetNodes()[pSttNd->EndOfSectionIndex()];
|
||||
pSelectionEnd.reset(new SwPosition(*pEndNode));
|
||||
}
|
||||
else
|
||||
pSelectionEnd.reset(
|
||||
new SwPosition(pCursor->End()->nNode, pCursor->End()->nContent));
|
||||
|
||||
for(; index < table.size(); ++index )
|
||||
{
|
||||
const SwRangeRedline* tmp = table[ index ];
|
||||
if( *tmp->Start() >= *pCursor->End())
|
||||
if( *tmp->Start() >= *pSelectionEnd )
|
||||
break;
|
||||
if( tmp->HasMark() && tmp->IsVisible())
|
||||
{
|
||||
|
Reference in New Issue
Block a user