diff --git a/candatagrid.cpp b/candatagrid.cpp index 7685597..090c203 100644 --- a/candatagrid.cpp +++ b/candatagrid.cpp @@ -3,6 +3,7 @@ #include #include +#include CANDataGrid::CANDataGrid(QWidget *parent) : QWidget(parent), @@ -19,6 +20,25 @@ CANDataGrid::~CANDataGrid() delete ui; } +void CANDataGrid::mousePressEvent(QMouseEvent *event) +{ + QPoint clickedPoint = event->pos(); + if (event->button() == Qt::LeftButton) + { + //qDebug() << "Mouse Loc " << clickedPoint; + clickedPoint -= upperLeft; + if (clickedPoint.x() < 0 || clickedPoint.y() < 0) + { + //qDebug() << "Clicked outside the grid you wanker"; + return; + } + int x = clickedPoint.x() / gridSize.x(); + int y = clickedPoint.y() / gridSize.y(); + //qDebug() << "Grid square clicked " << x << " " << y; + emit gridClicked(x,y); + } +} + void CANDataGrid::paintEvent(QPaintEvent *event) { int x, y; @@ -111,7 +131,11 @@ void CANDataGrid::paintEvent(QPaintEvent *event) //painter.fillRect(viewport.left() + (x+2) * xSector, viewport.top() + (y+2) * ySector, xSector, ySector, redBrush); painter.drawRect(viewport.left() + (x+2) * xSector, viewport.top() + (y+2) * ySector, xSector, ySector); } - } + } + upperLeft.setX(viewport.left() + 2 * xSector); + upperLeft.setY(viewport.top() + 2 * ySector); + gridSize.setX(xSector); + gridSize.setY(ySector); } void CANDataGrid::setReference(unsigned char *newRef, bool bUpdate = true) diff --git a/candatagrid.h b/candatagrid.h index 1881951..4177ab5 100644 --- a/candatagrid.h +++ b/candatagrid.h @@ -18,10 +18,17 @@ public: void setReference(unsigned char *, bool); void updateData(unsigned char *, bool); +protected: + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +signals: + void gridClicked(int x,int y); + private: Ui::CANDataGrid *ui; unsigned char refData[8]; unsigned char data[8]; + QPoint upperLeft, gridSize; }; #endif // CANDATAGRID_H diff --git a/dbcsignaleditor.cpp b/dbcsignaleditor.cpp index d6e1b59..0f547be 100644 --- a/dbcsignaleditor.cpp +++ b/dbcsignaleditor.cpp @@ -29,6 +29,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : } connect(ui->signalsList, SIGNAL(currentRowChanged(int)), this, SLOT(clickSignalList(int))); + connect(ui->bitfield, SIGNAL(gridClicked(int,int)), this, SLOT(bitfieldClicked(int,int))); } DBCSignalEditor::~DBCSignalEditor() @@ -89,6 +90,10 @@ void DBCSignalEditor::fillSignalForm(DBC_SIGNAL *sig) } endBit = startBit + sig->signalSize - 1; + if (endBit > 63) + { + endBit = 63; + } bitpattern[startBit / 8] |= 1 << (startBit % 8); ui->bitfield->setReference(bitpattern, false); @@ -155,3 +160,12 @@ void DBCSignalEditor::clickSignalList(int row) fillValueTable(thisSig); } + +void DBCSignalEditor::bitfieldClicked(int x, int y) +{ + int bit = (x) + (y * 8); + DBC_SIGNAL *thisSig = dbcHandler->findSignalByIdx(dbcMessage, ui->signalsList->currentRow()); + if (thisSig == NULL) return; + thisSig->startBit = bit; + fillSignalForm(thisSig); +} diff --git a/dbcsignaleditor.h b/dbcsignaleditor.h index d19e127..62daa43 100644 --- a/dbcsignaleditor.h +++ b/dbcsignaleditor.h @@ -20,6 +20,7 @@ public: private slots: void clickSignalList(int); + void bitfieldClicked(int x, int y); private: Ui::DBCSignalEditor *ui;