Skip to content

Commit 6b49a39

Browse files
committed
GUI: Make it possible to configure minsizes through the LibraryDialog
1 parent d87d2ff commit 6b49a39

3 files changed

Lines changed: 343 additions & 23 deletions

File tree

gui/libraryeditargdialog.cpp

Lines changed: 64 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,45 @@ LibraryEditArgDialog::LibraryEditArgDialog(QWidget *parent, const CppcheckLibrar
1313
ui->strz->setChecked(arg.strz);
1414
ui->formatstr->setChecked(arg.formatstr);
1515
ui->valid->setText(arg.valid);
16-
foreach(const CppcheckLibraryData::Function::Arg::MinSize &minsize, arg.minsizes) {
17-
if (ui->minsizes->count() > 0)
18-
ui->minsizes->addItem("and");
19-
if (minsize.type == "argvalue")
20-
ui->minsizes->addItem("Buffer size must be at least as many bytes as given by argument " + minsize.arg);
21-
else if (minsize.type == "constant")
22-
ui->minsizes->addItem("Buffer size must be at least " + minsize.arg + " bytes");
23-
else if (minsize.type == "mul")
24-
ui->minsizes->addItem("Buffer size must be at least as many bytes as multiplication result of argument " + minsize.arg + " and " + minsize.arg2);
25-
else if (minsize.type == "strlen")
26-
ui->minsizes->addItem("Buffer size must be at least as big as the string in argument " + minsize.arg + "");
16+
17+
ui->minsize1type->setEnabled(true);
18+
ui->minsize1arg->setEnabled(arg.minsizes.count() >= 1);
19+
ui->minsize1arg2->setEnabled(arg.minsizes.count() >= 1 && arg.minsizes[0].type == "mul");
20+
ui->minsize2type->setEnabled(arg.minsizes.count() >= 1);
21+
ui->minsize2arg->setEnabled(arg.minsizes.count() >= 2);
22+
ui->minsize2arg2->setEnabled(arg.minsizes.count() >= 2 && arg.minsizes[1].type == "mul");
23+
24+
QStringList items;
25+
items << "None" << "argvalue" << "constant" << "mul" << "strlen";
26+
27+
ui->minsize1type->clear();
28+
ui->minsize1type->addItems(items);
29+
if (arg.minsizes.count() >= 1) {
30+
ui->minsize1type->setCurrentIndex(items.indexOf(minsizes[0].type));
31+
ui->minsize1arg->setValue(minsizes[0].arg.toInt());
32+
if (arg.minsizes[0].type == "mul")
33+
ui->minsize1arg2->setValue(minsizes[0].arg2.toInt());
34+
else
35+
ui->minsize1arg2->setValue(0);
36+
} else {
37+
ui->minsize1type->setCurrentIndex(0);
38+
ui->minsize1arg->setValue(0);
39+
ui->minsize1arg2->setValue(0);
40+
}
41+
42+
ui->minsize2type->clear();
43+
ui->minsize2type->addItems(items);
44+
if (arg.minsizes.count() >= 2) {
45+
ui->minsize2type->setCurrentIndex(items.indexOf(minsizes[1].type));
46+
ui->minsize2arg->setValue(minsizes[1].arg.toInt());
47+
if (arg.minsizes[1].type == "mul")
48+
ui->minsize2arg2->setValue(minsizes[1].arg2.toInt());
2749
else
28-
ui->minsizes->addItem("unhandled type: " + minsize.type);
50+
ui->minsize2arg2->setValue(0);
51+
} else {
52+
ui->minsize2type->setCurrentIndex(0);
53+
ui->minsize2arg->setValue(0);
54+
ui->minsize2arg2->setValue(0);
2955
}
3056
}
3157

@@ -42,7 +68,32 @@ CppcheckLibraryData::Function::Arg LibraryEditArgDialog::getArg() const
4268
ret.notuninit = ui->notuninit->isChecked();
4369
ret.strz = ui->strz->isChecked();
4470
ret.formatstr = ui->formatstr->isChecked();
45-
ret.minsizes = minsizes;
71+
if (ui->minsize1type->currentIndex() != 0) {
72+
CppcheckLibraryData::Function::Arg::MinSize minsize1;
73+
minsize1.type = ui->minsize1type->currentText();
74+
minsize1.arg = QString::number(ui->minsize1arg->value());
75+
if (minsize1.type == "mul")
76+
minsize1.arg2 = QString::number(ui->minsize1arg2->value());
77+
ret.minsizes.append(minsize1);
78+
79+
if (ui->minsize2type->currentIndex() != 0) {
80+
CppcheckLibraryData::Function::Arg::MinSize minsize2;
81+
minsize2.type = ui->minsize2type->currentText();
82+
minsize2.arg = QString::number(ui->minsize2arg->value());
83+
if (minsize2.type == "mul")
84+
minsize2.arg2 = QString::number(ui->minsize2arg2->value());
85+
ret.minsizes.append(minsize2);
86+
}
87+
}
4688
ret.valid = ui->valid->text();
4789
return ret;
4890
}
91+
92+
void LibraryEditArgDialog::minsizeChanged(int)
93+
{
94+
ui->minsize1arg->setEnabled(ui->minsize1type->currentIndex() != 0);
95+
ui->minsize1arg2->setEnabled(ui->minsize1type->currentText() == "mul");
96+
ui->minsize2type->setEnabled(ui->minsize1type->currentIndex() != 0);
97+
ui->minsize2arg->setEnabled(ui->minsize2type->currentIndex() != 0);
98+
ui->minsize2arg2->setEnabled(ui->minsize2type->currentText() == "mul");
99+
}

gui/libraryeditargdialog.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class LibraryEditArgDialog : public QDialog {
1717

1818
CppcheckLibraryData::Function::Arg getArg() const;
1919

20+
private slots:
21+
void minsizeChanged(int);
22+
2023
private:
2124
Ui::LibraryEditArgDialog *ui;
2225

0 commit comments

Comments
 (0)