-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainwindow.cpp
119 lines (107 loc) · 3 KB
/
mainwindow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QDialog(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
showCurrentBlas(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showCurrentBlas(bool updateoption)
{
QString path = qApp->applicationDirPath();
QFile refblas(QString("%1/librefblas.dll").arg(path));
QFile openblas(QString("%1/libopenblas.dll").arg(path));
QFile blas(QString("%1/libblas.dll").arg(path));
const char * name;
if (refblas.size() == blas.size())
name = "refblas";
else if (openblas.size() == blas.size())
name = "openblas";
else
name = "Unknown";
ui->currentBlasText->setText(QString("Current Blas: %1").arg(name));
if(updateoption)
{
if(QString(name) == "refblas")
ui->refBlasOption->setChecked(true);
if(QString(name) == "openblas")
ui->openBlasOption->setChecked(true);
}
}
void MainWindow::setCurrentBlas(const char *name)
{
QString path = qApp->applicationDirPath();
QFile newblas(QString("%1/lib%2.dll").arg(path, name));
QFile blas(QString("%1/libblas.dll").arg(path));
if(!newblas.exists())
{
QMessageBox msgBox;
msgBox.setText("Failed to find blas files");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setInformativeText(QString("%1.dll").arg(name));
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
else if (blas.open(QIODevice::WriteOnly|QIODevice::Truncate) == false ||
newblas.open(QIODevice::ReadOnly) == false)
{
QMessageBox msgBox;
msgBox.setText("Failed to open blas files");
msgBox.setIcon(QMessageBox::Critical);
if(blas.error() != QFileDevice::NoError)
msgBox.setInformativeText(blas.errorString());
else
msgBox.setInformativeText(newblas.errorString());
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
else
{
char buff[1024];
qint64 sz = newblas.read(buff, sizeof(buff));
qint64 wsz = 0;
while (sz > 0 && wsz >= 0)
{
wsz = blas.write(buff, sz);
sz = newblas.read(buff, sizeof(buff));
}
if(wsz < 0)
{
QMessageBox msgBox;
msgBox.setText("Failed to write to blas file");
msgBox.setIcon(QMessageBox::Critical);
msgBox.setInformativeText(blas.errorString());
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
}
newblas.close();
blas.close();
showCurrentBlas(true);
}
void MainWindow::on_buttonBox_clicked(QAbstractButton *button)
{
qDebug("pressed %s", button->text().toUtf8().data());
if(ui->buttonBox->buttonRole(button) == QDialogButtonBox::ApplyRole)
{
if(ui->refBlasOption->isChecked())
{
setCurrentBlas("refblas");
}
else if(ui->openBlasOption->isChecked())
{
setCurrentBlas("openblas");
}
}
else if(ui->buttonBox->buttonRole(button) == QDialogButtonBox::RejectRole)
{
close();
}
}