@@ -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+ }
0 commit comments