From 6b49a39282095548005f9fe90b0577624e8f818f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 1 Sep 2015 18:13:27 +0200 Subject: [PATCH] GUI: Make it possible to configure minsizes through the LibraryDialog --- gui/libraryeditargdialog.cpp | 77 ++++++++-- gui/libraryeditargdialog.h | 3 + gui/libraryeditargdialog.ui | 286 +++++++++++++++++++++++++++++++++-- 3 files changed, 343 insertions(+), 23 deletions(-) diff --git a/gui/libraryeditargdialog.cpp b/gui/libraryeditargdialog.cpp index d3a2f9103..ee4921678 100644 --- a/gui/libraryeditargdialog.cpp +++ b/gui/libraryeditargdialog.cpp @@ -13,19 +13,45 @@ LibraryEditArgDialog::LibraryEditArgDialog(QWidget *parent, const CppcheckLibrar ui->strz->setChecked(arg.strz); ui->formatstr->setChecked(arg.formatstr); ui->valid->setText(arg.valid); - foreach(const CppcheckLibraryData::Function::Arg::MinSize &minsize, arg.minsizes) { - if (ui->minsizes->count() > 0) - ui->minsizes->addItem("and"); - if (minsize.type == "argvalue") - ui->minsizes->addItem("Buffer size must be at least as many bytes as given by argument " + minsize.arg); - else if (minsize.type == "constant") - ui->minsizes->addItem("Buffer size must be at least " + minsize.arg + " bytes"); - else if (minsize.type == "mul") - ui->minsizes->addItem("Buffer size must be at least as many bytes as multiplication result of argument " + minsize.arg + " and " + minsize.arg2); - else if (minsize.type == "strlen") - ui->minsizes->addItem("Buffer size must be at least as big as the string in argument " + minsize.arg + ""); + + ui->minsize1type->setEnabled(true); + ui->minsize1arg->setEnabled(arg.minsizes.count() >= 1); + ui->minsize1arg2->setEnabled(arg.minsizes.count() >= 1 && arg.minsizes[0].type == "mul"); + ui->minsize2type->setEnabled(arg.minsizes.count() >= 1); + ui->minsize2arg->setEnabled(arg.minsizes.count() >= 2); + ui->minsize2arg2->setEnabled(arg.minsizes.count() >= 2 && arg.minsizes[1].type == "mul"); + + QStringList items; + items << "None" << "argvalue" << "constant" << "mul" << "strlen"; + + ui->minsize1type->clear(); + ui->minsize1type->addItems(items); + if (arg.minsizes.count() >= 1) { + ui->minsize1type->setCurrentIndex(items.indexOf(minsizes[0].type)); + ui->minsize1arg->setValue(minsizes[0].arg.toInt()); + if (arg.minsizes[0].type == "mul") + ui->minsize1arg2->setValue(minsizes[0].arg2.toInt()); else - ui->minsizes->addItem("unhandled type: " + minsize.type); + ui->minsize1arg2->setValue(0); + } else { + ui->minsize1type->setCurrentIndex(0); + ui->minsize1arg->setValue(0); + ui->minsize1arg2->setValue(0); + } + + ui->minsize2type->clear(); + ui->minsize2type->addItems(items); + if (arg.minsizes.count() >= 2) { + ui->minsize2type->setCurrentIndex(items.indexOf(minsizes[1].type)); + ui->minsize2arg->setValue(minsizes[1].arg.toInt()); + if (arg.minsizes[1].type == "mul") + ui->minsize2arg2->setValue(minsizes[1].arg2.toInt()); + else + ui->minsize2arg2->setValue(0); + } else { + ui->minsize2type->setCurrentIndex(0); + ui->minsize2arg->setValue(0); + ui->minsize2arg2->setValue(0); } } @@ -42,7 +68,32 @@ CppcheckLibraryData::Function::Arg LibraryEditArgDialog::getArg() const ret.notuninit = ui->notuninit->isChecked(); ret.strz = ui->strz->isChecked(); ret.formatstr = ui->formatstr->isChecked(); - ret.minsizes = minsizes; + if (ui->minsize1type->currentIndex() != 0) { + CppcheckLibraryData::Function::Arg::MinSize minsize1; + minsize1.type = ui->minsize1type->currentText(); + minsize1.arg = QString::number(ui->minsize1arg->value()); + if (minsize1.type == "mul") + minsize1.arg2 = QString::number(ui->minsize1arg2->value()); + ret.minsizes.append(minsize1); + + if (ui->minsize2type->currentIndex() != 0) { + CppcheckLibraryData::Function::Arg::MinSize minsize2; + minsize2.type = ui->minsize2type->currentText(); + minsize2.arg = QString::number(ui->minsize2arg->value()); + if (minsize2.type == "mul") + minsize2.arg2 = QString::number(ui->minsize2arg2->value()); + ret.minsizes.append(minsize2); + } + } ret.valid = ui->valid->text(); return ret; } + +void LibraryEditArgDialog::minsizeChanged(int) +{ + ui->minsize1arg->setEnabled(ui->minsize1type->currentIndex() != 0); + ui->minsize1arg2->setEnabled(ui->minsize1type->currentText() == "mul"); + ui->minsize2type->setEnabled(ui->minsize1type->currentIndex() != 0); + ui->minsize2arg->setEnabled(ui->minsize2type->currentIndex() != 0); + ui->minsize2arg2->setEnabled(ui->minsize2type->currentText() == "mul"); +} diff --git a/gui/libraryeditargdialog.h b/gui/libraryeditargdialog.h index 4a8b54203..ca5ebde78 100644 --- a/gui/libraryeditargdialog.h +++ b/gui/libraryeditargdialog.h @@ -17,6 +17,9 @@ public: CppcheckLibraryData::Function::Arg getArg() const; +private slots: + void minsizeChanged(int); + private: Ui::LibraryEditArgDialog *ui; diff --git a/gui/libraryeditargdialog.ui b/gui/libraryeditargdialog.ui index d79b3932b..9e3ee436f 100644 --- a/gui/libraryeditargdialog.ui +++ b/gui/libraryeditargdialog.ui @@ -6,14 +6,14 @@ 0 0 - 400 - 448 + 448 + 465 Edit argument - + @@ -72,14 +72,245 @@ - - - Min size of buffer + + + Qt::Vertical - + + + 20 + 40 + + + - + + + + + Min size of buffer + + + + + + + + + Type + + + + + + + + None + + + + + argvalue + + + + + constant + + + + + mul + + + + + strlen + + + + + + + + Arg + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Arg2 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + and + + + + + + + + + Type + + + + + + + true + + + + None + + + + + argvalue + + + + + constant + + + + + mul + + + + + strlen + + + + + + + + Arg + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Arg2 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + @@ -116,8 +347,8 @@ accept() - 222 - 433 + 226 + 460 157 @@ -141,5 +372,40 @@ + + minsize1type + currentIndexChanged(int) + LibraryEditArgDialog + minsizeChanged(int) + + + 413 + 194 + + + 446 + 175 + + + + + minsize2type + currentIndexChanged(int) + LibraryEditArgDialog + minsizeChanged(int) + + + 436 + 299 + + + 447 + 297 + + + + + minsizeChanged(int) +