PlayerPanel. Misc. bug fixes and changes.
[wallplayer.git] / wallplayer / main.cpp
blob0bd78b606f353a3f1934a29b29289585ba84c916
1 #include <QApplication>
2 #include <QFileDialog>
3 #include <QGridLayout>
4 #include <QLabel>
5 #include <QPainter>
6 #include <QShowEvent>
7 #include <QSlider>
8 #include <iostream>
10 #include "qmpwidget.h"
13 class Player : public QMPwidget
15 Q_OBJECT
17 public:
18 Player(const QStringList &args, const QString &url, QWidget *parent = 0)
19 : QMPwidget(parent), m_url(url)
21 connect(this, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int)));
22 QMPwidget::start(args);
25 protected:
26 void keyPressEvent(QKeyEvent *event) {
27 /* Ctrl invokes global behavior */
28 if (event->modifiers() & Qt::ControlModifier) {
29 event->setAccepted(false);
30 return;
33 /* pass on everything else to parent -- for now */
34 QMPwidget::keyPressEvent(event);
37 void paintEvent (QPaintEvent *event) {
38 if (hasFocus()) {
39 QPainter painter(this);
40 QRect playerRect = m_widget->geometry();
41 painter.setPen(Qt::red);
42 painter.drawRect(playerRect.adjusted(-3,-3,3,3));
47 private slots:
48 void stateChanged(int state) {
49 if (state == QMPwidget::NotStartedState)
50 QApplication::exit();
53 protected:
54 void showEvent(QShowEvent *event) {
55 /* FIXME: wait for all players to be ready */
56 if (!event->spontaneous() && state() == QMPwidget::IdleState) {
57 QMPwidget::load(m_url);
61 private:
62 QString m_url;
65 class PlayerPanel : public QWidget
67 Q_OBJECT
69 public:
70 PlayerPanel(QStringList& playerArgs, QString& file, QWidget* parent)
71 : m_positionLabel(this), m_volumeLabel(this)
73 setParent(parent);
75 m_player = new Player(playerArgs, file, this);
76 m_layout.addWidget(m_player, 0, 0);
78 m_positionLabel.setText("foo");
79 m_layout.addWidget(&m_positionLabel, 1, 0);
81 setLayout(&m_layout);
84 Player* player() { return m_player; }
86 protected:
87 QGridLayout m_layout;
88 Player* m_player;
89 QLabel m_positionLabel;
90 QLabel m_volumeLabel;
92 private:
93 PlayerPanel();
96 class WallPlayerMainWindow : public QWidget
98 Q_OBJECT
100 public:
101 //WallPlayerMainWindow() {}
102 QList<PlayerPanel*> m_playerpanels;
105 protected:
106 void keyPressEvent(QKeyEvent *event) {
107 // pause/resume all
108 switch (event->key()) {
109 case Qt::Key_Escape:
110 QApplication::exit();
111 break;
113 case Qt::Key_Space:
114 case Qt::Key_P:
115 bool atLeastOnePlaying = false;
117 for (int i=0; i<m_playerpanels.size(); ++i)
118 if (m_playerpanels[i]->player()->state() == QMPwidget::PlayingState)
119 atLeastOnePlaying = true;
121 if (atLeastOnePlaying)
122 for (int i=0; i<m_playerpanels.size(); ++i)
123 m_playerpanels[i]->player()->pause();
124 else
125 for (int i=0; i<m_playerpanels.size(); ++i)
126 m_playerpanels[i]->player()->play();
127 break;
133 int main (int argc, char **argv) {
134 QApplication app(argc, argv);
136 WallPlayerMainWindow widget;
138 QGridLayout layout(&widget);
139 widget.setLayout(&layout);
141 QStringList appArgs = QApplication::arguments();
142 QStringList playerArgs;
143 playerArgs.append("-vo");
144 #ifdef Q_OS_WIN
145 if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA)
146 playerArgs.append("direct3d,");
147 else
148 playerArgs.append("directx,");
149 #else
150 playerArgs.append("xv");
151 #endif
152 playerArgs.append("-idx");
153 playerArgs.append("-softvol");
155 playerArgs.append("-nosound"); // DEBUG
157 for (int i=0; i<4; ++i) {
158 PlayerPanel* playerPanel = new PlayerPanel(playerArgs, appArgs[i+1], &widget);
159 widget.m_playerpanels.append(playerPanel); // FIXME registerPlayer
162 layout.addWidget(widget.m_playerpanels[0], 0, 0);
163 layout.addWidget(widget.m_playerpanels[1], 0, 1);
164 layout.addWidget(widget.m_playerpanels[2], 1, 0);
165 layout.addWidget(widget.m_playerpanels[3], 1, 1);
167 /* TODO color picker */
168 QPalette palette = widget.palette();
169 palette.setColor(QPalette::Window, Qt::black);
170 widget.setPalette(palette);
172 widget.show();
174 return app.exec();
178 #include "main.moc"