From be675166b2482ada25cece243ae6f72835a4b3c1 Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Fri, 1 Aug 2014 13:22:45 -0400 Subject: [PATCH] TableView3D: Numeric entry now works for 3d table view --- core/src/tableview3d.cpp | 236 ++++++------------------------------ core/src/tableview3d.h | 8 +- core/src/tableviewnew3d.cpp | 235 ++++++++++++++++++++++------------- core/src/tableviewnew3d.h | 7 ++ 4 files changed, 203 insertions(+), 283 deletions(-) diff --git a/core/src/tableview3d.cpp b/core/src/tableview3d.cpp index 05f13eb..e85f3fc 100644 --- a/core/src/tableview3d.cpp +++ b/core/src/tableview3d.cpp @@ -40,8 +40,6 @@ TableView3D::TableView3D(QWidget *parent) ui.setupUi(this); tableData=0; m_tracingEnabled = false; - 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))); connect(ui.savePushButton,SIGNAL(clicked()),this,SLOT(saveClicked())); connect(ui.loadFlashPushButton,SIGNAL(clicked()),this,SLOT(loadClicked())); connect(ui.loadRamPushButton,SIGNAL(clicked()),this,SLOT(loadRamClicked())); @@ -53,6 +51,7 @@ TableView3D::TableView3D(QWidget *parent) ui.tableWidget->addHotkey(Qt::Key_Minus,Qt::NoModifier); ui.tableWidget->addHotkey(Qt::Key_Underscore,Qt::ShiftModifier); ui.tableWidget->addHotkey(Qt::Key_Equal,Qt::NoModifier); + connect(ui.tableWidget,SIGNAL(itemChangeRequest(int,int,QString)),this,SLOT(itemChangeRequest(int,int,QString))); //ui.tableWidget->setItemDelegate(new TableWidgetDelegate()); setContextMenuPolicy(Qt::DefaultContextMenu); @@ -152,20 +151,20 @@ void TableView3D::setValue(int row, int column,double value,bool ignoreselection { QLOG_ERROR() << "XAxis edit attempted with multiple cells selected. This is not allowed"; QMessageBox::information(0,"Error","Editing of multiple AXIS cells at once is not allowed. Please select a single axis cell to edit at a time"); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.xDp)); + //setSilentValue(row,column,m_currentValue); return; } if (ui.tableWidget->selectedItems()[i].x() == 0) { QLOG_ERROR() << "YAxis edit attempted with multiple cells selected. This is not allowed"; QMessageBox::information(0,"Error","Editing of multiple AXIS cells at once is not allowed. Please select a single axis cell to edit at a time"); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.xDp)); + //setSilentValue(row,column,m_currentValue); return; } } - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.zDp)); //Reset the value, setRange will set it properly. + setSilentValue(row,column,m_currentValue); //Reset the value, setRange will set it properly. //currentvalue = oldValue; - QLOG_DEBUG() << "Setting all cells to" << currentvalue << "for" << row << column; + QLOG_DEBUG() << "Setting all cells to" << m_currentValue << "for" << row << column; QList,double> > vallist; for (int i=0;iselectedItems().size();i++) { @@ -178,73 +177,65 @@ void TableView3D::setValue(int row, int column,double value,bool ignoreselection } else { - if (row == ui.tableWidget->rowCount()-1) + if (row == -1) { - setSilentValue(row,column,formatNumber(tempValue,m_metaData.xDp)); + if (tempValue > tableData->maxCalcedXAxis()) { QMessageBox::information(0,"Error",QString("Value entered too large! Value range " + QString::number(tableData->minCalcedXAxis()) + "-" + QString::number(tableData->maxCalcedXAxis()) + ". Entered value:") + ui.tableWidget->item(row,column)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.xDp)); + //setSilentValue(row,column,m_currentValue); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); return; } else if (tempValue < tableData->minCalcedXAxis()) { QMessageBox::information(0,"Error",QString("Value entered too small! Value range " + QString::number(tableData->minCalcedXAxis()) + "-" + QString::number(tableData->maxCalcedXAxis()) + ". Entered value:") + ui.tableWidget->item(row,column)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.xDp)); + //setSilentValue(row,column,m_currentValue); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); return; } - - currentvalue = oldValue; - tableData->setXAxis(column-1,currentvalue); + //setSilentValue(row,column,formatNumber(tempValue,m_metaData.xDp)); + tableData->setXAxis(column,oldValue); } - else if (column == 0) + else if (column == -1) { - setSilentValue(row,column,formatNumber(tempValue,m_metaData.yDp)); + //setSilentValue(row,column,formatNumber(tempValue,m_metaData.yDp)); if (tempValue > tableData->maxCalcedYAxis()) { QMessageBox::information(0,"Error",QString("Value entered too large! Value range " + QString::number(tableData->minCalcedYAxis()) + "-" + QString::number(tableData->maxCalcedYAxis()) + ". Entered value:") + ui.tableWidget->item(row,column)); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.yDp)); + //setSilentValue(row,column,m_currentValue); return; } else if (tempValue < tableData->minCalcedYAxis()) { QMessageBox::information(0,"Error",QString("Value entered too small! Value range " + QString::number(tableData->minCalcedYAxis()) + "-" + QString::number(tableData->maxCalcedYAxis()) + ". Entered value:") + ui.tableWidget->item(row,column)); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.yDp)); + //setSilentValue(row,column,m_currentValue); return; } - currentvalue = oldValue; - tableData->setYAxis(ui.tableWidget->rowCount()-(row+2),currentvalue); + tableData->setYAxis(ui.tableWidget->rowCount()-(row+1),oldValue); } else { - setSilentValue(row,column,formatNumber(tempValue,m_metaData.zDp)); + //setSilentValue(row,column,formatNumber(tempValue,m_metaData.zDp)); if (tempValue > tableData->maxCalcedValue()) { QMessageBox::information(0,"Error",QString("Value entered too large! Value range " + QString::number(tableData->minCalcedValue()) + "-" + QString::number(tableData->maxCalcedValue()) + ". Entered value:") + ui.tableWidget->item(row,column)); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.zDp)); + //setSilentValue(row,column,m_currentValue); return; } if (tempValue < tableData->minCalcedValue()) { QMessageBox::information(0,"Error",QString("Value entered too small! Value range " + QString::number(tableData->minCalcedValue()) + "-" + QString::number(tableData->maxCalcedValue()) + ". Entered value:") + ui.tableWidget->item(row,column)); //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); - setSilentValue(row,column,formatNumber(currentvalue,m_metaData.zDp)); + //setSilentValue(row,column,m_currentValue); return; } - currentvalue = oldValue; - tableData->setCell(ui.tableWidget->rowCount()-(row+2),column-1,currentvalue); + tableData->setCell(ui.tableWidget->rowCount()-(row+1),column,oldValue); } - reColorTable(row,column); } - //ui.tableWidget->resizeColumnsToContents(); - resizeColumnWidths(); - - } void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) @@ -429,6 +420,10 @@ void TableView3D::hotKeyPressed(int key,Qt::KeyboardModifier modifier) } } } +void TableView3D::regularKeyPressed(int key) +{ + +} void TableView3D::keyPressEvent(QKeyEvent *event) { @@ -652,14 +647,6 @@ void TableView3D::setRange(QList,double> > data) if (valid) { writeTable(true); - if (data.size() == 1) - { - reColorTable(data[0].first.first,data[0].first.second); - } - else - { - reColorTable(-1,-1); - } } else { @@ -740,6 +727,15 @@ void TableView3D::tableCurrentCellChanged(int currentrow,int currentcolumn,int p m_currCol = currentcolumn; //currentvalue = ui.tableWidget->item(currentrow,currentcolumn)->text().toDouble(); } +void TableView3D::currentSelectionChanged(QList > selectionList) +{ + m_currentValue = ""; + if (selectionList.size() > 0) + { + m_currentValue = ui.tableWidget->item(selectionList.at(0).first,selectionList.at(0).second); + } +} + void TableView3D::exportJson(QString filename) { //Create a JSON file similar to MTX's yaml format. @@ -945,8 +941,6 @@ void TableView3D::loadClicked() } bool TableView3D::updateTable() { - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); //connect(ui.tableWidget,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(tableCurrentCellChanged(int,int,int,int))); QList > selectedlist; if (ui.tableWidget->selectedItems().size() > 0) @@ -1073,19 +1067,12 @@ bool TableView3D::updateTable() } } } - //ui.tableWidget->resizeColumnsToContents(); - resizeColumnWidths(); - //ui.tableWidget->setItem(ui.tableWidget->rowCount()-1,0,new QTableWidgetItem()); - //ui.tableWidget->item(ui.tableWidget->rowCount()-1,0)->setFlags(ui.tableWidget->item(ui.tableWidget->rowCount()-1,0)->flags() & ~Qt::ItemIsEditable); - //ui.tableWidget->setCurrentCell(m_currRow,m_currCol); for (int i=0;iitem(selectedlist[i].first,selectedlist[i].second)->setSelected(true); } selectedlist.clear(); - 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))); QLOG_DEBUG() << "updateTable(): Done with table"; return true; //return passData(locationid,data,physicallocation,Table3DMetaData()); @@ -1127,92 +1114,6 @@ bool TableView3D::setData(unsigned short locationid,DataBlock *data) m_locationId = locationid; return updateTable(); } -void TableView3D::reColorTable(int rownum,int colnum) -{ - //QLOG_DEBUG() << "Recoloring" << rownum << colnum; - if (rownum == ui.tableWidget->rowCount()-1 || colnum == 0) - { - return; - } - if (rownum == -1 || colnum == -1) - { - //Recolor the whole table - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); - QLOG_DEBUG() << "reColorTable(): Starting"; - for (int row=0;rowrows();row++) - { - for (int col=0;colcolumns();col++) - { - double val = tableData->values()[row][col]; - //ui.tableWidget->setItem((tableData->rows()-1)-(row),col+1,new QTableWidgetItem(formatNumber(val,m_metaData.zDp))); - if (val < tableData->maxCalcedValue()/4) - { - //ui.tableWidget->item((tableData->rows()-1)-((row)),(col)+1)->setBackgroundColor(QColor::fromRgb(0,(255*((val)/(tableData->maxCalcedValue()/4.0))),255)); - } - else if (val < ((tableData->maxCalcedValue()/4)*2)) - { - //ui.tableWidget->item((tableData->rows()-1)-((row)),(col)+1)->setBackgroundColor(QColor::fromRgb(0,255,255-(255*((val-((tableData->maxCalcedValue()/4.0)))/(tableData->maxCalcedValue()/4.0))))); - } - else if (val < ((tableData->maxCalcedValue()/4)*3)) - { - //ui.tableWidget->item((tableData->rows()-1)-((row)),(col)+1)->setBackgroundColor(QColor::fromRgb((255*((val-((tableData->maxCalcedValue()/4.0)*2))/(tableData->maxCalcedValue()/4.0))),255,0)); - } - else - { - //ui.tableWidget->item((tableData->rows()-1)-((row)),(col)+1)->setBackgroundColor(QColor::fromRgb(255,255-(255*((val-((tableData->maxCalcedValue()/4.0)*3))/(tableData->maxCalcedValue()/4.0))),0)); - } - } - } - QLOG_DEBUG() << "reColorTable(): Finished"; - 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))); - } - else - { - - /* - - (9) = 5+4; - 10-1-4=5 - 10-1-3=6 - - 10-1-0=9 - 10-1-9=0 - - rownum == 0 - tabledata->values()[(tableData->rows()-1)-rownum][colnum-1] - -*/ - - //QLOG_DEBUG() << "Loc:" << (tableData->rows()-1)-(rownum) << colnum - 1; - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); - double val = tableData->values()[(tableData->rows()-1)-(rownum)][colnum-1]; - //QLOG_DEBUG() << "Value:" << val; - - //ui.tableWidget->setItem((tableData->rows()-1)-(row),col+1,new QTableWidgetItem(formatNumber(val,m_metaData.zDp))); - if (val < tableData->maxCalcedValue()/4) - { - //ui.tableWidget->item(rownum,colnum)->setBackgroundColor(QColor::fromRgb(0,(255*((val)/(tableData->maxCalcedValue()/4.0))),255)); - } - else if (val < ((tableData->maxCalcedValue()/4)*2)) - { - //ui.tableWidget->item(rownum,colnum)->setBackgroundColor(QColor::fromRgb(0,255,255-(255*((val-((tableData->maxCalcedValue()/4.0)))/(tableData->maxCalcedValue()/4.0))))); - } - else if (val < ((tableData->maxCalcedValue()/4)*3)) - { - //ui.tableWidget->item(rownum,colnum)->setBackgroundColor(QColor::fromRgb((255*((val-((tableData->maxCalcedValue()/4.0)*2))/(tableData->maxCalcedValue()/4.0))),255,0)); - } - else - { - //ui.tableWidget->item(rownum,colnum)->setBackgroundColor(QColor::fromRgb(255,255-(255*((val-((tableData->maxCalcedValue()/4.0)*3))/(tableData->maxCalcedValue()/4.0))),0)); - } - 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::passDatalog(QVariantMap data) { @@ -1227,24 +1128,6 @@ void TableView3D::passDatalog(QVariantMap data) ui.tableWidget->setTracingValue(xval,yval); } } -/*bool TableView3D::setData(unsigned short locationid,QByteArray data,Table3DMetaData metadata,TableData *newtabledata) -{ - m_metaData = metadata; - metaDataValid = true; - return setData(locationid,data,newtabledata); -} -bool TableView3D::setData(unsigned short locationid,Table3DData *data,Table3DMetaData metadata) -{ - m_metaData = metadata; - metaDataValid = true; - connect(data,SIGNAL(saveSingleData(unsigned short,QByteArray,unsigned short,unsigned short)),this,SIGNAL(saveSingleData(unsigned short,QByteArray,unsigned short,unsigned short))); - setData(locationid,data); -} - -bool TableView3D::setData(unsigned short locationid,QByteArray rawdata) -{ - return setData(locationid,rawdata,tableData); -}*/ QString TableView3D::formatNumber(double num,int prec) { if (metaDataValid) @@ -1256,57 +1139,10 @@ QString TableView3D::formatNumber(double num,int prec) return QString::number(num); } } -void TableView3D::resizeColumnWidths() -{ - /* - unsigned int max = 0; - for (int i=0;icolumnCount();i++) - { - for (int j=0;jrowCount();j++) - { - if (ui.tableWidget->item(j,i)) - { - //1.3 is required to make text show correctly - unsigned int test = ui.tableWidget->fontMetrics().width(ui.tableWidget->item(j,i)->text()) * 1.3; - if (test > max) - { - max = test; - } - } - } - } - for (int i=0;icolumnCount();i++) - { - ui.tableWidget->setColumnWidth(i,max); - }*/ -} -void TableView3D::tableCellChanged(int row,int column) -{/* - bool conversionOk = false; // Note, value of this is irrelevant, overwritten during call in either case, but throws a compiler error if not set. - double tempValue = ui.tableWidget->item(row,column)->text().toDouble(&conversionOk); - Q_UNUSED(tempValue) - //TODO Fix that ^^ - //double oldValue = tempValue; - if (!conversionOk) - { - QMessageBox::information(0,"Error","Value entered is not a number: " + ui.tableWidget->item(row,column)->text()); - setSilentValue(row,column,formatNumber(currentvalue)); - //ui.tableWidget->item(row,column)->setText(QString::number(currentvalue)); - return; - } - setValue(row,column,tempValue,false); //Don't ignore selection, so ALL highlighted cells get changed - */ -} void TableView3D::setSilentValue(int row,int column,QString value) { - /* - ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); - ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); - ui.tableWidget->item(row,column)->setText(value); - 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))); - */ + ui.tableWidget->setItem(row,column,value); } @@ -1318,3 +1154,7 @@ void TableView3D::saveClicked() TableView3D::~TableView3D() { } +void TableView3D::itemChangeRequest(int row,int column,QString text) +{ + setValue(row,column,text.toDouble()); +} diff --git a/core/src/tableview3d.h b/core/src/tableview3d.h index 5ccbe65..882b5f1 100644 --- a/core/src/tableview3d.h +++ b/core/src/tableview3d.h @@ -44,7 +44,6 @@ class TableView3D : public DataView private: bool m_firstKeypress; QTimer *m_inputTimer; - void reColorTable(int rownum,int colnum); QList > m_highlightItemList; int m_oldXLoc; int m_oldYLoc; @@ -53,14 +52,13 @@ class TableView3D : public DataView bool metaDataValid; Table3DData *tableData; unsigned short m_locationId; - double currentvalue; + QString m_currentValue; Ui::TableView3D ui; unsigned short m_xAxisSize; unsigned short m_yAxisSize; Table3DMetaData m_metaData; void setSilentValue(int row,int column,QString value); QString formatNumber(double num,int prec=2); - void resizeColumnWidths(); int m_currRow; int m_currCol; void setValue(int row, int column,double value,bool ignoreselection = true); @@ -75,9 +73,10 @@ class TableView3D : public DataView public slots: bool updateTable(); private slots: + void currentSelectionChanged(QList > selectionList); + void itemChangeRequest(int row,int column,QString text); void tracingCheckBoxStateChanged(int newstate); void tableCurrentCellChanged(int currentrow,int currentcolumn,int prevrow,int prevcolumn); - void tableCellChanged(int row,int column); void saveClicked(); void loadClicked(); void loadRamClicked(); @@ -86,6 +85,7 @@ private slots: void exportJson(QString filename); void showMapClicked(); void hotKeyPressed(int key,Qt::KeyboardModifier modifier); + void regularKeyPressed(int key); void inputTimerTimeout(); signals: diff --git a/core/src/tableviewnew3d.cpp b/core/src/tableviewnew3d.cpp index 92f3e2a..3115638 100644 --- a/core/src/tableviewnew3d.cpp +++ b/core/src/tableviewnew3d.cpp @@ -14,6 +14,8 @@ TableViewNew3D::TableViewNew3D(QWidget *parent) : QWidget(parent) m_updateTimer = new QTimer(this); connect(m_updateTimer,SIGNAL(timeout()),this,SLOT(update())); m_updateTimer->start(100); + m_inEdit = false; + qRegisterMetaType > >("QList >"); } void TableViewNew3D::setTracingValue(double x,double y) @@ -130,6 +132,10 @@ void TableViewNew3D::setItem(int row,int column,QString text) { values[row][column] = text; } + if (currentCell.x() == row && currentCell.y() == column) + { + emit currentSelectionChanged(m_selectionList); + } update(); } QString TableViewNew3D::item(int row,int column) @@ -177,11 +183,23 @@ void TableViewNew3D::paintEvent (QPaintEvent *evt) { if (currentCell.x() == -1 && currentCell.y() == y) { - painter.setPen(QColor::fromRgb(0,0,255)); - painter.drawRect(0,y*m_itemHeight,m_itemWidth-1,m_itemHeight-1); - QString numval = yaxis.at(y); - int width = painter.fontMetrics().width(numval); - painter.drawText((m_itemWidth/2.0) - (width / 2.0),(y)*m_itemHeight + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + if (m_inEdit) + { + painter.setPen(QColor::fromRgb(255,255,255)); + painter.drawRect(0,y*m_itemHeight,m_itemWidth-1,m_itemHeight-1); + painter.setPen(QColor::fromRgb(0,0,0)); + QString numval = m_editText; + int width = painter.fontMetrics().width(numval); + painter.drawText((m_itemWidth/2.0) - (width / 2.0),(y)*m_itemHeight + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + } + else + { + painter.setPen(QColor::fromRgb(0,0,255)); + painter.drawRect(0,y*m_itemHeight,m_itemWidth-1,m_itemHeight-1); + QString numval = yaxis.at(y); + int width = painter.fontMetrics().width(numval); + painter.drawText((m_itemWidth/2.0) - (width / 2.0),(y)*m_itemHeight + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + } } else { @@ -253,12 +271,32 @@ void TableViewNew3D::paintEvent (QPaintEvent *evt) { if (currentCell.y() == -1 && currentCell.x() == x) { - painter.setPen(QColor::fromRgb(0,0,255)); + if (m_inEdit) + { + painter.setPen(QColor::fromRgb(255,255,255)); + painter.drawRect((x+1)*m_itemWidth,m_itemHeight*m_rowCount,m_itemWidth-1,m_itemHeight-1); + painter.setPen(QColor::fromRgb(0,0,0)); + QString numval = m_editText; + int width = painter.fontMetrics().width(numval); + painter.drawText(((x+1)*m_itemWidth) + ((m_itemWidth/2.0) - (width / 2.0)),m_itemHeight*m_rowCount + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + } + else + { + painter.setPen(QColor::fromRgb(0,0,255)); + painter.drawRect((x+1)*m_itemWidth,m_itemHeight*m_rowCount,m_itemWidth-1,m_itemHeight-1); + QString numval = xaxis.at(x); + int width = painter.fontMetrics().width(numval); + painter.drawText(((x+1)*m_itemWidth) + ((m_itemWidth/2.0) - (width / 2.0)),m_itemHeight*m_rowCount + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + } + } + else + { + painter.drawRect((x+1)*m_itemWidth,m_itemHeight*m_rowCount,m_itemWidth-1,m_itemHeight-1); + QString numval = xaxis.at(x); + int width = painter.fontMetrics().width(numval); + painter.drawText(((x+1)*m_itemWidth) + ((m_itemWidth/2.0) - (width / 2.0)),m_itemHeight*m_rowCount + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); } - painter.drawRect((x+1)*m_itemWidth,m_itemHeight*m_rowCount,m_itemWidth-1,m_itemHeight-1); - QString numval = xaxis.at(x); - int width = painter.fontMetrics().width(numval); - painter.drawText(((x+1)*m_itemWidth) + ((m_itemWidth/2.0) - (width / 2.0)),m_itemHeight*m_rowCount + ((m_itemHeight/2.0)-2) + (painter.fontMetrics().height()/2.0),numval); + painter.setPen(QColor::fromRgb(0,0,0)); if (m_traceEnabled) @@ -325,7 +363,25 @@ void TableViewNew3D::paintEvent (QPaintEvent *evt) { if (currentCell.y() == y && currentCell.x() == x) { - painter.setPen(QColor::fromRgb(0,0,255)); + if (m_inEdit) + { + painter.setPen(QColor::fromRgb(255,255,255)); + painter.drawRect(m_itemWidth*(x+1),m_itemHeight*y,m_itemWidth-1,m_itemHeight-1); + painter.setPen(QColor::fromRgb(0,0,0)); + QString numval = m_editText; + int width = painter.fontMetrics().width(numval); + painter.drawText((m_itemWidth*(x+1)) + ((m_itemWidth / 2.0) - (width / 2.0)),((m_itemHeight*y) + ((m_itemHeight/2.0)-2)) + (painter.fontMetrics().height()/2.0),numval); + continue; + } + else + { + painter.setPen(QColor::fromRgb(0,0,255)); + painter.drawRect(m_itemWidth*(x+1),m_itemHeight*y,m_itemWidth-1,m_itemHeight-1); + QString numval = values.at(y).at(x); + int width = painter.fontMetrics().width(numval); + painter.drawText((m_itemWidth*(x+1)) + ((m_itemWidth / 2.0) - (width / 2.0)),((m_itemHeight*y) + ((m_itemHeight/2.0)-2)) + (painter.fontMetrics().height()/2.0),numval); + } + } painter.drawRect(m_itemWidth*(x+1),m_itemHeight*y,m_itemWidth-1,m_itemHeight-1); @@ -407,43 +463,69 @@ void TableViewNew3D::mouseReleaseEvent(QMouseEvent *evt) } void TableViewNew3D::keyPressEvent(QKeyEvent *evt) { + if (evt->key() >= Qt::Key_0 && evt->key() <= Qt::Key_9) + { + //It's a number key! + if (!m_inEdit) + { + m_inEdit = true; + } + + m_editText += QString::number(evt->key()-0x30,'f',0); + update(); + } + else if (evt->key() == Qt::Key_Period) + { + if (!m_inEdit) + { + m_inEdit = true; + m_editText = "0"; + } + + m_editText += "."; + update(); + } + else if (evt->key() == Qt::Key_Backspace) + { + if (m_inEdit) + { + m_editText = m_editText.mid(0,m_editText.length()-1); + update(); + } + } + else if (evt->key() == Qt::Key_Enter || evt->key() == Qt::Key_Return) + { + if (m_inEdit) + { + m_inEdit = false; + emit itemChangeRequest(currentCell.y(),currentCell.x(),m_editText); + m_editText = ""; + update(); + } + } + else if (evt->key() == Qt::Key_Escape) + { + if (m_inEdit) + { + m_inEdit = false; + m_editText = ""; + update(); + } + } if (evt->key() == Qt::Key_Up) { if (currentCell.y() > 0) { - /*if (evt->modifiers() & Qt::ShiftModifier) + if (m_inEdit) { - if (!multiSelect) - { - //No selection yet. - startSelectCell = currentCell; - multiSelect = true; - } - for (int i=) - //Selecting a rectangle - //selection will be - for (int i=0;imodifiers() & Qt::ControlModifier) - { - //Moving selection without clearing + m_inEdit = false; + emit itemChangeRequest(currentCell.y(),currentCell.x(),m_editText); + m_editText = ""; } - else - { - //Deselect everything, and move cursor to new point - for (int i=0;i(currentCell.x(),currentCell.y())); + emit currentSelectionChanged(m_selectionList); update(); return; } @@ -452,7 +534,16 @@ void TableViewNew3D::keyPressEvent(QKeyEvent *evt) { if (currentCell.y() < m_rowCount) { + if (m_inEdit) + { + m_inEdit = false; + emit itemChangeRequest(currentCell.y(),currentCell.x(),m_editText); + m_editText = ""; + } currentCell.setY(currentCell.y()+1); + m_selectionList.clear(); + m_selectionList.append(QPair(currentCell.x(),currentCell.y())); + emit currentSelectionChanged(m_selectionList); update(); return; } @@ -461,7 +552,16 @@ void TableViewNew3D::keyPressEvent(QKeyEvent *evt) { if (currentCell.x() > 0) { + if (m_inEdit) + { + m_inEdit = false; + emit itemChangeRequest(currentCell.y(),currentCell.x(),m_editText); + m_editText = ""; + } currentCell.setX(currentCell.x()-1); + m_selectionList.clear(); + m_selectionList.append(QPair(currentCell.x(),currentCell.y())); + emit currentSelectionChanged(m_selectionList); update(); return; } @@ -470,11 +570,24 @@ void TableViewNew3D::keyPressEvent(QKeyEvent *evt) { if (currentCell.x() < m_columnCount) { + if (m_inEdit) + { + m_inEdit = false; + emit itemChangeRequest(currentCell.y(),currentCell.x(),m_editText); + m_editText = ""; + } currentCell.setX(currentCell.x()+1); + m_selectionList.clear(); + m_selectionList.append(QPair(currentCell.x(),currentCell.y())); + emit currentSelectionChanged(m_selectionList); update(); return; } } + if (m_inEdit) + { + return; + } for (int i=0;ikey()) @@ -492,44 +605,4 @@ void TableViewNew3D::keyPressEvent(QKeyEvent *evt) } } } - if (evt->key() == Qt::Key_Equal) - { - if (currentCell.x() == 0 && currentCell.y() != 0) - { - //Y Axis - // yaxis[currentCell.y()]++; - update(); - return; - } - else if (currentCell.y() == m_rowCount) - { - // xaxis[currentCell.x()-1]++; - update(); - return; - //X Axis - } - //values[currentCell.y()][currentCell.x()-1]++; - update(); - return; } - if (evt->key() == Qt::Key_Minus) - { - if (currentCell.x() == 0 && currentCell.y() != 0) - { - //Y axis - // yaxis[currentCell.y()]--; - update(); - return; - } - else if (currentCell.y() == m_rowCount) - { - //X Axis - // xaxis[currentCell.x()-1]--; - update(); - return; - } - //values[currentCell.y()][currentCell.x()-1]--; - update(); - return; - } -} diff --git a/core/src/tableviewnew3d.h b/core/src/tableviewnew3d.h index ed5ad91..54608dc 100644 --- a/core/src/tableviewnew3d.h +++ b/core/src/tableviewnew3d.h @@ -38,6 +38,7 @@ class TableViewNew3D : public QWidget QList xaxis; QList yaxis; QList > values; + QList > m_selectionList; void mouseMoveEvent(QMouseEvent *evt); void mousePressEvent(QMouseEvent *evt); void mouseReleaseEvent(QMouseEvent *evt); @@ -51,8 +52,14 @@ class TableViewNew3D : public QWidget int m_rowCount; int m_columnCount; void rebuildtable(); + bool m_inEdit; + QString m_editText; + signals: + void keyPressed(int key); void hotKeyPressed(int key,Qt::KeyboardModifier modifier); + void itemChangeRequest(int row,int column,QString text); + void currentSelectionChanged(QList > selectionList); public slots: };