Add status bar stub.
[wallplayer.git] / src / playerpanel.cpp
blob89f34a4c19772929e2659b74560693bdb52e805b
1 #include "playerpanel.h"
2 #include "player.h"
4 void PlayerPanel::stateChanged (int state) {
5 qDebug() << "state changed to" << state;
7 if (state == QMPwidget::StoppedState) {
8 m_player->hide();
9 m_controlpanel->show();
13 PlayerPanel::PlayerPanel(QWidget* parent)
14 : m_playlistPosition(0)
16 setParent(parent);
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);
23 setPalette(palette);
25 setFrameStyle(QFrame::Plain | QFrame::Box);
26 setLineWidth(3);
28 m_controlpanel = new ControlPanel(this, this);
30 m_controlpanel->installEventFilter(this);
32 m_layout.addWidget(m_controlpanel);
34 setLayout(&m_layout);
37 bool PlayerPanel::eventFilter(QObject *obj, QEvent *event) {
38 if (event->type() != QEvent::FocusIn && event->type() != QEvent::FocusOut)
39 return false;
41 QPalette palette = this->palette();
42 if (event->type() == QEvent::FocusIn)
43 palette.setColor(QPalette::WindowText, Qt::yellow);
44 else
45 palette.setColor(QPalette::WindowText, Qt::gray);
46 setPalette(palette);
48 return false;
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() {
63 return m_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");
82 #ifdef Q_OS_WIN
83 if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA)
84 playerArgs.append("direct3d,");
85 else
86 playerArgs.append("directx,");
87 #else
88 playerArgs.append("gl2,gl,xv,x11");
89 #endif
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);
110 return;
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;
131 return;
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);
146 else
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));
168 return nloaded;