69 lines
3.2 KiB
C++
69 lines
3.2 KiB
C++
#include "ElaDockWidgetTitleBar.h"
|
|
|
|
#include <QHBoxLayout>
|
|
#include <QPainter>
|
|
|
|
#include "ElaDockWidget.h"
|
|
#include "ElaIconButton.h"
|
|
#include "ElaText.h"
|
|
#include "ElaTheme.h"
|
|
ElaDockWidgetTitleBar::ElaDockWidgetTitleBar(QWidget *parent) : QWidget{parent} {
|
|
_dockWidget = dynamic_cast<ElaDockWidget *>(parent);
|
|
_iconLabel = new QLabel(this);
|
|
_iconLabel->setPixmap(_dockWidget->windowIcon().pixmap(QSize(18, 18)));
|
|
_titleLabel = new ElaText(_dockWidget->windowTitle(), this);
|
|
_titleLabel->setWordWrap(false);
|
|
_titleLabel->setTextPixelSize(13);
|
|
|
|
_floatButton = new ElaIconButton(ElaIconType::WindowRestore, 13, 32, 26, this);
|
|
_floatButton->setLightHoverColor(ElaThemeColor(ElaThemeType::Light, BasicHoverAlpha));
|
|
_floatButton->setDarkHoverColor(ElaThemeColor(ElaThemeType::Dark, BasicHoverAlpha));
|
|
connect(_floatButton, &ElaIconButton::clicked, this, &ElaDockWidgetTitleBar::onFloatButtonClicked);
|
|
_closeButton = new ElaIconButton(ElaIconType::Xmark, 17, 32, 26, this);
|
|
_closeButton->setLightHoverColor(ElaThemeColor(ElaThemeType::Light, StatusDanger));
|
|
_closeButton->setDarkHoverColor(ElaThemeColor(ElaThemeType::Dark, StatusDanger));
|
|
connect(_closeButton, &ElaIconButton::clicked, this, &ElaDockWidgetTitleBar::onCloseButtonClicked);
|
|
|
|
_setVisibleFromFeatures(_dockWidget->features());
|
|
connect(_dockWidget, &QDockWidget::featuresChanged, this, [=](QDockWidget::DockWidgetFeatures features) { _setVisibleFromFeatures(features); });
|
|
connect(_dockWidget, &QDockWidget::windowTitleChanged, this, [=](const QString &title) { _titleLabel->setText(title); });
|
|
connect(_dockWidget, &QDockWidget::windowIconChanged, this, [=](const QIcon &icon) { _iconLabel->setPixmap(icon.pixmap(QSize(18, 18))); });
|
|
|
|
QHBoxLayout *mainLayout = new QHBoxLayout(this);
|
|
mainLayout->setSpacing(0);
|
|
mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
mainLayout->addSpacing(5);
|
|
mainLayout->addWidget(_iconLabel);
|
|
mainLayout->addSpacing(10);
|
|
mainLayout->addWidget(_titleLabel);
|
|
mainLayout->addSpacing(10);
|
|
mainLayout->addStretch();
|
|
mainLayout->addWidget(_floatButton);
|
|
mainLayout->addWidget(_closeButton);
|
|
|
|
// 主题变更
|
|
_themeMode = eTheme->getThemeMode();
|
|
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) { _themeMode = themeMode; });
|
|
}
|
|
|
|
ElaDockWidgetTitleBar::~ElaDockWidgetTitleBar() {}
|
|
|
|
void ElaDockWidgetTitleBar::onFloatButtonClicked() { _dockWidget->setFloating(_dockWidget->isFloating() ? false : true); }
|
|
|
|
void ElaDockWidgetTitleBar::onCloseButtonClicked() { _dockWidget->close(); }
|
|
|
|
void ElaDockWidgetTitleBar::paintEvent(QPaintEvent *event) {
|
|
QPainter painter(this);
|
|
painter.save();
|
|
painter.setRenderHint(QPainter::Antialiasing);
|
|
painter.setPen(Qt::NoPen);
|
|
painter.setBrush(_dockWidget->isFloating() ? Qt::transparent : ElaThemeColor(_themeMode, BasicBaseAlpha));
|
|
painter.drawRect(rect());
|
|
painter.restore();
|
|
}
|
|
|
|
void ElaDockWidgetTitleBar::_setVisibleFromFeatures(QDockWidget::DockWidgetFeatures features) {
|
|
_floatButton->setVisible(features.testFlag(QDockWidget::DockWidgetFloatable));
|
|
_closeButton->setVisible(features.testFlag(QDockWidget::DockWidgetClosable));
|
|
}
|