Fix Tab key edition on the Equipment table [patch]

Tomaz Canabrava tcanabrava at kde.org
Tue Oct 15 09:25:04 UTC 2013


The following changes since commit e93f96a8ebfb38696c964f9a0af28eadccf8d1a2:

  Add test dive with tank pressure sensor information (2013-10-15 04:12:16
-0700)

are available in the git repository at:

  tabOnEquipmentEdit

for you to fetch changes up to 28b458e8d9dd774b4d54d97788d7d00e650cc328:

  Fixed the Tab behavior on the QCombobox Delegate (2013-10-15 13:11:35
-0300)

----------------------------------------------------------------
Tomaz Canabrava (1):
      Fixed the Tab behavior on the QCombobox Delegate

 qt-ui/modeldelegates.cpp | 18 +++++++++++++++++-
 qt-ui/modeldelegates.h   |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index a4f457f..d1e2839 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -22,6 +22,7 @@
 // Gets the index of the model in the currentRow and column.
 // currCombo is defined below.
 #define IDX( XX ) mymodel->index(currCombo.currRow, XX)
+static bool keyboardFinished = false;

 StarWidgetsDelegate::StarWidgetsDelegate(QWidget* parent):
        QStyledItemDelegate(parent),
@@ -91,11 +92,12 @@ QWidget* ComboBoxDelegate::createEditor(QWidget*
parent, const QStyleOptionViewI
        comboDelegate->lineEdit()->installEventFilter(
const_cast<QObject*>(qobject_cast<const QObject*>(this)));
        comboDelegate->view()->installEventFilter(
const_cast<QObject*>(qobject_cast<const QObject*>(this)));
        connect(comboDelegate, SIGNAL(highlighted(QString)), this,
SLOT(testActivation(QString)));
-       connect(comboDelegate->lineEdit(), SIGNAL(editingFinished()), this,
SLOT(testActivation()));
        connect(comboDelegate, SIGNAL(activated(QString)), this,
SLOT(fakeActivation()));
+       connect(this,
SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)), this,
SLOT(fixTabBehavior()));
        currCombo.comboEditor = comboDelegate;
        currCombo.currRow = index.row();
        currCombo.model = const_cast<QAbstractItemModel*>(index.model());
+       keyboardFinished = false;

        // Current display of things on Gnome3 looks like shit, so
        // let`s fix that.
@@ -137,6 +139,16 @@ void ComboBoxDelegate::fakeActivation(){
        QStyledItemDelegate::eventFilter(currCombo.comboEditor, &ev);
 }

+// This 'reverts' the model data to what we actually choosed,
+// becaus e a TAB is being understood by Qt as 'cancel' while
+// we are on a QComboBox ( but not on a QLineEdit.
+void ComboBoxDelegate::fixTabBehavior()
+{
+       if(keyboardFinished){
+               setModelData(0,0,QModelIndex());
+       }
+}
+
 bool ComboBoxDelegate::eventFilter(QObject* object, QEvent* event)
 {
        // Reacts on Key_UP and Key_DOWN to show the QComboBox - list of
choices.
@@ -147,6 +159,10 @@ bool ComboBoxDelegate::eventFilter(QObject* object,
QEvent* event)
                                currCombo.ignoreSelection = true;
                                currCombo.comboEditor->showPopup();
                        }
+                       if(ev->key() == Qt::Key_Tab || ev->key() ==
Qt::Key_Enter || ev->key() == Qt::Key_Return){
+                               currCombo.activeText  =
currCombo.comboEditor->currentText();
+                               keyboardFinished = true;
+                       }
                }
                else{   // the 'Drop Down Menu' part.
                        QKeyEvent *ev = static_cast<QKeyEvent*>(event);
diff --git a/qt-ui/modeldelegates.h b/qt-ui/modeldelegates.h
index a16e472..9fade15 100644
--- a/qt-ui/modeldelegates.h
+++ b/qt-ui/modeldelegates.h
@@ -27,6 +27,7 @@ public slots:
        void testActivation(const QString& currString = QString());
        //HACK: try to get rid of this in the future.
        void fakeActivation();
+       void fixTabBehavior();
        virtual void revertModelData(QWidget* widget,
QAbstractItemDelegate::EndEditHint hint) = 0;
 protected:
        QAbstractItemModel *model;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hohndel.org/pipermail/subsurface/attachments/20131015/40681122/attachment-0001.html>


More information about the subsurface mailing list