diff --git a/gui/gui.pro b/gui/gui.pro
index a7dd50826..e190c51b9 100644
--- a/gui/gui.pro
+++ b/gui/gui.pro
@@ -52,7 +52,8 @@ FORMS = about.ui \
settings.ui \
stats.ui \
librarydialog.ui \
- libraryaddfunctiondialog.ui
+ libraryaddfunctiondialog.ui \
+ libraryeditargdialog.ui
TRANSLATIONS = cppcheck_de.ts \
cppcheck_es.ts \
@@ -110,7 +111,8 @@ HEADERS += aboutdialog.h \
xmlreportv2.h \
librarydialog.h \
librarydata.h \
- libraryaddfunctiondialog.h
+ libraryaddfunctiondialog.h \
+ libraryeditargdialog.h
SOURCES += aboutdialog.cpp \
application.cpp \
@@ -147,7 +149,8 @@ SOURCES += aboutdialog.cpp \
xmlreportv2.cpp \
librarydialog.cpp \
librarydata.cpp \
- libraryaddfunctiondialog.cpp
+ libraryaddfunctiondialog.cpp \
+ libraryeditargdialog.cpp
win32 {
DEFINES += _CRT_SECURE_NO_WARNINGS
diff --git a/gui/libraryaddfunctiondialog.ui b/gui/libraryaddfunctiondialog.ui
index 4ca68e3bd..e6c5e2c4b 100644
--- a/gui/libraryaddfunctiondialog.ui
+++ b/gui/libraryaddfunctiondialog.ui
@@ -9,7 +9,7 @@
0
0
- 386
+ 353
89
@@ -68,68 +68,47 @@
-
-
-
-
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Cancel
-
-
-
- -
-
-
- Add function
-
-
-
-
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
- cancelButton
- clicked()
- LibraryAddFunctionDialog
- reject()
-
-
- 210
- 72
-
-
- 201
- 85
-
-
-
-
- addFunctionButton
- clicked()
+ buttonBox
+ accepted()
LibraryAddFunctionDialog
accept()
- 330
- 77
+ 57
+ 71
- 342
+ 71
+ 87
+
+
+
+
+ buttonBox
+ rejected()
+ LibraryAddFunctionDialog
+ reject()
+
+
+ 132
+ 69
+
+
+ 156
87
diff --git a/gui/librarydata.cpp b/gui/librarydata.cpp
index 7bf1d6329..00b05e284 100644
--- a/gui/librarydata.cpp
+++ b/gui/librarydata.cpp
@@ -58,9 +58,11 @@ static LibraryData::Function::Arg loadFunctionArg(const QDomElement &functionArg
else if (childElement.tagName() == "valid")
arg.valid = childElement.text();
else if (childElement.tagName() == "minsize") {
- arg.minsize.type = childElement.attribute("type");
- arg.minsize.arg = childElement.attribute("arg");
- arg.minsize.arg2 = childElement.attribute("arg2");
+ LibraryData::Function::Arg::MinSize minsize;
+ minsize.type = childElement.attribute("type");
+ minsize.arg = childElement.attribute("arg");
+ minsize.arg2 = childElement.attribute("arg2");
+ arg.minsizes.append(minsize);
}
}
return arg;
@@ -210,13 +212,15 @@ static QDomElement FunctionElement(QDomDocument &doc, const LibraryData::Functio
argElement.appendChild(e);
}
- if (!arg.minsize.type.isEmpty()) {
- QDomElement e = doc.createElement("minsize");
- e.setAttribute("type", arg.minsize.type);
- e.setAttribute("arg", arg.minsize.arg);
- if (!arg.minsize.arg2.isEmpty())
- e.setAttribute("arg2", arg.minsize.arg2);
- argElement.appendChild(e);
+ if (!arg.minsizes.isEmpty()) {
+ foreach(const LibraryData::Function::Arg::MinSize &minsize, arg.minsizes) {
+ QDomElement e = doc.createElement("minsize");
+ e.setAttribute("type", minsize.type);
+ e.setAttribute("arg", minsize.arg);
+ if (!minsize.arg2.isEmpty())
+ e.setAttribute("arg2", minsize.arg2);
+ argElement.appendChild(e);
+ }
}
}
diff --git a/gui/librarydata.h b/gui/librarydata.h
index fe57b456d..f165c1ece 100644
--- a/gui/librarydata.h
+++ b/gui/librarydata.h
@@ -63,11 +63,12 @@ public:
bool formatstr;
bool strz;
QString valid;
- struct {
+ struct MinSize {
QString type;
QString arg;
QString arg2;
- } minsize;
+ };
+ QList minsizes;
};
QList args;
};
diff --git a/gui/librarydialog.cpp b/gui/librarydialog.cpp
index 148eb7d37..122e9e04f 100644
--- a/gui/librarydialog.cpp
+++ b/gui/librarydialog.cpp
@@ -19,6 +19,7 @@
#include "librarydialog.h"
#include "ui_librarydialog.h"
#include "libraryaddfunctiondialog.h"
+#include "libraryeditargdialog.h"
#include
#include
@@ -87,22 +88,22 @@ void LibraryDialog::saveCfg()
void LibraryDialog::addFunction()
{
LibraryAddFunctionDialog *d = new LibraryAddFunctionDialog;
- if (d->exec() != QDialog::Accepted) {
- delete d;
- return;
- }
+ if (d->exec() == QDialog::Accepted && !d->functionName().isEmpty()) {
- LibraryData::Function f;
- f.name = d->functionName();
- int args = d->numberOfArguments();
+ LibraryData::Function f;
+ f.name = d->functionName();
+ int args = d->numberOfArguments();
- for (int i = 1; i <= args; i++) {
- LibraryData::Function::Arg arg;
- arg.nr = i;
- f.args.append(arg);
+ for (int i = 1; i <= args; i++) {
+ LibraryData::Function::Arg arg;
+ arg.nr = i;
+ f.args.append(arg);
+ }
+ data.functions.append(f);
+ ui->functions->addItem(f.name);
+ ui->buttonSave->setEnabled(true);
}
- data.functions.append(f);
- ui->functions->addItem(f.name);
+ delete d;
}
void LibraryDialog::selectFunction(int row)
@@ -120,40 +121,7 @@ void LibraryDialog::selectFunction(int row)
ui->functionreturn->setChecked(!function.noreturn);
ui->useretval->setChecked(function.useretval);
ui->leakignore->setChecked(function.leakignore);
- ui->arguments->clear();
- foreach(const LibraryData::Function::Arg &arg, function.args) {
- QString s("arg");
- if (arg.nr != LibraryData::Function::Arg::ANY)
- s += QString::number(arg.nr);
- ui->arguments->addItem(s);
-
- QListWidgetItem *item = new QListWidgetItem(tr("Not bool"), ui->arguments);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(arg.notbool ? Qt::Checked : Qt::Unchecked);
- ui->arguments->addItem(item);
-
- item = new QListWidgetItem(tr("Not null"), ui->arguments);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(arg.notnull ? Qt::Checked : Qt::Unchecked);
- ui->arguments->addItem(item);
-
- item = new QListWidgetItem(tr("Not uninit"), ui->arguments);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(arg.notuninit ? Qt::Checked : Qt::Unchecked);
- ui->arguments->addItem(item);
-
- item = new QListWidgetItem(tr("Format string"), ui->arguments);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(arg.formatstr ? Qt::Checked : Qt::Unchecked);
- ui->arguments->addItem(item);
-
- item = new QListWidgetItem(tr("Zero-terminated string"), ui->arguments);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(arg.strz ? Qt::Checked : Qt::Unchecked);
- ui->arguments->addItem(item);
-
- ui->arguments->addItem("valid: " + ((!arg.valid.isNull()) ? arg.valid : "*"));
- }
+ updateArguments(function);
ignoreChanges = false;
}
@@ -170,44 +138,44 @@ void LibraryDialog::changeFunction()
ui->buttonSave->setEnabled(true);
}
-
-void LibraryDialog::argumentChanged(QListWidgetItem *changedItem)
+void LibraryDialog::editArg()
{
- if (ignoreChanges)
+ if (ui->functions->selectedItems().count() != 1)
return;
- unsigned argnr = 0;
- for (int row = 0; row < ui->arguments->count(); row++) {
- const QListWidgetItem *argItem = ui->arguments->item(row);
- if (argItem == changedItem)
- break;
- if (argItem->text() == "arg")
- argnr = LibraryData::Function::Arg::ANY;
- else if (argItem->text().startsWith("arg"))
- argnr = argItem->text().mid(3).toInt();
- }
-
- foreach(const QListWidgetItem *functionItem, ui->functions->selectedItems()) {
- LibraryData::Function &function = data.functions[ui->functions->row(functionItem)];
-
- for (LibraryData::Function::Arg &arg : function.args) {
- if (arg.nr == argnr) {
- // TODO: Don't use a stringbased lookup
- if (changedItem->text() == "Not bool")
- arg.notbool = (changedItem->checkState() != Qt::Unchecked);
- else if (changedItem->text() == "Not null")
- arg.notnull = (changedItem->checkState() != Qt::Unchecked);
- else if (changedItem->text() == "Not uninit")
- arg.notuninit = (changedItem->checkState() != Qt::Unchecked);
- else if (changedItem->text() == "Format string")
- arg.formatstr = (changedItem->checkState() != Qt::Unchecked);
- else if (changedItem->text() == "Zero-terminated string")
- arg.strz = (changedItem->checkState() != Qt::Unchecked);
- break;
- }
- }
+ if (ui->arguments->selectedItems().count() != 1)
+ return;
+
+ LibraryData::Function &function = data.functions[ui->functions->row(ui->functions->selectedItems().first())];
+ LibraryData::Function::Arg &arg = function.args[ui->arguments->row(ui->arguments->selectedItems().first())];
+
+ LibraryEditArgDialog *d = new LibraryEditArgDialog(0, arg);
+ if (d->exec() == QDialog::Accepted) {
+ arg = d->getArg();
+ updateArguments(function);
}
+ delete d;
ui->buttonSave->setEnabled(true);
}
+void LibraryDialog::updateArguments(const LibraryData::Function &function)
+{
+ ui->arguments->clear();
+ foreach(const LibraryData::Function::Arg &arg, function.args) {
+ QString s("arg");
+ if (arg.nr != LibraryData::Function::Arg::ANY)
+ s += QString::number(arg.nr);
+ s += "\n not bool: " + QString(arg.notbool ? "true" : "false");
+ s += "\n not null: " + QString(arg.notnull ? "true" : "false");
+ s += "\n not uninit: " + QString(arg.notuninit ? "true" : "false");
+ s += "\n format string: " + QString(arg.formatstr ? "true" : "false");
+ s += "\n strz: " + QString(arg.strz ? "true" : "false");
+ s += "\n valid: " + QString(arg.valid.isEmpty() ? "any" : arg.valid);
+ foreach(const LibraryData::Function::Arg::MinSize &minsize, arg.minsizes) {
+ s += "\n minsize: " + minsize.type + " " + minsize.arg + " " + minsize.arg2;
+ }
+
+ ui->arguments->addItem(s);
+ }
+}
diff --git a/gui/librarydialog.h b/gui/librarydialog.h
index 9250e68c2..af3cf333b 100644
--- a/gui/librarydialog.h
+++ b/gui/librarydialog.h
@@ -43,13 +43,15 @@ private slots:
void addFunction();
void selectFunction(int row);
void changeFunction();
- void argumentChanged(QListWidgetItem *);
+ void editArg();
private:
Ui::LibraryDialog *ui;
LibraryData data;
QString mFileName;
bool ignoreChanges;
+
+ void updateArguments(const LibraryData::Function &function);
};
#endif // LIBRARYDIALOG_H
diff --git a/gui/librarydialog.ui b/gui/librarydialog.ui
index a6ac8a5d1..bd1973c23 100644
--- a/gui/librarydialog.ui
+++ b/gui/librarydialog.ui
@@ -126,17 +126,28 @@
-
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
+
+
-
+
+
+ Edit
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
@@ -242,22 +253,6 @@
-
- arguments
- itemChanged(QListWidgetItem*)
- LibraryDialog
- argumentChanged(QListWidgetItem*)
-
-
- 517
- 140
-
-
- 542
- 117
-
-
-
addFunction
clicked()
@@ -274,6 +269,22 @@
+
+ editArgButton
+ clicked()
+ LibraryDialog
+ editArg()
+
+
+ 317
+ 278
+
+
+ 349
+ 281
+
+
+
selectFunction(int)
@@ -282,5 +293,6 @@
saveCfg()
argumentChanged(QListWidgetItem*)
addFunction()
+ editArg()