sc/qa/unit/tiledrendering/SheetViewTest.cxx           |   51 ++++++++++++++++++
 sc/source/ui/inc/docfunc.hxx                          |    2 
 sc/source/ui/operation/TransliterateTextOperation.cxx |    7 +-
 3 files changed, 55 insertions(+), 5 deletions(-)

New commits:
commit 577ebb795555b4af4a63193952df9a87a79b3b58
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Sat Mar 7 03:36:44 2026 +0000
Commit:     Miklos Vajna <[email protected]>
CommitDate: Tue Mar 10 15:52:01 2026 +0100

    sc: Add sheet view sync support and test for TransliterateTextOperation
    
    Added sync support to TransliterateTextOperation and written a
    test case for this.
    
    Change-Id: I5b82e48662d800fdb2e76b3491d3d791fe45c496
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201333
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/sc/qa/unit/tiledrendering/SheetViewTest.cxx 
b/sc/qa/unit/tiledrendering/SheetViewTest.cxx
index fe6417d772d4..e8003d0a02e5 100644
--- a/sc/qa/unit/tiledrendering/SheetViewTest.cxx
+++ b/sc/qa/unit/tiledrendering/SheetViewTest.cxx
@@ -24,6 +24,7 @@
 #include <SheetViewManager.hxx>
 #include <attrib.hxx>
 #include <editeng/brushitem.hxx>
+#include <i18nutil/transliteration.hxx>
 #include <paramisc.hxx>
 
 using namespace css;
@@ -2182,6 +2183,56 @@ CPPUNIT_TEST_FIXTURE(SyncTest, 
testSync_FillAuto_DefaultAndSheetView)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(SyncTest, testSync_TransliterateText_DefaultAndSheetView)
+{
+    ScModelObj* pModelObj = createDoc("SheetView_AutoFilter_Extended.ods");
+    
pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+    ScDocument* pDocument = pModelObj->GetDocument();
+    ScDocShell* pDocShell = 
dynamic_cast<ScDocShell*>(pModelObj->GetEmbeddedObject());
+
+    setupViews();
+
+    // Create new sheet view and sort ascending
+    {
+        switchToSheetView();
+        createNewSheetViewInCurrentView();
+        sortAscendingForCell(u"A1");
+    }
+
+    // Sort descending in default view
+    {
+        switchToDefaultView();
+        sortDescendingForCell(u"A1");
+    }
+
+    // Default view at Column B: aaa, rrr, ccc, sss
+    CPPUNIT_ASSERT_EQUAL(expectedValues({ u"aaa", u"rrr", u"ccc", u"sss" }),
+                         getValues(mpTabViewDefaultView, 1, 1, 4));
+    // Sheet view at Column B: sss, ccc, rrr, aaa
+    CPPUNIT_ASSERT_EQUAL(expectedValues({ u"sss", u"ccc", u"rrr", u"aaa" }),
+                         getValues(mpTabViewSheetView, 1, 1, 4));
+
+    // Transliterate B2:B5 to uppercase from sheet view
+    {
+        switchToSheetView();
+
+        SCTAB nSheetViewTab = mpTabViewSheetView->GetViewData().GetTabNumber();
+        ScMarkData aMark(pDocument->GetSheetLimits());
+        aMark.SelectTable(nSheetViewTab, true);
+        aMark.SetMarkArea(ScRange(1, 1, nSheetViewTab, 1, 4, nSheetViewTab));
+        pDocShell->GetDocFunc().TransliterateText(aMark, 
TransliterationFlags::LOWERCASE_UPPERCASE,
+                                                  true);
+    }
+
+    // Sheet view: text is uppercased, ascending order
+    CPPUNIT_ASSERT_EQUAL(expectedValues({ u"SSS", u"CCC", u"RRR", u"AAA" }),
+                         getValues(mpTabViewSheetView, 1, 1, 4));
+
+    // Default view: synced, descending order, uppercased
+    CPPUNIT_ASSERT_EQUAL(expectedValues({ u"AAA", u"RRR", u"CCC", u"SSS" }),
+                         getValues(mpTabViewDefaultView, 1, 1, 4));
+}
+
 CPPUNIT_TEST_FIXTURE(SyncTest, testSync_ChangeIndent_DefaultAndSheetView)
 {
     ScModelObj* pModelObj = createDoc("SheetView_AutoFilter.ods");
diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx
index 6279fdc2fd47..ac384fd58236 100644
--- a/sc/source/ui/inc/docfunc.hxx
+++ b/sc/source/ui/inc/docfunc.hxx
@@ -108,7 +108,7 @@ public:
     bool DeleteCell(
         const ScAddress& rPos, const ScMarkData& rMark, InsertDeleteFlags 
nFlags, bool bRecord, bool bApi );
 
-    bool            TransliterateText( const ScMarkData& rMark, 
TransliterationFlags nType,
+    SC_DLLPUBLIC bool TransliterateText( const ScMarkData& rMark, 
TransliterationFlags nType,
                                                bool bApi );
 
     bool            SetNormalString( bool& o_rbNumFmtSet, const ScAddress& 
rPos, const OUString& rText, bool bApi );
diff --git a/sc/source/ui/operation/TransliterateTextOperation.cxx 
b/sc/source/ui/operation/TransliterateTextOperation.cxx
index d0cd960b9250..0c15fe779da0 100644
--- a/sc/source/ui/operation/TransliterateTextOperation.cxx
+++ b/sc/source/ui/operation/TransliterateTextOperation.cxx
@@ -39,10 +39,7 @@ bool TransliterateTextOperation::runImplementation()
     if (mbRecord && !rDoc.IsUndoEnabled())
         mbRecord = false;
 
-    if (!checkSheetViewProtection())
-        return false;
-
-    ScMarkData aMultiMark = mrMark;
+    ScMarkData aMultiMark = convertMark(mrMark);
     aMultiMark.SetMarking(false); // for MarkToMulti
     aMultiMark.MarkToMulti();
     const ScRange& aMarkRange = aMultiMark.GetMultiMarkArea();
@@ -82,6 +79,8 @@ bool TransliterateTextOperation::runImplementation()
 
     rDoc.TransliterateText(aMultiMark, mnType);
 
+    syncSheetViews();
+
     if (!mrDocFunc.AdjustRowHeight(aMarkRange, true, true))
         mrDocShell.PostPaint(aMarkRange, PaintPartFlags::Grid);
 

Reply via email to