Fix: Recents don't show up for Custom presets

In the New Project dialog for QDS, if the user had created a project
from a User-defined (i.e. Custom) preset, this preset did not appear
under the Recents tab.

Task-number: QDS-4989
Change-Id: Ib1f5e772fc9a45ad727627152f292f6e1178ee8c
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Samuel Ghinet
2022-03-08 15:09:49 +02:00
parent 72eba8218d
commit a61f7db1ea
6 changed files with 98 additions and 12 deletions

View File

@@ -199,7 +199,7 @@ ScrollView {
anchors.margins: 4
visible: isUserPreset === true
&& delegate.hover
&& scrollView.currentTabName !== "Recents"
&& scrollView.currentTabName !== BackendApi.recentsTabName()
Text {
anchors.fill: parent

View File

@@ -39,6 +39,12 @@ static const QString CustomTabName = QObject::tr("Custom");
/****************** PresetData ******************/
QString PresetData::recentsTabName()
{
return RecentsTabName;
}
void PresetData::setData(const PresetsByCategory &presetsByCategory,
const std::vector<UserPresetData> &userPresetsData,
const std::vector<RecentPresetData> &loadedRecentsData)
@@ -47,11 +53,6 @@ void PresetData::setData(const PresetsByCategory &presetsByCategory,
m_recents = loadedRecentsData;
m_userPresets = userPresetsData;
if (!m_recents.empty()) {
m_categories.push_back(RecentsTabName);
m_presets.push_back({});
}
for (auto &[id, category] : presetsByCategory) {
m_categories.push_back(category.name);
m_presets.push_back(category.items);
@@ -59,17 +60,21 @@ void PresetData::setData(const PresetsByCategory &presetsByCategory,
PresetItems wizardPresets = Utils::flatten(m_presets);
PresetItems recentPresets = makeRecentPresets(wizardPresets);
if (!m_recents.empty()) {
m_presets[0] = recentPresets;
}
PresetItems userPresetItems = makeUserPresets(wizardPresets);
if (!userPresetItems.empty()) {
m_categories.push_back(CustomTabName);
m_presets.push_back(userPresetItems);
}
PresetItems allWizardPresets = std::move(wizardPresets);
Utils::concat(allWizardPresets, userPresetItems);
PresetItems recentPresets = makeRecentPresets(allWizardPresets);
if (!recentPresets.empty()) {
Utils::prepend(m_categories, RecentsTabName);
Utils::prepend(m_presets, recentPresets);
}
m_presetsByCategory = presetsByCategory;
}

View File

@@ -115,7 +115,7 @@ inline QDebug &operator<<(QDebug &d, const PresetItem &item)
d << "; size = " << item.screenSizeName;
if (item.isUserPreset())
d << (UserPresetItem &) item;
d << "; " << (UserPresetItem &) item;
return d;
}
@@ -177,6 +177,8 @@ public:
const std::vector<PresetItems> &presets() const { return m_presets; }
const Categories &categories() const { return m_categories; }
static QString recentsTabName();
private:
PresetItems makeRecentPresets(const PresetItems &wizardPresets);
PresetItems makeUserPresets(const PresetItems &wizardPresets);

View File

@@ -376,6 +376,11 @@ void QdsNewDialog::setWizardFactories(QList<Core::IWizardFactory *> factories_,
}
}
QString QdsNewDialog::recentsTabName() const
{
return PresetData::recentsTabName();
}
QString QdsNewDialog::qmlPath() const
{
return Core::ICore::resourcePath("qmldesigner/newprojectdialog/NewProjectDialog.qml").toString();

View File

@@ -74,6 +74,7 @@ public:
Q_INVOKABLE int screenSizeIndex() const;
Q_INVOKABLE QString chooseProjectLocation();
Q_INVOKABLE QString recentsTabName() const;
Q_PROPERTY(QAbstractListModel *categoryModel MEMBER m_categoryModel CONSTANT);
Q_PROPERTY(QAbstractListModel *presetModel MEMBER m_presetModel CONSTANT);

View File

@@ -326,6 +326,79 @@ TEST(QdsPresetModel, userPresetWithSameNameAsWizardPreset)
ElementsAre(UserPresetIs("A.categ", "Desktop", "Desktop"))));
}
TEST(QdsPresetModel, recentOfUserPresetReferringToExistingWizardPreset)
{
// Given
PresetData data;
// When
data.setData(
/*wizard presets*/
{
aCategory("A.categ", "A", {"Desktop"}),
},
{
aUserPreset("A.categ", "Desktop", "Windows 7"),
},
/*recents*/
{
{"A.categ", "Windows 7", "200 x 300", /*is user*/true}
});
// Then
ASSERT_THAT(data.categories(), ElementsAre("Recents", "A", "Custom"));
ASSERT_THAT(data.presets(),
ElementsAre(ElementsAre(UserPresetIs("A.categ", "Desktop", "Windows 7")),
ElementsAre(PresetIs("A.categ", "Desktop")),
ElementsAre(UserPresetIs("A.categ", "Desktop", "Windows 7"))));
}
TEST(QdsPresetModel, recentOfUserPresetReferringToNonexistingWizardPreset)
{
// Given
PresetData data;
// When
data.setData(
/*wizard presets*/
{
aCategory("A.categ", "A", {"Desktop"}),
},
{
aUserPreset("A.categ", "Not-Desktop", "Windows 7"), // Non-existing Wizard Preset
},
/*recents*/
{
{"A.categ", "Windows 7", "200 x 300", /*is user*/true}
});
// Then
ASSERT_THAT(data.categories(), ElementsAre("A"));
ASSERT_THAT(data.presets(), ElementsAre(ElementsAre(PresetIs("A.categ", "Desktop"))));
}
TEST(QdsPresetModel, recentOfNonExistentUserPreset)
{
// Given
PresetData data;
// When
data.setData(
/*wizard presets*/
{
aCategory("A.categ", "A", {"Desktop"}),
},
{/*user presets*/},
/*recents*/
{
{"A.categ", "Windows 7", "200 x 300", /*is user*/true}
});
// Then
ASSERT_THAT(data.categories(), ElementsAre("A"));
ASSERT_THAT(data.presets(), ElementsAre(ElementsAre(PresetIs("A.categ", "Desktop"))));
}
TEST(QdsPresetModel, recentsShouldNotBeSorted)
{
// Given