From e887ab12c3739439915bcd3c17159cd17fde2a5a Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Wed, 30 Jul 2014 22:47:24 -0400 Subject: [PATCH] TableView3D: Fix for comms not being able to keep up with rapid keypress, but deferring sending until 0.250 seconds after the last key press. --- core/src/tableview3d.cpp | 84 ++++++++++++++++++++++++++++++++++------ core/src/tableview3d.h | 5 +++ 2 files changed, 77 insertions(+), 12 deletions(-) diff --git a/core/src/tableview3d.cpp b/core/src/tableview3d.cpp index 866a75c..6c58dc6 100644 --- a/core/src/tableview3d.cpp +++ b/core/src/tableview3d.cpp @@ -82,7 +82,15 @@ TableView3D::TableView3D(QWidget *parent) //ui.tracingCheckBox->setVisible(false); //ui.tracingCheckBox->setEnabled(false); connect(ui.showMapPushButton,SIGNAL(clicked()),this,SLOT(showMapClicked())); + m_inputTimer = new QTimer(this); + connect(m_inputTimer,SIGNAL(timeout()),this,SLOT(inputTimerTimeout())); } +void TableView3D::inputTimerTimeout() +{ + setRange(m_queuedValList); + m_inputTimer->stop(); +} + void TableView3D::tracingCheckBoxStateChanged(int newstate) { if (newstate == Qt::Checked) @@ -245,6 +253,8 @@ void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) return; } QList,double> > vallist; + QList invalidreasons; + bool valid = true; for (int i=0;iselectedItems().size();i++) { @@ -287,13 +297,41 @@ void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) //Value formattednumber = formatNumber(textd,m_metaData.zDp); } - ui.tableWidget->setItem(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + QString verifystr = verifyValue(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + if (verifystr != "GOOD") + { + invalidreasons.append(verifystr); + valid = false; + } + else + { + ui.tableWidget->setItem(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + } //ui.tableWidget->selectedItems()[0]->setText(formatNumber(textd,m_metaData.zDp)); //setValue(ui.tableWidget->selectedItems()[i]->row(),ui.tableWidget->selectedItems()[i]->column(),textd); } - setRange(vallist); + if (!valid) + { + //We had an error. + m_inputTimer->stop(); + QMessageBox::information(0,"Error setting value: ",invalidreasons.at(0)); + setRange(m_queuedValList); + } + if (m_inputTimer->isActive()) + { + //Timer is already active, too soon! + //Let the table continue to increment... but don't fire off + m_queuedValList = vallist; + m_inputTimer->stop(); + m_inputTimer->start(250); + } + else + { + m_inputTimer->start(250); + setRange(vallist); + } } else if (key == Qt::Key_Minus || key == Qt::Key_Underscore) { @@ -302,6 +340,8 @@ void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) return; } QList,double> > vallist; + QList invalidreasons; + bool valid = true; for (int i=0;iselectedItems().size();i++) { QString text = ""; @@ -345,13 +385,41 @@ void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) //Value formattednumber = formatNumber(textd,m_metaData.zDp); } - ui.tableWidget->setItem(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + QString verifystr = verifyValue(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + if (verifystr != "GOOD") + { + invalidreasons.append(verifystr); + valid = false; + } + else + { + ui.tableWidget->setItem(ui.tableWidget->selectedItems()[i].y(),ui.tableWidget->selectedItems()[i].x(),formattednumber); + } //ui.tableWidget->selectedItems()[0]->setText(formatNumber(textd,m_metaData.zDp)); //setValue(ui.tableWidget->selectedItems()[0]->row(),ui.tableWidget->selectedItems()[0]->column(),textd); } - setRange(vallist); + if (!valid) + { + //We had an error. + m_inputTimer->stop(); + QMessageBox::information(0,"Error setting value: ",invalidreasons.at(0)); + setRange(m_queuedValList); + } + if (m_inputTimer->isActive()) + { + //Timer is already active, too soon! + //Let the table continue to increment... but don't fire off + m_queuedValList = vallist; + m_inputTimer->stop(); + m_inputTimer->start(250); + } + else + { + m_inputTimer->start(250); + setRange(vallist); + } } } @@ -445,8 +513,6 @@ void TableView3D::keyPressEvent(QKeyEvent *event) } //Disable signals, so we can write the table all at once - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); //bool valid = true; QMap > tmpvaluemap; QStringList invalidreasons; @@ -507,8 +573,6 @@ void TableView3D::keyPressEvent(QKeyEvent *event) QMessageBox::information(0,"Error",errorstr); }*/ - connect(ui.tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(tableCellChanged(int,int))); - connect(ui.tableWidget,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(tableCurrentCellChanged(int,int,int,int))); } } QString TableView3D::verifyValue(int row,int column,QString item) @@ -558,8 +622,6 @@ QString TableView3D::verifyValue(int row,int column,QString item) //Data is arranged as a void TableView3D::setRange(QList,double> > data) { - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); QMap > tmpvaluemap; bool valid = true; QList invalidreasons; @@ -608,8 +670,6 @@ void TableView3D::setRange(QList,double> > data) } QMessageBox::information(0,"Error",errorstr); } - connect(ui.tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(tableCellChanged(int,int))); - connect(ui.tableWidget,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(tableCurrentCellChanged(int,int,int,int))); } void TableView3D::writeTable(bool ram) diff --git a/core/src/tableview3d.h b/core/src/tableview3d.h index 262802c..853f698 100644 --- a/core/src/tableview3d.h +++ b/core/src/tableview3d.h @@ -29,6 +29,7 @@ #include "ui_tableview3d.h" #include "dataview.h" #include "tablemap3d.h" +#include class TableView3D : public DataView { Q_OBJECT @@ -41,6 +42,7 @@ class TableView3D : public DataView bool setData(QString name,DataBlock *data); void passDatalog(QVariantMap data); private: + QTimer *m_inputTimer; void reColorTable(int rownum,int colnum); QList > m_highlightItemList; int m_oldXLoc; @@ -65,6 +67,7 @@ class TableView3D : public DataView bool m_tracingEnabled; void writeTable(bool ram); QString verifyValue(int row,int column,QString item); + QList,double> > m_queuedValList; protected: void contextMenuEvent(QContextMenuEvent *evt); void keyPressEvent(QKeyEvent *event); @@ -82,6 +85,8 @@ private slots: void exportJson(QString filename); void showMapClicked(); void hotKeyPressed(int key,Qt::KeyboardModifier modifier); + void inputTimerTimeout(); + signals: void show3DTable(unsigned short locationid,Table3DData *data); void saveToFlash(unsigned short locationid);