Unity 8
Screen.h
1 #ifndef SCREEN_H
2 #define SCREEN_H
3 
4 #include <qtmir/screen.h>
5 #include <QScopedPointer>
6 #include <QPointer>
7 
8 #include "WorkspaceModel.h"
9 
10 class ProxyScreen;
11 class ProxyScreens;
12 class ScreenConfig;
13 
14 class Screen: public QObject
15 {
16  Q_OBJECT
17 
18  Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
19  Q_PROPERTY(bool used READ used NOTIFY usedChanged)
20  Q_PROPERTY(QString name READ name NOTIFY nameChanged)
21  Q_PROPERTY(qtmir::OutputTypes outputType READ outputType NOTIFY outputTypeChanged)
22  Q_PROPERTY(float scale READ scale NOTIFY scaleChanged)
23  Q_PROPERTY(qtmir::FormFactor formFactor READ formFactor NOTIFY formFactorChanged)
24  Q_PROPERTY(MirPowerMode powerMode READ powerMode NOTIFY powerModeChanged)
25  Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation NOTIFY orientationChanged)
26  Q_PROPERTY(QPoint position READ position NOTIFY positionChanged)
27  Q_PROPERTY(uint currentModeIndex READ currentModeIndex NOTIFY currentModeIndexChanged)
28  Q_PROPERTY(QQmlListProperty<qtmir::ScreenMode> availableModes READ availableModes NOTIFY availableModesChanged)
29  Q_PROPERTY(QSizeF physicalSize READ physicalSize NOTIFY physicalSizeChanged)
30  Q_PROPERTY(QString outputTypeName READ outputTypeName NOTIFY outputTypeChanged)
31  Q_PROPERTY(WorkspaceModel* workspaces READ workspaces CONSTANT)
32  Q_PROPERTY(Workspace* currentWorkspace READ currentWorkspace WRITE setCurrentWorkspace2 NOTIFY currentWorkspaceChanged)
33 public:
34  bool used() const;
35  QString name() const;
36  float scale() const;
37  QSizeF physicalSize() const;
38  qtmir::FormFactor formFactor() const;
39  qtmir::OutputTypes outputType() const;
40  MirPowerMode powerMode() const;
41  Qt::ScreenOrientation orientation() const;
42  QPoint position() const;
43  QQmlListProperty<qtmir::ScreenMode> availableModes();
44  uint currentModeIndex() const;
45  bool isActive() const;
46  void setActive(bool active);
47  QScreen* qscreen() const;
48  QString outputTypeName() const;
49 
50  Q_INVOKABLE bool isSameAs(Screen*) const;
51 
52  Q_INVOKABLE ScreenConfig *beginConfiguration() const;
53  Q_INVOKABLE bool applyConfiguration(ScreenConfig *configuration);
54 
55  virtual WorkspaceModel* workspaces() const = 0;
56  virtual Workspace *currentWorkspace() const = 0;
57  virtual void setCurrentWorkspace(Workspace* workspace) = 0;
58 
59  void sync(Screen* proxy);
60 
61  qtmir::Screen* wrapped() const { return m_wrapped; }
62 
63 public Q_SLOTS:
64  void activate();
65 
66 Q_SIGNALS:
67  void usedChanged();
68  void nameChanged();
69  void outputTypeChanged();
70  void outputTypeNameChanged();
71  void scaleChanged();
72  void formFactorChanged();
73  void powerModeChanged();
74  void orientationChanged();
75  void positionChanged();
76  void currentModeIndexChanged();
77  void physicalSizeChanged();
78  void availableModesChanged();
79  void activeChanged(bool active);
80  void currentWorkspaceChanged(Workspace*);
81 
82 protected:
83  Screen(QObject* parent = 0);
84 
85  void connectToScreen(qtmir::Screen* screen);
86  void connectToScreen(Screen* screen);
87 
88 private:
89  void setCurrentWorkspace2(Workspace* workspace);
90 
91 protected:
92  QPointer<qtmir::Screen> m_wrapped;
93 };
94 
95 
96 class ConcreteScreen : public Screen
97 {
98  Q_OBJECT
99 public:
100  explicit ConcreteScreen(qtmir::Screen*const wrapped);
101 
102  // From qtmir::Screen
103  WorkspaceModel* workspaces() const override;
104  Workspace *currentWorkspace() const override;
105  void setCurrentWorkspace(Workspace* workspace) override;
106 
107 protected:
108  void resetCurrentWorkspace();
109 
110  const QScopedPointer<WorkspaceModel> m_workspaces;
111  QPointer<Workspace> m_currentWorspace;
112 };
113 
114 class ProxyScreen : public Screen
115 {
116  Q_OBJECT
117 public:
118  explicit ProxyScreen(Screen*const screen, ProxyScreens* screens);
119 
120  // From qtmir::Screen
121  WorkspaceModel* workspaces() const override;
122  Workspace *currentWorkspace() const override;
123  void setCurrentWorkspace(Workspace* workspace) override;
124 
125  Screen* proxyObject() const { return m_original.data(); }
126 
127  bool isSyncing() const;
128 
129 private:
130  const QScopedPointer<WorkspaceModel> m_workspaces;
131  const QPointer<Screen> m_original;
132  const ProxyScreens* m_screens;
133  QPointer<Workspace> m_currentWorspace;
134 };
135 
136 class ScreenConfig: public QObject
137 {
138  Q_OBJECT
139  Q_PRIVATE_PROPERTY(m_config, bool valid MEMBER used CONSTANT)
140  Q_PRIVATE_PROPERTY(m_config, bool used MEMBER used)
141  Q_PRIVATE_PROPERTY(m_config, float scale MEMBER scale)
142  Q_PRIVATE_PROPERTY(m_config, qtmir::FormFactor formFactor MEMBER formFactor)
143  Q_PRIVATE_PROPERTY(m_config, uint currentModeIndex MEMBER currentModeIndex)
144  Q_PRIVATE_PROPERTY(m_config, QPoint position MEMBER topLeft)
145 
146 public:
147  ScreenConfig(qtmir::ScreenConfiguration*);
148  ~ScreenConfig();
149 
150  qtmir::ScreenConfiguration* m_config;
151 };
152 
153 #endif // SCREEN_H