1 #include "playerpanel.h"
4 void PlayerPanel::stateChanged (int state
) {
5 qDebug() << "state changed to" << state
;
7 if (state
== QMPwidget::StoppedState
) {
9 m_controlpanel
->show();
13 PlayerPanel::PlayerPanel(QWidget
* parent
)
14 : m_playlistPosition(0)
18 QPalette palette
= this->palette();
19 palette
.setColor(QPalette::Window
, Qt::black
);
20 palette
.setColor(QPalette::WindowText
, Qt::gray
);
22 palette
.setColor(QPalette::Text
, Qt::gray
);
25 setFrameStyle(QFrame::Plain
| QFrame::Box
);
28 m_controlpanel
= new ControlPanel(this, this);
30 m_controlpanel
->installEventFilter(this);
32 m_layout
.addWidget(m_controlpanel
);
37 bool PlayerPanel::eventFilter(QObject
*obj
, QEvent
*event
) {
38 if (event
->type() != QEvent::FocusIn
&& event
->type() != QEvent::FocusOut
)
41 QPalette palette
= this->palette();
42 if (event
->type() == QEvent::FocusIn
)
43 palette
.setColor(QPalette::WindowText
, Qt::yellow
);
45 palette
.setColor(QPalette::WindowText
, Qt::gray
);
51 Player
* PlayerPanel::player() { return m_player
; }
53 void PlayerPanel::setStatus(QString status
) { m_controlpanel
->setStatus(status
); }
55 int PlayerPanel::playlistCount() { return m_playlist
.size(); }
57 void PlayerPanel::shufflePlaylist() {
58 Q_ASSERT_X(m_playlist
.size()>1,"PlayerPanel","shufflePlaylist");
59 std::random_shuffle(m_playlist
.begin(), m_playlist
.end());
62 QStringList
& PlayerPanel::playlist() {
66 QString
PlayerPanel::playlistNext() {
67 Q_ASSERT_X(!m_playlist
.isEmpty(),"PlayerPanel","playlistNext");
69 if (m_playlistPosition
>=playlistCount())
70 m_playlistPosition
= 0;
72 return playlist()[m_playlistPosition
++];
75 void PlayerPanel::startPlayer()
77 m_controlpanel
->hide();
79 QStringList playerArgs
;
81 playerArgs
.append("-vo");
83 if (QSysInfo::WindowsVersion
>= QSysInfo::WV_VISTA
)
84 playerArgs
.append("direct3d,");
86 playerArgs
.append("directx,");
88 playerArgs
.append("gl2,gl,xv,x11");
90 playerArgs
.append("-zoom"); // e.g. vo=x11
91 playerArgs
.append("-idx");
92 playerArgs
.append("-softvol");
94 playerArgs
.append("-nosound"); // DEBUG
96 m_player
= new Player(playerArgs
, playlistNext(), this);
97 connect(m_player
, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int)));
98 m_player
->installEventFilter(this);
100 m_playerstatus
= new QFrame(this);
101 QHBoxLayout
* playerstatuslayout
= new QHBoxLayout
;
102 m_playerstatus
->setLayout(playerstatuslayout
);
103 playerstatuslayout
->addWidget(new QPushButton("foo", this));
104 playerstatuslayout
->addWidget(new QPushButton("bar", this));
105 playerstatuslayout
->addWidget(new QPushButton("quux", this));
106 m_layout
.addWidget(m_playerstatus
);
108 m_layout
.addWidget(m_player
);
113 void PlayerPanel::queueMediaFile (QString
& filename
)
115 m_playlist
.append(filename
);
117 m_controlpanel
->setPlayEnabled(true);
119 if (m_playlist
.size()>1)
120 m_controlpanel
->setShuffleEnabled(true);
123 void PlayerPanel::queuePlaylistFile (QString
& filename
)
125 qDebug() << "loading playlist" << filename
;
127 QFile
playlistFile(filename
);
129 if (!playlistFile
.open(QIODevice::ReadOnly
| QIODevice::Text
)) {
130 qWarning() << "couldn't open playlist file" << filename
;
134 while (!playlistFile
.atEnd()) {
135 QString
line(playlistFile
.readLine());
136 line
= line
.left(line
.size()-1);
137 qDebug() << "loading playlist entry" << line
;
138 this->queueMediaFile(line
);
142 void PlayerPanel::queueFile (QString
& filename
)
144 if (filename
.contains(QRegExp("txt$")))
145 this->queuePlaylistFile(filename
);
147 this->queueMediaFile(filename
);
149 setStatus(QString("%2 files total in playlist now.").arg(this->playlistCount()));
152 int PlayerPanel::queueFiles (QStringList
& filenames
)
154 int oldPlaylistSize
= this->playlistCount();
156 for (int i
=0; i
<filenames
.size(); ++i
) {
157 QString
filename(filenames
[i
]);
158 this->queueFile(filename
);
161 int newPlaylistSize
= this->playlistCount();
163 int nloaded
= newPlaylistSize
- oldPlaylistSize
;
165 setStatus(QString("Loaded %1 files. %2 files total in playlist now.")
166 .arg(nloaded
).arg(newPlaylistSize
));