feat: 添加ElaWidgetTool库

This commit is contained in:
sleepwithoutbz
2025-09-19 22:40:52 +08:00
parent 5f93e8caf6
commit 4eef5c7fd5
407 changed files with 36325 additions and 7 deletions

View File

@@ -0,0 +1,88 @@
#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));
}