diff --git a/src/app/tape/dialogs/dialogmdatabase.cpp b/src/app/tape/dialogs/dialogmdatabase.cpp index 049772c3d..76355e634 100644 --- a/src/app/tape/dialogs/dialogmdatabase.cpp +++ b/src/app/tape/dialogs/dialogmdatabase.cpp @@ -30,6 +30,8 @@ #include "ui_dialogmdatabase.h" #include "../mapplication.h" +#include + //--------------------------------------------------------------------------------------------------------------------- DialogMDataBase::DialogMDataBase(const QStringList &list, QWidget *parent) :QDialog(parent), @@ -57,6 +59,8 @@ DialogMDataBase::DialogMDataBase(const QStringList &list, QWidget *parent) ui->setupUi(this); InitDataBase(list); + ui->treeWidget->installEventFilter(this); + connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &DialogMDataBase::UpdateChecks); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &DialogMDataBase::ShowDescription); @@ -91,6 +95,8 @@ DialogMDataBase::DialogMDataBase(QWidget *parent) ui->setupUi(this); InitDataBase(); + ui->treeWidget->installEventFilter(this); + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &DialogMDataBase::ShowDescription); ReadSettings(); @@ -165,6 +171,38 @@ void DialogMDataBase::changeEvent(QEvent *event) QDialog::changeEvent(event); } +//--------------------------------------------------------------------------------------------------------------------- +bool DialogMDataBase::eventFilter(QObject *target, QEvent *event) +{ + if (target == ui->treeWidget) + { + if (event->type() == QEvent::KeyPress) + { + QKeyEvent *keyEvent = static_cast(event); + switch(keyEvent->key()) + { + case Qt::Key_Up: + { + const QModelIndex model = ui->treeWidget->indexAbove(ui->treeWidget->currentIndex()); + QTreeWidgetItem *item = ui->treeWidget->itemAbove(ui->treeWidget->currentItem()); + emit ShowDescription(item, model.column()); + break; + } + case Qt::Key_Down: + { + const QModelIndex model = ui->treeWidget->indexBelow(ui->treeWidget->currentIndex()); + QTreeWidgetItem *item = ui->treeWidget->itemBelow(ui->treeWidget->currentItem()); + emit ShowDescription(item, model.column()); + break; + } + default: + break; + } + } + } + return QDialog::eventFilter(target, event); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogMDataBase::UpdateChecks(QTreeWidgetItem *item, int column) { diff --git a/src/app/tape/dialogs/dialogmdatabase.h b/src/app/tape/dialogs/dialogmdatabase.h index c76a66f58..7c1a7d5a9 100644 --- a/src/app/tape/dialogs/dialogmdatabase.h +++ b/src/app/tape/dialogs/dialogmdatabase.h @@ -53,6 +53,7 @@ public: protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; + virtual bool eventFilter(QObject *target, QEvent *event) Q_DECL_OVERRIDE; private slots: void UpdateChecks(QTreeWidgetItem *item, int column); diff --git a/src/app/tape/dialogs/dialogmdatabase.ui b/src/app/tape/dialogs/dialogmdatabase.ui index 0f90548ae..eb6a1e95c 100644 --- a/src/app/tape/dialogs/dialogmdatabase.ui +++ b/src/app/tape/dialogs/dialogmdatabase.ui @@ -39,6 +39,9 @@ QAbstractItemView::SingleSelection + + true + 57 @@ -63,6 +66,9 @@ + + Qt::TabFocus + Qt::Horizontal @@ -73,6 +79,11 @@ + + treeWidget + textEdit + buttonBox + @@ -84,8 +95,8 @@ accept() - 248 - 254 + 257 + 540 157 @@ -100,8 +111,8 @@ reject() - 316 - 260 + 325 + 540 286