Resizable Headers for Gem Catalog and Gem Repo Screen (#6885)
* Initial mostly working attempt at resizable headers Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Add const and constexpr to variables Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Add header tracking for buttons, display items based on header scrollbar position, fix some spacing issues Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Correct styling for adjustable header, and intending header section and alingned item content with header text Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Prevent header resizing larger than table width. Signed-off-by: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> * Fix resize graphical glitching Signed-off-by: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> * Remove unecessary qss Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Removed necessary headers Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Remove extra nl and old comment Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Address PR feedback Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Removed unused variables Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Change variable to constexpr Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Remove AUTOMOC from headers, set background color of Gem Catalog to 333333 and adjustable header to transparent Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Change to using update instead of repaint when sections are resized Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> * Change temp directory creation on for gradle Signed-off-by: nggieber <52797929+AMZN-nggieber@users.noreply.github.com> Co-authored-by: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com>
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
#include <PythonBindingsInterface.h>
|
||||
#include <ProjectManagerDefs.h>
|
||||
#include <ProjectUtils.h>
|
||||
#include <AdjustableHeaderWidget.h>
|
||||
#include <ProjectManagerDefs.h>
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
@@ -248,6 +250,9 @@ namespace O3DE::ProjectManager
|
||||
|
||||
QFrame* GemRepoScreen::CreateReposContent()
|
||||
{
|
||||
constexpr int inspectorWidth = 240;
|
||||
constexpr int middleLayoutIndent = 60;
|
||||
|
||||
QFrame* contentFrame = new QFrame(this);
|
||||
|
||||
QHBoxLayout* hLayout = new QHBoxLayout();
|
||||
@@ -255,7 +260,7 @@ namespace O3DE::ProjectManager
|
||||
hLayout->setSpacing(0);
|
||||
contentFrame->setLayout(hLayout);
|
||||
|
||||
hLayout->addSpacing(60);
|
||||
hLayout->addSpacing(middleLayoutIndent);
|
||||
|
||||
QVBoxLayout* middleVLayout = new QVBoxLayout();
|
||||
middleVLayout->setMargin(0);
|
||||
@@ -287,37 +292,34 @@ namespace O3DE::ProjectManager
|
||||
|
||||
connect(addRepoButton, &QPushButton::clicked, this, &GemRepoScreen::HandleAddRepoButton);
|
||||
|
||||
topMiddleHLayout->addSpacing(30);
|
||||
|
||||
middleVLayout->addLayout(topMiddleHLayout);
|
||||
|
||||
middleVLayout->addSpacing(30);
|
||||
|
||||
// Create a QTableWidget just for its header
|
||||
// Using a seperate model allows the setup of a header exactly as needed
|
||||
m_gemRepoHeaderTable = new QTableWidget(this);
|
||||
m_gemRepoHeaderTable->setObjectName("gemRepoHeaderTable");
|
||||
m_gemRepoListHeader = m_gemRepoHeaderTable->horizontalHeader();
|
||||
m_gemRepoListHeader->setObjectName("gemRepoListHeader");
|
||||
m_gemRepoListHeader->setDefaultAlignment(Qt::AlignLeft);
|
||||
m_gemRepoListHeader->setSectionResizeMode(QHeaderView::ResizeMode::Fixed);
|
||||
constexpr int minHeaderSectionWidth = 120;
|
||||
|
||||
// Insert columns so the header labels will show up
|
||||
m_gemRepoHeaderTable->insertColumn(0);
|
||||
m_gemRepoHeaderTable->insertColumn(1);
|
||||
m_gemRepoHeaderTable->insertColumn(2);
|
||||
m_gemRepoHeaderTable->setHorizontalHeaderLabels({ tr("Repository Name"), tr("Creator"), tr("Updated") });
|
||||
m_gemRepoHeaderTable = new AdjustableHeaderWidget(
|
||||
QStringList{ tr("Repository Name"), tr("Creator"), tr("Updated"), "" },
|
||||
QVector<int>{
|
||||
GemRepoItemDelegate::s_nameDefaultWidth,
|
||||
GemRepoItemDelegate::s_creatorDefaultWidth,
|
||||
GemRepoItemDelegate::s_updatedDefaultWidth + GemRepoItemDelegate::s_refreshIconSpacing + GemRepoItemDelegate::s_refreshIconSize,
|
||||
// Include invisible header for delete button
|
||||
GemRepoItemDelegate::s_iconSize + GemRepoItemDelegate::s_contentMargins.right()
|
||||
},
|
||||
minHeaderSectionWidth,
|
||||
QVector<QHeaderView::ResizeMode>
|
||||
{
|
||||
QHeaderView::ResizeMode::Interactive,
|
||||
QHeaderView::ResizeMode::Stretch,
|
||||
QHeaderView::ResizeMode::Fixed,
|
||||
QHeaderView::ResizeMode::Fixed
|
||||
},
|
||||
this);
|
||||
|
||||
const int headerExtraMargin = 18;
|
||||
m_gemRepoListHeader->resizeSection(0, GemRepoItemDelegate::s_nameMaxWidth + GemRepoItemDelegate::s_contentSpacing + headerExtraMargin);
|
||||
m_gemRepoListHeader->resizeSection(1, GemRepoItemDelegate::s_creatorMaxWidth + GemRepoItemDelegate::s_contentSpacing);
|
||||
m_gemRepoListHeader->resizeSection(2, GemRepoItemDelegate::s_updatedMaxWidth + GemRepoItemDelegate::s_contentSpacing);
|
||||
|
||||
// Required to set stylesheet in code as it will not be respected if set in qss
|
||||
m_gemRepoHeaderTable->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color:transparent; color:white; font-size:12px; border-style:none; }");
|
||||
middleVLayout->addWidget(m_gemRepoHeaderTable);
|
||||
|
||||
m_gemRepoListView = new GemRepoListView(m_gemRepoModel, m_gemRepoModel->GetSelectionModel(), this);
|
||||
m_gemRepoListView = new GemRepoListView(m_gemRepoModel, m_gemRepoModel->GetSelectionModel(), m_gemRepoHeaderTable, this);
|
||||
middleVLayout->addWidget(m_gemRepoListView);
|
||||
|
||||
connect(m_gemRepoListView, &GemRepoListView::RemoveRepo, this, &GemRepoScreen::HandleRemoveRepoButton);
|
||||
@@ -325,8 +327,10 @@ namespace O3DE::ProjectManager
|
||||
|
||||
hLayout->addLayout(middleVLayout);
|
||||
|
||||
hLayout->addSpacing(middleLayoutIndent);
|
||||
|
||||
m_gemRepoInspector = new GemRepoInspector(m_gemRepoModel, this);
|
||||
m_gemRepoInspector->setFixedWidth(240);
|
||||
m_gemRepoInspector->setFixedWidth(inspectorWidth);
|
||||
hLayout->addWidget(m_gemRepoInspector);
|
||||
|
||||
return contentFrame;
|
||||
|
||||
Reference in New Issue
Block a user