Skip to content

Commit 20d55ee

Browse files
committed
Implemented add/delete of chips from UI
1 parent 4f3f733 commit 20d55ee

10 files changed

+386
-58
lines changed

qt/chip_db.cpp

Lines changed: 109 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
#include "chip_db.h"
77
#include <cstring>
8-
#include <QFile>
98
#include <QDebug>
109
#include <QStandardPaths>
1110
#include <QDir>
@@ -31,8 +30,7 @@ QString ChipDb::findFile()
3130
return fileName;
3231
}
3332

34-
int ChipDb::stringToChipInfo(const QString &file, const QString &s,
35-
ChipInfo &ci)
33+
int ChipDb::stringToChipInfo(const QString &s, ChipInfo &ci)
3634
{
3735
int paramNum;
3836
QStringList paramsList;
@@ -42,8 +40,8 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
4240
if (paramNum != CHIP_PARAM_NUM)
4341
{
4442
QMessageBox::critical(nullptr, tr("Error"),
45-
tr("Failed to read chip DB entry from %1. Expected %2 parameters, "
46-
"but read %3").arg(file).arg(CHIP_PARAM_NUM).arg(paramNum));
43+
tr("Failed to read chip DB entry. Expected %2 parameters, "
44+
"but read %3").arg(CHIP_PARAM_NUM).arg(paramNum));
4745
return -1;
4846
}
4947

@@ -56,14 +54,27 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
5654
if (!ok)
5755
{
5856
QMessageBox::critical(nullptr, tr("Error"), tr("Failed to parse"
59-
" parameter %1 in %2").arg(paramsList[i]).arg(file));
57+
" parameter %1").arg(paramsList[i]));
6058
return -1;
6159
}
6260
}
6361

6462
return 0;
6563
}
6664

65+
int ChipDb::chipInfoToString(const ChipInfo &ci, QString &s)
66+
{
67+
QStringList paramsList;
68+
69+
paramsList.append(ci.name);
70+
for (int i = CHIP_PARAM_NAME + 1; i < CHIP_PARAM_NUM; i++)
71+
paramsList.append(QString("%1").arg(ci.params[i]));
72+
73+
s = paramsList.join(',');
74+
75+
return 0;
76+
}
77+
6778
void ChipDb::readFromCvs(void)
6879
{
6980
ChipInfo chipInfo;
@@ -89,46 +100,124 @@ void ChipDb::readFromCvs(void)
89100
continue;
90101
if (*line.data() == '#')
91102
continue;
92-
if (stringToChipInfo(fileName, line, chipInfo))
93-
return;
103+
if (stringToChipInfo(line, chipInfo))
104+
break;
94105
chipInfoVector.append(chipInfo);
95106
}
107+
dbFile.close();
108+
}
109+
110+
int ChipDb::readCommentsFromCsv(QFile &dbFile, QString &comments)
111+
{
112+
if (!dbFile.open(QIODevice::ReadOnly | QIODevice::Text))
113+
{
114+
QMessageBox::critical(nullptr, tr("Error"), tr("Failed to open chip DB "
115+
"file: %1, error: %2").arg(dbFile.fileName()).
116+
arg(dbFile.errorString()));
117+
return -1;
118+
}
119+
120+
QTextStream in(&dbFile);
121+
while (!in.atEnd())
122+
{
123+
QString l = in.readLine();
124+
if (l.isEmpty())
125+
continue;
126+
if (*l.data() == '#')
127+
{
128+
comments.append(l);
129+
comments.append('\n');
130+
}
131+
}
132+
dbFile.close();
133+
134+
return 0;
135+
}
136+
137+
void ChipDb::writeToCvs(void)
138+
{
139+
QString line;
140+
QFile dbFile;
141+
QString fileName = findFile();
142+
143+
if (fileName.isNull())
144+
return;
145+
146+
dbFile.setFileName(fileName);
147+
148+
if (readCommentsFromCsv(dbFile, line))
149+
return;
150+
151+
if (!dbFile.open(QIODevice::WriteOnly | QIODevice::Truncate |
152+
QIODevice::Text))
153+
{
154+
QMessageBox::critical(nullptr, tr("Error"), tr("Failed to open chip DB "
155+
"file: %1, error: %2").arg(fileName).arg(dbFile.errorString()));
156+
return;
157+
}
158+
159+
QTextStream out(&dbFile);
160+
out << line;
161+
for (int i = 0; i < chipInfoVector.size(); i++)
162+
{
163+
chipInfoToString(chipInfoVector[i], line);
164+
out << line << '\n';
165+
}
166+
dbFile.close();
96167
}
97168

98169
ChipDb::ChipDb(QObject *parent) : QObject(parent)
99170
{
100171
readFromCvs();
101172
}
102173

103-
QStringList *ChipDb::getNames()
174+
QStringList ChipDb::getNames()
104175
{
105-
QStringList *namesList = new QStringList;
176+
QStringList namesList;
106177

107178
for (int i = 0; i < chipInfoVector.size(); i++)
108-
namesList->append(chipInfoVector[i].name);
179+
namesList.append(chipInfoVector[i].name);
109180

110181
return namesList;
111182
}
112183

113-
ChipInfo *ChipDb::chipInfoGetByName(const QString &name)
184+
ChipInfo *ChipDb::chipInfoGetById(int id)
114185
{
115-
for (int i = 0; i < chipInfoVector.size(); i++)
116-
{
117-
if (!chipInfoVector[i].name.compare(name))
118-
return &chipInfoVector[i];
119-
}
186+
if (id >= chipInfoVector.size() || id < 0)
187+
return nullptr;
120188

121-
return nullptr;
189+
return &chipInfoVector[id];
122190
}
123191

124-
uint32_t ChipDb::pageSizeGetByName(const QString &name)
192+
uint32_t ChipDb::pageSizeGetById(int id)
125193
{
126-
ChipInfo *info = chipInfoGetByName(name);
194+
ChipInfo *info = chipInfoGetById(id);
127195

128196
return info ? info->params[CHIP_PARAM_PAGE_SIZE] : 0;
129197
}
130198

199+
void ChipDb::addChip(ChipInfo &chipInfo)
200+
{
201+
chipInfoVector.append(chipInfo);
202+
}
203+
204+
void ChipDb::delChip(int index)
205+
{
206+
chipInfoVector.remove(index);
207+
}
208+
131209
int ChipDb::size()
132210
{
133211
return chipInfoVector.size();
134212
}
213+
214+
void ChipDb::commit()
215+
{
216+
writeToCvs();
217+
}
218+
219+
void ChipDb::reset()
220+
{
221+
chipInfoVector.clear();
222+
readFromCvs();
223+
}

qt/chip_db.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <QString>
1111
#include <QObject>
1212
#include <QVector>
13+
#include <QFile>
1314

1415
enum
1516
{
@@ -55,15 +56,22 @@ class ChipDb : public QObject
5556
QVector<ChipInfo> chipInfoVector;
5657

5758
QString findFile();
58-
int stringToChipInfo(const QString &file, const QString &s, ChipInfo &ci);
59-
void readFromCvs(void);
59+
int stringToChipInfo(const QString &s, ChipInfo &ci);
60+
int chipInfoToString(const ChipInfo &ci, QString &s);
61+
void readFromCvs();
62+
int readCommentsFromCsv(QFile &dbFile, QString &comments);
63+
void writeToCvs();
6064

6165
public:
6266
explicit ChipDb(QObject *parent = 0);
63-
QStringList *getNames();
64-
ChipInfo *chipInfoGetByName(const QString &name);
65-
uint32_t pageSizeGetByName(const QString &name);
67+
QStringList getNames();
68+
ChipInfo *chipInfoGetById(int id);
69+
uint32_t pageSizeGetById(int id);
70+
void addChip(ChipInfo &chipInfo);
71+
void delChip(int index);
6672
int size();
73+
void commit();
74+
void reset();
6775

6876
ChipInfo *operator[](int index) { return &chipInfoVector[index]; }
6977
};

qt/chip_db_dialog.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,44 @@ ChipDbDialog::ChipDbDialog(ChipDb *chipDb, QWidget *parent) : QDialog(parent),
1818
ui->chipDbTableView->setColumnWidth(CHIP_PARAM_SIZE, HEADER_LONG_WIDTH);
1919
for (int i = CHIP_PARAM_SIZE + 1; i < CHIP_PARAM_NUM; i++)
2020
ui->chipDbTableView->setColumnWidth(i, HEADER_SHORT_WIDTH);
21+
22+
connect(ui->addChipDbButton, SIGNAL(clicked()), this,
23+
SLOT(slotAddChipDbButtonClicked()));
24+
connect(ui->delChipDbButton, SIGNAL(clicked()), this,
25+
SLOT(slotDelChipDbButtonClicked()));
26+
connect(ui->okCancelButtonBox->button(QDialogButtonBox::Ok),
27+
SIGNAL(clicked()), this, SLOT(slotOkButtonClicked()));
28+
connect(ui->okCancelButtonBox->button(QDialogButtonBox::Cancel),
29+
SIGNAL(clicked()), this, SLOT(slotCancelButtonClicked()));
2130
}
2231

2332
ChipDbDialog::~ChipDbDialog()
2433
{
2534
delete ui;
2635
}
36+
37+
void ChipDbDialog::slotAddChipDbButtonClicked()
38+
{
39+
chipDbTableModel.addRow();
40+
}
41+
42+
void ChipDbDialog::slotDelChipDbButtonClicked()
43+
{
44+
QModelIndexList selection = ui->chipDbTableView->selectionModel()->
45+
selectedRows();
46+
47+
if (!selection.count())
48+
return;
49+
50+
chipDbTableModel.delRow(selection.at(0).row());
51+
}
52+
53+
void ChipDbDialog::slotOkButtonClicked()
54+
{
55+
chipDbTableModel.commit();
56+
}
57+
58+
void ChipDbDialog::slotCancelButtonClicked()
59+
{
60+
chipDbTableModel.reset();
61+
}

qt/chip_db_dialog.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ class ChipDbDialog : public QDialog
2020
public:
2121
explicit ChipDbDialog(ChipDb *chipDb, QWidget *parent = nullptr);
2222
~ChipDbDialog();
23+
24+
private slots:
25+
void slotAddChipDbButtonClicked();
26+
void slotDelChipDbButtonClicked();
27+
void slotOkButtonClicked();
28+
void slotCancelButtonClicked();
2329
};
2430

2531
#endif // CHIP_DB_DALOG_H

0 commit comments

Comments
 (0)