| | |
| | | // Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware) |
| | | // Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao) |
| | | // SPDX-License-Identifier: Apache-2.0 |
| | | |
| | | #include "windowbar.h" |
| | | #include "windowbar_p.h" |
| | | |
| | | #include <QtCore/QDebug> |
| | | #include <QtCore/QLocale> |
| | | #include <QtGui/QtEvents> |
| | | |
| | | namespace QWK { |
| | |
| | | autoIcon = false; |
| | | } |
| | | |
| | | WindowBarPrivate::~WindowBarPrivate() { |
| | | } |
| | | WindowBarPrivate::~WindowBarPrivate() = default; |
| | | |
| | | void WindowBarPrivate::init() { |
| | | Q_Q(WindowBar); |
| | | layout = new QHBoxLayout(); |
| | | if (QLocale::system().textDirection() == Qt::RightToLeft) { |
| | | layout->setDirection(QBoxLayout::RightToLeft); |
| | | } |
| | | |
| | | layout->setContentsMargins(QMargins()); |
| | | layout->setSpacing(0); |
| | | for (int i = IconButton; i <= CloseButton; ++i) { |
| | |
| | | WindowBar::WindowBar(QWidget *parent) : WindowBar(*new WindowBarPrivate(), parent) { |
| | | } |
| | | |
| | | WindowBar::~WindowBar() { |
| | | } |
| | | WindowBar::~WindowBar() = default; |
| | | |
| | | QMenuBar *WindowBar::menuBar() const { |
| | | Q_D(const WindowBar); |
| | |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::IconButton)); |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::pinButton() const { |
| | | Q_D(const WindowBar); |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::PinButton)); |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::minButton() const { |
| | | Q_D(const WindowBar); |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimumButton)); |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MinimizeButton)); |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::maxButton() const { |
| | | Q_D(const WindowBar); |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximumButton)); |
| | | return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::MaximizeButton)); |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::closeButton() const { |
| | |
| | | btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); |
| | | } |
| | | |
| | | void WindowBar::setPinButton(QAbstractButton *btn) { |
| | | Q_D(WindowBar); |
| | | auto org = takePinButton(); |
| | | if (org) |
| | | org->deleteLater(); |
| | | if (!btn) |
| | | return; |
| | | d->setWidgetAt(WindowBarPrivate::PinButton, btn); |
| | | connect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested); |
| | | } |
| | | |
| | | void WindowBar::setMinButton(QAbstractButton *btn) { |
| | | Q_D(WindowBar); |
| | | auto org = takeMinButton(); |
| | |
| | | org->deleteLater(); |
| | | if (!btn) |
| | | return; |
| | | d->setWidgetAt(WindowBarPrivate::MinimumButton, btn); |
| | | d->setWidgetAt(WindowBarPrivate::MinimizeButton, btn); |
| | | connect(btn, &QAbstractButton::clicked, this, &WindowBar::minimizeRequested); |
| | | } |
| | | |
| | |
| | | org->deleteLater(); |
| | | if (!btn) |
| | | return; |
| | | d->setWidgetAt(WindowBarPrivate::MaximumButton, btn); |
| | | d->setWidgetAt(WindowBarPrivate::MaximizeButton, btn); |
| | | connect(btn, &QAbstractButton::clicked, this, &WindowBar::maximizeRequested); |
| | | } |
| | | |
| | |
| | | return static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::IconButton)); |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::takePinButton() { |
| | | Q_D(WindowBar); |
| | | auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::PinButton)); |
| | | if (!btn) { |
| | | return nullptr; |
| | | } |
| | | disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::pinRequested); |
| | | return btn; |
| | | } |
| | | |
| | | QAbstractButton *WindowBar::takeMinButton() { |
| | | Q_D(WindowBar); |
| | | auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimumButton)); |
| | | auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MinimizeButton)); |
| | | if (!btn) { |
| | | return nullptr; |
| | | } |
| | |
| | | |
| | | QAbstractButton *WindowBar::takeMaxButton() { |
| | | Q_D(WindowBar); |
| | | auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximumButton)); |
| | | auto btn = static_cast<QAbstractButton *>(d->takeWidgetAt(WindowBarPrivate::MaximizeButton)); |
| | | if (!btn) { |
| | | return nullptr; |
| | | } |