| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | #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
|
| | };
|
| | }
|
| |
|
| | }
|
| |
|