Skip to content

Commit a68d9e7

Browse files
committed
GUI: In ProjectFileDialog; updated choice of vs configurations
1 parent 5fca583 commit a68d9e7

3 files changed

Lines changed: 42 additions & 38 deletions

File tree

gui/projectfiledialog.cpp

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ static const int numberOfBuiltinPlatforms = sizeof(builtinPlatforms) / sizeof(bu
6262

6363
QStringList 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

245247
void 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

358361
void 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

420423
void 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

522536
QString ProjectFileDialog::getImportProject() const

gui/projectfiledialog.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ class ProjectFileDialog : public QDialog {
5858
*/
5959
QString getRootPath() const;
6060

61-
QStringList getVsConfigurations() const;
62-
void setVsConfigurations(const QStringList &configs);
61+
QStringList getProjectConfigurations() const;
62+
void setProjectConfigurations(const QStringList &configs);
6363

6464
QString getImportProject() const;
6565

gui/projectfiledialog.ui

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,7 @@
130130
</layout>
131131
</item>
132132
<item>
133-
<widget class="QListWidget" name="mListVsConfigs">
134-
<property name="maximumSize">
135-
<size>
136-
<width>16777215</width>
137-
<height>100</height>
138-
</size>
139-
</property>
140-
<property name="selectionMode">
141-
<enum>QAbstractItemView::MultiSelection</enum>
142-
</property>
143-
</widget>
133+
<widget class="QListWidget" name="mListVsConfigs"/>
144134
</item>
145135
</layout>
146136
</item>

0 commit comments

Comments
 (0)