qtbase/tests/manual/windowflags/controls.h

128 lines
3.1 KiB
C
Raw Normal View History

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CONTROLS_H
#define CONTROLS_H
#include <QGroupBox>
QT_BEGIN_NAMESPACE
class QCheckBox;
class QRadioButton;
class QButtonGroup;
QT_END_NAMESPACE
enum { ControlLayoutMargin = 4 };
// Control for the hint part of Qt::WindowFlags
class HintControl : public QGroupBox
{
Q_OBJECT
public:
explicit HintControl(QWidget *parent= 0);
Qt::WindowFlags hints() const;
void setHints(Qt::WindowFlags hints);
signals:
void changed(Qt::WindowFlags);
private slots:
void slotCheckBoxChanged();
private:
QCheckBox *msWindowsFixedSizeDialogCheckBox;
QCheckBox *x11BypassWindowManagerCheckBox;
QCheckBox *framelessWindowCheckBox;
QCheckBox *windowTitleCheckBox;
QCheckBox *windowSystemMenuCheckBox;
QCheckBox *windowMinimizeButtonCheckBox;
QCheckBox *windowMaximizeButtonCheckBox;
QCheckBox *windowFullscreenButtonCheckBox;
QCheckBox *windowCloseButtonCheckBox;
QCheckBox *windowContextHelpButtonCheckBox;
QCheckBox *windowShadeButtonCheckBox;
QCheckBox *windowStaysOnTopCheckBox;
QCheckBox *windowStaysOnBottomCheckBox;
QGroupBox *customizeWindowGroup;
QCheckBox *transparentForInputCheckBox;
QCheckBox *noDropShadowCheckBox;
Introduce Qt::ExpandedClientAreaHint The hint requests that the window's client area is expanded to fill parts of the window that might be (partially) covered by, or conflicting with, other (system) UI elements, such as the window's title bar, resize controls, or a status bar. The safe area margins of the window will reflect any areas that may have conflicting UI elements. If the client area is expanded into the area previously covered by the frame margins, the frame margins are reduced accordingly, as the frame margins represent the non-client-area parts of the window. This new flag replaces, and overlaps in value, with the existing Qt::MaximizeUsingFullscreenGeometryHint, as the latter was added to cover this exact use-case for mobile platforms. Now that we have the use-case on desktop platforms as well we want to use a more generic flag, so the old flag has been deprecated. Semantically, on iOS and Android, without the flags set, the window can be seen as being maximized to take up the entire screen, but with a frameMargin() that reflects the system status bar and resize controls. That's not technically how we implement things right now, but this is an implementation detail that will be changed in a follow-up. On macOS the flag maps to NSWindowStyleMaskFullSizeContentView, and on Windows we have an implementation cooking that uses the DwmExtendFrameIntoClientArea function. Task-number: QTBUG-127634 Change-Id: I9b6863b1550ccc056c16bce235d87b26a7d239b9 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io>
2024-11-11 21:55:36 +00:00
QCheckBox *expandedClientAreaCheckBox;
QCheckBox *noTitleBarBackgroundCheckBox;
};
// Control for the Qt::WindowState enum, optional with a "visible" QCheckbox
class WindowStateControl : public QWidget {
Q_OBJECT
public:
explicit WindowStateControl(QWidget *parent= 0);
Qt::WindowStates state() const;
void setState(Qt::WindowStates s);
signals:
void stateChanged(int);
private:
QButtonGroup *group;
QCheckBox *restoreButton;
QCheckBox *minimizeButton;
QCheckBox *maximizeButton;
QCheckBox *fullscreenButton;
};
// Control for the Qt::WindowStates flags (normal, maximized, fullscreen exclusively
// combined with minimized and optionally, with a "visible" QCheckbox)
class WindowStatesControl : public QGroupBox
{
Q_OBJECT
public:
explicit WindowStatesControl(QWidget *parent= 0);
Qt::WindowStates states() const;
void setStates(Qt::WindowStates s);
bool visibleValue() const;
void setVisibleValue(bool);
bool activeValue() const;
void setActiveValue(bool v);
signals:
void changed();
private:
QCheckBox *visibleCheckBox;
QCheckBox *activeCheckBox;
WindowStateControl *stateControl;
};
// Control for the type part of Qt::WindowFlags
class TypeControl : public QGroupBox
{
Q_OBJECT
public:
explicit TypeControl(QWidget *parent= 0);
Qt::WindowFlags type() const;
void setType(Qt::WindowFlags);
signals:
void changed(Qt::WindowFlags);
private slots:
void slotChanged();
private:
QButtonGroup *group;
QRadioButton *windowRadioButton;
QRadioButton *dialogRadioButton;
QRadioButton *sheetRadioButton;
QRadioButton *drawerRadioButton;
QRadioButton *popupRadioButton;
QRadioButton *toolRadioButton;
QRadioButton *toolTipRadioButton;
QRadioButton *splashScreenRadioButton;
};
#endif // CONTROLS_H