5#include <qqmlregistration.h>
6#include "qml_material/control/popup.hpp"
7#include "qml_material/item/item_proxy.hpp"
11class PresentationSite;
13class QML_MATERIAL_API AdaptivePresenter :
public QObject {
16 Q_PROPERTY(QQuickItem* content READ content WRITE setContent NOTIFY contentChanged FINAL)
17 Q_PROPERTY(PresentationSite* destination READ destination WRITE setDestination NOTIFY
18 destinationChanged FINAL)
19 Q_PROPERTY(
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged FINAL)
20 Q_PROPERTY(PresentationSite* currentSite READ currentSite NOTIFY currentSiteChanged FINAL)
21 Q_PROPERTY(Status status READ status NOTIFY statusChanged FINAL)
22 Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged FINAL)
35 explicit AdaptivePresenter(QObject* parent =
nullptr);
36 ~AdaptivePresenter()
override;
37 QQuickItem* content()
const {
return m_content; }
38 PresentationSite* destination()
const;
39 PresentationSite* currentSite()
const;
40 bool enabled()
const {
return m_enabled; }
41 Status status()
const {
return m_status; }
42 QString errorString()
const {
return m_error; }
43 void setContent(QQuickItem*);
44 void setDestination(PresentationSite*);
45 void setEnabled(
bool);
46 Q_INVOKABLE
void present();
47 Q_INVOKABLE
void dismiss();
48 Q_SIGNAL
void contentChanged();
49 Q_SIGNAL
void destinationChanged();
50 Q_SIGNAL
void enabledChanged();
51 Q_SIGNAL
void currentSiteChanged();
52 Q_SIGNAL
void statusChanged();
53 Q_SIGNAL
void errorStringChanged();
54 Q_SIGNAL
void dismissed();
55 Q_SIGNAL
void aboutToRelocate(PresentationSite* from, PresentationSite* to);
58 friend class PresentationSite;
60 void reconcile(
bool activationRequest =
false);
61 QString siteError(PresentationSite*)
const;
63 void siteChanging(PresentationSite*);
66 void setStatus(Status);
67 void setError(
const QString&);
68 void completeDismiss(quint64);
70 QPointer<QQuickItem> m_content;
71 QPointer<PresentationSite> m_destination, m_current;
72 QPointer<Popup> m_popup;
73 QList<QPointer<PresentationSite>> m_sites;
74 QList<QMetaObject::Connection> m_contentConnections, m_popupConnections;
75 QMetaObject::Connection m_destinationConnection;
76 Status m_status = Inactive;
78 quint64 m_generation = 0, m_closeGeneration = 0;
79 bool m_enabled =
true, m_queued =
false, m_destroying =
false, m_relocating =
false;
80 bool m_suppressed =
false, m_lostControl =
false;
81 bool m_openRequested =
false, m_dismissRequested =
false;
82 bool m_session =
false, m_explicit =
false, m_reachedOpen =
false;
85class QML_MATERIAL_API PresentationSite :
public QQuickItem {
88 Q_PROPERTY(AdaptivePresenter* presenter READ presenter WRITE setPresenter NOTIFY
89 presenterChanged FINAL)
90 Q_PROPERTY(Popup* popup READ popup WRITE setPopup NOTIFY popupChanged FINAL)
91 Q_PROPERTY(PresentationSite* originSite READ originSite WRITE setOriginSite NOTIFY
92 originSiteChanged FINAL)
93 Q_PROPERTY(
bool autoOpen READ autoOpen WRITE setAutoOpen NOTIFY autoOpenChanged FINAL)
94 Q_PROPERTY(
bool current READ current NOTIFY currentChanged FINAL)
95 Q_PROPERTY(
bool activationEnabled READ activationEnabled WRITE setActivationEnabled NOTIFY
96 activationEnabledChanged FINAL)
98 explicit PresentationSite(QQuickItem* parent =
nullptr);
99 ~PresentationSite()
override;
100 AdaptivePresenter* presenter()
const {
return m_presenter; }
101 Popup* popup()
const {
return m_popup; }
102 PresentationSite* originSite()
const {
return m_origin; }
103 void setOriginSite(PresentationSite*);
104 Q_SIGNAL
void originSiteChanged();
105 bool autoOpen()
const {
return m_autoOpen; }
106 bool current()
const {
return m_proxy->controlling(); }
107 bool activationEnabled()
const {
return m_activationEnabled; }
108 void setPresenter(AdaptivePresenter*);
109 void setPopup(Popup*);
110 void setAutoOpen(
bool);
111 void setActivationEnabled(
bool);
112 Q_SIGNAL
void presenterChanged();
113 Q_SIGNAL
void popupChanged();
114 Q_SIGNAL
void autoOpenChanged();
115 Q_SIGNAL
void currentChanged();
116 Q_SIGNAL
void activationEnabledChanged();
117 Q_SIGNAL
void activationRequested();
120 void geometryChange(
const QRectF&,
const QRectF&)
override;
121 void componentComplete()
override;
124 friend class AdaptivePresenter;
126 void observePopupParent();
129 QPointer<AdaptivePresenter> m_presenter;
130 QPointer<Popup> m_popup;
131 QPointer<PresentationSite> m_origin;
132 QMetaObject::Connection m_originConnection;
133 bool m_originRequired =
false;
134 QList<QMetaObject::Connection> m_popupConnections;
135 QMetaObject::Connection m_windowConnection;
136 bool m_autoOpen =
true, m_popupRequired =
false, m_destroying =
false;
137 bool m_activationEnabled =
false;