TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
qkugouwindow.cpp
Go to the documentation of this file.
1 #include "qkugouwindow.h"
2 #include "qkugouuiobject.h"
3 
4 #ifdef TTK_MINIBLINK
5 # include "miniblink/miniblink.h"
6 #elif defined TTK_WEBKIT
7 # if TTK_QT_VERSION_CHECK(5,0,0)
8 # include <QtWebKitWidgets/QWebView>
9 # include <QtWebKitWidgets/QWebFrame>
10 # else
11 # include <QtWebKit/QWebView>
12 # include <QtWebKit/QWebFrame>
13 # endif
14 #elif defined TTK_WEBENGINE
15 # include <QWebEngineView>
16 # include <QWebEngineSettings>
17 # if TTK_QT_VERSION_CHECK(6,0,0)
18 # include <QWebEngineProfile>
19 # endif
20 #endif
21 
22 #include <QLabel>
23 #include <QBoxLayout>
24 
28 class QKugouWindowPrivate : public TTKPrivate<QKugouWindow>
29 {
30 public:
31  QKugouWindowPrivate() noexcept;
32  ~QKugouWindowPrivate() noexcept;
33 
34  QWidget *m_webView;
35 };
36 
38  : m_webView(nullptr)
39 {
40 
41 }
42 
44 {
45  delete m_webView;
46 }
47 
48 
49 
50 QKugouWindow::QKugouWindow(Module type, QWidget *parent)
51  : QLabel(parent)
52 {
54 
55 #ifdef TTK_WEBKIT
56  QWebSettings *settings = QWebSettings::globalSettings();
57  settings->setAttribute(QWebSettings::PluginsEnabled, true);
58  settings->setAttribute(QWebSettings::JavascriptEnabled, true);
59  settings->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
60  settings->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
61 #elif defined TTK_WEBENGINE
62 # if TTK_QT_VERSION_CHECK(6,0,0)
63  QWebEngineSettings *settings = QWebEngineProfile::defaultProfile()->settings();
64 # else
65  QWebEngineSettings *settings = QWebEngineSettings::defaultSettings();
66 # endif
67  settings->setAttribute(QWebEngineSettings::PluginsEnabled, true);
68  settings->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
69  settings->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
70 #endif
71 
72  setAlignment(Qt::AlignCenter);
73  setStyleSheet(TTK::UI::WidgetStyle01);
74  createWebViewer(type);
75 }
76 
77 void QKugouWindow::setUrl(const QString &url)
78 {
80 #ifdef TTK_MINIBLINK
82  if(w)
83  {
84  w->setUrl(url);
85  }
86 #elif defined TTK_WEBKIT
87  QWebView *w = TTKObjectCast(QWebView*, d->m_webView);
88  if(w)
89  {
90  w->setUrl(url);
91  }
92 #elif defined TTK_WEBENGINE
93  QWebEngineView *w = TTKObjectCast(QWebEngineView*, d->m_webView);
94  if(w)
95  {
96  w->setUrl(url);
97  }
98 #else
99  Q_UNUSED(url);
100  Q_UNUSED(d);
101 #endif
102 }
103 
105 {
107 #ifdef TTK_MINIBLINK
109  if(w)
110  {
111  w->reload();
112  }
113 #elif defined TTK_WEBKIT
114  QWebView *w = TTKObjectCast(QWebView*, d->m_webView);
115  if(w)
116  {
117  w->reload();
118  }
119 #elif defined TTK_WEBENGINE
120  QWebEngineView *w = TTKObjectCast(QWebEngineView*, d->m_webView);
121  if(w)
122  {
123  w->reload();
124  }
125 #else
126  Q_UNUSED(d);
127 #endif
128 }
129 
131 {
133  delete d->m_webView;
134  d->m_webView = nullptr;
135 #ifdef TTK_MINIBLINK
137  {
138  Miniblink *view = new Miniblink(this);
139  d->m_webView = view;
140  }
141 #elif defined TTK_WEBKIT
142  QWebView *view = new QWebView(this);
143  view->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
144  view->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
145  d->m_webView = view;
146 #elif defined TTK_WEBENGINE
147  QWebEngineView *view = new QWebEngineView(this);
148  d->m_webView = view;
149 #endif
150 }
151 
153 {
155  QVBoxLayout *layout = new QVBoxLayout(this);
156  layout->setSpacing(0);
157  layout->setContentsMargins(0, 0, 0, 0);
158 #if defined TTK_MINIBLINK || defined TTK_WEBKIT || defined TTK_WEBENGINE
159  if(type == Module::None)
160  {
161  QLabel *pix = new QLabel(this);
162  pix->setAlignment(Qt::AlignCenter);
163  pix->setPixmap(QPixmap(":/image/lb_no_power_mode"));
164  layout->addWidget(pix);
165  }
166  else
167  {
168  createWebViewer();
169  if(d->m_webView)
170  {
171  layout->addWidget(d->m_webView);
172 
173  switch(type)
174  {
175  case Module::Radio: setUrl(QKugouUrl::makeRadioPublicUrl()); break;
176  case Module::Movie: setUrl(QKugouUrl::makeMovieRecommendUrl()); break;
177  case Module::Single: setUrl(QKugouUrl::makeKuiSheUrl()); break;
178  default: break;
179  }
180  }
181  else
182  {
183  QLabel *pix = new QLabel(this);
184  pix->setAlignment(Qt::AlignCenter);
185  pix->setPixmap(QPixmap(":/image/lb_no_module"));
186  layout->addWidget(pix);
187  }
188  }
189 #else
190  Q_UNUSED(d);
191  Q_UNUSED(type);
192  QLabel *pix = new QLabel(this);
193  pix->setAlignment(Qt::AlignCenter);
194  pix->setPixmap(QPixmap(":/image/lb_no_module"));
195  layout->addWidget(pix);
196 #endif
197  setLayout(layout);
198 }
static QString makeRadioPublicUrl() noexcept
Definition: qkugouurl.cpp:13
~QKugouWindowPrivate() noexcept
static QString makeMovieRecommendUrl() noexcept
Definition: qkugouurl.cpp:18
void createWebViewer()
QKugouWindowPrivate() noexcept
static const QString WidgetStyle01
Widget.
QKugouWindow(Module type, QWidget *parent=nullptr)
The class of the kugou window widget.
Definition: qkugouwindow.h:30
static QString makeKuiSheUrl() noexcept
Definition: qkugouurl.cpp:23
The class of the kugou window widget private.
#define TTK_INIT_PRIVATE(Class)
Definition: ttkprivate.h:33
The class of the ttk private base.
Definition: ttkprivate.h:48
void setUrl(const QString &url)
#define TTK_D(Class)
Definition: ttkprivate.h:41
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:82