| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include <QLabel> |
| #include <QFont> |
| #include <QIcon> |
| #include <QHBoxLayout> |
| #include <QVBoxLayout> |
| #include <QString> |
|
|
| #include "NewFileButton.h" |
| #include <algorithm> |
|
|
| namespace StartGui |
| { |
|
|
| NewFileButton::NewFileButton(const NewButton& newButton) |
| : mainLayout(new QHBoxLayout(this)) |
| , textLayout(new QVBoxLayout()) |
| , headingLabel(new QLabel()) |
| , descriptionLabel(new QLabel()) |
| { |
| setObjectName(QStringLiteral("newFileButton")); |
| auto hGrp = App::GetApplication().GetParameterGroupByPath( |
| "User parameter:BaseApp/Preferences/Mod/Start" |
| ); |
|
|
| constexpr int defaultWidth = 180; |
| labelWidth = int(hGrp->GetInt("FileCardLabelWith", defaultWidth)); |
|
|
| constexpr int defaultSize = 48; |
| iconSize = int(hGrp->GetInt("NewFileIconSize", defaultSize)); |
|
|
| auto iconLabel = new QLabel(this); |
| QIcon baseIcon(newButton.iconPath); |
| iconLabel->setPixmap(baseIcon.pixmap(iconSize, iconSize)); |
|
|
| textLayout->addWidget(headingLabel); |
| textLayout->addWidget(descriptionLabel); |
| textLayout->setSpacing(0); |
| textLayout->setContentsMargins(0, 0, 0, 0); |
|
|
| headingLabel->setText(newButton.heading); |
| QFont font = headingLabel->font(); |
| font.setWeight(QFont::Bold); |
| headingLabel->setFont(font); |
|
|
| descriptionLabel->setText(newButton.description); |
| descriptionLabel->setWordWrap(true); |
| descriptionLabel->setFixedWidth(labelWidth); |
| descriptionLabel->setAlignment(Qt::AlignTop); |
|
|
| mainLayout->setAlignment(Qt::AlignVCenter); |
| mainLayout->addWidget(iconLabel); |
| mainLayout->addLayout(textLayout); |
| mainLayout->addStretch(); |
| QFontMetrics qfm(font); |
| int margin = qfm.height() / 2; |
| mainLayout->setSpacing(margin); |
| mainLayout->setContentsMargins(margin, margin, 2 * margin, margin); |
| setLayout(mainLayout); |
| setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); |
| } |
|
|
| QSize NewFileButton::minimumSizeHint() const |
| { |
| int minWidth = labelWidth + iconSize + mainLayout->contentsMargins().left() |
| + mainLayout->contentsMargins().right() + mainLayout->spacing(); |
|
|
| int textHeight = headingLabel->sizeHint().height() + descriptionLabel->sizeHint().height(); |
|
|
| int minHeight = std::max(iconSize, textHeight) + mainLayout->contentsMargins().top() |
| + mainLayout->contentsMargins().bottom(); |
|
|
| return {minWidth, minHeight}; |
| } |
|
|
| } |
|
|