sola.lu
8 天以前 df53287060966d78ffccac78342fb5d0a028f835
examples/shared/widgetframe/windowbar.cpp
@@ -1,7 +1,12 @@
#include "WindowBar.h"
#include "WindowBar_p.h"
// 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 {
@@ -12,13 +17,16 @@
        autoIcon = false;
    }
    WindowBarPrivate::~WindowBarPrivate() {
    }
    WindowBarPrivate::~WindowBarPrivate() = default;
    void WindowBarPrivate::init() {
        Q_Q(WindowBar);
        layout = new QHBoxLayout();
        layout->setMargin(0);
        if (QLocale::system().textDirection() == Qt::RightToLeft) {
            layout->setDirection(QBoxLayout::RightToLeft);
        }
        layout->setContentsMargins(QMargins());
        layout->setSpacing(0);
        for (int i = IconButton; i <= CloseButton; ++i) {
            insertDefaultSpace(i);
@@ -54,8 +62,7 @@
    WindowBar::WindowBar(QWidget *parent) : WindowBar(*new WindowBarPrivate(), parent) {
    }
    WindowBar::~WindowBar() {
    }
    WindowBar::~WindowBar() = default;
    QMenuBar *WindowBar::menuBar() const {
        Q_D(const WindowBar);
@@ -72,19 +79,48 @@
        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 {
        Q_D(const WindowBar);
        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::CloseButton));
    }
    QAbstractButton *WindowBar::loginButton() const
    {
        Q_D(const WindowBar);
        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::LoginButton));
    }
    QAbstractButton *WindowBar::languageButton() const
    {
        Q_D(const WindowBar);
        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::LanguageButton));
    }
    QAbstractButton *WindowBar::manualButton() const
    {
        Q_D(const WindowBar);
        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::ManualButton));
    }
    QAbstractButton *WindowBar::aboutButton() const
    {
        Q_D(const WindowBar);
        return static_cast<QAbstractButton *>(d->widgetAt(WindowBarPrivate::AboutButton));
    }
    void WindowBar::setMenuBar(QMenuBar *menuBar) {
@@ -124,6 +160,17 @@
        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();
@@ -131,7 +178,7 @@
            org->deleteLater();
        if (!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::MinimumButton, btn);
        d->setWidgetAt(WindowBarPrivate::MinimizeButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::minimizeRequested);
    }
@@ -142,7 +189,7 @@
            org->deleteLater();
        if (!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::MaximumButton, btn);
        d->setWidgetAt(WindowBarPrivate::MaximizeButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::maximizeRequested);
    }
@@ -155,6 +202,54 @@
            return;
        d->setWidgetAt(WindowBarPrivate::CloseButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::closeRequested);
    }
    void WindowBar::setLoginButton(QAbstractButton *btn)
    {
        Q_D(WindowBar);
        auto org = takeLoginButton();
        if (org)
            org->deleteLater();
        if (!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::LoginButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::loginRequested);
    }
    void WindowBar::setLanguageButton(QAbstractButton *btn)
    {
        Q_D(WindowBar);
        auto org = takeLanguageButton();
        if(org)
            org->deleteLater();
        if(!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::LanguageButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::languageRequested);
    }
    void WindowBar::setManualButton(QAbstractButton *btn)
    {
        Q_D(WindowBar);
        auto org = takeManualButton();
        if(org)
            org->deleteLater();
        if(!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::ManualButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::manualRequested);
    }
    void WindowBar::setAboutButton(QAbstractButton *btn)
    {
        Q_D(WindowBar);
        auto org = takeAboutButton();
        if(org)
            org->deleteLater();
        if(!btn)
            return;
        d->setWidgetAt(WindowBarPrivate::AboutButton, btn);
        connect(btn, &QAbstractButton::clicked, this, &WindowBar::aboutRequested);
    }
    QMenuBar *WindowBar::takeMenuBar() {
@@ -172,9 +267,19 @@
        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;
        }
@@ -184,7 +289,7 @@
    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;
        }
@@ -199,6 +304,50 @@
            return nullptr;
        }
        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::closeRequested);
        return btn;
    }
    QAbstractButton *WindowBar::takeLoginButton()
    {
        Q_D(WindowBar);
        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::LoginButton));
        if(!btn){
            return nullptr;
        }
        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::loginRequested);
        return btn;
    }
    QAbstractButton *WindowBar::takeLanguageButton()
    {
        Q_D(WindowBar);
        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::LanguageButton));
        if(!btn){
            return nullptr;
        }
        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::languageRequested);
        return btn;
    }
    QAbstractButton *WindowBar::takeManualButton()
    {
        Q_D(WindowBar);
        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::ManualButton));
        if(!btn){
            return nullptr;
        }
        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::manualRequested);
        return btn;
    }
    QAbstractButton *WindowBar::takeAboutButton()
    {
        Q_D(WindowBar);
        auto btn = static_cast<QAbstractButton*>(d->takeWidgetAt(WindowBarPrivate::AboutButton));
        if(!btn){
            return nullptr;
        }
        disconnect(btn, &QAbstractButton::clicked, this, &WindowBar::aboutRequested);
        return btn;
    }
@@ -248,23 +397,26 @@
            QLabel *label = titleLabel();
            QAbstractButton *maxBtn = maxButton();
            switch (event->type()) {
                case QEvent::WindowIconChange:
                case QEvent::WindowIconChange: {
                    if (d_ptr->autoIcon && iconBtn) {
                        iconBtn->setIcon(w->windowIcon());
                        iconChanged(w->windowIcon());
                    }
                    break;
                case QEvent::WindowTitleChange:
                }
                case QEvent::WindowTitleChange: {
                    if (d_ptr->autoTitle && label) {
                        label->setText(w->windowTitle());
                        titleChanged(w->windowTitle());
                    }
                    break;
                case QEvent::WindowStateChange:
                }
                case QEvent::WindowStateChange: {
                    if (maxBtn) {
                        maxBtn->setChecked(w->isMaximized());
                    }
                    break;
                }
                default:
                    break;
            }