Skip to content

Commit

Permalink
Added reload buttons. Improved pixmap for difference view.
Browse files Browse the repository at this point in the history
  • Loading branch information
ghorwin committed Jul 23, 2021
1 parent 6b7bd63 commit 1e5881f
Show file tree
Hide file tree
Showing 6 changed files with 218 additions and 143 deletions.
3 changes: 1 addition & 2 deletions JacobianMatrixViewer/projects/Qt/JacobianMatrixViewer.pro
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ HEADERS += \
../../src/MatrixAdapter.h \
../../src/MatrixInterfaceBand.h \
../../src/MatrixInterfaceSparse.h \
../../src/MatrixTableModel.h \
../../src/MatrixVisualizer.h
../../src/MatrixTableModel.h

SOURCES += \
../../src/MainDialog.cpp \
Expand Down
1 change: 1 addition & 0 deletions JacobianMatrixViewer/resources/JacobianMatrixViewer.qrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<RCC>
<qresource prefix="/">
<file>JacobianMatrixViewer_64.png</file>
<file>reload.png</file>
</qresource>
</RCC>
Binary file added JacobianMatrixViewer/resources/reload.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
77 changes: 60 additions & 17 deletions JacobianMatrixViewer/src/MainDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ void MainDialog::on_pushButtonReadMatrix_clicked() {
ui->lineEditMatrixFile->setText(openFile);
else
ui->lineEditMatrixFile->clear();

// when there is no other matrix yet (i.e. first matrix is read), adjust the pixel size to fit the matrix to view
if (ui->lineEditOtherMatrixFile->text().isEmpty()) {
if (m_mainMatrix.dimension() > 0) {
int pixelSize = (int)std::floor(600/m_mainMatrix.dimension());
pixelSize = std::min(20, pixelSize);
ui->spinBoxPixel->setValue(pixelSize);
}

}
updateView();
}

Expand Down Expand Up @@ -236,16 +246,14 @@ void MainDialog::on_radioButtonDifference_toggled(bool checked) {

QPixmap MainDialog::generatePixmap() const {
// compute size in pixels
unsigned int n = m_tableModel->rowCount(QModelIndex());
int n = m_tableModel->rowCount(QModelIndex());
if (n == 0)
return QPixmap();

unsigned int cellPixelSize = ui->spinBoxPixel->value();
unsigned int pixSize = n*cellPixelSize;
unsigned int borderLinePixelWidth = 1;
int cellPixelSize = ui->spinBoxPixel->value();
int pixSize = n*cellPixelSize;
int borderLinePixelWidth = 1;
QColor backgroundColor(Qt::white);
QColor usedCellColor(Qt::black);
QColor usedButZeroCellColor(Qt::lightGray);

// create pixmap with desired sizes but add pixels for boundary
QPixmap pixmap(pixSize + 2*borderLinePixelWidth, pixSize + 2*borderLinePixelWidth);
Expand All @@ -256,18 +264,34 @@ QPixmap MainDialog::generatePixmap() const {
QPainter p(&pixmap);

// draw pixels
for (unsigned int i=0; i<n; ++i) {
for (unsigned int j=0; j<n; ++j) {
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
// get state of cell
AbstractMatrixAdapter::CellState s = m_tableModel->matrixAdapter()->state(i,j);
AbstractMatrixAdapter::CellState s = m_tableModel->matrixAdapter()->state((unsigned int)i, (unsigned int)j);
if (s == AbstractMatrixAdapter::CS_Unused)
continue;
QColor cellColor;
if (s == AbstractMatrixAdapter::CS_Zero)
cellColor = usedButZeroCellColor;
else
cellColor = usedCellColor;

switch (s) {
case AbstractMatrixAdapter::CS_Used:
cellColor = Qt::black;
break;
case AbstractMatrixAdapter::CS_DifferentByUsage:
cellColor = QColor("#E50000");
break;
case AbstractMatrixAdapter::CS_MayBeDifferentByUsage:
cellColor = QColor("#FFE0AD");
break;
case AbstractMatrixAdapter::CS_DifferentByValue:
cellColor = QColor("#65C3FF");
break;
case AbstractMatrixAdapter::CS_SlightlyDifferentByValue:
cellColor = QColor("#E6ECFF");
break;
case AbstractMatrixAdapter::CS_Zero :
cellColor = Qt::lightGray;
break;
case AbstractMatrixAdapter::CS_Unused: ; // just to make compiler happy
}
// double val = m_tableModel->matrixAdapter()->value(i,j);
p.fillRect(borderLinePixelWidth + j*cellPixelSize, borderLinePixelWidth + i*cellPixelSize,
cellPixelSize, cellPixelSize, cellColor);
Expand All @@ -276,12 +300,11 @@ QPixmap MainDialog::generatePixmap() const {

// draw boundary
if (borderLinePixelWidth != 0) {
QPen borderPen(usedCellColor);
QPen borderPen(Qt::black);
borderPen.setWidth(borderLinePixelWidth);

p.setPen( borderPen );
p.drawRect(borderLinePixelWidth/2,borderLinePixelWidth/2,
pixSize+1.5*borderLinePixelWidth, pixSize+1.5*borderLinePixelWidth);
p.drawRect(0, 0, pixSize+borderLinePixelWidth, pixSize+borderLinePixelWidth);
}

return pixmap;
Expand Down Expand Up @@ -332,3 +355,23 @@ void MainDialog::on_pushButtonExportImage_clicked() {
return;
}
}


void MainDialog::on_toolButtonReloadFirstMatrix_clicked() {
QString openFile = ui->lineEditMatrixFile->text();
if (openFile.isEmpty()) return;
readMatrix(m_mainMatrix, openFile);
if (m_mainMatrix.dimension() == 0)
QMessageBox::critical(this, QString(), tr("Cannot read file '%1'").arg(openFile));
updateView();
}


void MainDialog::on_toolButtonReloadSecondMatrix_clicked() {
QString openFile = ui->lineEditOtherMatrixFile->text();
if (openFile.isEmpty()) return;
readMatrix(m_mainMatrix, openFile);
if (m_mainMatrix.dimension() == 0)
QMessageBox::critical(this, QString(), tr("Cannot read file '%1'").arg(openFile));
updateView();
}
4 changes: 4 additions & 0 deletions JacobianMatrixViewer/src/MainDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ private slots:

void on_pushButtonExportImage_clicked();

void on_toolButtonReloadFirstMatrix_clicked();

void on_toolButtonReloadSecondMatrix_clicked();

private:
void readMatrix(SingleMatrixAdapter & storage, const QString & openFile);
void updateView();
Expand Down
Loading

0 comments on commit 1e5881f

Please sign in to comment.