You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Framework/AzQtComponents/AzQtComponents/Components/DockBarButton.h

93 lines
2.6 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <AzQtComponents/AzQtComponentsAPI.h>
#include <QProxyStyle>
#include <QToolButton>
#endif
class QSettings;
class QEvent;
class QMouseEvent;
class QWidget;
namespace AzQtComponents
{
class Style;
class AZ_QT_COMPONENTS_API DockBarButton
: public QToolButton
{
Q_OBJECT
public:
struct Config
{
int buttonIconSize;
int defaultButtonMargin;
int menuIndicatorWidth;
QString menuIndicatorIcon;
QSize menuIndicatorIconSize;
QColor hoverBackgroundColor;
QColor closeHoverBackgroundColor;
QColor selectedBackgroundColor;
QColor closeSelectedBackgroundColor;
};
/*!
* Loads the button config data from a settings object.
*/
static Config loadConfig(QSettings& settings);
/*!
* Returns default button config data.
*/
static Config defaultConfig();
enum WindowDecorationButton
{
CloseButton,
MaximizeButton,
MinimizeButton,
DividerButton
};
Q_ENUM(WindowDecorationButton)
explicit DockBarButton(DockBarButton::WindowDecorationButton buttonType, QWidget* parent = nullptr, bool darkStyle = false);
DockBarButton::WindowDecorationButton buttonType() const { return m_buttonType; }
/*
* Expose the button type using a QT property so that test automation can read it
*/
Q_PROPERTY(WindowDecorationButton buttonType MEMBER m_buttonType CONSTANT)
Q_SIGNALS:
void buttonPressed(const DockBarButton::WindowDecorationButton type);
protected:
void paintEvent(QPaintEvent* event) override;
private:
friend class Style;
static bool drawDockBarButton(const Style* style, const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget, const Config& config);
void handleButtonClick();
const DockBarButton::WindowDecorationButton m_buttonType;
bool m_isDarkStyle;
};
} // namespace AzQtComponents