Skip to content

Commit 41ccee2

Browse files
committed
Implemented file->save operation
1 parent 2373f06 commit 41ccee2

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

qt/buffer_table_model.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,9 @@ void BufferTableModel::setBuffer(uint8_t *buffer, uint32_t size)
9393
bufSize = size;
9494
endResetModel();
9595
}
96+
97+
void BufferTableModel::getBuffer(uint8_t *&buffer, uint32_t &size)
98+
{
99+
buffer = buf;
100+
size = bufSize;
101+
}

qt/buffer_table_model.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class BufferTableModel: public QAbstractTableModel
3131
QVariant headerData(int section, Qt::Orientation orientation, int role)
3232
const override;
3333
void setBuffer(uint8_t *buffer, uint32_t size);
34+
void getBuffer(uint8_t *&buffer, uint32_t &size);
3435
};
3536

3637
#endif // BUFFER_TABLE_MODEL_H

qt/main_window.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <QFileDialog>
1313
#include <QFile>
1414
#include <QStringList>
15+
#include <QMessageBox>
1516
#include <memory>
1617

1718
#define HEADER_ADDRESS_WIDTH 80
@@ -69,6 +70,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
6970

7071
connect(ui->actionOpen, SIGNAL(triggered()), this,
7172
SLOT(slotFileOpen()));
73+
connect(ui->actionSave, SIGNAL(triggered()), this,
74+
SLOT(slotFileSave()));
7275
connect(ui->actionConnect, SIGNAL(triggered()), this,
7376
SLOT(slotProgConnect()));
7477
connect(ui->actionReadId, SIGNAL(triggered()), this,
@@ -139,6 +142,51 @@ void MainWindow::slotFileOpen()
139142
file.close();
140143
}
141144

145+
void MainWindow::slotFileSave()
146+
{
147+
qint64 ret;
148+
uint8_t *buffer;
149+
uint32_t size;
150+
QString fileName;
151+
152+
bufferTableModel.getBuffer(buffer, size);
153+
154+
if (!size)
155+
{
156+
QMessageBox::information(this, tr("Information"),
157+
tr("The buffer is empty"));
158+
return;
159+
}
160+
161+
fileName = QFileDialog::getSaveFileName(this, tr("Save buffer to file"),
162+
".", tr("Binary Files (*)"));
163+
164+
if (fileName.isNull())
165+
return;
166+
167+
QFile file(fileName);
168+
if (!file.open(QIODevice::WriteOnly))
169+
{
170+
qCritical() << "Failed to open file:" << fileName << ", error:" <<
171+
file.errorString();
172+
return;
173+
}
174+
175+
ret = file.write(reinterpret_cast<char *>(buffer), size);
176+
if (ret < 0)
177+
{
178+
qCritical() << "Failed to write file:" << fileName << ", error:" <<
179+
file.errorString();
180+
}
181+
else if (ret != size)
182+
{
183+
qCritical() << "Failed to write file: written " << ret << " bytes of "
184+
<< size;
185+
}
186+
187+
file.close();
188+
}
189+
142190
void MainWindow::setUiStateConnected(bool isConnected)
143191
{
144192
ui->chipSelectComboBox->setEnabled(isConnected);

qt/main_window.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ private slots:
4646

4747
public slots:
4848
void slotFileOpen();
49+
void slotFileSave();
4950
void slotProgConnect();
5051
void slotProgReadDeviceId();
5152
void slotProgErase();

0 commit comments

Comments
 (0)