|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| #include "FileCardView.h"
|
|
|
| #include <App/Application.h>
|
| #include "../App/DisplayedFilesModel.h"
|
| #include <algorithm>
|
|
|
| namespace StartGui
|
| {
|
|
|
| FileCardView::FileCardView(QWidget* parent)
|
| : QListView(parent)
|
| {
|
| QSizePolicy sizePolicy(QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::MinimumExpanding);
|
| sizePolicy.setHeightForWidth(true);
|
| setSizePolicy(sizePolicy);
|
| setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
|
| setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded);
|
| setViewMode(QListView::ViewMode::IconMode);
|
| setFlow(QListView::Flow::LeftToRight);
|
| setResizeMode(QListView::ResizeMode::Adjust);
|
| setUniformItemSizes(true);
|
| setMouseTracking(true);
|
|
|
| auto hGrp = App::GetApplication().GetParameterGroupByPath(
|
| "User parameter:BaseApp/Preferences/Mod/Start"
|
| );
|
| m_cardSpacing = static_cast<int>(hGrp->GetInt("FileCardSpacing", 16));
|
|
|
| setSpacing(m_cardSpacing);
|
| }
|
|
|
| int FileCardView::heightForWidth(int width) const
|
| {
|
| auto model = this->model();
|
| auto delegate = this->itemDelegate();
|
| if (!model || !delegate) {
|
| return 0;
|
| }
|
| int numCards = model->rowCount();
|
| auto cardSize = delegate->sizeHint(QStyleOptionViewItem(), model->index(0, 0));
|
| int cardsPerRow = std::max(1, static_cast<int>(width / (cardSize.width() + m_cardSpacing)));
|
| int numRows = static_cast<int>(
|
| ceil(static_cast<double>(numCards) / static_cast<double>(cardsPerRow))
|
| );
|
| int neededHeight = numRows * cardSize.height();
|
| constexpr int extra = 4;
|
| return neededHeight + m_cardSpacing * (numRows - 1) + 2 * m_cardSpacing + extra;
|
| }
|
|
|
| QSize FileCardView::sizeHint() const
|
| {
|
| auto model = this->model();
|
| auto delegate = this->itemDelegate();
|
| if (!model || !delegate) {
|
|
|
| return {m_cardSpacing, m_cardSpacing};
|
| }
|
| int numCards = model->rowCount();
|
| auto cardSize = delegate->sizeHint(QStyleOptionViewItem(), model->index(0, 0));
|
| return {
|
| (cardSize.width() + m_cardSpacing) * numCards + m_cardSpacing,
|
| cardSize.height() + 2 * m_cardSpacing
|
| };
|
| }
|
|
|
| }
|
|
|