@@ -62,6 +62,8 @@ static const int numberOfBuiltinPlatforms = sizeof(builtinPlatforms) / sizeof(bu
6262
6363QStringList ProjectFileDialog::getProjectConfigs (const QString &fileName)
6464{
65+ if (!fileName.endsWith (" .sln" ) && !fileName.endsWith (" .vcxproj" ))
66+ return QStringList ();
6567 QStringList ret;
6668 ImportProject importer;
6769 Settings projSettings;
@@ -244,8 +246,12 @@ static void updateAddonCheckBox(QCheckBox *cb, const ProjectFile *projectFile, c
244246
245247void ProjectFileDialog::checkAllVSConfigs ()
246248{
247- if (mUI .mChkAllVsConfigs ->isChecked ())
248- mUI .mListVsConfigs ->selectAll ();
249+ if (mUI .mChkAllVsConfigs ->isChecked ()) {
250+ for (int row = 0 ; row < mUI .mListVsConfigs ->count (); ++row) {
251+ QListWidgetItem *item = mUI .mListVsConfigs ->item (row);
252+ item->setCheckState (Qt::Checked);
253+ }
254+ }
249255 mUI .mListVsConfigs ->setEnabled (!mUI .mChkAllVsConfigs ->isChecked ());
250256}
251257
@@ -259,6 +265,14 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
259265 setCheckPaths (projectFile->getCheckPaths ());
260266 setImportProject (projectFile->getImportProject ());
261267 mUI .mChkAllVsConfigs ->setChecked (projectFile->getAnalyzeAllVsConfigs ());
268+ setProjectConfigurations (getProjectConfigs (mUI .mEditImportProject ->text ()));
269+ for (int row = 0 ; row < mUI .mListVsConfigs ->count (); ++row) {
270+ QListWidgetItem *item = mUI .mListVsConfigs ->item (row);
271+ if (projectFile->getAnalyzeAllVsConfigs () || projectFile->getVsConfigurations ().contains (item->text ()))
272+ item->setCheckState (Qt::Checked);
273+ else
274+ item->setCheckState (Qt::Unchecked);
275+ }
262276 mUI .mCheckHeaders ->setChecked (projectFile->getCheckHeaders ());
263277 mUI .mCheckUnusedTemplates ->setChecked (projectFile->getCheckUnusedTemplates ());
264278 mUI .mMaxCtuDepth ->setValue (projectFile->getMaxCtuDepth ());
@@ -342,17 +356,6 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
342356 }
343357 mUI .mEditTags ->setText (projectFile->getTags ().join (' ;' ));
344358 updatePathsAndDefines ();
345- if (mUI .mEditImportProject ->text ().endsWith (" .sln" ) || mUI .mEditImportProject ->text ().endsWith (" .vcxproj" )) {
346- setVsConfigurations (getProjectConfigs (mUI .mEditImportProject ->text ()));
347- foreach (const QString &cfg, projectFile->getVsConfigurations ()) {
348- QList<QListWidgetItem*> items = mUI .mListVsConfigs ->findItems (cfg, Qt::MatchFlag::MatchExactly);
349- items[0 ]->setSelected (true );
350- }
351- } else {
352- mUI .mListVsConfigs ->clear ();
353- mUI .mListVsConfigs ->setEnabled (false );
354- }
355-
356359}
357360
358361void ProjectFileDialog::saveToProjectFile (ProjectFile *projectFile) const
@@ -361,6 +364,7 @@ void ProjectFileDialog::saveToProjectFile(ProjectFile *projectFile) const
361364 projectFile->setBuildDir (getBuildDir ());
362365 projectFile->setImportProject (getImportProject ());
363366 projectFile->setAnalyzeAllVsConfigs (mUI .mChkAllVsConfigs ->isChecked ());
367+ projectFile->setVSConfigurations (getProjectConfigurations ());
364368 projectFile->setCheckHeaders (mUI .mCheckHeaders ->isChecked ());
365369 projectFile->setCheckUnusedTemplates (mUI .mCheckUnusedTemplates ->isChecked ());
366370 projectFile->setMaxCtuDepth (mUI .mMaxCtuDepth ->value ());
@@ -414,7 +418,6 @@ void ProjectFileDialog::saveToProjectFile(ProjectFile *projectFile) const
414418 projectFile->setClangAnalyzer (mUI .mToolClangAnalyzer ->isChecked ());
415419 projectFile->setClangTidy (mUI .mToolClangTidy ->isChecked ());
416420 projectFile->setTags (mUI .mEditTags ->text ().split (" ;" , QString::SkipEmptyParts));
417- projectFile->setVSConfigurations (getVsConfigurations ());
418421}
419422
420423void ProjectFileDialog::ok ()
@@ -460,6 +463,7 @@ void ProjectFileDialog::updatePathsAndDefines()
460463{
461464 const QString &fileName = mUI .mEditImportProject ->text ();
462465 bool importProject = !fileName.isEmpty ();
466+ bool hasConfigs = fileName.endsWith (" .sln" ) || fileName.endsWith (" .vcxproj" );
463467 mUI .mBtnClearImportProject ->setEnabled (importProject);
464468 mUI .mListCheckPaths ->setEnabled (!importProject);
465469 mUI .mListIncludeDirs ->setEnabled (!importProject);
@@ -473,9 +477,9 @@ void ProjectFileDialog::updatePathsAndDefines()
473477 mUI .mBtnRemoveInclude ->setEnabled (!importProject);
474478 mUI .mBtnIncludeUp ->setEnabled (!importProject);
475479 mUI .mBtnIncludeDown ->setEnabled (!importProject);
476- mUI .mChkAllVsConfigs ->setEnabled (fileName. endsWith ( " .sln " ) || fileName. endsWith ( " .vcxproj " ) );
477- mUI .mListVsConfigs ->setEnabled (fileName. endsWith ( " .sln " ) || fileName. endsWith ( " .vcxproj " ));
478- if (!mUI . mListVsConfigs -> isEnabled () )
480+ mUI .mChkAllVsConfigs ->setEnabled (hasConfigs );
481+ mUI .mListVsConfigs ->setEnabled (hasConfigs && ! mUI . mChkAllVsConfigs -> isChecked ( ));
482+ if (!hasConfigs )
479483 mUI .mListVsConfigs ->clear ();
480484}
481485
@@ -499,24 +503,34 @@ void ProjectFileDialog::browseImportProject()
499503 if (!fileName.isEmpty ()) {
500504 mUI .mEditImportProject ->setText (dir.relativeFilePath (fileName));
501505 updatePathsAndDefines ();
502- setVsConfigurations (getProjectConfigs (fileName));
503- mUI .mListVsConfigs ->selectAll ();
506+ setProjectConfigurations (getProjectConfigs (fileName));
507+ for (int row = 0 ; row < mUI .mListVsConfigs ->count (); ++row) {
508+ QListWidgetItem *item = mUI .mListVsConfigs ->item (row);
509+ item->setCheckState (Qt::Checked);
510+ }
504511 }
505512}
506513
507- QStringList ProjectFileDialog::getVsConfigurations () const
514+ QStringList ProjectFileDialog::getProjectConfigurations () const
508515{
509516 QStringList configs;
510- foreach (QListWidgetItem *item, mUI .mListVsConfigs ->selectedItems ())
511- configs << item->text ();
512-
517+ for (int row = 0 ; row < mUI .mListVsConfigs ->count (); ++row) {
518+ QListWidgetItem *item = mUI .mListVsConfigs ->item (row);
519+ if (item->checkState () == Qt::Checked)
520+ configs << item->text ();
521+ }
513522 return configs;
514523}
515524
516- void ProjectFileDialog::setVsConfigurations (const QStringList &configs)
525+ void ProjectFileDialog::setProjectConfigurations (const QStringList &configs)
517526{
518527 mUI .mListVsConfigs ->clear ();
519- mUI .mListVsConfigs ->addItems (configs);
528+ mUI .mListVsConfigs ->setEnabled (!configs.isEmpty () && !mUI .mChkAllVsConfigs ->isChecked ());
529+ foreach (const QString &cfg, configs) {
530+ QListWidgetItem* item = new QListWidgetItem (cfg, mUI .mListVsConfigs );
531+ item->setFlags (item->flags () | Qt::ItemIsUserCheckable); // set checkable flag
532+ item->setCheckState (Qt::Unchecked);
533+ }
520534}
521535
522536QString ProjectFileDialog::getImportProject () const
0 commit comments