File indexing completed on 2024-04-28 16:21:28

0001 /* This file is part of the KDE project
0002    Copyright 2010 Marijn Kruisselbrink <mkruisselbrink@kde.org>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 #ifndef ROWREPEATSTORAGE_H
0020 #define ROWREPEATSTORAGE_H
0021 
0022 #include <QMap>
0023 #include <QRect>
0024 
0025 #include "sheets_odf_export.h"
0026 
0027 namespace Calligra
0028 {
0029 namespace Sheets
0030 {
0031 
0032 /**
0033   * Class to store row-repeat values, so on saving of a file we won't have to recalculate these entirely
0034   * but can just use the values as we know them from loading.
0035   * Current implementation doesn't have very optimal insertRows/removeRows functions, but the rest of
0036   * the methods are quite okay.
0037   */
0038 class CALLIGRA_SHEETS_ODF_TEST_EXPORT RowRepeatStorage
0039 {
0040 public:
0041     RowRepeatStorage();
0042     void setRowRepeat(int firstRow, int rowRepeat);
0043     int rowRepeat(int row) const;
0044     int firstIdenticalRow(int row) const;
0045     void insertRows(int row, int count);
0046     void removeRows(int row, int count);
0047     void insertShiftDown(const QRect& rect);
0048     void insertShiftRight(const QRect& rect);
0049     void removeShiftUp(const QRect& rect);
0050     void removeShiftLeft(const QRect& rect);
0051     void splitRowRepeat(int row);
0052     void dump() const;
0053 private:
0054     // m_data[i] = j means that rows [i-j+1 , i] are the same
0055     QMap<int, int> m_data;
0056 };
0057 
0058 } // namespace Sheets
0059 } // namespace Calligra
0060 
0061 #endif // ROWREPEATSTORAGE_H