summaryrefslogtreecommitdiff
authorzecke <zecke>2004-09-24 15:15:51 (UTC)
committer zecke <zecke>2004-09-24 15:15:51 (UTC)
commit4c53e68c3ac96baaaf39cc049c89d8ccf022ff59 (patch) (unidiff)
tree8273ae338f0d611c28438a4f8a6a6fc8329e90e8
parenta214128c01e38ffd50edc4ed5b5c72593796eab2 (diff)
downloadopie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.zip
opie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.tar.gz
opie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.tar.bz2
Handling of Errors is a bit problematic with the current design.
We can start playing from multiple contexts. This are the PlayList context and single file context. Now the problem is that MediapPlayerState::setPlaying emits a signal. If started from the the PlayList setPlaying(false) would trigger an infite loop together with the Play ToggleButton, in single file context setPlaying(false) is the right choiche. The intermediate solution is to show an Error MessageBox and to raise the Audio Widget and leave it to the user to close it or go to the next file.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidget.cpp1
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.cpp48
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.h4
3 files changed, 30 insertions, 23 deletions
diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp
index d73f0cd..37b998f 100644
--- a/noncore/multimedia/opieplayer2/playlistwidget.cpp
+++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp
@@ -1,1049 +1,1050 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002,2003 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002,2003 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; General Public License for more 22..}^=.=       =       ; General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = General Public License along with 26  -_. . .   )=.  = General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include "playlistselection.h" 34#include "playlistselection.h"
35#include "playlistwidget.h" 35#include "playlistwidget.h"
36#include "mediaplayer.h" 36#include "mediaplayer.h"
37#include "inputDialog.h" 37#include "inputDialog.h"
38#include "om3u.h" 38#include "om3u.h"
39#include "playlistfileview.h" 39#include "playlistfileview.h"
40 40
41/* OPIE */ 41/* OPIE */
42#include <opie2/odebug.h> 42#include <opie2/odebug.h>
43#include <opie2/ofiledialog.h> 43#include <opie2/ofiledialog.h>
44using namespace Opie::Core; 44using namespace Opie::Core;
45using namespace Opie::Ui; 45using namespace Opie::Ui;
46 46
47/* QT */ 47/* QT */
48#include <qmessagebox.h> 48#include <qmessagebox.h>
49#include <qtoolbar.h> 49#include <qtoolbar.h>
50 50
51/* STD */ 51/* STD */
52#include <assert.h> 52#include <assert.h>
53 53
54PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl ) 54PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl )
55 : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 ) 55 : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 )
56{ 56{
57 Global::statusMessage( tr( "Loading of Skin started" ) );
57 mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" ); 58 mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" );
58 m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer"); 59 m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer");
59 60
60 61
61 62
62 d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), 63 d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ),
63 "opieplayer2/add_to_playlist", 64 "opieplayer2/add_to_playlist",
64 this , SLOT(addSelected() ) ); 65 this , SLOT(addSelected() ) );
65 d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ), 66 d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ),
66 "opieplayer2/remove_from_playlist", 67 "opieplayer2/remove_from_playlist",
67 this , SLOT(removeSelected() ) ); 68 this , SLOT(removeSelected() ) );
68 d->tbPlay = new ToolButton( bar, tr( "Play" ), "opieplayer2/play", 69 d->tbPlay = new ToolButton( bar, tr( "Play" ), "opieplayer2/play",
69 this , SLOT( btnPlay(bool) ), TRUE ); 70 this , SLOT( btnPlay(bool) ), TRUE );
70 d->tbShuffle = new ToolButton( bar, tr( "Randomize" ),"opieplayer2/shuffle", 71 d->tbShuffle = new ToolButton( bar, tr( "Randomize" ),"opieplayer2/shuffle",
71 mediaPlayerState, SLOT( setShuffled(bool) ), TRUE ); 72 mediaPlayerState, SLOT( setShuffled(bool) ), TRUE );
72 d->tbLoop = new ToolButton( bar, tr( "Loop" ), "opieplayer2/loop", 73 d->tbLoop = new ToolButton( bar, tr( "Loop" ), "opieplayer2/loop",
73 mediaPlayerState, SLOT( setLooping(bool) ), TRUE ); 74 mediaPlayerState, SLOT( setLooping(bool) ), TRUE );
74 75
75 (void)new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); 76 (void)new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) );
76 (void)new MenuItem( pmPlayList, tr( "Add all audio files" ), 77 (void)new MenuItem( pmPlayList, tr( "Add all audio files" ),
77 this, SLOT( addAllMusicToList() ) ); 78 this, SLOT( addAllMusicToList() ) );
78 (void)new MenuItem( pmPlayList, tr( "Add all video files" ), 79 (void)new MenuItem( pmPlayList, tr( "Add all video files" ),
79 this, SLOT( addAllVideoToList() ) ); 80 this, SLOT( addAllVideoToList() ) );
80 (void)new MenuItem( pmPlayList, tr( "Add all files" ), 81 (void)new MenuItem( pmPlayList, tr( "Add all files" ),
81 this, SLOT( addAllToList() ) ); 82 this, SLOT( addAllToList() ) );
82 pmPlayList->insertSeparator(-1); 83 pmPlayList->insertSeparator(-1);
83 (void)new MenuItem( pmPlayList, tr( "Add File" ), 84 (void)new MenuItem( pmPlayList, tr( "Add File" ),
84 this,SLOT( openFile() ) ); 85 this,SLOT( openFile() ) );
85 (void)new MenuItem( pmPlayList, tr("Add URL"), 86 (void)new MenuItem( pmPlayList, tr("Add URL"),
86 this,SLOT( openURL() ) ); 87 this,SLOT( openURL() ) );
87 pmPlayList->insertSeparator(-1); 88 pmPlayList->insertSeparator(-1);
88 (void)new MenuItem( pmPlayList, tr( "Save Playlist" ), 89 (void)new MenuItem( pmPlayList, tr( "Save Playlist" ),
89 this, SLOT(writem3u() ) ); 90 this, SLOT(writem3u() ) );
90 pmPlayList->insertSeparator(-1); 91 pmPlayList->insertSeparator(-1);
91 (void)new MenuItem( pmPlayList, tr( "Rescan for Audio Files" ), 92 (void)new MenuItem( pmPlayList, tr( "Rescan for Audio Files" ),
92 audioView, SLOT( scanFiles() ) ); 93 audioView, SLOT( scanFiles() ) );
93 (void)new MenuItem( pmPlayList, tr( "Rescan for Video Files" ), 94 (void)new MenuItem( pmPlayList, tr( "Rescan for Video Files" ),
94 videoView, SLOT( scanFiles() ) ); 95 videoView, SLOT( scanFiles() ) );
95 96
96 pmView->insertItem( Resource::loadPixmap("fullscreen") , tr( "Full Screen"), 97 pmView->insertItem( Resource::loadPixmap("fullscreen") , tr( "Full Screen"),
97 mediaPlayerState, SLOT( toggleFullscreen() ) ); 98 mediaPlayerState, SLOT( toggleFullscreen() ) );
98 99
99 Config cfg( "OpiePlayer" ); 100 Config cfg( "OpiePlayer" );
100 bool b= cfg.readBoolEntry("FullScreen", 0); 101 bool b= cfg.readBoolEntry("FullScreen", 0);
101 mediaPlayerState->setFullscreen( b ); 102 mediaPlayerState->setFullscreen( b );
102 pmView->setItemChecked( -16, b ); 103 pmView->setItemChecked( -16, b );
103 104
104 (void)new ToolButton( vbox1, tr( "Move Up" ), "opieplayer2/up", 105 (void)new ToolButton( vbox1, tr( "Move Up" ), "opieplayer2/up",
105 d->selectedFiles, SLOT(moveSelectedUp() ) ); 106 d->selectedFiles, SLOT(moveSelectedUp() ) );
106 (void)new ToolButton( vbox1, tr( "Remove" ), "opieplayer2/cut", 107 (void)new ToolButton( vbox1, tr( "Remove" ), "opieplayer2/cut",
107 d->selectedFiles, SLOT(removeSelected() ) ); 108 d->selectedFiles, SLOT(removeSelected() ) );
108 (void)new ToolButton( vbox1, tr( "Move Down" ), "opieplayer2/down", 109 (void)new ToolButton( vbox1, tr( "Move Down" ), "opieplayer2/down",
109 d->selectedFiles, SLOT(moveSelectedDown() ) ); 110 d->selectedFiles, SLOT(moveSelectedDown() ) );
110 QVBox *stretch2 = new QVBox( vbox1 ); 111 QVBox *stretch2 = new QVBox( vbox1 );
111 112
112 connect( tbDeletePlaylist, ( SIGNAL( released() ) ), 113 connect( tbDeletePlaylist, ( SIGNAL( released() ) ),
113 SLOT( deletePlaylist() ) ); 114 SLOT( deletePlaylist() ) );
114 connect( pmView, SIGNAL( activated(int) ), 115 connect( pmView, SIGNAL( activated(int) ),
115 this, SLOT( pmViewActivated(int) ) ); 116 this, SLOT( pmViewActivated(int) ) );
116 connect( skinsMenu, SIGNAL( activated(int) ) , 117 connect( skinsMenu, SIGNAL( activated(int) ) ,
117 this, SLOT( skinsMenuActivated(int) ) ); 118 this, SLOT( skinsMenuActivated(int) ) );
118 connect( d->selectedFiles, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), 119 connect( d->selectedFiles, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),
119 this,SLOT( playlistViewPressed(int,QListViewItem*,const QPoint&,int) ) ); 120 this,SLOT( playlistViewPressed(int,QListViewItem*,const QPoint&,int) ) );
120 connect( audioView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), 121 connect( audioView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),
121 this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) ); 122 this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) );
122 connect( audioView, SIGNAL( returnPressed(QListViewItem*) ), 123 connect( audioView, SIGNAL( returnPressed(QListViewItem*) ),
123 this,SLOT( playIt(QListViewItem*) ) ); 124 this,SLOT( playIt(QListViewItem*) ) );
124 connect( audioView, SIGNAL( doubleClicked(QListViewItem*) ), 125 connect( audioView, SIGNAL( doubleClicked(QListViewItem*) ),
125 this, SLOT( addToSelection(QListViewItem*) ) ); 126 this, SLOT( addToSelection(QListViewItem*) ) );
126 connect( videoView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), 127 connect( videoView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),
127 this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) ); 128 this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) );
128 connect( videoView, SIGNAL( returnPressed(QListViewItem*) ), 129 connect( videoView, SIGNAL( returnPressed(QListViewItem*) ),
129 this,SLOT( playIt(QListViewItem*) ) ); 130 this,SLOT( playIt(QListViewItem*) ) );
130 connect( videoView, SIGNAL( doubleClicked(QListViewItem*) ), 131 connect( videoView, SIGNAL( doubleClicked(QListViewItem*) ),
131 this, SLOT( addToSelection(QListViewItem*) ) ); 132 this, SLOT( addToSelection(QListViewItem*) ) );
132 connect( playLists, SIGNAL( fileSelected(const DocLnk&) ), 133 connect( playLists, SIGNAL( fileSelected(const DocLnk&) ),
133 this, SLOT( loadList(const DocLnk&) ) ); 134 this, SLOT( loadList(const DocLnk&) ) );
134 connect( tabWidget, SIGNAL ( currentChanged(QWidget*) ), 135 connect( tabWidget, SIGNAL ( currentChanged(QWidget*) ),
135 this, SLOT( tabChanged(QWidget*) ) ); 136 this, SLOT( tabChanged(QWidget*) ) );
136 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), 137 connect( mediaPlayerState, SIGNAL( playingToggled(bool) ),
137 d->tbPlay, SLOT( setOn(bool) ) ); 138 d->tbPlay, SLOT( setOn(bool) ) );
138 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), 139 connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ),
139 d->tbLoop, SLOT( setOn(bool) ) ); 140 d->tbLoop, SLOT( setOn(bool) ) );
140 connect( mediaPlayerState, SIGNAL( shuffledToggled(bool) ), 141 connect( mediaPlayerState, SIGNAL( shuffledToggled(bool) ),
141 d->tbShuffle, SLOT( setOn(bool) ) ); 142 d->tbShuffle, SLOT( setOn(bool) ) );
142 connect( d->selectedFiles, SIGNAL( doubleClicked(QListViewItem*) ), 143 connect( d->selectedFiles, SIGNAL( doubleClicked(QListViewItem*) ),
143 this, SLOT( playIt(QListViewItem*) ) ); 144 this, SLOT( playIt(QListViewItem*) ) );
144 connect ( gammaSlider, SIGNAL( valueChanged(int) ), 145 connect ( gammaSlider, SIGNAL( valueChanged(int) ),
145 mediaPlayerState, SLOT( setVideoGamma(int) ) ); 146 mediaPlayerState, SLOT( setVideoGamma(int) ) );
146 147
147 connect( this, SIGNAL(skinSelected() ), 148 connect( this, SIGNAL(skinSelected() ),
148 m_mp, SLOT( reloadSkins() ) ); 149 m_mp, SLOT( reloadSkins() ) );
149 150
150 // see which skins are installed 151 // see which skins are installed
151 populateSkinsMenu(); 152 populateSkinsMenu();
152 initializeStates(); 153 initializeStates();
153 154
154 channel = new QCopChannel( "QPE/Application/opieplayer2", this ); 155 channel = new QCopChannel( "QPE/Application/opieplayer2", this );
155 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), 156 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
156 this, SLOT( qcopReceive(const QCString&,const QByteArray&)) ); 157 this, SLOT( qcopReceive(const QCString&,const QByteArray&)) );
157 158
158 159
159 cfg.setGroup("PlayList"); 160 cfg.setGroup("PlayList");
160 QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default"); 161 QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default");
161 loadList(DocLnk( currentPlaylist ) ); 162 loadList(DocLnk( currentPlaylist ) );
162 163
163 tabWidget->showPage( playListTab ); 164 tabWidget->showPage( playListTab );
164} 165}
165 166
166 167
167PlayListWidget::~PlayListWidget() { 168PlayListWidget::~PlayListWidget() {
168 delete d; 169 delete d;
169 delete m_mp; 170 delete m_mp;
170} 171}
171 172
172 173
173void PlayListWidget::initializeStates() { 174void PlayListWidget::initializeStates() {
174 d->tbPlay->setOn( mediaPlayerState->isPlaying() ); 175 d->tbPlay->setOn( mediaPlayerState->isPlaying() );
175 d->tbLoop->setOn( mediaPlayerState->isLooping() ); 176 d->tbLoop->setOn( mediaPlayerState->isLooping() );
176 d->tbShuffle->setOn( mediaPlayerState->isShuffled() ); 177 d->tbShuffle->setOn( mediaPlayerState->isShuffled() );
177 d->playListFrame->show(); 178 d->playListFrame->show();
178} 179}
179 180
180void PlayListWidget::writeDefaultPlaylist() { 181void PlayListWidget::writeDefaultPlaylist() {
181 182
182 Config config( "OpiePlayer" ); 183 Config config( "OpiePlayer" );
183 config.setGroup( "PlayList" ); 184 config.setGroup( "PlayList" );
184 QString filename=QPEApplication::documentDir() + "/default.m3u"; 185 QString filename=QPEApplication::documentDir() + "/default.m3u";
185 QString currentString = config.readEntry( "CurrentPlaylist", filename); 186 QString currentString = config.readEntry( "CurrentPlaylist", filename);
186 if( currentString == filename) { 187 if( currentString == filename) {
187 Om3u *m3uList; 188 Om3u *m3uList;
188 if( d->selectedFiles->first() ) { 189 if( d->selectedFiles->first() ) {
189 m3uList = new Om3u(filename, IO_ReadWrite | IO_Truncate); 190 m3uList = new Om3u(filename, IO_ReadWrite | IO_Truncate);
190 do { 191 do {
191 m3uList->add( d->selectedFiles->current()->file() ); 192 m3uList->add( d->selectedFiles->current()->file() );
192 } 193 }
193 while ( d->selectedFiles->next() ); 194 while ( d->selectedFiles->next() );
194 195
195 m3uList->write(); 196 m3uList->write();
196 m3uList->close(); 197 m3uList->close();
197 delete m3uList; 198 delete m3uList;
198 199
199 } 200 }
200 } 201 }
201} 202}
202 203
203void PlayListWidget::addToSelection( const DocLnk& lnk ) { 204void PlayListWidget::addToSelection( const DocLnk& lnk ) {
204 d->setDocumentUsed = FALSE; 205 d->setDocumentUsed = FALSE;
205 if( QFileInfo( lnk.file() ).exists() || 206 if( QFileInfo( lnk.file() ).exists() ||
206 lnk.file().left(4) == "http" ) { 207 lnk.file().left(4) == "http" ) {
207 d->selectedFiles->addToSelection( lnk ); 208 d->selectedFiles->addToSelection( lnk );
208 } 209 }
209} 210}
210 211
211 212
212void PlayListWidget::clearList() { 213void PlayListWidget::clearList() {
213 while ( first() ) { 214 while ( first() ) {
214 d->selectedFiles->removeSelected(); 215 d->selectedFiles->removeSelected();
215 } 216 }
216 Config cfg( "OpiePlayer" ); 217 Config cfg( "OpiePlayer" );
217 cfg.setGroup("PlayList"); 218 cfg.setGroup("PlayList");
218 cfg.writeEntry("CurrentPlaylist","default"); 219 cfg.writeEntry("CurrentPlaylist","default");
219 setCaption("OpiePlayer"); 220 setCaption("OpiePlayer");
220} 221}
221 222
222void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) { 223void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) {
223 switch (mouse) { 224 switch (mouse) {
224 case LeftButton: 225 case LeftButton:
225 break; 226 break;
226 case RightButton: 227 case RightButton:
227 { 228 {
228 QPopupMenu m; 229 QPopupMenu m;
229 m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); 230 m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() ));
230 m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); 231 m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() ));
231 m.exec( QCursor::pos() ); 232 m.exec( QCursor::pos() );
232 } 233 }
233 break; 234 break;
234 } 235 }
235} 236}
236 237
237 238
238void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *, const QPoint& , int ) { 239void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *, const QPoint& , int ) {
239 switch (mouse) { 240 switch (mouse) {
240 case LeftButton: 241 case LeftButton:
241 break; 242 break;
242 case RightButton: 243 case RightButton:
243 { 244 {
244 QPopupMenu m; 245 QPopupMenu m;
245 m.insertItem( tr( "Play" ), this, SLOT( playSelected() )); 246 m.insertItem( tr( "Play" ), this, SLOT( playSelected() ));
246 m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() )); 247 m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() ));
247 m.exec( QCursor::pos() ); 248 m.exec( QCursor::pos() );
248 } 249 }
249 break; 250 break;
250 } 251 }
251} 252}
252 253
253 254
254void PlayListWidget::addAllToList() { 255void PlayListWidget::addAllToList() {
255 256
256 257
257 audioView->populateView(); 258 audioView->populateView();
258 259
259 QListViewItemIterator audioIt( audioView ); 260 QListViewItemIterator audioIt( audioView );
260 DocLnk lnk; 261 DocLnk lnk;
261 QString filename; 262 QString filename;
262 // iterate through all items of the listview 263 // iterate through all items of the listview
263 for ( ; audioIt.current(); ++audioIt ) { 264 for ( ; audioIt.current(); ++audioIt ) {
264 filename = audioIt.current()->text(3); 265 filename = audioIt.current()->text(3);
265 lnk.setName( QFileInfo(filename).baseName() ); //sets name 266 lnk.setName( QFileInfo(filename).baseName() ); //sets name
266 lnk.setFile( filename ); //sets file name 267 lnk.setFile( filename ); //sets file name
267 d->selectedFiles->addToSelection( lnk); 268 d->selectedFiles->addToSelection( lnk);
268 } 269 }
269 270
270 videoView->populateView(); 271 videoView->populateView();
271 272
272 QListViewItemIterator videoIt( videoView ); 273 QListViewItemIterator videoIt( videoView );
273 for ( ; videoIt.current(); ++videoIt ) { 274 for ( ; videoIt.current(); ++videoIt ) {
274 filename = videoIt.current()->text(3); 275 filename = videoIt.current()->text(3);
275 lnk.setName( QFileInfo(filename).baseName() ); //sets name 276 lnk.setName( QFileInfo(filename).baseName() ); //sets name
276 lnk.setFile( filename ); //sets file name 277 lnk.setFile( filename ); //sets file name
277 d->selectedFiles->addToSelection( lnk); 278 d->selectedFiles->addToSelection( lnk);
278 } 279 }
279 280
280 tabWidget->setCurrentPage(0); 281 tabWidget->setCurrentPage(0);
281 282
282 writeCurrentM3u(); 283 writeCurrentM3u();
283 d->selectedFiles->first(); 284 d->selectedFiles->first();
284} 285}
285 286
286 287
287void PlayListWidget::addAllMusicToList() { 288void PlayListWidget::addAllMusicToList() {
288 289
289 audioView->populateView(); 290 audioView->populateView();
290 291
291 QListViewItemIterator audioIt( audioView ); 292 QListViewItemIterator audioIt( audioView );
292 DocLnk lnk; 293 DocLnk lnk;
293 QString filename; 294 QString filename;
294 // iterate through all items of the listview 295 // iterate through all items of the listview
295 for ( ; audioIt.current(); ++audioIt ) { 296 for ( ; audioIt.current(); ++audioIt ) {
296 filename = audioIt.current()->text(3); 297 filename = audioIt.current()->text(3);
297 lnk.setName( QFileInfo(filename).baseName() ); //sets name 298 lnk.setName( QFileInfo(filename).baseName() ); //sets name
298 lnk.setFile( filename ); //sets file name 299 lnk.setFile( filename ); //sets file name
299 d->selectedFiles->addToSelection( lnk); 300 d->selectedFiles->addToSelection( lnk);
300 } 301 }
301 302
302 tabWidget->setCurrentPage(0); 303 tabWidget->setCurrentPage(0);
303 writeCurrentM3u(); 304 writeCurrentM3u();
304 d->selectedFiles->first(); 305 d->selectedFiles->first();
305} 306}
306 307
307 308
308void PlayListWidget::addAllVideoToList() { 309void PlayListWidget::addAllVideoToList() {
309 310
310 videoView->populateView(); 311 videoView->populateView();
311 312
312 QListViewItemIterator videoIt( videoView ); 313 QListViewItemIterator videoIt( videoView );
313 DocLnk lnk; 314 DocLnk lnk;
314 QString filename; 315 QString filename;
315 for ( ; videoIt.current(); ++videoIt ) { 316 for ( ; videoIt.current(); ++videoIt ) {
316 filename = videoIt.current()->text(3); 317 filename = videoIt.current()->text(3);
317 lnk.setName( QFileInfo(filename).baseName() ); //sets name 318 lnk.setName( QFileInfo(filename).baseName() ); //sets name
318 lnk.setFile( filename ); //sets file name 319 lnk.setFile( filename ); //sets file name
319 d->selectedFiles->addToSelection( lnk); 320 d->selectedFiles->addToSelection( lnk);
320 } 321 }
321 tabWidget->setCurrentPage(0); 322 tabWidget->setCurrentPage(0);
322 writeCurrentM3u(); 323 writeCurrentM3u();
323 d->selectedFiles->first(); 324 d->selectedFiles->first();
324} 325}
325 326
326 327
327void PlayListWidget::setDocument( const QString& _fileref ) { 328void PlayListWidget::setDocument( const QString& _fileref ) {
328 // odebug << "<<<<<<<<set document>>>>>>>>>> "+fileref << oendl; 329 // odebug << "<<<<<<<<set document>>>>>>>>>> "+fileref << oendl;
329 QString fileref = _fileref; 330 QString fileref = _fileref;
330 fromSetDocument = TRUE; 331 fromSetDocument = TRUE;
331 332
332 DocLnk lnk(_fileref); 333 DocLnk lnk(_fileref);
333 if(lnk.isValid()) 334 if(lnk.isValid())
334 fileref = lnk.file(); 335 fileref = lnk.file();
335 336
336 QFileInfo fileInfo(fileref); 337 QFileInfo fileInfo(fileref);
337 338
338 if ( !fileInfo.exists() ) { 339 if ( !fileInfo.exists() ) {
339 QMessageBox::warning( this, tr( "Invalid File" ), 340 QMessageBox::warning( this, tr( "Invalid File" ),
340 tr( "There was a problem in getting the file." ) ); 341 tr( "There was a problem in getting the file." ) );
341 return; 342 return;
342 } 343 }
343 344
344 clearList(); 345 clearList();
345 QString extension = fileInfo.extension(false); 346 QString extension = fileInfo.extension(false);
346 347
347 if( extension.find( "m3u", 0, false) != -1 348 if( extension.find( "m3u", 0, false) != -1
348 || extension.find( "pls", 0, false) != -1 ) { 349 || extension.find( "pls", 0, false) != -1 ) {
349 readListFromFile( fileref ); 350 readListFromFile( fileref );
350 } else { 351 } else {
351 clearList(); 352 clearList();
352 DocLnk lnk; 353 DocLnk lnk;
353 lnk.setName( fileInfo.baseName() ); //sets name 354 lnk.setName( fileInfo.baseName() ); //sets name
354 lnk.setFile( fileref ); //sets file name 355 lnk.setFile( fileref ); //sets file name
355 addToSelection( lnk ); 356 addToSelection( lnk );
356 writeCurrentM3u(); 357 writeCurrentM3u();
357 358
358 d->setDocumentUsed = TRUE; 359 d->setDocumentUsed = TRUE;
359 mediaPlayerState->setPlaying( FALSE ); 360 mediaPlayerState->setPlaying( FALSE );
360 mediaPlayerState->setPlaying( TRUE ); 361 mediaPlayerState->setPlaying( TRUE );
361 } 362 }
362} 363}
363 364
364 365
365void PlayListWidget::useSelectedDocument() { 366void PlayListWidget::useSelectedDocument() {
366 d->setDocumentUsed = FALSE; 367 d->setDocumentUsed = FALSE;
367} 368}
368 369
369 370
370const DocLnk *PlayListWidget::current() const { // this is fugly 371const DocLnk *PlayListWidget::current() const { // this is fugly
371 assert( currentTab() == CurrentPlayList ); 372 assert( currentTab() == CurrentPlayList );
372 373
373 const DocLnk *lnk = d->selectedFiles->current(); 374 const DocLnk *lnk = d->selectedFiles->current();
374 if ( !lnk ) { 375 if ( !lnk ) {
375 d->selectedFiles->first(); 376 d->selectedFiles->first();
376 lnk = d->selectedFiles->current(); 377 lnk = d->selectedFiles->current();
377 } 378 }
378 assert( lnk ); 379 assert( lnk );
379 return lnk; 380 return lnk;
380} 381}
381 382
382 383
383bool PlayListWidget::prev() { 384bool PlayListWidget::prev() {
384 if ( mediaPlayerState->isShuffled() ) { 385 if ( mediaPlayerState->isShuffled() ) {
385 const DocLnk *cur = current(); 386 const DocLnk *cur = current();
386 int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); 387 int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0));
387 for ( int i = 0; i < j; i++ ) { 388 for ( int i = 0; i < j; i++ ) {
388 if ( !d->selectedFiles->next() ) 389 if ( !d->selectedFiles->next() )
389 d->selectedFiles->first(); 390 d->selectedFiles->first();
390 } 391 }
391 if ( cur == current() ) 392 if ( cur == current() )
392 if ( !d->selectedFiles->next() ) { 393 if ( !d->selectedFiles->next() ) {
393 d->selectedFiles->first(); 394 d->selectedFiles->first();
394 } 395 }
395 return TRUE; 396 return TRUE;
396 } else { 397 } else {
397 if ( !d->selectedFiles->prev() ) { 398 if ( !d->selectedFiles->prev() ) {
398 if ( mediaPlayerState->isLooping() ) { 399 if ( mediaPlayerState->isLooping() ) {
399 return d->selectedFiles->last(); 400 return d->selectedFiles->last();
400 } else { 401 } else {
401 return FALSE; 402 return FALSE;
402 } 403 }
403 } 404 }
404 return TRUE; 405 return TRUE;
405 } 406 }
406} 407}
407 408
408 409
409bool PlayListWidget::next() { 410bool PlayListWidget::next() {
410//odebug << "<<<<<<<<<<<<next()" << oendl; 411//odebug << "<<<<<<<<<<<<next()" << oendl;
411 if ( mediaPlayerState->isShuffled() ) { 412 if ( mediaPlayerState->isShuffled() ) {
412 return prev(); 413 return prev();
413 } else { 414 } else {
414 if ( !d->selectedFiles->next() ) { 415 if ( !d->selectedFiles->next() ) {
415 if ( mediaPlayerState->isLooping() ) { 416 if ( mediaPlayerState->isLooping() ) {
416 return d->selectedFiles->first(); 417 return d->selectedFiles->first();
417 } else { 418 } else {
418 return FALSE; 419 return FALSE;
419 } 420 }
420 } 421 }
421 return TRUE; 422 return TRUE;
422 } 423 }
423} 424}
424 425
425 426
426bool PlayListWidget::first() { 427bool PlayListWidget::first() {
427 return d->selectedFiles->first(); 428 return d->selectedFiles->first();
428} 429}
429 430
430 431
431bool PlayListWidget::last() { 432bool PlayListWidget::last() {
432 return d->selectedFiles->last(); 433 return d->selectedFiles->last();
433} 434}
434 435
435 436
436 void PlayListWidget::saveList() { 437 void PlayListWidget::saveList() {
437 writem3u(); 438 writem3u();
438 } 439 }
439 440
440 441
441void PlayListWidget::loadList( const DocLnk & lnk) { 442void PlayListWidget::loadList( const DocLnk & lnk) {
442 QString name = lnk.name(); 443 QString name = lnk.name();
443 444
444 if( name.length()>0) { 445 if( name.length()>0) {
445 setCaption("OpiePlayer: "+name); 446 setCaption("OpiePlayer: "+name);
446 clearList(); 447 clearList();
447 readListFromFile(lnk.file()); 448 readListFromFile(lnk.file());
448 tabWidget->setCurrentPage(0); 449 tabWidget->setCurrentPage(0);
449 } 450 }
450} 451}
451 452
452void PlayListWidget::addSelected() { 453void PlayListWidget::addSelected() {
453 assert( inFileListMode() ); 454 assert( inFileListMode() );
454 455
455 QListViewItemIterator it( currentFileListView ); 456 QListViewItemIterator it( currentFileListView );
456 for ( ; it.current(); ++it ) 457 for ( ; it.current(); ++it )
457 if ( it.current()->isSelected() ) { 458 if ( it.current()->isSelected() ) {
458 QString filename = it.current()->text(3); 459 QString filename = it.current()->text(3);
459 460
460 DocLnk lnk; 461 DocLnk lnk;
461 lnk.setName( QFileInfo( filename ).baseName() ); //sets name 462 lnk.setName( QFileInfo( filename ).baseName() ); //sets name
462 lnk.setFile( filename ); //sets file name 463 lnk.setFile( filename ); //sets file name
463 464
464 d->selectedFiles->addToSelection( lnk ); 465 d->selectedFiles->addToSelection( lnk );
465 } 466 }
466 467
467 currentFileListView->clearSelection(); 468 currentFileListView->clearSelection();
468 469
469 writeCurrentM3u(); 470 writeCurrentM3u();
470} 471}
471 472
472 473
473void PlayListWidget::removeSelected() { 474void PlayListWidget::removeSelected() {
474 d->selectedFiles->removeSelected( ); 475 d->selectedFiles->removeSelected( );
475 writeCurrentM3u(); 476 writeCurrentM3u();
476} 477}
477 478
478 479
479void PlayListWidget::playIt( QListViewItem *it) { 480void PlayListWidget::playIt( QListViewItem *it) {
480 if(!it) return; 481 if(!it) return;
481 mediaPlayerState->setPlaying(FALSE); 482 mediaPlayerState->setPlaying(FALSE);
482 mediaPlayerState->setPlaying(TRUE); 483 mediaPlayerState->setPlaying(TRUE);
483 d->selectedFiles->unSelect(); 484 d->selectedFiles->unSelect();
484} 485}
485 486
486 487
487void PlayListWidget::addToSelection( QListViewItem *it) { 488void PlayListWidget::addToSelection( QListViewItem *it) {
488 d->setDocumentUsed = FALSE; 489 d->setDocumentUsed = FALSE;
489 490
490 if(it) { 491 if(it) {
491 if ( currentTab() == CurrentPlayList ) 492 if ( currentTab() == CurrentPlayList )
492 return; 493 return;
493 DocLnk lnk; 494 DocLnk lnk;
494 QString filename; 495 QString filename;
495 496
496 filename=it->text(3); 497 filename=it->text(3);
497 lnk.setName( QFileInfo(filename).baseName() ); //sets name 498 lnk.setName( QFileInfo(filename).baseName() ); //sets name
498 lnk.setFile( filename ); //sets file name 499 lnk.setFile( filename ); //sets file name
499 d->selectedFiles->addToSelection( lnk); 500 d->selectedFiles->addToSelection( lnk);
500 501
501 writeCurrentM3u(); 502 writeCurrentM3u();
502// tabWidget->setCurrentPage(0); 503// tabWidget->setCurrentPage(0);
503 504
504 } 505 }
505} 506}
506 507
507 508
508void PlayListWidget::tabChanged(QWidget *) { 509void PlayListWidget::tabChanged(QWidget *) {
509 510
510 d->tbPlay->setEnabled( true ); 511 d->tbPlay->setEnabled( true );
511 512
512 disconnect( audioView, SIGNAL( itemsSelected(bool) ), 513 disconnect( audioView, SIGNAL( itemsSelected(bool) ),
513 d->tbPlay, SLOT( setEnabled(bool) ) ); 514 d->tbPlay, SLOT( setEnabled(bool) ) );
514 disconnect( videoView, SIGNAL( itemsSelected(bool) ), 515 disconnect( videoView, SIGNAL( itemsSelected(bool) ),
515 d->tbPlay, SLOT( setEnabled(bool) ) ); 516 d->tbPlay, SLOT( setEnabled(bool) ) );
516 517
517 currentFileListView = 0; 518 currentFileListView = 0;
518 519
519 switch ( currentTab() ) { 520 switch ( currentTab() ) {
520 case CurrentPlayList: 521 case CurrentPlayList:
521 { 522 {
522 if( !tbDeletePlaylist->isHidden() ) { 523 if( !tbDeletePlaylist->isHidden() ) {
523 tbDeletePlaylist->hide(); 524 tbDeletePlaylist->hide();
524 } 525 }
525 d->tbRemoveFromList->setEnabled(TRUE); 526 d->tbRemoveFromList->setEnabled(TRUE);
526 d->tbAddToList->setEnabled(FALSE); 527 d->tbAddToList->setEnabled(FALSE);
527 528
528 d->tbPlay->setEnabled( !d->selectedFiles->isEmpty() ); 529 d->tbPlay->setEnabled( !d->selectedFiles->isEmpty() );
529 } 530 }
530 break; 531 break;
531 case AudioFiles: 532 case AudioFiles:
532 { 533 {
533 audioView->populateView(); 534 audioView->populateView();
534 535
535 if( !tbDeletePlaylist->isHidden() ) { 536 if( !tbDeletePlaylist->isHidden() ) {
536 tbDeletePlaylist->hide(); 537 tbDeletePlaylist->hide();
537 } 538 }
538 d->tbRemoveFromList->setEnabled(FALSE); 539 d->tbRemoveFromList->setEnabled(FALSE);
539 d->tbAddToList->setEnabled(TRUE); 540 d->tbAddToList->setEnabled(TRUE);
540 541
541 connect( audioView, SIGNAL( itemsSelected(bool) ), 542 connect( audioView, SIGNAL( itemsSelected(bool) ),
542 d->tbPlay, SLOT( setEnabled(bool) ) ); 543 d->tbPlay, SLOT( setEnabled(bool) ) );
543 544
544 d->tbPlay->setEnabled( audioView->hasSelection() ); 545 d->tbPlay->setEnabled( audioView->hasSelection() );
545 546
546 currentFileListView = audioView; 547 currentFileListView = audioView;
547 } 548 }
548 break; 549 break;
549 case VideoFiles: 550 case VideoFiles:
550 { 551 {
551 videoView->populateView(); 552 videoView->populateView();
552 if( !tbDeletePlaylist->isHidden() ) { 553 if( !tbDeletePlaylist->isHidden() ) {
553 tbDeletePlaylist->hide(); 554 tbDeletePlaylist->hide();
554 } 555 }
555 d->tbRemoveFromList->setEnabled(FALSE); 556 d->tbRemoveFromList->setEnabled(FALSE);
556 d->tbAddToList->setEnabled(TRUE); 557 d->tbAddToList->setEnabled(TRUE);
557 558
558 connect( videoView, SIGNAL( itemsSelected(bool) ), 559 connect( videoView, SIGNAL( itemsSelected(bool) ),
559 d->tbPlay, SLOT( setEnabled(bool) ) ); 560 d->tbPlay, SLOT( setEnabled(bool) ) );
560 561
561 d->tbPlay->setEnabled( videoView->hasSelection() ); 562 d->tbPlay->setEnabled( videoView->hasSelection() );
562 563
563 currentFileListView = videoView; 564 currentFileListView = videoView;
564 } 565 }
565 break; 566 break;
566 case PlayLists: 567 case PlayLists:
567 { 568 {
568 if( tbDeletePlaylist->isHidden() ) { 569 if( tbDeletePlaylist->isHidden() ) {
569 tbDeletePlaylist->show(); 570 tbDeletePlaylist->show();
570 } 571 }
571 playLists->reread(); 572 playLists->reread();
572 d->tbAddToList->setEnabled(FALSE); 573 d->tbAddToList->setEnabled(FALSE);
573 574
574 d->tbPlay->setEnabled( false ); 575 d->tbPlay->setEnabled( false );
575 } 576 }
576 break; 577 break;
577 }; 578 };
578} 579}
579 580
580 581
581void PlayListWidget::btnPlay(bool b) { 582void PlayListWidget::btnPlay(bool b) {
582// mediaPlayerState->setPlaying(false); 583// mediaPlayerState->setPlaying(false);
583 mediaPlayerState->setPlaying(b); 584 mediaPlayerState->setPlaying(b);
584 insanityBool=FALSE; 585 insanityBool=FALSE;
585} 586}
586 587
587void PlayListWidget::deletePlaylist() { 588void PlayListWidget::deletePlaylist() {
588 switch( QMessageBox::information( this, (tr("Remove Playlist?")), 589 switch( QMessageBox::information( this, (tr("Remove Playlist?")),
589 (tr("You really want to delete\nthis playlist?")), 590 (tr("You really want to delete\nthis playlist?")),
590 (tr("Yes")), (tr("No")), 0 )){ 591 (tr("Yes")), (tr("No")), 0 )){
591 case 0: // Yes clicked, 592 case 0: // Yes clicked,
592 QFile().remove(playLists->selectedDocument().file()); 593 QFile().remove(playLists->selectedDocument().file());
593 QFile().remove(playLists->selectedDocument().linkFile()); 594 QFile().remove(playLists->selectedDocument().linkFile());
594 playLists->reread(); 595 playLists->reread();
595 break; 596 break;
596 case 1: // Cancel 597 case 1: // Cancel
597 break; 598 break;
598 }; 599 };
599} 600}
600 601
601 602
602void PlayListWidget::playSelected() { 603void PlayListWidget::playSelected() {
603 btnPlay( TRUE); 604 btnPlay( TRUE);
604} 605}
605 606
606bool PlayListWidget::inFileListMode() const 607bool PlayListWidget::inFileListMode() const
607{ 608{
608 TabType tab = currentTab(); 609 TabType tab = currentTab();
609 return tab == AudioFiles || tab == VideoFiles; 610 return tab == AudioFiles || tab == VideoFiles;
610} 611}
611 612
612void PlayListWidget::openURL() { 613void PlayListWidget::openURL() {
613 // http://66.28.164.33:2080 614 // http://66.28.164.33:2080
614 // http://somafm.com/star0242.m3u 615 // http://somafm.com/star0242.m3u
615 QString filename, name; 616 QString filename, name;
616 InputDialog *fileDlg; 617 InputDialog *fileDlg;
617 fileDlg = new InputDialog(this,tr("Add URL"),TRUE, 0); 618 fileDlg = new InputDialog(this,tr("Add URL"),TRUE, 0);
618 fileDlg->exec(); 619 fileDlg->exec();
619 if( fileDlg->result() == 1 ) { 620 if( fileDlg->result() == 1 ) {
620 filename = fileDlg->text(); 621 filename = fileDlg->text();
621 odebug << "Selected filename is " + filename << oendl; 622 odebug << "Selected filename is " + filename << oendl;
622 // Om3u *m3uList; 623 // Om3u *m3uList;
623 DocLnk lnk; 624 DocLnk lnk;
624 Config cfg( "OpiePlayer" ); 625 Config cfg( "OpiePlayer" );
625 cfg.setGroup("PlayList"); 626 cfg.setGroup("PlayList");
626 627
627 if(filename.left(4) == "http") { 628 if(filename.left(4) == "http") {
628 QString m3uFile, m3uFilePath; 629 QString m3uFile, m3uFilePath;
629 if(filename.find(":",8,TRUE) != -1) { //found a port 630 if(filename.find(":",8,TRUE) != -1) { //found a port
630 m3uFile = filename.left( filename.find( ":",8,TRUE)); 631 m3uFile = filename.left( filename.find( ":",8,TRUE));
631 m3uFile = m3uFile.right( 7); 632 m3uFile = m3uFile.right( 7);
632 } else if(filename.left(4) == "http"){ 633 } else if(filename.left(4) == "http"){
633 m3uFile=filename; 634 m3uFile=filename;
634 m3uFile = m3uFile.right( m3uFile.length() - 7); 635 m3uFile = m3uFile.right( m3uFile.length() - 7);
635 } else{ 636 } else{
636 m3uFile=filename; 637 m3uFile=filename;
637 } 638 }
638 639
639 lnk.setName( filename ); //sets name 640 lnk.setName( filename ); //sets name
640 lnk.setFile( filename ); //sets file name 641 lnk.setFile( filename ); //sets file name
641 642
642// lnk.setIcon("opieplayer2/musicfile"); 643// lnk.setIcon("opieplayer2/musicfile");
643 644
644 d->selectedFiles->addToSelection( lnk ); 645 d->selectedFiles->addToSelection( lnk );
645 writeCurrentM3u(); 646 writeCurrentM3u();
646 d->selectedFiles->setSelectedItem( lnk.name()); 647 d->selectedFiles->setSelectedItem( lnk.name());
647 } 648 }
648 else if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) { 649 else if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) {
649 readListFromFile( filename ); 650 readListFromFile( filename );
650 } else { 651 } else {
651 lnk.setName( QFileInfo(filename).baseName() ); //sets name 652 lnk.setName( QFileInfo(filename).baseName() ); //sets name
652 lnk.setFile( filename ); //sets file name 653 lnk.setFile( filename ); //sets file name
653 d->selectedFiles->addToSelection( lnk); 654 d->selectedFiles->addToSelection( lnk);
654 writeCurrentM3u(); 655 writeCurrentM3u();
655 d->selectedFiles->setSelectedItem( lnk.name()); 656 d->selectedFiles->setSelectedItem( lnk.name());
656 } 657 }
657 } 658 }
658 659
659 660
660 delete fileDlg; 661 delete fileDlg;
661} 662}
662 663
663 664
664void PlayListWidget::openFile() { 665void PlayListWidget::openFile() {
665 666
666 QString filename, name; 667 QString filename, name;
667 668
668 Config cfg( "OpiePlayer" ); 669 Config cfg( "OpiePlayer" );
669 cfg.setGroup("Dialog"); 670 cfg.setGroup("Dialog");
670 MimeTypes types; 671 MimeTypes types;
671 QStringList audio, video, all; 672 QStringList audio, video, all;
672 audio << "audio/*"; 673 audio << "audio/*";
673 audio << "playlist/plain"; 674 audio << "playlist/plain";
674 audio << "audio/x-ogg"; 675 audio << "audio/x-ogg";
675 audio << "audio/x-mpegurl"; 676 audio << "audio/x-mpegurl";
676 677
677 video << "video/*"; 678 video << "video/*";
678 video << "playlist/plain"; 679 video << "playlist/plain";
679 680
680 all += audio; 681 all += audio;
681 all += video; 682 all += video;
682 types.insert("All Media Files", all ); 683 types.insert("All Media Files", all );
683 types.insert("Audio", audio ); 684 types.insert("Audio", audio );
684 types.insert("Video", video ); 685 types.insert("Video", video );
685 686
686 QString str = OFileDialog::getOpenFileName( 1, 687 QString str = OFileDialog::getOpenFileName( 1,
687 cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", 688 cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"",
688 types, 0 ); 689 types, 0 );
689 690
690 if(str.left(2) == "//") { 691 if(str.left(2) == "//") {
691 str=str.right(str.length()-1); 692 str=str.right(str.length()-1);
692 } 693 }
693 cfg.writeEntry( "LastDirectory" ,QFileInfo( str ).dirPath() ); 694 cfg.writeEntry( "LastDirectory" ,QFileInfo( str ).dirPath() );
694 695
695 if( !str.isEmpty() ) { 696 if( !str.isEmpty() ) {
696 697
697 odebug << "Selected filename is " + str << oendl; 698 odebug << "Selected filename is " + str << oendl;
698 filename = str; 699 filename = str;
699 DocLnk lnk; 700 DocLnk lnk;
700 701
701 if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) { 702 if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) {
702 readListFromFile( filename ); 703 readListFromFile( filename );
703 } else { 704 } else {
704 lnk.setName( QFileInfo(filename).baseName() ); //sets name 705 lnk.setName( QFileInfo(filename).baseName() ); //sets name
705 lnk.setFile( filename ); //sets file name 706 lnk.setFile( filename ); //sets file name
706 d->selectedFiles->addToSelection( lnk ); 707 d->selectedFiles->addToSelection( lnk );
707 writeCurrentM3u(); 708 writeCurrentM3u();
708 d->selectedFiles->setSelectedItem( lnk.name() ); 709 d->selectedFiles->setSelectedItem( lnk.name() );
709 } 710 }
710 } 711 }
711} 712}
712 713
713 714
714void PlayListWidget::readListFromFile( const QString &filename ) { 715void PlayListWidget::readListFromFile( const QString &filename ) {
715 odebug << "read list filename " + filename << oendl; 716 odebug << "read list filename " + filename << oendl;
716 QFileInfo fi(filename); 717 QFileInfo fi(filename);
717 Om3u *m3uList; 718 Om3u *m3uList;
718 QString s, name; 719 QString s, name;
719 m3uList = new Om3u( filename, IO_ReadOnly ); 720 m3uList = new Om3u( filename, IO_ReadOnly );
720 if(fi.extension(false).find("m3u",0,false) != -1 ) 721 if(fi.extension(false).find("m3u",0,false) != -1 )
721 m3uList->readM3u(); 722 m3uList->readM3u();
722 else if(fi.extension(false).find("pls",0,false) != -1 ) 723 else if(fi.extension(false).find("pls",0,false) != -1 )
723 m3uList->readPls(); 724 m3uList->readPls();
724 725
725 DocLnk lnk; 726 DocLnk lnk;
726 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { 727 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
727 s = *it; 728 s = *it;
728 // odebug << s << oendl; 729 // odebug << s << oendl;
729 if(s.left(4)=="http") { 730 if(s.left(4)=="http") {
730 lnk.setName( s ); //sets file name 731 lnk.setName( s ); //sets file name
731 lnk.setIcon("opieplayer2/musicfile"); 732 lnk.setIcon("opieplayer2/musicfile");
732 lnk.setFile( s ); //sets file name 733 lnk.setFile( s ); //sets file name
733 734
734 } else { //is file 735 } else { //is file
735 lnk.setName( QFileInfo(s).baseName()); 736 lnk.setName( QFileInfo(s).baseName());
736 if(s.left(1) != "/") { 737 if(s.left(1) != "/") {
737 738
738 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s); 739 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s);
739 } else { 740 } else {
740 lnk.setFile( s); 741 lnk.setFile( s);
741 } 742 }
742 } 743 }
743 d->selectedFiles->addToSelection( lnk ); 744 d->selectedFiles->addToSelection( lnk );
744 } 745 }
745 Config config( "OpiePlayer" ); 746 Config config( "OpiePlayer" );
746 config.setGroup( "PlayList" ); 747 config.setGroup( "PlayList" );
747 748
748 config.writeEntry("CurrentPlaylist",filename); 749 config.writeEntry("CurrentPlaylist",filename);
749 config.write(); 750 config.write();
750 currentPlayList=filename; 751 currentPlayList=filename;
751 752
752 m3uList->close(); 753 m3uList->close();
753 delete m3uList; 754 delete m3uList;
754 755
755 d->selectedFiles->setSelectedItem( s); 756 d->selectedFiles->setSelectedItem( s);
756 setCaption(tr("OpiePlayer: ")+ QFileInfo(filename).baseName()); 757 setCaption(tr("OpiePlayer: ")+ QFileInfo(filename).baseName());
757 758
758} 759}
759 760
760// writes current playlist to current m3u file */ 761// writes current playlist to current m3u file */
761 void PlayListWidget::writeCurrentM3u() { 762 void PlayListWidget::writeCurrentM3u() {
762 odebug << "writing to current m3u" << oendl; 763 odebug << "writing to current m3u" << oendl;
763 Config cfg( "OpiePlayer" ); 764 Config cfg( "OpiePlayer" );
764 cfg.setGroup("PlayList"); 765 cfg.setGroup("PlayList");
765 QString currentPlaylist = cfg.readEntry("CurrentPlaylist","default"); 766 QString currentPlaylist = cfg.readEntry("CurrentPlaylist","default");
766 767
767 Om3u *m3uList; 768 Om3u *m3uList;
768 m3uList = new Om3u( currentPlaylist, IO_ReadWrite | IO_Truncate ); 769 m3uList = new Om3u( currentPlaylist, IO_ReadWrite | IO_Truncate );
769 if( d->selectedFiles->first()) { 770 if( d->selectedFiles->first()) {
770 771
771 do { 772 do {
772 // odebug << "add writeCurrentM3u " +d->selectedFiles->current()->file() << oendl; 773 // odebug << "add writeCurrentM3u " +d->selectedFiles->current()->file() << oendl;
773 m3uList->add( d->selectedFiles->current()->file() ); 774 m3uList->add( d->selectedFiles->current()->file() );
774 } 775 }
775 while ( d->selectedFiles->next() ); 776 while ( d->selectedFiles->next() );
776 // odebug << "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" << oendl; 777 // odebug << "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" << oendl;
777 m3uList->write(); 778 m3uList->write();
778 m3uList->close(); 779 m3uList->close();
779 } 780 }
780 delete m3uList; 781 delete m3uList;
781 782
782 } 783 }
783 784
784 /* 785 /*
785 writes current playlist to m3u file */ 786 writes current playlist to m3u file */
786void PlayListWidget::writem3u() { 787void PlayListWidget::writem3u() {
787 //InputDilog *fileDlg; 788 //InputDilog *fileDlg;
788 //fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); 789 //fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0);
789 //fileDlg->exec(); 790 //fileDlg->exec();
790 791
791 Config cfg( "OpiePlayer" ); 792 Config cfg( "OpiePlayer" );
792 cfg.setGroup("Dialog"); 793 cfg.setGroup("Dialog");
793 MimeTypes types; 794 MimeTypes types;
794 QStringList audio, video, all; 795 QStringList audio, video, all;
795 audio << "audio/*"; 796 audio << "audio/*";
796 audio << "playlist/plain"; 797 audio << "playlist/plain";
797 audio << "audio/x-mpegurl"; 798 audio << "audio/x-mpegurl";
798 799
799 video << "video/*"; 800 video << "video/*";
800 video << "playlist/plain"; 801 video << "playlist/plain";
801 802
802 all += audio; 803 all += audio;
803 all += video; 804 all += video;
804 types.insert("All Media Files", all ); 805 types.insert("All Media Files", all );
805 types.insert("Audio", audio ); 806 types.insert("Audio", audio );
806 types.insert("Video", video ); 807 types.insert("Video", video );
807 808
808 QString str = OFileDialog::getOpenFileName( 1, 809 QString str = OFileDialog::getOpenFileName( 1,
809 cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", 810 cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"",
810 types, 0 ); 811 types, 0 );
811 if(str.left(2) == "//") str=str.right(str.length()-1); 812 if(str.left(2) == "//") str=str.right(str.length()-1);
812 cfg.writeEntry("LastDirectory" ,QFileInfo(str).dirPath()); 813 cfg.writeEntry("LastDirectory" ,QFileInfo(str).dirPath());
813 814
814 815
815 QString name, filename, list; 816 QString name, filename, list;
816 Om3u *m3uList; 817 Om3u *m3uList;
817 818
818 if( !str.isEmpty() ) { 819 if( !str.isEmpty() ) {
819 name = str; 820 name = str;
820 // name = fileDlg->text(); 821 // name = fileDlg->text();
821// odebug << filename << oendl; 822// odebug << filename << oendl;
822 if( name.find("/",0,true) != -1) {// assume they specify a file path 823 if( name.find("/",0,true) != -1) {// assume they specify a file path
823 filename = name; 824 filename = name;
824 name = name.right(name.length()- name.findRev("/",-1,true) - 1 ); 825 name = name.right(name.length()- name.findRev("/",-1,true) - 1 );
825 } 826 }
826 else //otherwise dump it somewhere noticable 827 else //otherwise dump it somewhere noticable
827 filename = QPEApplication::documentDir() + "/" + name; 828 filename = QPEApplication::documentDir() + "/" + name;
828 829
829 if( filename.right( 3 ) != "m3u" ) //needs filename extension 830 if( filename.right( 3 ) != "m3u" ) //needs filename extension
830 filename += ".m3u"; 831 filename += ".m3u";
831 832
832 if( d->selectedFiles->first()) { //ramble through playlist view 833 if( d->selectedFiles->first()) { //ramble through playlist view
833 m3uList = new Om3u( filename, IO_ReadWrite | IO_Truncate); 834 m3uList = new Om3u( filename, IO_ReadWrite | IO_Truncate);
834 835
835 do { 836 do {
836 m3uList->add( d->selectedFiles->current()->file()); 837 m3uList->add( d->selectedFiles->current()->file());
837 } 838 }
838 while ( d->selectedFiles->next() ); 839 while ( d->selectedFiles->next() );
839 // odebug << list << oendl; 840 // odebug << list << oendl;
840 m3uList->write(); 841 m3uList->write();
841 m3uList->close(); 842 m3uList->close();
842 delete m3uList; 843 delete m3uList;
843 844
844 //delete fileDlg; 845 //delete fileDlg;
845 846
846 DocLnk lnk; 847 DocLnk lnk;
847 lnk.setFile( filename); 848 lnk.setFile( filename);
848 lnk.setIcon("opieplayer2/playlist2"); 849 lnk.setIcon("opieplayer2/playlist2");
849 lnk.setName( name); //sets file name 850 lnk.setName( name); //sets file name
850 851
851 // odebug << filename << oendl; 852 // odebug << filename << oendl;
852 Config config( "OpiePlayer" ); 853 Config config( "OpiePlayer" );
853 config.setGroup( "PlayList" ); 854 config.setGroup( "PlayList" );
854 855
855 config.writeEntry("CurrentPlaylist",filename); 856 config.writeEntry("CurrentPlaylist",filename);
856 currentPlayList=filename; 857 currentPlayList=filename;
857 858
858 if(!lnk.writeLink()) { 859 if(!lnk.writeLink()) {
859 odebug << "Writing doclink did not work" << oendl; 860 odebug << "Writing doclink did not work" << oendl;
860 } 861 }
861 862
862 setCaption(tr("OpiePlayer: ") + name); 863 setCaption(tr("OpiePlayer: ") + name);
863 } 864 }
864 } 865 }
865} 866}
866 867
867void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { 868void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) {
868 switch ( e->key() ) { 869 switch ( e->key() ) {
869 ////////////////////////////// Zaurus keys 870 ////////////////////////////// Zaurus keys
870 case Key_F9: //activity 871 case Key_F9: //activity
871 // if(audioUI->isHidden()) 872 // if(audioUI->isHidden())
872 // audioUI->showMaximized(); 873 // audioUI->showMaximized();
873 break; 874 break;
874 case Key_F10: //contacts 875 case Key_F10: //contacts
875 // if( videoUI->isHidden()) 876 // if( videoUI->isHidden())
876 // videoUI->showMaximized(); 877 // videoUI->showMaximized();
877 break; 878 break;
878 case Key_F11: //menu 879 case Key_F11: //menu
879 break; 880 break;
880 case Key_F12: //home 881 case Key_F12: //home
881 // doBlank(); 882 // doBlank();
882 break; 883 break;
883 case Key_F13: //mail 884 case Key_F13: //mail
884 // doUnblank(); 885 // doUnblank();
885 break; 886 break;
886 case Key_Q: //add to playlist 887 case Key_Q: //add to playlist
887 addSelected(); 888 addSelected();
888 break; 889 break;
889 case Key_R: //remove from playlist 890 case Key_R: //remove from playlist
890 removeSelected(); 891 removeSelected();
891 break; 892 break;
892 // case Key_P: //play 893 // case Key_P: //play
893 // odebug << "Play" << oendl; 894 // odebug << "Play" << oendl;
894 // playSelected(); 895 // playSelected();
895 // break; 896 // break;
896 case Key_Space: 897 case Key_Space:
897 // playSelected(); puh 898 // playSelected(); puh
898 break; 899 break;
899 case Key_1: 900 case Key_1:
900 tabWidget->setCurrentPage( 0 ); 901 tabWidget->setCurrentPage( 0 );
901 break; 902 break;
902 case Key_2: 903 case Key_2:
903 tabWidget->setCurrentPage( 1 ); 904 tabWidget->setCurrentPage( 1 );
904 break; 905 break;
905 case Key_3: 906 case Key_3:
906 tabWidget->setCurrentPage( 2 ); 907 tabWidget->setCurrentPage( 2 );
907 break; 908 break;
908 case Key_4: 909 case Key_4:
909 tabWidget->setCurrentPage( 3 ); 910 tabWidget->setCurrentPage( 3 );
910 break; 911 break;
911 case Key_Down: 912 case Key_Down:
912 if ( !d->selectedFiles->next() ) 913 if ( !d->selectedFiles->next() )
913 d->selectedFiles->first(); 914 d->selectedFiles->first();
914 break; 915 break;
915 case Key_Up: 916 case Key_Up:
916 if ( !d->selectedFiles->prev() ) 917 if ( !d->selectedFiles->prev() )
917 // d->selectedFiles->last(); 918 // d->selectedFiles->last();
918 break; 919 break;
919 } 920 }
920} 921}
921 922
922void PlayListWidget::pmViewActivated(int index) { 923void PlayListWidget::pmViewActivated(int index) {
923// odebug << "" << index << "" << oendl; 924// odebug << "" << index << "" << oendl;
924 switch(index) { 925 switch(index) {
925 case -16: 926 case -16:
926 { 927 {
927 mediaPlayerState->toggleFullscreen(); 928 mediaPlayerState->toggleFullscreen();
928 bool b=mediaPlayerState->isFullscreen(); 929 bool b=mediaPlayerState->isFullscreen();
929 pmView->setItemChecked( index, b); 930 pmView->setItemChecked( index, b);
930 Config cfg( "OpiePlayer" ); 931 Config cfg( "OpiePlayer" );
931 cfg.writeEntry( "FullScreen", b ); 932 cfg.writeEntry( "FullScreen", b );
932 } 933 }
933 break; 934 break;
934 }; 935 };
935} 936}
936 937
937void PlayListWidget::populateSkinsMenu() { 938void PlayListWidget::populateSkinsMenu() {
938 int item = 0; 939 int item = 0;
939 defaultSkinIndex = 0; 940 defaultSkinIndex = 0;
940 QString skinName; 941 QString skinName;
941 Config cfg( "OpiePlayer" ); 942 Config cfg( "OpiePlayer" );
942 cfg.setGroup("Options" ); 943 cfg.setGroup("Options" );
943 QString skin = cfg.readEntry( "Skin", "default" ); 944 QString skin = cfg.readEntry( "Skin", "default" );
944 945
945 QDir skinsDir( QPEApplication::qpeDir() + "/pics/opieplayer2/skins" ); 946 QDir skinsDir( QPEApplication::qpeDir() + "/pics/opieplayer2/skins" );
946 skinsDir.setFilter( QDir::Dirs ); 947 skinsDir.setFilter( QDir::Dirs );
947 skinsDir.setSorting(QDir::Name ); 948 skinsDir.setSorting(QDir::Name );
948 const QFileInfoList *skinslist = skinsDir.entryInfoList(); 949 const QFileInfoList *skinslist = skinsDir.entryInfoList();
949 QFileInfoListIterator it( *skinslist ); 950 QFileInfoListIterator it( *skinslist );
950 QFileInfo *fi; 951 QFileInfo *fi;
951 while ( ( fi = it.current() ) ) { 952 while ( ( fi = it.current() ) ) {
952 skinName = fi->fileName(); 953 skinName = fi->fileName();
953// odebug << fi->fileName() << oendl; 954// odebug << fi->fileName() << oendl;
954 if( skinName != "." && skinName != ".." && skinName !="CVS" ) { 955 if( skinName != "." && skinName != ".." && skinName !="CVS" ) {
955 item = skinsMenu->insertItem( fi->fileName() ) ; 956 item = skinsMenu->insertItem( fi->fileName() ) ;
956 } 957 }
957 if( skinName == "default" ) { 958 if( skinName == "default" ) {
958 defaultSkinIndex = item; 959 defaultSkinIndex = item;
959 } 960 }
960 if( skinName == skin ) { 961 if( skinName == skin ) {
961 skinsMenu->setItemChecked( item, TRUE ); 962 skinsMenu->setItemChecked( item, TRUE );
962 } 963 }
963 ++it; 964 ++it;
964 } 965 }
965} 966}
966 967
967void PlayListWidget::skinsMenuActivated( int item ) { 968void PlayListWidget::skinsMenuActivated( int item ) {
968 for(unsigned int i = defaultSkinIndex; i > defaultSkinIndex - skinsMenu->count(); i-- ) { 969 for(unsigned int i = defaultSkinIndex; i > defaultSkinIndex - skinsMenu->count(); i-- ) {
969 skinsMenu->setItemChecked( i, FALSE ); 970 skinsMenu->setItemChecked( i, FALSE );
970 } 971 }
971 skinsMenu->setItemChecked( item, TRUE ); 972 skinsMenu->setItemChecked( item, TRUE );
972 973
973 { 974 {
974 Config cfg( "OpiePlayer" ); 975 Config cfg( "OpiePlayer" );
975 cfg.setGroup("Options"); 976 cfg.setGroup("Options");
976 cfg.writeEntry("Skin", skinsMenu->text( item ) ); 977 cfg.writeEntry("Skin", skinsMenu->text( item ) );
977 } 978 }
978 979
979 emit skinSelected(); 980 emit skinSelected();
980} 981}
981 982
982PlayListWidget::TabType PlayListWidget::currentTab() const 983PlayListWidget::TabType PlayListWidget::currentTab() const
983{ 984{
984 static const TabType indexToTabType[ TabTypeCount ] = 985 static const TabType indexToTabType[ TabTypeCount ] =
985 { CurrentPlayList, AudioFiles, VideoFiles, PlayLists }; 986 { CurrentPlayList, AudioFiles, VideoFiles, PlayLists };
986 987
987 int index = tabWidget->currentPageIndex(); 988 int index = tabWidget->currentPageIndex();
988 assert( index < TabTypeCount && index >= 0 ); 989 assert( index < TabTypeCount && index >= 0 );
989 990
990 return indexToTabType[ index ]; 991 return indexToTabType[ index ];
991} 992}
992 993
993PlayListWidget::Entry PlayListWidget::currentEntry() const 994PlayListWidget::Entry PlayListWidget::currentEntry() const
994{ 995{
995 if ( currentTab() == CurrentPlayList ) { 996 if ( currentTab() == CurrentPlayList ) {
996 const DocLnk *lnk = current(); 997 const DocLnk *lnk = current();
997 return Entry( lnk->name(), lnk->file() ); 998 return Entry( lnk->name(), lnk->file() );
998 } 999 }
999 1000
1000 return Entry( currentFileListPathName() ); 1001 return Entry( currentFileListPathName() );
1001} 1002}
1002 1003
1003QString PlayListWidget::currentFileListPathName() const { 1004QString PlayListWidget::currentFileListPathName() const {
1004 return currentFileListView->currentItem()->text( 3 ); 1005 return currentFileListView->currentItem()->text( 3 );
1005} 1006}
1006 1007
1007 1008
1008void PlayListWidget::qcopReceive(const QCString &msg, const QByteArray &data) { 1009void PlayListWidget::qcopReceive(const QCString &msg, const QByteArray &data) {
1009 odebug << "qcop message "+msg << oendl; 1010 odebug << "qcop message "+msg << oendl;
1010 QDataStream stream ( data, IO_ReadOnly ); 1011 QDataStream stream ( data, IO_ReadOnly );
1011 if ( msg == "play()" ) { //plays current selection 1012 if ( msg == "play()" ) { //plays current selection
1012 btnPlay( true); 1013 btnPlay( true);
1013 } else if ( msg == "stop()" ) { 1014 } else if ( msg == "stop()" ) {
1014 mediaPlayerState->setPlaying( false); 1015 mediaPlayerState->setPlaying( false);
1015 } else if ( msg == "togglePause()" ) { 1016 } else if ( msg == "togglePause()" ) {
1016 mediaPlayerState->togglePaused(); 1017 mediaPlayerState->togglePaused();
1017 } else if ( msg == "next()" ) { //select next in list 1018 } else if ( msg == "next()" ) { //select next in list
1018 mediaPlayerState->setNext(); 1019 mediaPlayerState->setNext();
1019 } else if ( msg == "prev()" ) { //select previous in list 1020 } else if ( msg == "prev()" ) { //select previous in list
1020 mediaPlayerState->setPrev(); 1021 mediaPlayerState->setPrev();
1021 } else if ( msg == "toggleLooping()" ) { //loop or not loop 1022 } else if ( msg == "toggleLooping()" ) { //loop or not loop
1022 mediaPlayerState->toggleLooping(); 1023 mediaPlayerState->toggleLooping();
1023 } else if ( msg == "toggleShuffled()" ) { //shuffled or not shuffled 1024 } else if ( msg == "toggleShuffled()" ) { //shuffled or not shuffled
1024 mediaPlayerState->toggleShuffled(); 1025 mediaPlayerState->toggleShuffled();
1025 } else if ( msg == "volUp()" ) { //volume more 1026 } else if ( msg == "volUp()" ) { //volume more
1026// emit moreClicked(); 1027// emit moreClicked();
1027// emit moreReleased(); 1028// emit moreReleased();
1028 } else if ( msg == "volDown()" ) { //volume less 1029 } else if ( msg == "volDown()" ) { //volume less
1029// emit lessClicked(); 1030// emit lessClicked();
1030// emit lessReleased(); 1031// emit lessReleased();
1031 } else if ( msg == "play(QString)" ) { //play this now 1032 } else if ( msg == "play(QString)" ) { //play this now
1032 QString file; 1033 QString file;
1033 stream >> file; 1034 stream >> file;
1034 setDocument( (const QString &) file); 1035 setDocument( (const QString &) file);
1035 } else if ( msg == "add(QString)" ) { //add to playlist 1036 } else if ( msg == "add(QString)" ) { //add to playlist
1036 QString file; 1037 QString file;
1037 stream >> file; 1038 stream >> file;
1038 QFileInfo fileInfo(file); 1039 QFileInfo fileInfo(file);
1039 DocLnk lnk; 1040 DocLnk lnk;
1040 lnk.setName( fileInfo.baseName() ); //sets name 1041 lnk.setName( fileInfo.baseName() ); //sets name
1041 lnk.setFile( file ); //sets file name 1042 lnk.setFile( file ); //sets file name
1042 addToSelection( lnk ); 1043 addToSelection( lnk );
1043 } else if ( msg == "rem(QString)" ) { //remove from playlist 1044 } else if ( msg == "rem(QString)" ) { //remove from playlist
1044 QString file; 1045 QString file;
1045 stream >> file; 1046 stream >> file;
1046 1047
1047 } 1048 }
1048 1049
1049} 1050}
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp
index e1816c8..c47a773 100644
--- a/noncore/multimedia/opieplayer2/xinecontrol.cpp
+++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp
@@ -1,274 +1,282 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; General Public License for more 22..}^=.=       =       ; General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = General Public License along with 26  -_. . .   )=.  = General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include "xinecontrol.h" 34#include "xinecontrol.h"
35#include "xinevideowidget.h" 35#include "xinevideowidget.h"
36 36
37/* OPIE */ 37/* OPIE */
38#include <opie2/odebug.h> 38#include <opie2/odebug.h>
39#include <qpe/qcopenvelope_qws.h> 39#include <qpe/qcopenvelope_qws.h>
40#include <qpe/qpeapplication.h> 40#include <qpe/qpeapplication.h>
41using namespace Opie::Core; 41using namespace Opie::Core;
42 42
43/* QT */ 43/* QT */
44#include <qtimer.h> 44#include <qtimer.h>
45#include <qmessagebox.h> 45#include <qmessagebox.h>
46 46
47XineControl::XineControl( XineVideoWidget *xineWidget,
48 MediaPlayerState &_mediaPlayerState,
49 QObject *parent, const char *name )
50 : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget )
51{
52 libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget );
53
54 init();
55}
56
57XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, 47XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget,
58 MediaPlayerState &_mediaPlayerState, 48 MediaPlayerState &_mediaPlayerState,
59 QObject *parent, const char *name ) 49 QObject *parent, const char *name )
60 : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) 50 : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget )
61{ 51{
52 m_wasError = false;
53
62 xine->ensureInitialized(); 54 xine->ensureInitialized();
63 55
64 xine->setWidget( xineWidget ); 56 xine->setWidget( xineWidget );
65 57
66 init(); 58 init();
67} 59}
68 60
69void XineControl::init() 61void XineControl::init()
70{ 62{
71 connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) ); 63 connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) );
72 connect( this, SIGNAL( positionChanged(long) ), &mediaPlayerState, SLOT( updatePosition(long) ) ); 64 connect( this, SIGNAL( positionChanged(long) ), &mediaPlayerState, SLOT( updatePosition(long) ) );
73 connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( stop(bool) ) ); 65 connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( stop(bool) ) );
74 connect( &mediaPlayerState, SIGNAL( fullscreenToggled(bool) ), this, SLOT( setFullscreen(bool) ) ); 66 connect( &mediaPlayerState, SIGNAL( fullscreenToggled(bool) ), this, SLOT( setFullscreen(bool) ) );
75 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ), this, SLOT( seekTo(long) ) ); 67 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ), this, SLOT( seekTo(long) ) );
76 connect( &mediaPlayerState, SIGNAL( videoGammaChanged(int) ), this, SLOT( setGamma(int) ) ); 68 connect( &mediaPlayerState, SIGNAL( videoGammaChanged(int) ), this, SLOT( setGamma(int) ) );
77 connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) ); 69 connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) );
78 connect( xineVideoWidget, SIGNAL( videoResized(const QSize&) ), this, SLOT( videoResized(const QSize&) ) ); 70 connect( xineVideoWidget, SIGNAL( videoResized(const QSize&) ), this, SLOT( videoResized(const QSize&) ) );
79 71
80 disabledSuspendScreenSaver = FALSE; 72 disabledSuspendScreenSaver = FALSE;
81} 73}
82 74
83XineControl::~XineControl() { 75XineControl::~XineControl() {
84#if !defined(QT_NO_COP) 76#if !defined(QT_NO_COP)
85 if ( disabledSuspendScreenSaver ) { 77 if ( disabledSuspendScreenSaver ) {
86 disabledSuspendScreenSaver = FALSE; 78 disabledSuspendScreenSaver = FALSE;
87 // Re-enable the suspend mode 79 // Re-enable the suspend mode
88 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 80 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
89 } 81 }
90#endif 82#endif
91 delete libXine; 83 delete libXine;
92} 84}
93 85
94void XineControl::play( const QString& fileName ) { 86void XineControl::play( const QString& fileName ) {
95 87
96 hasVideoChannel = FALSE; 88 hasVideoChannel = FALSE;
97 hasAudioChannel = FALSE; 89 hasAudioChannel = FALSE;
98 m_fileName = fileName; 90 m_fileName = fileName;
91 m_wasError = false;
99 92
100 odebug << "<<FILENAME: " + fileName + ">>>>" << oendl;
101 93
94 /*
95 * If Playing Fails we will fire up an MessgaeBox
96 * but present the AudioWidget so the User can
97 * either Quit and change the Playlist or Continue
98 */
102 if ( !libXine->play( fileName, 0, 0 ) ) { 99 if ( !libXine->play( fileName, 0, 0 ) ) {
103 QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); 100 QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() );
104 // toggle stop so the the play button is reset 101 m_wasError = true;
105 mediaPlayerState.setPlaying( false );
106 return;
107 } 102 }
108 mediaPlayerState.setPlaying( true ); 103 mediaPlayerState.setPlaying( true );
109 104
110 MediaPlayerState::DisplayType displayType; 105 MediaPlayerState::DisplayType displayType;
111 if ( !libXine->hasVideo() ) { 106 if ( !libXine->hasVideo() ) {
112 displayType = MediaPlayerState::Audio; 107 displayType = MediaPlayerState::Audio;
113 libXine->setShowVideo( false ); 108 libXine->setShowVideo( false );
114 hasAudioChannel = TRUE; 109 hasAudioChannel = TRUE;
115 } else { 110 } else {
116 displayType = MediaPlayerState::Video; 111 displayType = MediaPlayerState::Video;
117 libXine->setShowVideo( true ); 112 libXine->setShowVideo( true );
118 hasVideoChannel = TRUE; 113 hasVideoChannel = TRUE;
119 } 114 }
120 // determine if slider is shown 115 // determine if slider is shown
121 mediaPlayerState.setIsSeekable( libXine->isSeekable() ); 116 mediaPlayerState.setIsSeekable( libXine->isSeekable() );
122 117
123 // which gui (video / audio) 118 // which gui (video / audio)
124 mediaPlayerState.setDisplayType( displayType ); 119 mediaPlayerState.setDisplayType( displayType );
125 120
126#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 121#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
127 if ( !disabledSuspendScreenSaver ) { 122 if ( !disabledSuspendScreenSaver ) {
128 disabledSuspendScreenSaver = TRUE; 123 disabledSuspendScreenSaver = TRUE;
129 // Stop the screen from blanking and power saving state 124 // Stop the screen from blanking and power saving state
130 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) 125 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" )
131 << ( displayType == MediaPlayerState::Video ? QPEApplication::Disable : QPEApplication::DisableSuspend ); 126 << ( displayType == MediaPlayerState::Video ? QPEApplication::Disable : QPEApplication::DisableSuspend );
132 } 127 }
133#endif 128#endif
134 129
135 length(); 130 length();
136 position(); 131 position();
137} 132}
138 133
139void XineControl::nextMedia() { 134void XineControl::nextMedia() {
140 mediaPlayerState.setNext(); 135 mediaPlayerState.setNext();
141} 136}
142 137
143void XineControl::setGamma( int value ) { 138void XineControl::setGamma( int value ) {
144 libXine->setGamma( value ); 139 libXine->setGamma( value );
145} 140}
146 141
147void XineControl::stop( bool isSet ) { 142void XineControl::stop( bool isSet ) {
148 if ( !isSet ) { 143 if ( !isSet ) {
149 libXine->stop(); 144 libXine->stop();
150 145
151#if !defined(QT_NO_COP) 146#if !defined(QT_NO_COP)
152 if ( disabledSuspendScreenSaver ) { 147 if ( disabledSuspendScreenSaver ) {
153 disabledSuspendScreenSaver = FALSE; 148 disabledSuspendScreenSaver = FALSE;
154 // Re-enable the suspend mode 149 // Re-enable the suspend mode
155 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 150 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
156 } 151 }
157#endif 152#endif
158 } 153 }
159} 154}
160 155
161/** 156/**
162 * Pause playback 157 * Pause playback
163 * @isSet 158 * @isSet
164 */ 159 */
165void XineControl::pause( bool isSet) { 160void XineControl::pause( bool isSet) {
166 libXine->pause( isSet ); 161 libXine->pause( isSet );
167} 162}
168 163
169 164
170/** 165/**
171 * get current time in playback 166 * get current time in playback
172 */ 167 */
173long XineControl::currentTime() { 168long XineControl::currentTime() {
174 // todo: jede sekunde überprüfen 169 // todo: jede sekunde überprüfen
175 m_currentTime = libXine->currentTime(); 170 m_currentTime = libXine->currentTime();
176 return m_currentTime; 171 return m_currentTime;
177} 172}
178 173
179/** 174/**
180 * Set the length of the media file 175 * Set the length of the media file
181 */ 176 */
182void XineControl::length() { 177void XineControl::length() {
183 m_length = libXine->length(); 178 m_length = libXine->length();
184 mediaPlayerState.setLength( m_length ); 179 mediaPlayerState.setLength( m_length );
185} 180}
186 181
187 182
188/** 183/**
189 * Reports the position the xine backend is at right now 184 * Reports the position the xine backend is at right now
190 * @return long the postion in seconds 185 * @return long the postion in seconds
191 */ 186 */
192long XineControl::position() { 187long XineControl::position() {
193 m_position = ( currentTime() ); 188 m_position = ( currentTime() );
194 mediaPlayerState.updatePosition( m_position ); 189 mediaPlayerState.updatePosition( m_position );
195 long emitPos = (long)m_position; 190 long emitPos = (long)m_position;
196 emit positionChanged( emitPos ); 191 emit positionChanged( emitPos );
197 if( mediaPlayerState.isPlaying() ) { 192 if( mediaPlayerState.isPlaying() ) {
198 // needs to be stopped the media is stopped 193 // needs to be stopped the media is stopped
199 QTimer::singleShot( 1000, this, SLOT( position() ) ); 194 QTimer::singleShot( 1000, this, SLOT( position() ) );
200 } 195 }
201 return m_position; 196 return m_position;
202} 197}
203 198
204/** 199/**
205 * Set videoplayback to fullscreen 200 * Set videoplayback to fullscreen
206 * @param isSet 201 * @param isSet
207 */ 202 */
208void XineControl::setFullscreen( bool isSet ) { 203void XineControl::setFullscreen( bool isSet ) {
209 libXine->showVideoFullScreen( isSet ); 204 libXine->showVideoFullScreen( isSet );
210} 205}
211 206
212 207
213QString XineControl::getMetaInfo() { 208QString XineControl::getMetaInfo() {
214 209
215 QString returnString; 210 QString returnString;
216 211
212 /*
213 * If there was an error let us
214 * change the Meta Info to contain the Error Message
215 */
216 if ( m_wasError ) {
217 returnString = tr("Error on file '%1' with reason: ",
218 "Error when playing a file" ).arg( m_fileName );
219 returnString += getErrorCode();
220 returnString.replace( QRegExp("<qt>", false), "" );
221 returnString.replace( QRegExp("</qt>", false), "" );
222 return returnString;
223 }
224
217 if ( !libXine->metaInfo( 0 ).isEmpty() ) { 225 if ( !libXine->metaInfo( 0 ).isEmpty() ) {
218 returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); 226 returnString += tr( " Title: " + libXine->metaInfo( 0 ) );
219 } 227 }
220 228
221 if ( !libXine->metaInfo( 1 ).isEmpty() ) { 229 if ( !libXine->metaInfo( 1 ).isEmpty() ) {
222 returnString += tr( " Comment: " + libXine->metaInfo( 1 ) ); 230 returnString += tr( " Comment: " + libXine->metaInfo( 1 ) );
223 } 231 }
224 232
225 if ( !libXine->metaInfo( 2 ).isEmpty() ) { 233 if ( !libXine->metaInfo( 2 ).isEmpty() ) {
226 returnString += tr( " Artist: " + libXine->metaInfo( 2 ) ); 234 returnString += tr( " Artist: " + libXine->metaInfo( 2 ) );
227 } 235 }
228 236
229 if ( !libXine->metaInfo( 3 ).isEmpty() ) { 237 if ( !libXine->metaInfo( 3 ).isEmpty() ) {
230 returnString += tr( " Genre: " + libXine->metaInfo( 3 ) ); 238 returnString += tr( " Genre: " + libXine->metaInfo( 3 ) );
231 } 239 }
232 240
233 if ( !libXine->metaInfo( 4 ).isEmpty() ) { 241 if ( !libXine->metaInfo( 4 ).isEmpty() ) {
234 returnString += tr( " Album: " + libXine->metaInfo( 4 ) ); 242 returnString += tr( " Album: " + libXine->metaInfo( 4 ) );
235 } 243 }
236 244
237 if ( !libXine->metaInfo( 5 ).isEmpty() ) { 245 if ( !libXine->metaInfo( 5 ).isEmpty() ) {
238 returnString += tr( " Year: " + libXine->metaInfo( 5 ) ); 246 returnString += tr( " Year: " + libXine->metaInfo( 5 ) );
239 } 247 }
240 return returnString; 248 return returnString;
241} 249}
242 250
243QString XineControl::getErrorCode() { 251QString XineControl::getErrorCode() {
244 252
245 int errorCode = libXine->error(); 253 int errorCode = libXine->error();
246 254
247 odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl; 255 odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl;
248 256
249 if ( errorCode == 1 ) { 257 if ( errorCode == 1 ) {
250 return tr( "No input plugin found for this media type" ); 258 return tr( "<qt>No input plugin found for this media type</qt>" );
251 } else if ( errorCode == 2 ) { 259 } else if ( errorCode == 2 ) {
252 return tr( "No demux plugin found for this media type" ); 260 return tr( "<qt>No demux plugin found for this media type</qt>" );
253 } else if ( errorCode == 3 ) { 261 } else if ( errorCode == 3 ) {
254 return tr( "Demuxing failed for this media type" ); 262 return tr( "<qt>Demuxing failed for this media type</qt>" );
255 } else if ( errorCode == 4 ) { 263 } else if ( errorCode == 4 ) {
256 return tr( "Malformed MRL" ); 264 return tr( "<qt>Malformed MRL</qt>" );
257 } else if ( errorCode == 5 ) { 265 } else if ( errorCode == 5 ) {
258 return tr( "Input failed" ); 266 return tr( "<qt>Input failed</qt>" );
259 } else { 267 } else {
260 return tr( "Some other error" ); 268 return tr( "<qt>Some other error</qt>" );
261 } 269 }
262} 270}
263 271
264/** 272/**
265 * Seek to a position in the track 273 * Seek to a position in the track
266 * @param second the second to jump to 274 * @param second the second to jump to
267 */ 275 */
268void XineControl::seekTo( long second ) { 276void XineControl::seekTo( long second ) {
269 libXine->seekTo( (int)second ); 277 libXine->seekTo( (int)second );
270} 278}
271 279
272void XineControl::videoResized ( const QSize &s ) { 280void XineControl::videoResized ( const QSize &s ) {
273 libXine->resize( s ); 281 libXine->resize( s );
274} 282}
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.h b/noncore/multimedia/opieplayer2/xinecontrol.h
index 3f44f2e..848bd05 100644
--- a/noncore/multimedia/opieplayer2/xinecontrol.h
+++ b/noncore/multimedia/opieplayer2/xinecontrol.h
@@ -1,126 +1,124 @@
1/* 1/*
2                This file is part of the Opie Project 2                This file is part of the Opie Project
3 3
4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> 4              Copyright (c) 2002 Max Reiss <harlekin@handhelds.org>
5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com> 5 Copyright (c) 2002 L. Potter <ljp@llornkcor.com>
6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 6 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU General Public 12:`=1 )Y*s>-.--   : the terms of the GNU General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; General Public License for more 22..}^=.=       =       ; General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = General Public License along with 26  -_. . .   )=.  = General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#ifndef XINECONTROL_H 34#ifndef XINECONTROL_H
35#define XINECONTROL_H 35#define XINECONTROL_H
36 36
37#include "lib.h" 37#include "lib.h"
38 38
39#include "mediaplayerstate.h" 39#include "mediaplayerstate.h"
40 40
41class XineControl : public QObject { 41class XineControl : public QObject {
42 Q_OBJECT 42 Q_OBJECT
43public: 43public:
44 XineControl( XineVideoWidget *xineWidget,
45 MediaPlayerState &_mediaPlayerState,
46 QObject *parent = 0, const char *name =0 );
47 // note that this constructor takes over ownership of the passed 44 // note that this constructor takes over ownership of the passed
48 // XINE::Lib object. 45 // XINE::Lib object.
49 XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, 46 XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget,
50 MediaPlayerState &_mediaPlayerState, 47 MediaPlayerState &_mediaPlayerState,
51 QObject *parent = 0, const char *name =0 ); 48 QObject *parent = 0, const char *name =0 );
52 ~XineControl(); 49 ~XineControl();
53 50
54 bool hasVideo() const { return hasVideoChannel; } 51 bool hasVideo() const { return hasVideoChannel; }
55 bool hasAudio() const { return hasAudioChannel; } 52 bool hasAudio() const { return hasAudioChannel; }
56 53
57public slots: 54public slots:
58 void play( const QString& fileName ); 55 void play( const QString& fileName );
59 void stop( bool ); 56 void stop( bool );
60 57
61 /** 58 /**
62 * Pause the media stream 59 * Pause the media stream
63 * @param if pause or not 60 * @param if pause or not
64 */ 61 */
65 void pause( bool ); 62 void pause( bool );
66 63
67 /** 64 /**
68 * Set videos fullscreen 65 * Set videos fullscreen
69 * @param yes or no 66 * @param yes or no
70 */ 67 */
71 void setFullscreen( bool ); 68 void setFullscreen( bool );
72 69
73 /** 70 /**
74 * 71 *
75 */ 72 */
76 long currentTime(); 73 long currentTime();
77 void seekTo( long ); 74 void seekTo( long );
78 // get length of media file and set it 75 // get length of media file and set it
79 void length(); 76 void length();
80 long position(); 77 long position();
81 78
82 /** 79 /**
83 * Proceed to the next media file in playlist 80 * Proceed to the next media file in playlist
84 */ 81 */
85 void nextMedia(); 82 void nextMedia();
86 83
87 /** 84 /**
88 * Get as much info about the stream from xine as possible 85 * Get as much info about the stream from xine as possible
89 */ 86 */
90 QString getMetaInfo(); 87 QString getMetaInfo();
91 88
92 /** 89 /**
93 * get the error code and "translate" it for the user 90 * get the error code and "translate" it for the user
94 * 91 *
95 */ 92 */
96 QString getErrorCode(); 93 QString getErrorCode();
97 94
98 95
99 void videoResized ( const QSize &s ); 96 void videoResized ( const QSize &s );
100 97
101 /** 98 /**
102 * Set the gamma value of the video output 99 * Set the gamma value of the video output
103 * @param int value between -100 and 100, 0 is original 100 * @param int value between -100 and 100, 0 is original
104 */ 101 */
105 void setGamma( int ); 102 void setGamma( int );
106 103
107private: 104private:
108 void init(); 105 void init();
109 106
110 XINE::Lib *libXine; 107 XINE::Lib *libXine;
111 long m_currentTime; 108 long m_currentTime;
112 long m_position; 109 long m_position;
113 int m_length; 110 int m_length;
114 QString m_fileName; 111 QString m_fileName;
115 bool disabledSuspendScreenSaver : 1; 112 bool disabledSuspendScreenSaver : 1;
116 bool hasVideoChannel : 1; 113 bool hasVideoChannel : 1;
117 bool hasAudioChannel : 1; 114 bool hasAudioChannel : 1;
118 MediaPlayerState &mediaPlayerState; 115 MediaPlayerState &mediaPlayerState;
119 XineVideoWidget *xineVideoWidget; 116 XineVideoWidget *xineVideoWidget;
117 bool m_wasError : 1; // used for chaeting on the metainfo
120 118
121signals: 119signals:
122 void positionChanged( long ); 120 void positionChanged( long );
123}; 121};
124 122
125 123
126#endif 124#endif