|
|
|
|
@ -26,6 +26,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
const QVector<QString>& elementNames,
|
|
|
|
|
const QVector<int>& elementCounts,
|
|
|
|
|
bool showAllLessButton,
|
|
|
|
|
bool collapsed,
|
|
|
|
|
int defaultShowCount,
|
|
|
|
|
QWidget* parent)
|
|
|
|
|
: QWidget(parent)
|
|
|
|
|
@ -40,6 +41,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
QHBoxLayout* collapseLayout = new QHBoxLayout();
|
|
|
|
|
m_collapseButton = new QPushButton();
|
|
|
|
|
m_collapseButton->setCheckable(true);
|
|
|
|
|
m_collapseButton->setChecked(collapsed);
|
|
|
|
|
m_collapseButton->setFlat(true);
|
|
|
|
|
m_collapseButton->setFocusPolicy(Qt::NoFocus);
|
|
|
|
|
m_collapseButton->setFixedWidth(s_collapseButtonSize);
|
|
|
|
|
@ -178,6 +180,11 @@ namespace O3DE::ProjectManager
|
|
|
|
|
return m_buttonGroup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FilterCategoryWidget::IsCollapsed()
|
|
|
|
|
{
|
|
|
|
|
return m_collapseButton->isChecked();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GemFilterWidget::GemFilterWidget(GemSortFilterProxyModel* filterProxyModel, QWidget* parent)
|
|
|
|
|
: QScrollArea(parent)
|
|
|
|
|
, m_filterProxyModel(filterProxyModel)
|
|
|
|
|
@ -193,20 +200,106 @@ namespace O3DE::ProjectManager
|
|
|
|
|
QWidget* mainWidget = new QWidget();
|
|
|
|
|
setWidget(mainWidget);
|
|
|
|
|
|
|
|
|
|
m_mainLayout = new QVBoxLayout();
|
|
|
|
|
m_mainLayout->setAlignment(Qt::AlignTop);
|
|
|
|
|
mainWidget->setLayout(m_mainLayout);
|
|
|
|
|
QVBoxLayout* mainLayout = new QVBoxLayout();
|
|
|
|
|
mainLayout->setAlignment(Qt::AlignTop);
|
|
|
|
|
mainWidget->setLayout(mainLayout);
|
|
|
|
|
|
|
|
|
|
QLabel* filterByLabel = new QLabel("Filter by");
|
|
|
|
|
filterByLabel->setStyleSheet("font-size: 16px;");
|
|
|
|
|
m_mainLayout->addWidget(filterByLabel);
|
|
|
|
|
mainLayout->addWidget(filterByLabel);
|
|
|
|
|
|
|
|
|
|
QWidget* filterSection = new QWidget(this);
|
|
|
|
|
mainLayout->addWidget(filterSection);
|
|
|
|
|
|
|
|
|
|
m_filterLayout = new QVBoxLayout();
|
|
|
|
|
m_filterLayout->setAlignment(Qt::AlignTop);
|
|
|
|
|
m_filterLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
filterSection->setLayout(m_filterLayout);
|
|
|
|
|
|
|
|
|
|
ResetGemStatusFilter();
|
|
|
|
|
AddGemOriginFilter();
|
|
|
|
|
AddTypeFilter();
|
|
|
|
|
AddPlatformFilter();
|
|
|
|
|
AddFeatureFilter();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemFilterWidget::ResetGemStatusFilter()
|
|
|
|
|
{
|
|
|
|
|
QVector<QString> elementNames;
|
|
|
|
|
QVector<int> elementCounts;
|
|
|
|
|
const int totalGems = m_gemModel->rowCount();
|
|
|
|
|
const int selectedGemTotal = m_gemModel->TotalAddedGems();
|
|
|
|
|
|
|
|
|
|
elementNames.push_back(GemSortFilterProxyModel::GetGemStatusString(GemSortFilterProxyModel::GemStatus::Unselected));
|
|
|
|
|
elementCounts.push_back(totalGems - selectedGemTotal);
|
|
|
|
|
|
|
|
|
|
elementNames.push_back(GemSortFilterProxyModel::GetGemStatusString(GemSortFilterProxyModel::GemStatus::Selected));
|
|
|
|
|
elementCounts.push_back(selectedGemTotal);
|
|
|
|
|
|
|
|
|
|
bool wasCollapsed = false;
|
|
|
|
|
if (m_statusFilter)
|
|
|
|
|
{
|
|
|
|
|
wasCollapsed = m_statusFilter->IsCollapsed();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterCategoryWidget* filterWidget =
|
|
|
|
|
new FilterCategoryWidget("Status", elementNames, elementCounts, /*showAllLessButton=*/false, /*collapsed*/wasCollapsed);
|
|
|
|
|
if (m_statusFilter)
|
|
|
|
|
{
|
|
|
|
|
m_filterLayout->replaceWidget(m_statusFilter, filterWidget);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_filterLayout->addWidget(filterWidget);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_statusFilter->deleteLater();
|
|
|
|
|
m_statusFilter = filterWidget;
|
|
|
|
|
|
|
|
|
|
const GemSortFilterProxyModel::GemStatus currentFilterState = m_filterProxyModel->GetGemStatus();
|
|
|
|
|
const QList<QAbstractButton*> buttons = m_statusFilter->GetButtonGroup()->buttons();
|
|
|
|
|
for (int statusFilterIndex = 0; statusFilterIndex < buttons.size(); ++statusFilterIndex)
|
|
|
|
|
{
|
|
|
|
|
const GemSortFilterProxyModel::GemStatus gemStatus = static_cast<GemSortFilterProxyModel::GemStatus>(statusFilterIndex);
|
|
|
|
|
QAbstractButton* button = buttons[statusFilterIndex];
|
|
|
|
|
|
|
|
|
|
if (static_cast<GemSortFilterProxyModel::GemStatus>(statusFilterIndex) == currentFilterState)
|
|
|
|
|
{
|
|
|
|
|
button->setChecked(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
connect(
|
|
|
|
|
button, &QAbstractButton::toggled, this,
|
|
|
|
|
[=](bool checked)
|
|
|
|
|
{
|
|
|
|
|
GemSortFilterProxyModel::GemStatus filterStatus = m_filterProxyModel->GetGemStatus();
|
|
|
|
|
if (checked)
|
|
|
|
|
{
|
|
|
|
|
if (filterStatus == GemSortFilterProxyModel::GemStatus::NoFilter)
|
|
|
|
|
{
|
|
|
|
|
filterStatus = gemStatus;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
filterStatus = GemSortFilterProxyModel::GemStatus::NoFilter;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (filterStatus != gemStatus)
|
|
|
|
|
{
|
|
|
|
|
filterStatus = static_cast<GemSortFilterProxyModel::GemStatus>(!gemStatus);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
filterStatus = GemSortFilterProxyModel::GemStatus::NoFilter;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_filterProxyModel->SetGemStatus(filterStatus);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GemFilterWidget::AddGemOriginFilter()
|
|
|
|
|
{
|
|
|
|
|
QVector<QString> elementNames;
|
|
|
|
|
@ -233,7 +326,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterCategoryWidget* filterWidget = new FilterCategoryWidget("Provider", elementNames, elementCounts, /*showAllLessButton=*/false);
|
|
|
|
|
m_mainLayout->addWidget(filterWidget);
|
|
|
|
|
m_filterLayout->addWidget(filterWidget);
|
|
|
|
|
|
|
|
|
|
const QList<QAbstractButton*> buttons = filterWidget->GetButtonGroup()->buttons();
|
|
|
|
|
for (int i = 0; i < buttons.size(); ++i)
|
|
|
|
|
@ -283,7 +376,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterCategoryWidget* filterWidget = new FilterCategoryWidget("Type", elementNames, elementCounts, /*showAllLessButton=*/false);
|
|
|
|
|
m_mainLayout->addWidget(filterWidget);
|
|
|
|
|
m_filterLayout->addWidget(filterWidget);
|
|
|
|
|
|
|
|
|
|
const QList<QAbstractButton*> buttons = filterWidget->GetButtonGroup()->buttons();
|
|
|
|
|
for (int i = 0; i < buttons.size(); ++i)
|
|
|
|
|
@ -333,7 +426,7 @@ namespace O3DE::ProjectManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterCategoryWidget* filterWidget = new FilterCategoryWidget("Supported Platforms", elementNames, elementCounts, /*showAllLessButton=*/false);
|
|
|
|
|
m_mainLayout->addWidget(filterWidget);
|
|
|
|
|
m_filterLayout->addWidget(filterWidget);
|
|
|
|
|
|
|
|
|
|
const QList<QAbstractButton*> buttons = filterWidget->GetButtonGroup()->buttons();
|
|
|
|
|
for (int i = 0; i < buttons.size(); ++i)
|
|
|
|
|
@ -388,8 +481,8 @@ namespace O3DE::ProjectManager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FilterCategoryWidget* filterWidget = new FilterCategoryWidget("Features", elementNames, elementCounts,
|
|
|
|
|
/*showAllLessButton=*/true, /*defaultShowCount=*/5);
|
|
|
|
|
m_mainLayout->addWidget(filterWidget);
|
|
|
|
|
/*showAllLessButton=*/true, false, /*defaultShowCount=*/5);
|
|
|
|
|
m_filterLayout->addWidget(filterWidget);
|
|
|
|
|
|
|
|
|
|
const QList<QAbstractButton*> buttons = filterWidget->GetButtonGroup()->buttons();
|
|
|
|
|
for (int i = 0; i < buttons.size(); ++i)
|
|
|
|
|
|