[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra/calligra/2.5] kexi: Remove limit of 101 fields in Kexi Table Designer
From: Jaroslaw Staniek <staniek () kde ! org>
Date: 2012-10-31 23:38:43
Message-ID: 20121031233843.7A6F1A6078 () git ! kde ! org
[Download RAW message or body]
Git commit f8df23f8201518681cfd3e85235afc70701643b2 by Jaroslaw Staniek.
Committed on 27/10/2012 at 23:40.
Pushed by staniek into branch 'calligra/2.5'.
Remove limit of 101 fields in Kexi Table Designer
BUG:309116
REVIEW:107085
FIXED-IN:2.5.4
M +3 -5 kexi/plugins/tables/kexitabledesignerview.cpp
M +48 -15 kexi/widget/dataviewcommon/kexidataawarepropertyset.cpp
M +8 -8 kexi/widget/dataviewcommon/kexidataawarepropertyset.h
M +2 -2 kexi/widget/dataviewcommon/kexitableviewdata.h
http://commits.kde.org/calligra/f8df23f8201518681cfd3e85235afc70701643b2
diff --git a/kexi/plugins/tables/kexitabledesignerview.cpp \
b/kexi/plugins/tables/kexitabledesignerview.cpp index 8ec956d..28d9610 100644
--- a/kexi/plugins/tables/kexitabledesignerview.cpp
+++ b/kexi/plugins/tables/kexitabledesignerview.cpp
@@ -59,8 +59,6 @@
#include <kexi_global.h>
-//#define MAX_FIELDS 101 //nice prime number
-
//! used only for BLOBs
#define DEFAULT_OBJECT_TYPE_VALUE "image"
@@ -267,9 +265,9 @@ void KexiTableDesignerView::initData()
// d->sets->clear();//default size
// }
- //add empty space
-// const int columnsCount = d->data->columnsCount();
- for (int i = tableFieldCount; i < (int)d->sets->size(); i++) {
+ //add empty space, at least 2 times more than number of existing fields
+ uint fullSize = qMax(d->sets->size(), uint(2 * tableFieldCount));
+ for (int i = tableFieldCount; i < fullSize; i++) {
// KexiDB::RecordData *item = new KexiDB::RecordData(columnsCount);//3 empty fields
d->data->append(d->data->createItem());
}
diff --git a/kexi/widget/dataviewcommon/kexidataawarepropertyset.cpp \
b/kexi/widget/dataviewcommon/kexidataawarepropertyset.cpp index e3a534d..405d90e \
100644
--- a/kexi/widget/dataviewcommon/kexidataawarepropertyset.cpp
+++ b/kexi/widget/dataviewcommon/kexidataawarepropertyset.cpp
@@ -1,5 +1,5 @@
/* This file is part of the KDE project
- Copyright (C) 2004-2005 Jarosław Staniek <staniek@kde.org>
+ Copyright (C) 2004-2012 Jarosław Staniek <staniek@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -25,8 +25,6 @@
#include <koproperty/Property.h>
#include <KexiView.h>
-#define MAX_FIELDS 101 //nice prime number (default prop. set vector size)
-
KexiDataAwarePropertySet::KexiDataAwarePropertySet(KexiView *view,
KexiDataAwareObjectInterface* dataObject)
: QObject(view)
@@ -81,9 +79,11 @@ void KexiDataAwarePropertySet::eraseCurrentPropertySet()
void KexiDataAwarePropertySet::eraseAt(uint row)
{
- KoProperty::Set *set = m_sets.at(row);
- if (!set)
+ KoProperty::Set *set = m_sets.value(row);
+ if (!set) {
+ kWarning() << "No row to erase:" << row;
return;
+ }
m_sets[row] = 0;
set->debug();
delete set;
@@ -96,14 +96,27 @@ uint KexiDataAwarePropertySet::size() const
return m_sets.size();
}
-void KexiDataAwarePropertySet::clear(uint minimumSize)
+void KexiDataAwarePropertySet::clear()
{
+ qDeleteAll(m_sets);
m_sets.clear();
- m_sets.resize(qMax(minimumSize, (uint)MAX_FIELDS));
+ m_sets.resize(1000);
m_view->setDirty(true);
m_view->propertySetSwitched();
}
+void KexiDataAwarePropertySet::enlargeToFitRow(uint row)
+{
+ uint newSize = m_sets.size();
+ if (row < newSize) {
+ return;
+ }
+ while (newSize < (row + 1)) {
+ newSize *= 2;
+ }
+ m_sets.resize(newSize);
+}
+
void KexiDataAwarePropertySet::slotReloadRequested()
{
clear();
@@ -111,14 +124,18 @@ void KexiDataAwarePropertySet::slotReloadRequested()
void KexiDataAwarePropertySet::set(uint row, KoProperty::Set* set, bool newOne)
{
- if (!set || row >= (uint)m_sets.size()) {
- kWarning() << "invalid args: record=" << row << "propertyset=" << set;
+ if (!set) {
+ Q_ASSERT_X(false, "KexiDataAwarePropertySet::set", "set == 0");
+ kWarning() << "set == 0";
return;
}
if (set->parent() && set->parent() != this) {
- kWarning() << "property set's parent must be NULL or this \
KexiDataAwarePropertySet"; + const char *msg = "property set's parent must be \
NULL or this KexiDataAwarePropertySet"; + Q_ASSERT_X(false, \
"KexiDataAwarePropertySet::set", msg); + kWarning() << msg;
return;
}
+ enlargeToFitRow(row);
m_sets[row] = set;
@@ -136,7 +153,10 @@ void KexiDataAwarePropertySet::set(uint row, KoProperty::Set* \
set, bool newOne)
KoProperty::Set* KexiDataAwarePropertySet::currentPropertySet() const
{
- return (m_dataObject->currentRow() >= 0) ? m_sets.at(m_dataObject->currentRow()) \
: 0; + if (m_dataObject->currentRow() < 0) {
+ return 0;
+ }
+ return m_sets.value(m_dataObject->currentRow());
}
uint KexiDataAwarePropertySet::currentRow() const
@@ -159,19 +179,29 @@ void KexiDataAwarePropertySet::slotRowDeleted()
m_sets[ size ] = 0;*/
// It's simplified in Qt4:
+ enlargeToFitRow(m_dataObject->currentRow());
m_sets.remove(m_dataObject->currentRow());
m_view->propertySetSwitched();
emit rowDeleted();
}
-void KexiDataAwarePropertySet::slotRowsDeleted(const QList<int> &rows)
+void KexiDataAwarePropertySet::slotRowsDeleted(const QList<int> &_rows)
{
+ if (_rows.isEmpty()) {
+ return;
+ }
//let's move most property sets up & delete unwanted
const int orig_size = size();
int prev_r = -1;
- int num_removed = 0, cur_r = -1;
- for (QList<int>::ConstIterator r_it = rows.constBegin(); r_it != rows.constEnd() \
&& *r_it < orig_size; ++r_it) { + int num_removed = 0;
+ int cur_r = -1;
+ QList<int> rows(_rows);
+ qSort(rows);
+ enlargeToFitRow(rows.last());
+ for (QList<int>::ConstIterator r_it = rows.constBegin(); r_it != rows.constEnd() \
&& *r_it < + orig_size; ++r_it)
+ {
cur_r = *r_it;
if (prev_r >= 0) {
// kDebug() << "move " << prev_r+num_removed-1 << ".." << cur_r-1 << " to " << \
prev_r+num_removed-1 << ".." << cur_r-2; @@ -236,6 +266,9 @@ void \
KexiDataAwarePropertySet::slotRowInserted(KexiDB::RecordData*, uint pos, bo \
m_sets[row] = 0;*/
// It's simplified in Qt4:
+ if (pos > 0) {
+ enlargeToFitRow(pos - 1);
+ }
m_sets.insert(pos, 0);
m_view->propertySetSwitched();
@@ -250,7 +283,7 @@ void KexiDataAwarePropertySet::slotCellSelected(int, int row)
m_view->propertySetSwitched();
}
-KoProperty::Set* KexiDataAwarePropertySet::findPropertySetForItem(KexiDB::RecordData& \
record) +KoProperty::Set* KexiDataAwarePropertySet::findPropertySetForItem(const \
KexiDB::RecordData& record) {
if (m_currentTVData.isNull())
return 0;
diff --git a/kexi/widget/dataviewcommon/kexidataawarepropertyset.h \
b/kexi/widget/dataviewcommon/kexidataawarepropertyset.h index 8a27b7c..7806dc2 100644
--- a/kexi/widget/dataviewcommon/kexidataawarepropertyset.h
+++ b/kexi/widget/dataviewcommon/kexidataawarepropertyset.h
@@ -1,5 +1,5 @@
/* This file is part of the KDE project
- Copyright (C) 2004-2005 Jarosław Staniek <staniek@kde.org>
+ Copyright (C) 2004-2012 Jarosław Staniek <staniek@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -28,8 +28,6 @@
#include <koproperty/Set.h>
#include <kexidb/RecordData.h>
-typedef QVector<KoProperty::Set*> SetVector;
-
class KexiView;
class KexiTableViewData;
class KexiDataAwareObjectInterface;
@@ -74,13 +72,13 @@ public:
uint currentRow() const;
inline KoProperty::Set* at(uint row) const {
- return m_sets[row];
+ return m_sets.value(row);
}
/*! \return a pointer to property set assigned for \a record or null if \a item \
has no property set assigned or it's not owned by assigned table view or
if assigned table view has no data set. */
- KoProperty::Set* findPropertySetForItem(KexiDB::RecordData& record);
+ KoProperty::Set* findPropertySetForItem(const KexiDB::RecordData& record);
/*! \return number of the first row containing \a propertyName property equal to \
\a value. This is used e.g. in the Table Designer to find a row by field name.
@@ -101,7 +99,7 @@ signals:
public slots:
void eraseCurrentPropertySet();
- void clear(uint minimumSize = 0);
+ void clear();
/*! Inserts \a set property set at \a row position.
If there was a buffer at this position before, it will be destroyed.
@@ -117,7 +115,7 @@ public slots:
*/
void set(uint row, KoProperty::Set* set, bool newOne = false);
- /*! Erases a property set at \a row position. */
+ /*! Deletes a property set at \a row position without removing the row. */
void eraseAt(uint row);
protected slots:
@@ -140,7 +138,9 @@ protected slots:
void slotReloadRequested();
protected:
- SetVector m_sets; //!< prop. sets vector
+ void enlargeToFitRow(uint row);
+
+ QVector<KoProperty::Set*> m_sets; //!< prop. sets vector
QPointer<KexiView> m_view;
KexiDataAwareObjectInterface* m_dataObject;
diff --git a/kexi/widget/dataviewcommon/kexitableviewdata.h \
b/kexi/widget/dataviewcommon/kexitableviewdata.h index b96f348..39d695a 100644
--- a/kexi/widget/dataviewcommon/kexitableviewdata.h
+++ b/kexi/widget/dataviewcommon/kexitableviewdata.h
@@ -252,8 +252,8 @@ public:
return KexiTableViewDataBase::last();
}
//Qt 4 inline int findRef( const KexiDB::RecordData* record ) { return \
KexiTableViewDataBase::findRef(record); }
- inline int indexOf(KexiDB::RecordData* record, int from = 0) const {
- return KexiTableViewDataBase::indexOf(record, from);
+ inline int indexOf(const KexiDB::RecordData* record, int from = 0) const {
+ return KexiTableViewDataBase::indexOf(const_cast<KexiDB::RecordData*>(record), \
from); }
inline void removeFirst() {
KexiTableViewDataBase::removeFirst();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic