x11 factory: use vlc_readdir
[vlc/solaris.git] / doc / libvlc / QtPlayer / player.cpp
blob5cc2e04c81687e66a3295f0e4c09c5f80d941bf5
1 /******************************
2 * Qt player using libVLC *
3 * By protonux *
4 * *
5 * Under WTFPL *
6 ******************************/
7 #include "player.h"
8 #include <vlc/vlc.h>
10 #define qtu( i ) ((i).toUtf8().constData())
12 #include <QtGui>
14 Mwindow::Mwindow() {
15 vlcPlayer = NULL;
17 /* Init libVLC */
18 if((vlcObject = libvlc_new(0,NULL)) == NULL) {
19 printf("Could not init libVLC");
20 exit(1);
23 /* Display libVLC version */
24 printf("libVLC version: %s\n",libvlc_get_version());
26 /* Interface initialisation */
27 initMenus();
28 initComponents();
31 Mwindow::~Mwindow() {
32 if(vlcObject)
33 libvlc_release(vlcObject);
36 void Mwindow::initMenus() {
38 centralWidget = new QWidget;
40 videoWidget = new QWidget;
41 videoWidget->setAutoFillBackground( true );
42 QPalette plt = palette();
43 plt.setColor( QPalette::Window, Qt::black );
44 videoWidget->setPalette( plt );
46 QMenu *fileMenu = menuBar()->addMenu("&File");
47 QMenu *editMenu = menuBar()->addMenu("&Edit");
49 QAction *Open = new QAction("&Open", this);
50 QAction *Quit = new QAction("&Quit", this);
51 QAction *playAc = new QAction("&Play/Pause", this);
53 Open->setShortcut(QKeySequence("Ctrl+O"));
54 Quit->setShortcut(QKeySequence("Ctrl+Q"));
56 fileMenu->addAction(Open);
57 fileMenu->addAction(Quit);
58 editMenu->addAction(playAc);
60 connect(Open, SIGNAL(triggered()), this, SLOT(openFile()));
61 connect(playAc, SIGNAL(triggered()), this, SLOT(play()));
62 connect(Quit, SIGNAL(triggered()), qApp, SLOT(quit()));
65 void Mwindow::initComponents() {
67 playBut = new QPushButton("Play");
68 QObject::connect(playBut, SIGNAL(clicked()), this, SLOT(play()));
70 stopBut = new QPushButton("Stop");
71 QObject::connect(stopBut, SIGNAL(clicked()), this, SLOT(stop()));
73 muteBut = new QPushButton("Mute");
74 QObject::connect(muteBut, SIGNAL(clicked()), this, SLOT(mute()));
76 volumeSlider = new QSlider(Qt::Horizontal);
77 QObject::connect(volumeSlider, SIGNAL(sliderMoved(int)), this, SLOT(changeVolume(int)));
78 volumeSlider->setValue(80);
80 slider = new QSlider(Qt::Horizontal);
81 slider->setMaximum(1000);
82 QObject::connect(slider, SIGNAL(sliderMoved(int)), this, SLOT(changePosition(int)));
84 QTimer *timer = new QTimer(this);
85 connect(timer, SIGNAL(timeout()), this, SLOT(updateInterface()));
86 timer->start(100);
88 QHBoxLayout *layout = new QHBoxLayout;
89 layout->addWidget(playBut);
90 layout->addWidget(stopBut);
91 layout->addWidget(muteBut);
92 layout->addWidget(volumeSlider);
94 QVBoxLayout *layout2 = new QVBoxLayout;
95 layout2->addWidget(videoWidget);
96 layout2->addWidget(slider);
97 layout2->addLayout(layout);
99 centralWidget->setLayout(layout2);
100 setCentralWidget(centralWidget);
101 resize( 600, 400);
104 void Mwindow::openFile() {
105 /* Just the basic file-select box */
106 QString fileOpen = QFileDialog::getOpenFileName(this,tr("Load a file"), "~");
108 /* Stop if something is playing */
109 if( vlcPlayer && libvlc_media_player_is_playing(vlcPlayer) )
110 stop();
112 /* New Media */
113 libvlc_media_t *vlcMedia = libvlc_media_new_path(vlcObject,qtu(fileOpen));
114 if( !vlcMedia )
115 return;
117 vlcPlayer = libvlc_media_player_new_from_media (vlcMedia);
118 libvlc_media_release(vlcMedia);
120 /* Integrate the video in the interface */
121 #if defined(Q_OS_MAC)
122 libvlc_media_player_set_nsobject(vlcPlayer, (void *) videoWidget->winId());
123 #elif defined(Q_OS_UNIX)
124 libvlc_media_player_set_xwindow(vlcPlayer, videoWidget->winId());
125 #elif defined(Q_OS_WIN)
126 libvlc_media_player_set_hwnd(vlcPlayer, videoWidget->winId());
127 #endif
129 /* And play */
130 libvlc_media_player_play (vlcPlayer);
132 //Set vars and text correctly
133 playBut->setText("Pause");
136 void Mwindow::play() {
138 if(vlcPlayer)
140 if (libvlc_media_player_is_playing(vlcPlayer))
142 libvlc_media_player_pause(vlcPlayer);
143 playBut->setText("Play");
145 else
147 libvlc_media_player_play(vlcPlayer);
148 playBut->setText("Pause");
153 int Mwindow::changeVolume(int vol) { //Called if you change the volume slider
155 if(vlcPlayer)
156 return libvlc_audio_set_volume (vlcPlayer,vol);
158 return 0;
161 void Mwindow::changePosition(int pos) { //Called if you change the position slider
163 if(vlcPlayer) //It segfault if vlcPlayer don't exist
164 libvlc_media_player_set_position(vlcPlayer,(float)pos/(float)1000);
167 void Mwindow::updateInterface() { //Update interface and check if song is finished
169 if(vlcPlayer) //It segfault if vlcPlayer don't exist
171 /* update the timeline */
172 float pos = libvlc_media_player_get_position(vlcPlayer);
173 int siderPos=(int)(pos*(float)(1000));
174 slider->setValue(siderPos);
176 /* Stop the media */
177 if (libvlc_media_player_get_state(vlcPlayer) == 6) { this->stop(); }
181 void Mwindow::stop() {
182 if(vlcPlayer) {
183 libvlc_media_player_stop(vlcPlayer);
184 libvlc_media_player_release(vlcPlayer);
185 slider->setValue(0);
186 playBut->setText("Play");
188 vlcPlayer = NULL;
191 void Mwindow::mute() {
192 if(vlcPlayer) {
193 if(volumeSlider->value() == 0) { //if already muted...
195 this->changeVolume(80);
196 volumeSlider->setValue(80);
198 } else { //else mute volume
200 this->changeVolume(0);
201 volumeSlider->setValue(0);
207 void Mwindow::closeEvent(QCloseEvent *event) {
208 stop();
209 event->accept();