[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