sc/inc/table.hxx                      |    1 
 sc/source/core/data/table4.cxx        |   56 ++++++++++++++++++++++++++++++++++
 sc/uiconfig/scalc/menubar/menubar.xml |   10 ++++++
 3 files changed, 67 insertions(+)

New commits:
commit 2e11597a08b4540d632b1d2a2adfa1532190bbc1
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Mon Apr 4 22:20:05 2022 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Wed Apr 13 01:34:41 2022 +0200

    sc: add sparklines commands to main menu
    
    Change-Id: Ie69d78162fb0d845f8ffd181397569c3cd3276f1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132593
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132922
    Tested-by: Tomaž Vajngerl <[email protected]>

diff --git a/sc/uiconfig/scalc/menubar/menubar.xml 
b/sc/uiconfig/scalc/menubar/menubar.xml
index bc1774817070..a0409522e372 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -571,6 +571,16 @@
           <menu:menuitem menu:id=".uno:DeleteAllNotes"/>
         </menu:menupopup>
       </menu:menu>
+      <menu:menu menu:id=".uno:FormatSparklineMenu">
+        <menu:menupopup>
+          <menu:menuitem menu:id=".uno:InsertSparkline"/>
+          <menu:menuitem menu:id=".uno:DeleteSparkline"/>
+          <menu:menuitem menu:id=".uno:DeleteSparklineGroup"/>
+          <menu:menuitem menu:id=".uno:EditSparklineGroup"/>
+          <menu:menuitem menu:id=".uno:GroupSparklines"/>
+          <menu:menuitem menu:id=".uno:UngroupSparklines"/>
+        </menu:menupopup>
+      </menu:menu>
       <menu:menuseparator/>
       <menu:menuitem menu:id=".uno:RenameTable" menu:style="text"/>
       <menu:menuitem menu:id=".uno:Hide" menu:style="text"/>
commit 5eaa78dd96efa180f12e4ba3bbf4dddc7e47483c
Author:     Tomaž Vajngerl <[email protected]>
AuthorDate: Mon Apr 4 00:56:47 2022 +0900
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Wed Apr 13 01:34:25 2022 +0200

    sc: take sparklines into account with auto fill
    
    Change-Id: I6bdb5f4291aece7ec02d8de0731b8f983b4f2bb2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132592
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132921
    Tested-by: Tomaž Vajngerl <[email protected]>

diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 1c355c0d6ff9..9362fee910dd 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -482,6 +482,7 @@ public:
 
     sc::SparklineList& GetSparklineList();
     void CopySparklinesToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW 
nRow2, ScTable* pDestTab);
+    void FillSparkline(bool bVertical, SCCOLROW nFixed, SCCOLROW 
nIteratingStart, SCCOLROW nIteratingEnd, SCCOLROW nFillStart, SCCOLROW 
nFillEnd);
 
     // Notes / Comments
     std::unique_ptr<ScPostIt> ReleaseNote( SCCOL nCol, SCROW nRow );
diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx
index f420d01d6eae..43df3aef3220 100644
--- a/sc/source/core/data/table4.cxx
+++ b/sc/source/core/data/table4.cxx
@@ -1204,10 +1204,66 @@ void ScTable::FillAuto( SCCOL nCol1, SCROW nRow1, SCCOL 
nCol2, SCROW nRow2,
                 nProgress = pProgress->GetState();
         }
 
+        if (bVertical)
+            FillSparkline(bVertical, nCol, nRow1, nRow2, nIStart, nIEnd);
+        else
+            FillSparkline(bVertical, nRow, nCol1, nCol2, nIStart, nIEnd);
+
         nActFormCnt += nMaxFormCnt;
     }
 }
 
+void  ScTable::FillSparkline(bool bVertical, SCCOLROW nFixed,
+                             SCCOLROW nStart, SCCOLROW nEnd,
+                             SCCOLROW nFillStart, SCCOLROW nFillEnd)
+{
+    bool bHasSparklines = false;
+    std::vector<std::shared_ptr<sc::Sparkline>> aSparklineSeries;
+
+    for (SCROW nCurrent = nStart; nCurrent <= nEnd; nCurrent++)
+    {
+        auto pSparkline = bVertical ? GetSparkline(nFixed, nCurrent) : 
GetSparkline(nCurrent, nFixed);
+        bHasSparklines = bHasSparklines || bool(pSparkline);
+        aSparklineSeries.push_back(pSparkline);
+    }
+
+    if (bHasSparklines)
+    {
+        for (SCCOLROW nCurrent = nFillStart; nCurrent <= nFillEnd; nCurrent++)
+        {
+            size_t nIndex = size_t(nFillStart - nCurrent) % 
aSparklineSeries.size();
+            if (auto& rpSparkline = aSparklineSeries[nIndex])
+            {
+                auto pGroup = rpSparkline->getSparklineGroup();
+
+                auto* pNewSparkline = bVertical ? CreateSparkline(nFixed, 
nCurrent, pGroup)
+                                                : CreateSparkline(nCurrent, 
nFixed, pGroup);
+                if (pNewSparkline)
+                {
+                    SCCOLROW nPosition = bVertical ? rpSparkline->getRow()
+                                                   : rpSparkline->getColumn();
+                    SCCOLROW nDelta = nCurrent - nPosition;
+                    ScRangeList aRangeList(rpSparkline->getInputRange());
+                    for (ScRange& rRange : aRangeList)
+                    {
+                        if (bVertical)
+                        {
+                            rRange.aStart.IncRow(nDelta);
+                            rRange.aEnd.IncRow(nDelta);
+                        }
+                        else
+                        {
+                            rRange.aStart.IncCol(nDelta);
+                            rRange.aEnd.IncCol(nDelta);
+                        }
+                    }
+                    pNewSparkline->setInputRange(aRangeList);
+                }
+            }
+        }
+    }
+}
+
 OUString ScTable::GetAutoFillPreview( const ScRange& rSource, SCCOL nEndX, 
SCROW nEndY )
 {
     OUString aValue;

Reply via email to