[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/kspread
From:       Marijn Kruisselbrink <m.kruisselbrink () student ! tue ! nl>
Date:       2010-06-10 12:26:45
Message-ID: 20100610122645.84141AC8CF () svn ! kde ! org
[Download RAW message or body]

SVN commit 1136671 by mkruisselbrink:

Sligtly change the way a region is stored in a Value() instance. Previously empty \
rows/columns at the end of a range would be ignored and functions that were called \
would have no way of knowing that the actual array passed did contain those empty \
cells.


 M  +1 -1      CellStorage.cpp  
 M  +21 -7     Value.cpp  
 M  +1 -1      Value.h  


--- trunk/koffice/kspread/CellStorage.cpp #1136670:1136671
@@ -499,7 +499,7 @@
 Value CellStorage::valueRegion(const Region& region) const
 {
     // create a subStorage with adjusted origin
-    return Value(d->valueStorage->subStorage(region, false));
+    return Value(d->valueStorage->subStorage(region, false), \
region.boundingRect().size());  }
 
 void CellStorage::setValue(int column, int row, const Value& value)
--- trunk/koffice/kspread/Value.cpp #1136670:1136671
@@ -35,8 +35,22 @@
 
 using namespace KSpread;
 
-typedef ValueStorage ValueArray;
+class ValueArray
+{
+public:
+    ValueArray() : m_size(0, 0) {}
+    ValueArray(const ValueStorage& storage, const QSize& size) : m_size(size), \
m_storage(storage) {}  
+    ValueStorage& storage() { return m_storage; }
+    int rows() const { return qMax(m_size.height(), m_storage.rows()); }
+    int columns() const { return qMax(m_size.width(), m_storage.columns()); }
+
+    bool operator==(const ValueArray& a) const { return rows() == a.rows() && \
columns() == a.columns() && m_storage == a.m_storage; } +private:
+    QSize m_size;
+    ValueStorage m_storage;
+};
+
 class Value::Private : public QSharedData
 {
 public:
@@ -338,11 +352,11 @@
 }
 
 // create an array value
-Value::Value(const ValueStorage& array)
+Value::Value(const ValueStorage& array, const QSize& size)
         : d(Private::null())
 {
     d->type = Array;
-    d->pa = new ValueArray(array);
+    d->pa = new ValueArray(array, size);
     d->format = fmt_None;
 }
 
@@ -521,21 +535,21 @@
 {
     if (d->type != Array) return *this;
     if (!d->pa) return empty();
-    return d->pa->lookup(column + 1, row + 1);
+    return d->pa->storage().lookup(column + 1, row + 1);
 }
 
 Value Value::element(unsigned index) const
 {
     if (d->type != Array) return *this;
     if (!d->pa) return empty();
-    return d->pa->data(index);
+    return d->pa->storage().data(index);
 }
 
 void Value::setElement(unsigned column, unsigned row, const Value& v)
 {
     if (d->type != Array) return;
     if (!d->pa) d->pa = new ValueArray();
-    d->pa->insert(column + 1, row + 1, v);
+    d->pa->storage().insert(column + 1, row + 1, v);
 }
 
 unsigned Value::columns() const
@@ -556,7 +570,7 @@
 {
     if (d->type != Array) return 1;
     if (!d->pa) return 1;
-    return d->pa->count();
+    return d->pa->storage().count();
 }
 
 // reference to empty value
--- trunk/koffice/kspread/Value.h #1136670:1136671
@@ -157,7 +157,7 @@
     /**
      * Creates an array value using the data from \p array.
      */
-    explicit Value(const ValueStorage& array);
+    explicit Value(const ValueStorage& array, const QSize& size);
 
     /**
      * Creates a floating-point value from date/time.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic