[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bcalligra/kexi-mobile-adam=5Fpigg=5D_kexi/plugins=3A?=
From: Adam Pigg <adam () piggz ! co ! uk>
Date: 2011-07-08 21:39:50
Message-ID: 20110708213950.70359A60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 4507ee5c6ab05d0743a7f1cab0e72827747e7aa9 by Adam Pigg.
Committed on 08/07/2011 at 23:36.
Pushed by piggz into branch 'kexi-mobile-adam_pigg'.
Implement editing/record saving.
CCMAIL:staniek@kde.org
M +2 -1 kexi/plugins/CMakeLists.txt
M +28 -1 kexi/plugins/autoforms/widgets/AutoForm.cpp
M +7 -2 kexi/plugins/autoforms/widgets/AutoForm.h
M +9 -2 kexi/plugins/autoforms/widgets/AutoLineEdit.cpp
M +6 -2 kexi/plugins/autoforms/widgets/AutoLineEdit.h
M +30 -4 kexi/plugins/autoforms/widgets/AutoWidget.cpp
M +11 -1 kexi/plugins/autoforms/widgets/AutoWidget.h
http://commits.kde.org/calligra/4507ee5c6ab05d0743a7f1cab0e72827747e7aa9
diff --git a/kexi/plugins/CMakeLists.txt b/kexi/plugins/CMakeLists.txt
index cddf072..9925ef2 100644
--- a/kexi/plugins/CMakeLists.txt
+++ b/kexi/plugins/CMakeLists.txt
@@ -1,9 +1,10 @@
add_definitions(-DKDE_DEFAULT_DEBUG_AREA=44021)
add_subdirectory( reports )
+add_subdirectory(autoforms)
if (KEXI_MOBILE)
- add_subdirectory(autoforms)
+
else (KEXI_MOBILE)
add_subdirectory( tables )
diff --git a/kexi/plugins/autoforms/widgets/AutoForm.cpp \
b/kexi/plugins/autoforms/widgets/AutoForm.cpp index 0144cde..700e1fe 100644
--- a/kexi/plugins/autoforms/widgets/AutoForm.cpp
+++ b/kexi/plugins/autoforms/widgets/AutoForm.cpp
@@ -262,12 +262,15 @@ void AutoForm::buildForm()
{
KexiTableViewColumn::List col_list = \
KexiDataAwareObjectInterface::data()->columns();
+ int column = 0;
+
foreach(KexiTableViewColumn *col, col_list) {
kDebug() << col->captionAliasOrName();
AutoWidget* widget = new AutoLineEdit(this);
widget->setDataSource(col->field()->name());
widget->setColumnInfo(col->columnInfo());
- m_widgets << widget;
+ m_widgets[column] = widget;
+ column++;
}
setMainDataSourceWidget(this);
@@ -284,3 +287,27 @@ void AutoForm::layoutForm()
}
resize(sizeHint());
}
+
+void AutoForm::valueChanged(KexiDataItemInterface* item)
+{
+ kDebug() << item->field()->captionOrName();
+ if (!item)
+ return;
+ //only signal start editing when no row editing was started already
+
+ if (m_editor != item) {
+ kDebug() << "Editing Item Started";
+ m_rowEditing = true;
+ m_editor = item;
+ startEditCurrentCell();
+ }
+ fillDuplicatedDataItems(dynamic_cast<KexiFormDataItemInterface*>(item), \
item->value()); +
+ //value changed: clear 'default value' mode (e.g. a blue italic text)
+ dynamic_cast<KexiFormDataItemInterface*>(item)->setDisplayDefaultValue(dynamic_cast<QWidget*>(item), \
false); +}
+
+int AutoForm::itemIndex(AutoWidget* widget)
+{
+ return m_widgets.key(widget);
+}
diff --git a/kexi/plugins/autoforms/widgets/AutoForm.h \
b/kexi/plugins/autoforms/widgets/AutoForm.h index df72c38..b03899f 100644
--- a/kexi/plugins/autoforms/widgets/AutoForm.h
+++ b/kexi/plugins/autoforms/widgets/AutoForm.h
@@ -42,6 +42,8 @@ class AutoForm : public QWidget,
public:
AutoForm(QWidget* parent, KexiRecordNavigatorIface *nav);
virtual ~AutoForm();
+
+ int itemIndex(AutoWidget*);
protected:
virtual void resizeEvent(QResizeEvent* );
@@ -84,13 +86,16 @@ protected:
virtual void updateWidgetScrollBars();
virtual QScrollBar* verticalScrollBar() const;
+ //Reimplement from KexiFormDataProvider
+ virtual void valueChanged(KexiDataItemInterface* item);
+
private:
QLabel *m_title;
QGridLayout *m_layout;
- QList<AutoWidget*> m_widgets;
+ QHash<int, AutoWidget*> m_widgets;
KexiDB::RecordData *m_previousRecord;
-
+
void buildForm();
void layoutForm();
};
diff --git a/kexi/plugins/autoforms/widgets/AutoLineEdit.cpp \
b/kexi/plugins/autoforms/widgets/AutoLineEdit.cpp index 26e8798..ac767aa 100644
--- a/kexi/plugins/autoforms/widgets/AutoLineEdit.cpp
+++ b/kexi/plugins/autoforms/widgets/AutoLineEdit.cpp
@@ -21,11 +21,13 @@
#include "AutoLineEdit.h"
#include <KDebug>
#include <kexidb/queryschema.h>
+#include "AutoForm.h"
-AutoLineEdit::AutoLineEdit(QWidget* parent): AutoWidget(parent)
+AutoLineEdit::AutoLineEdit(AutoForm* parent): AutoWidget(parent)
{
m_lineEdit = new QLineEdit(this);
setWidget(m_lineEdit);
+ connect(m_lineEdit, SIGNAL(textEdited(const QString &)), this, \
SLOT(slotTextEdited(const QString&))); }
AutoLineEdit::~AutoLineEdit()
@@ -79,7 +81,7 @@ bool AutoLineEdit::valueIsNull()
QVariant AutoLineEdit::value()
{
- kDebug();
+ kDebug() << m_lineEdit->text();
return m_lineEdit->text();
}
@@ -90,4 +92,9 @@ void AutoLineEdit::setColumnInfo(KexiDB::QueryColumnInfo* cinfo)
setObjectName("AutoLineEdit_" + cinfo->field->name());
}
+void AutoLineEdit::slotTextEdited(const QString& text)
+{
+ kDebug();
+ signalValueChanged();
+}
diff --git a/kexi/plugins/autoforms/widgets/AutoLineEdit.h \
b/kexi/plugins/autoforms/widgets/AutoLineEdit.h index e070611..9a744c1 100644
--- a/kexi/plugins/autoforms/widgets/AutoLineEdit.h
+++ b/kexi/plugins/autoforms/widgets/AutoLineEdit.h
@@ -24,12 +24,13 @@
#include "AutoWidget.h"
#include <QLineEdit>
+class AutoForm;
class AutoLineEdit : public AutoWidget
{
-
+ Q_OBJECT
public:
- AutoLineEdit(QWidget *parent);
+ AutoLineEdit(AutoForm *parent);
virtual ~AutoLineEdit();
virtual void setReadOnly(bool readOnly);
@@ -46,6 +47,9 @@ public:
virtual bool valueIsNull();
virtual QVariant value();
+private slots:
+ void slotTextEdited(const QString &text);
+
private:
QLineEdit *m_lineEdit;
};
diff --git a/kexi/plugins/autoforms/widgets/AutoWidget.cpp \
b/kexi/plugins/autoforms/widgets/AutoWidget.cpp index e22fd11..62a1eff 100644
--- a/kexi/plugins/autoforms/widgets/AutoWidget.cpp
+++ b/kexi/plugins/autoforms/widgets/AutoWidget.cpp
@@ -22,8 +22,11 @@
#include <QLabel>
#include <kexidb/field.h>
#include <QHBoxLayout>
+#include <QEvent>
-AutoWidget::AutoWidget(QWidget* parent): QWidget(parent), m_widget(0)
+#include "AutoForm.h"
+
+AutoWidget::AutoWidget(AutoForm* parent): QWidget(parent), m_widget(0)
{
m_fieldLabel = new QLabel(this);
@@ -31,6 +34,9 @@ AutoWidget::AutoWidget(QWidget* parent): QWidget(parent), \
m_widget(0) m_layout->addWidget(m_fieldLabel, 1);
setLayout(m_layout);
+ m_parent = parent;
+
+ setFocusPolicy(Qt::StrongFocus);
}
AutoWidget::~AutoWidget()
@@ -47,10 +53,30 @@ void AutoWidget::setWidget(QWidget* widget)
{
if (!m_widget) {
m_widget = widget;
- m_layout->addWidget(widget, 1);
+ setFocusProxy(m_widget);
+ m_layout->addWidget(m_widget, 1);
+ m_widget->installEventFilter(this);
}
}
+void AutoWidget::gotFocus()
+{
+ kDebug() << m_parent->itemIndex(this);
+ m_parent->setCursorPosition(m_parent->currentRow(), m_parent->itemIndex(this));
+}
-
-
+bool AutoWidget::eventFilter(QObject *obj, QEvent *event)
+{
+ if (obj == m_widget) {
+ //Get the focus event for the editing widget
+ if (event->type() == QEvent::FocusIn) {
+ gotFocus();
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ // pass the event on to the parent class
+ return QWidget::eventFilter(obj, event);
+ }
+}
\ No newline at end of file
diff --git a/kexi/plugins/autoforms/widgets/AutoWidget.h \
b/kexi/plugins/autoforms/widgets/AutoWidget.h index 6995e56..c6fe7a7 100644
--- a/kexi/plugins/autoforms/widgets/AutoWidget.h
+++ b/kexi/plugins/autoforms/widgets/AutoWidget.h
@@ -25,6 +25,7 @@
#include <QVariant>
#include <dataviewcommon/kexiformdataiteminterface.h>
+class AutoForm;
class QLabel;
class QHBoxLayout;
namespace KexiDB {
@@ -38,14 +39,23 @@ public:
virtual ~AutoWidget();
protected:
- explicit AutoWidget(QWidget* parent = 0);
+ explicit AutoWidget(AutoForm* parent);
void setLabel(const QString& label);
void setWidget(QWidget* widget);
+
+ //virtual void focusInEvent(QFocusEvent* );
+ virtual bool eventFilter(QObject *obj, QEvent *event);
+
private:
QLabel *m_fieldLabel;
QHBoxLayout *m_layout;
QWidget *m_widget;
+
+ AutoForm* m_parent;
+
+protected slots:
+ void gotFocus();
};
#endif // AUTOWIDGETBASE_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic