MuseScore  3.4
Music composition and notation
qmldockwidget.h
Go to the documentation of this file.
1 //=============================================================================
2 // MuseScore
3 // Music Composition & Notation
4 //
5 // Copyright (C) 2019 Werner Schweer and others
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 //=============================================================================
19 
20 #ifndef __QMLDOCKWIDGET_H__
21 #define __QMLDOCKWIDGET_H__
22 
23 #include "libmscore/mscore.h"
24 
25 namespace Ms {
26 
27 #ifndef NDEBUG
28 extern bool useSourceQmlFiles;
29 #endif
30 
31 //---------------------------------------------------------
32 // FocusChainBreak
33 //---------------------------------------------------------
34 
35 class FocusChainBreak : public QQuickItem
36  {
37  Q_OBJECT
38 
39  signals:
40  void requestFocusTransfer(bool forward);
41 
42  public:
43  FocusChainBreak(QQuickItem* parent = nullptr);
44 
45  void focusInEvent(QFocusEvent*) override;
46  };
47 
48 //---------------------------------------------------------
49 // MsQuickView
50 //---------------------------------------------------------
51 
52 class MsQuickView : public QQuickView
53  {
54  Q_OBJECT
55 
56  QWidget* prevFocusWidget = nullptr;
57 
58  static void registerQmlTypes();
59  void init();
60 
61  private slots:
62  void transferFocus(bool forward);
63  void onStatusChanged(QQuickView::Status);
64 
65  public:
66  MsQuickView(const QUrl& source, QWindow* parent = nullptr);
67  MsQuickView(QQmlEngine* engine, QWindow* parent)
68  : QQuickView(engine, parent) { init(); }
69  MsQuickView(QWindow* parent = nullptr)
70  : QQuickView(parent) { init(); }
71 
72  void focusInEvent(QFocusEvent*) override;
73  void keyPressEvent(QKeyEvent* e) override;
74  };
75 
76 //---------------------------------------------------------
77 // QmlStyle
81 //---------------------------------------------------------
82 
83 class QmlStyle : public QObject
84  {
85  Q_OBJECT
86 
87  QPalette _palette;
88  QFont _font;
89  bool _shadowOverlay = false;
90 
91 #define COLOR_PROPERTY(name, role) \
92  Q_PROPERTY(QColor name READ get_##name CONSTANT) \
93  QColor get_##name() const { return _palette.color(role); }
94 
95  COLOR_PROPERTY(window, QPalette::Window)
96  COLOR_PROPERTY(windowText, QPalette::WindowText)
97  COLOR_PROPERTY(base, QPalette::Base)
98  COLOR_PROPERTY(alternateBase, QPalette::AlternateBase)
99  COLOR_PROPERTY(text, QPalette::Text)
100  COLOR_PROPERTY(button, QPalette::Button)
101  COLOR_PROPERTY(buttonText, QPalette::ButtonText)
102  COLOR_PROPERTY(brightText, QPalette::BrightText)
103  COLOR_PROPERTY(toolTipBase, QPalette::ToolTipBase)
104  COLOR_PROPERTY(toolTipText, QPalette::ToolTipText)
105  COLOR_PROPERTY(link, QPalette::Link)
106  COLOR_PROPERTY(linkVisited, QPalette::LinkVisited)
107  COLOR_PROPERTY(highlight, QPalette::Highlight)
108  COLOR_PROPERTY(highlightedText, QPalette::HighlightedText)
109 
110  COLOR_PROPERTY(shadow, QPalette::Shadow)
111 
112 #undef COLOR_PROPERTY
113 
114 #define COLOR_PROPERTY_EXPR(name, expr) \
115  Q_PROPERTY(QColor name READ get_##name CONSTANT) \
116  QColor get_##name() const { return expr; }
117 
118  COLOR_PROPERTY_EXPR(voice1Color, MScore::selectColor[0]);
119  COLOR_PROPERTY_EXPR(voice2Color, MScore::selectColor[1]);
120  COLOR_PROPERTY_EXPR(voice3Color, MScore::selectColor[2]);
121  COLOR_PROPERTY_EXPR(voice4Color, MScore::selectColor[3]);
122 
123 #undef COLOR_PROPERTY_EXPR
124 
125  Q_PROPERTY(QFont font READ font CONSTANT)
126  Q_PROPERTY(bool shadowOverlay READ shadowOverlay NOTIFY shadowOverlayChanged)
127 
128  QFont font() const { return _font; }
129 
130  signals:
131  void shadowOverlayChanged();
132 
133  public:
134  QmlStyle(QPalette, QObject* parent = nullptr);
135 
136  bool shadowOverlay() const { return _shadowOverlay; }
137  void setShadowOverlay(bool);
138  };
139 
140 //---------------------------------------------------------
141 // QmlDockWidget
142 //---------------------------------------------------------
143 
144 class QmlDockWidget : public QDockWidget
145  {
146  Q_OBJECT
147 
148  QQuickView* _view = nullptr;
149  QmlStyle* qmlStyle = nullptr;
150  QQmlEngine* engine;
151 
152  QQuickView* getView();
153  void setupStyle();
154 
155  protected:
156  QSize initialViewSize() const { return _view ? _view->initialSize() : QSize(); }
157 
158  public:
159  QmlDockWidget(QQmlEngine* e = nullptr, QWidget* parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
160  QmlDockWidget(QQmlEngine* e, const QString& title, QWidget* parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
161 
162  static QString qmlSourcePrefix();
163  void setSource(const QUrl& url);
164  QUrl source() const;
165 
166  QQmlContext* rootContext() { return getView()->rootContext(); }
167  QQuickItem* rootObject() { return getView()->rootObject(); }
168 
169  const QQuickView* view() const { return _view; }
170 
171  void changeEvent(QEvent* evt) override;
172  void resizeEvent(QResizeEvent* evt) override;
173 
174  void ensureQmlViewFocused();
175 
176  void setShadowOverlay(bool val) { qmlStyle->setShadowOverlay(val); }
177  };
178 
179 }
180 #endif
181 
QFont _font
Definition: qmldockwidget.h:88
Definition: qmldockwidget.h:35
bool useSourceQmlFiles
Definition: qmldockwidget.cpp:31
Definition: qmldockwidget.h:52
#define COLOR_PROPERTY(name, role)
Definition: qmldockwidget.h:91
QQuickItem * rootObject()
Definition: qmldockwidget.h:167
#define COLOR_PROPERTY_EXPR(name, expr)
void requestFocusTransfer(bool forward)
void setShadowOverlay(bool)
Definition: qmldockwidget.cpp:169
QQmlEngine * engine
Definition: qmldockwidget.h:150
QPalette _palette
Definition: qmldockwidget.h:87
QSize initialViewSize() const
Definition: qmldockwidget.h:156
void setShadowOverlay(bool val)
Definition: qmldockwidget.h:176
MsQuickView(QQmlEngine *engine, QWindow *parent)
Definition: qmldockwidget.h:67
Definition: aeolus.cpp:26
QQmlContext * rootContext()
Definition: qmldockwidget.h:166
static QColor selectColor[VOICES]
Definition: mscore.h:327
Implements setting colors and fonts for QML-based widgets styling.
Definition: qmldockwidget.h:83
const QQuickView * view() const
Definition: qmldockwidget.h:169
MsQuickView(QWindow *parent=nullptr)
Definition: qmldockwidget.h:69
FocusChainBreak(QQuickItem *parent=nullptr)
Definition: qmldockwidget.cpp:38
void focusInEvent(QFocusEvent *) override
Definition: qmldockwidget.cpp:49
bool shadowOverlay() const
Definition: qmldockwidget.h:136
Definition: qmldockwidget.h:144