-rw-r--r-- | noncore/multimedia/opieplayer2/opieplayer2.pro | 11 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.cpp | 455 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.h | 69 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidgetgui.cpp | 207 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidgetgui.h | 126 |
5 files changed, 507 insertions, 361 deletions
diff --git a/noncore/multimedia/opieplayer2/opieplayer2.pro b/noncore/multimedia/opieplayer2/opieplayer2.pro index 3a47c06..a83a624 100644 --- a/noncore/multimedia/opieplayer2/opieplayer2.pro +++ b/noncore/multimedia/opieplayer2/opieplayer2.pro @@ -1,23 +1,24 @@ TEMPLATE = app -CONFIG = qt warn_on release -#CONFIG = qt warn_on debug +#CONFIG = qt warn_on release +CONFIG = qt warn_on debug DESTDIR = $(OPIEDIR)/bin HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h mediadetect.h\ videowidget.h audiowidget.h playlistwidget.h mediaplayer.h inputDialog.h \ - frame.h lib.h xinevideowidget.h volumecontrol.h\ + frame.h lib.h xinevideowidget.h volumecontrol.h playlistwidgetgui.h\ alphablend.h yuv2rgb.h SOURCES = main.cpp \ playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp mediadetect.cpp\ videowidget.cpp audiowidget.cpp playlistwidget.cpp mediaplayer.cpp inputDialog.cpp \ frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp\ + playlistwidgetgui.cpp\ alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S TARGET = opieplayer2 INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lpthread -lopie -lxine -lxineutils MOC_DIR=qpeobj OBJECTS_DIR=qpeobj -INCLUDEPATH += $(OPIEDIR)/include -DEPENDPATH += $(OPIEDIR)/include +#INCLUDEPATH += $(OPIEDIR)/include +#DEPENDPATH += $(OPIEDIR)/include diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp index 098322b..6c7f6ba 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp @@ -1,1254 +1,1057 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ -#define QTOPIA_INTERNAL_FSLP -#include <qpe/qpemenubar.h> #include <qpe/qpetoolbar.h> -#include <qpe/fileselector.h> #include <qpe/qpeapplication.h> -#include <qpe/lnkproperties.h> #include <qpe/storage.h> #include <qpe/mimetype.h> - -#include <qpe/applnk.h> -#include <qpopupmenu.h> -#include <qpe/config.h> #include <qpe/global.h> #include <qpe/resource.h> -#include <qaction.h> -#include <qcursor.h> -#include <qimage.h> -#include <qfile.h> + #include <qdir.h> -#include <qlayout.h> -#include <qlabel.h> -#include <qlist.h> -#include <qlistbox.h> -#include <qmainwindow.h> #include <qmessagebox.h> -#include <qtoolbutton.h> -#include <qtabwidget.h> -#include <qlistview.h> -#include <qpoint.h> -#include <qlineedit.h> -#include <qpushbutton.h> #include <qregexp.h> #include <qtextstream.h> - #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" - #include "inputDialog.h" +//only needed for the random play #include <stdlib.h> + #include "audiowidget.h" #include "videowidget.h" -#define BUTTONS_ON_TOOLBAR -#define SIDE_BUTTONS -#define CAN_SAVE_LOAD_PLAYLISTS - extern MediaPlayerState *mediaPlayerState; -class PlayListWidgetPrivate { -public: - QToolButton *tbPlay, *tbFull, *tbLoop, *tbScale, *tbShuffle, *tbAddToList, *tbRemoveFromList, *tbMoveUp, *tbMoveDown, *tbRemove; - QFrame *playListFrame; - FileSelector *files; - PlayListSelection *selectedFiles; - bool setDocumentUsed; - DocLnk *current; -}; - - -class ToolButton : public QToolButton { -public: - ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) - : QToolButton( parent, name ) { - setTextLabel( name ); - setPixmap( Resource::loadPixmap( icon ) ); - setAutoRaise( TRUE ); - setFocusPolicy( QWidget::NoFocus ); - setToggleButton( t ); - connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); - QPEMenuToolFocusManager::manager()->addWidget( this ); - } -}; - - -class MenuItem : public QAction { -public: - MenuItem( QWidget *parent, const QString& text, QObject *handler, const QString& slot ) - : QAction( text, QString::null, 0, 0 ) { - connect( this, SIGNAL( activated() ), handler, slot ); - addTo( parent ); - } -}; - - PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) - : QMainWindow( parent, name, fl ) { - - d = new PlayListWidgetPrivate; - d->setDocumentUsed = FALSE; - d->current = NULL; - fromSetDocument = FALSE; - insanityBool=FALSE; - audioScan = FALSE; - videoScan = FALSE; - - setBackgroundMode( PaletteButton ); - -// setCaption( tr("OpiePlayer") ); -// setIcon( Resource::loadPixmap( "opieplayer2/MPEGPlayer" ) ); - - setToolBarsMovable( FALSE ); - - // Create Toolbar - QPEToolBar *toolbar = new QPEToolBar( this ); - toolbar->setHorizontalStretchable( TRUE ); - - // Create Menubar - QPEMenuBar *menu = new QPEMenuBar( toolbar ); - menu->setMargin( 0 ); - - QPEToolBar *bar = new QPEToolBar( this ); - bar->setLabel( tr( "Play Operations" ) ); - - tbDeletePlaylist = new QPushButton( Resource::loadIconSet("trash"),"",bar,"close"); - tbDeletePlaylist->setFlat(TRUE); - tbDeletePlaylist->setFixedSize(20,20); + : PlayListWidgetGui( parent, name, fl ) { d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer2/add_to_playlist", this , SLOT(addSelected()) ); d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ), "opieplayer2/remove_from_playlist", this , SLOT(removeSelected()) ); d->tbPlay = new ToolButton( bar, tr( "Play" ), "opieplayer2/play", this , SLOT( btnPlay(bool) ), TRUE ); d->tbShuffle = new ToolButton( bar, tr( "Randomize" ),"opieplayer2/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE ); d->tbLoop = new ToolButton( bar, tr( "Loop" ),"opieplayer2/loop", mediaPlayerState, SLOT(setLooping(bool)), TRUE ); - tbDeletePlaylist->hide(); - QPopupMenu *pmPlayList = new QPopupMenu( this ); - menu->insertItem( tr( "File" ), pmPlayList ); (void)new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all audio files" ), this, SLOT( addAllMusicToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all video files" ), this, SLOT( addAllVideoToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all files" ), this, SLOT( addAllToList() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Save PlayList" ), this, SLOT( saveList() ) ); (void)new MenuItem( pmPlayList, tr( "Export playlist to m3u" ), this, SLOT(writem3u() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Open File or URL" ), this,SLOT( openFile() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Rescan for Audio Files" ), this,SLOT( scanForAudio() ) ); (void)new MenuItem( pmPlayList, tr( "Rescan for Video Files" ), this,SLOT( scanForVideo() ) ); - pmView = new QPopupMenu( this ); - menu->insertItem( tr( "View" ), pmView ); - pmView->isCheckable(); - pmView->insertItem( Resource::loadPixmap("fullscreen") , tr( "Full Screen"), mediaPlayerState, SLOT( toggleFullscreen() ) ); Config cfg( "OpiePlayer" ); bool b= cfg.readBoolEntry("FullScreen", 0); mediaPlayerState->setFullscreen( b ); pmView->setItemChecked( -16, b ); - // pmView->insertItem( Resource::loadPixmap("opieplayer/scale") , tr( "Scale"), mediaPlayerState, SLOT(toggleScaled() ) ); - - pmView->insertSeparator(-1); - - skinsMenu = new QPopupMenu( this ); - pmView->insertItem( tr( "Skins" ), skinsMenu ); - skinsMenu->isCheckable(); - populateSkinsMenu(); - - QVBox *vbox5 = new QVBox( this ); vbox5->setBackgroundMode( PaletteButton ); - QVBox *vbox4 = new QVBox( vbox5 ); vbox4->setBackgroundMode( PaletteButton ); - - QHBox *hbox6 = new QHBox( vbox4 ); hbox6->setBackgroundMode( PaletteButton ); - - tabWidget = new QTabWidget( hbox6, "tabWidget" ); - // tabWidget->setTabShape(QTabWidget::Triangular); - - QWidget *pTab; - pTab = new QWidget( tabWidget, "pTab" ); - tabWidget->insertTab( pTab,"Playlist"); - - - QGridLayout *Playout = new QGridLayout( pTab ); - Playout->setSpacing( 2); - Playout->setMargin( 2); - - // Add the playlist area - - QVBox *vbox3 = new QVBox( pTab ); vbox3->setBackgroundMode( PaletteButton ); - d->playListFrame = vbox3; - - QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton ); - - d->selectedFiles = new PlayListSelection( hbox2); - QVBox *vbox1 = new QVBox( hbox2 ); vbox1->setBackgroundMode( PaletteButton ); - - QPEApplication::setStylusOperation( d->selectedFiles->viewport(),QPEApplication::RightOnHold); - - QVBox *stretch1 = new QVBox( vbox1 ); stretch1->setBackgroundMode( PaletteButton ); // add stretch (void)new ToolButton( vbox1, tr( "Move Up" ), "opieplayer2/up", d->selectedFiles, SLOT(moveSelectedUp()) ); (void)new ToolButton( vbox1, tr( "Remove" ), "opieplayer2/cut", d->selectedFiles, SLOT(removeSelected()) ); (void)new ToolButton( vbox1, tr( "Move Down" ), "opieplayer2/down", d->selectedFiles, SLOT(moveSelectedDown()) ); - QVBox *stretch2 = new QVBox( vbox1 ); stretch2->setBackgroundMode( PaletteButton ); // add stretch - - - Playout->addMultiCellWidget( vbox3, 0, 0, 0, 1 ); - - QWidget *aTab; - aTab = new QWidget( tabWidget, "aTab" ); - - QGridLayout *Alayout = new QGridLayout( aTab ); - Alayout->setSpacing( 2); - Alayout->setMargin( 2); - - audioView = new QListView( aTab, "Audioview" ); - audioView->addColumn( tr("Title"),140); - audioView->addColumn(tr("Size"), -1); - audioView->addColumn(tr("Media"),-1); - audioView->setColumnAlignment(1, Qt::AlignRight); - audioView->setColumnAlignment(2, Qt::AlignRight); - audioView->setAllColumnsShowFocus(TRUE); - audioView->setSorting(0,TRUE); - - audioView->setMultiSelection( TRUE ); - audioView->setSelectionMode( QListView::Extended); - - Alayout->addMultiCellWidget( audioView, 0, 0, 0, 1 ); - - tabWidget->insertTab(aTab,tr("Audio")); - - QPEApplication::setStylusOperation( audioView->viewport(),QPEApplication::RightOnHold); - - QWidget *vTab; - vTab = new QWidget( tabWidget, "vTab" ); - - QGridLayout *Vlayout = new QGridLayout( vTab ); - Vlayout->setSpacing( 2); - Vlayout->setMargin( 2); - - videoView = new QListView( vTab, "Videoview" ); - - videoView->addColumn(tr("Title"),140); - videoView->addColumn(tr("Size"),-1); - videoView->addColumn(tr("Media"),-1); - videoView->setColumnAlignment(1, Qt::AlignRight); - videoView->setColumnAlignment(2, Qt::AlignRight); - videoView->setAllColumnsShowFocus(TRUE); - videoView->setSorting(0,TRUE); - - videoView->setMultiSelection( TRUE ); - videoView->setSelectionMode( QListView::Extended); - - Vlayout->addMultiCellWidget( videoView, 0, 0, 0, 1 ); - - QPEApplication::setStylusOperation( videoView->viewport(),QPEApplication::RightOnHold); - - tabWidget->insertTab( vTab,tr("Video")); - - //playlists list - QWidget *LTab; - LTab = new QWidget( tabWidget, "LTab" ); - QGridLayout *Llayout = new QGridLayout( LTab ); - Llayout->setSpacing( 2); - Llayout->setMargin( 2); - - playLists = new FileSelector( "playlist/plain", LTab, "fileselector" , FALSE, FALSE); //buggy - Llayout->addMultiCellWidget( playLists, 0, 0, 0, 1 ); - - tabWidget->insertTab(LTab,tr("Lists")); + QVBox *stretch2 = new QVBox( vbox1 ); connect(tbDeletePlaylist,(SIGNAL(released())),SLOT( deletePlaylist())); - connect( pmView, SIGNAL( activated(int)), this, SLOT( pmViewActivated(int) ) ); - connect( skinsMenu, SIGNAL( activated(int)), this, SLOT(skinsMenuActivated(int) ) ); - - // connect( scaleButton, SIGNAL(activated()), mediaPlayerState, SLOT(toggleScaled() ) ); - connect( d->selectedFiles, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( playlistViewPressed(int, QListViewItem *, const QPoint&, int)) ); connect( audioView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( viewPressed(int, QListViewItem *, const QPoint&, int)) ); connect( audioView, SIGNAL( returnPressed( QListViewItem *)), this,SLOT( playIt( QListViewItem *)) ); connect( audioView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); connect( videoView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( viewPressed(int, QListViewItem *, const QPoint&, int)) ); connect( videoView, SIGNAL( returnPressed( QListViewItem *)), this,SLOT( playIt( QListViewItem *)) ); connect( videoView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); connect( playLists, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( loadList( const DocLnk & ) ) ); connect( tabWidget, SIGNAL (currentChanged(QWidget*)),this,SLOT(tabChanged(QWidget*))); connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) ); connect( d->selectedFiles, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( playIt( QListViewItem *) ) ); - setCentralWidget( vbox5 ); - readConfig( cfg ); QString currentPlaylist = cfg.readEntry("CurrentPlaylist",""); loadList(DocLnk( currentPlaylist)); setCaption(tr("OpiePlayer: ")+ currentPlaylist ); + // see which skins are installed + populateSkinsMenu(); initializeStates(); } PlayListWidget::~PlayListWidget() { /* fixing symptoms and not sources is entirely stupid - zecke */ // Config cfg( "OpiePlayer" ); // writeConfig( cfg ); - if ( d->current ) { delete d->current; } delete d; } void PlayListWidget::initializeStates() { - d->tbPlay->setOn( mediaPlayerState->playing() ); d->tbLoop->setOn( mediaPlayerState->looping() ); d->tbShuffle->setOn( mediaPlayerState->shuffled() ); setPlaylist( true); } void PlayListWidget::readConfig( Config& cfg ) { cfg.setGroup("PlayList"); QString currentString = cfg.readEntry("current", "" ); int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); for ( int i = 0; i < noOfFiles; i++ ) { QString entryName; entryName.sprintf( "File%i", i + 1 ); QString linkFile = cfg.readEntry( entryName ); if(QFileInfo( linkFile).exists() ) { DocLnk lnk( linkFile ); if ( QFileInfo( lnk.file()).exists() || linkFile.find("http",0,TRUE) != -1) { d->selectedFiles->addToSelection( lnk ); } } } d->selectedFiles->setSelectedItem( currentString); } void PlayListWidget::writeConfig( Config& cfg ) const { - d->selectedFiles->writeCurrent( cfg); cfg.setGroup("PlayList"); int noOfFiles = 0; d->selectedFiles->first(); do { const DocLnk *lnk = d->selectedFiles->current(); if ( lnk ) { QString entryName; entryName.sprintf( "File%i", noOfFiles + 1 ); cfg.writeEntry( entryName, lnk->linkFile() ); // if this link does exist, add it so we have the file // next time... if ( !QFile::exists( lnk->linkFile() ) ) { // the way writing lnks doesn't really check for out // of disk space, but check it anyway. if ( !lnk->writeLink() ) { QMessageBox::critical( 0, tr("Out of space"), tr( "There was a problem saving " "the playlist.\n" "Your playlist " "may be missing some entries\n" "the next time you start it." ) ); } } noOfFiles++; } } while ( d->selectedFiles->next() ); cfg.writeEntry("NumberOfFiles", noOfFiles ); } void PlayListWidget::addToSelection( const DocLnk& lnk ) { d->setDocumentUsed = FALSE; if ( mediaPlayerState->playlist() ) { if(QFileInfo(lnk.file()).exists() || lnk.file().left(4) == "http" ) d->selectedFiles->addToSelection( lnk ); } else mediaPlayerState->setPlaying( TRUE ); } void PlayListWidget::clearList() { while ( first() ) { d->selectedFiles->removeSelected(); } } +void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) { + switch (mouse) { + case 1: + break; + case 2: + { + QPopupMenu m; + m.insertItem( tr( "Play" ), this, SLOT( playSelected() )); + m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); + m.exec( QCursor::pos() ); + } + break; + } +} + + +void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *, const QPoint& , int ) { + switch (mouse) { + case 1: + break; + case 2: + { + QPopupMenu m; + m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); + m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() )); + m.exec( QCursor::pos() ); + } + break; + } +} + + void PlayListWidget::addAllToList() { DocLnkSet filesAll; Global::findDocuments(&filesAll, "video/*;audio/*"); QListIterator<DocLnk> Adit( filesAll.children() ); for ( ; Adit.current(); ++Adit ) { if(QFileInfo(Adit.current()->file()).exists()) { d->selectedFiles->addToSelection( **Adit ); } } } void PlayListWidget::addAllMusicToList() { QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if(QFileInfo(dit.current()->file()).exists()) { d->selectedFiles->addToSelection( **dit ); } } } void PlayListWidget::addAllVideoToList() { QListIterator<DocLnk> dit( vFiles.children() ); - for ( ; dit.current(); ++dit ) - if(QFileInfo( dit.current()->file()).exists()) + for ( ; dit.current(); ++dit ) { + if( QFileInfo( dit.current()->file() ).exists() ) { d->selectedFiles->addToSelection( **dit ); } + } +} void PlayListWidget::setDocument(const QString& fileref) { - qDebug(fileref); + //qDebug( fileref ); fromSetDocument = TRUE; if ( fileref.isNull() ) { QMessageBox::critical( 0, tr( "Invalid File" ), tr( "There was a problem in getting the file." ) ); return; } if(fileref.find("m3u",0,TRUE) != -1) { //is m3u readm3u( fileref); } else if(fileref.find("pls",0,TRUE) != -1) { //is pls readPls( fileref); } else if(fileref.find("playlist",0,TRUE) != -1) {//is playlist clearList(); loadList(DocLnk(fileref)); d->selectedFiles->first(); } else { clearList(); addToSelection( DocLnk( fileref ) ); d->setDocumentUsed = TRUE; mediaPlayerState->setPlaying( FALSE ); qApp->processEvents(); mediaPlayerState->setPlaying( TRUE ); qApp->processEvents(); setCaption(tr("OpiePlayer")); } } -void PlayListWidget::setActiveWindow() { -// qDebug("SETTING active window"); - // When we get raised we need to ensure that it switches views - char origView = mediaPlayerState->view(); - mediaPlayerState->setView( 'l' ); // invalidate - mediaPlayerState->setView( origView ); // now switch back -} - - void PlayListWidget::useSelectedDocument() { d->setDocumentUsed = FALSE; } const DocLnk *PlayListWidget::current() { // this is fugly - switch (tabWidget->currentPageIndex()) { case 0: //playlist { // qDebug("playlist"); if ( mediaPlayerState->playlist() ) { return d->selectedFiles->current(); } else if ( d->setDocumentUsed && d->current ) { return d->current; } else { return d->files->selected(); } } break; case 1://audio { // qDebug("audioView"); QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == audioView->currentItem()->text(0) && !insanityBool) { insanityBool=TRUE; return dit; } } } break; case 2: // video { // qDebug("videoView"); QListIterator<DocLnk> Vdit( vFiles.children() ); for ( ; Vdit.current(); ++Vdit ) { if( Vdit.current()->name() == videoView->currentItem()->text(0) && !insanityBool) { insanityBool=TRUE; return Vdit; } } } break; }; return 0; } + bool PlayListWidget::prev() { if ( mediaPlayerState->playlist() ) { if ( mediaPlayerState->shuffled() ) { const DocLnk *cur = current(); int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); for ( int i = 0; i < j; i++ ) { if ( !d->selectedFiles->next() ) d->selectedFiles->first(); } if ( cur == current() ) - if ( !d->selectedFiles->next() ) + if ( !d->selectedFiles->next() ) { d->selectedFiles->first(); + } return TRUE; } else { if ( !d->selectedFiles->prev() ) { if ( mediaPlayerState->looping() ) { return d->selectedFiles->last(); } else { return FALSE; } } return TRUE; } } else { return mediaPlayerState->looping(); } } bool PlayListWidget::next() { if ( mediaPlayerState->playlist() ) { if ( mediaPlayerState->shuffled() ) { return prev(); } else { if ( !d->selectedFiles->next() ) { if ( mediaPlayerState->looping() ) { return d->selectedFiles->first(); } else { return FALSE; } } return TRUE; } } else { return mediaPlayerState->looping(); } } bool PlayListWidget::first() { if ( mediaPlayerState->playlist() ) return d->selectedFiles->first(); else return mediaPlayerState->looping(); } bool PlayListWidget::last() { if ( mediaPlayerState->playlist() ) return d->selectedFiles->last(); else return mediaPlayerState->looping(); } void PlayListWidget::saveList() { QString filename; InputDialog *fileDlg = 0l; fileDlg = new InputDialog(this,tr("Save Playlist"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { if ( d->current ) delete d->current; filename = fileDlg->text();//+".playlist"; // qDebug("saving playlist "+filename+".playlist"); Config cfg( filename +".playlist"); writeConfig( cfg ); DocLnk lnk; lnk.setFile(QDir::homeDirPath()+"/Settings/"+filename+".playlist.conf"); //sets File property lnk.setType("playlist/plain");// hey is this a REGISTERED mime type?!?!? ;D lnk.setIcon("opieplayer2/playlist2"); lnk.setName( filename); //sets file name // qDebug(filename); if(!lnk.writeLink()) { qDebug("Writing doclink did not work"); } } Config config( "OpiePlayer" ); config.writeEntry("CurrentPlaylist",filename); setCaption(tr("OpiePlayer: ")+filename); d->selectedFiles->first(); if(fileDlg) { delete fileDlg; } } void PlayListWidget::loadList( const DocLnk & lnk) { QString name= lnk.name(); // qDebug("currentList is "+name); if( name.length()>1) { setCaption("OpiePlayer: "+name); // qDebug("load list "+ name+".playlist"); clearList(); Config cfg( name+".playlist"); readConfig(cfg); tabWidget->setCurrentPage(0); Config config( "OpiePlayer" ); config.writeEntry("CurrentPlaylist", name); // d->selectedFiles->first(); } - } + void PlayListWidget::setPlaylist( bool shown ) { if ( shown ) { d->playListFrame->show(); } else { d->playListFrame->hide(); } } -void PlayListWidget::setView( char view ) { - if ( view == 'l' ) - showMaximized(); - else - hide(); -} void PlayListWidget::addSelected() { Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); QString currentPlaylist = cfg.readEntry("CurrentPlaylist",""); // int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); switch (tabWidget->currentPageIndex()) { case 0: //playlist break; case 1: { //audio QListViewItemIterator it( audioView ); // iterate through all items of the listview for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it.current()->text(0) ) { if(QFileInfo( dit.current()->file()).exists()) d->selectedFiles->addToSelection( **dit ); } } audioView->setSelected( it.current(),FALSE); } } tabWidget->setCurrentPage(0); } break; case 2: { // video QListViewItemIterator it( videoView ); // iterate through all items of the listview for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { QListIterator<DocLnk> dit( vFiles.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it.current()->text(0) ) { if(QFileInfo( dit.current()->file()).exists()) d->selectedFiles->addToSelection( **dit ); } } videoView->setSelected( it.current(),FALSE); } } tabWidget->setCurrentPage(0); } break; }; } + void PlayListWidget::removeSelected() { d->selectedFiles->removeSelected( ); } + void PlayListWidget::playIt( QListViewItem *it) { if(!it) return; mediaPlayerState->setPlaying(FALSE); mediaPlayerState->setPlaying(TRUE); d->selectedFiles->unSelect(); } + void PlayListWidget::addToSelection( QListViewItem *it) { d->setDocumentUsed = FALSE; if(it) { switch (tabWidget->currentPageIndex()) { case 1: { QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it->text(0)) { if(QFileInfo( dit.current()->file()).exists()) d->selectedFiles->addToSelection( **dit ); } } } break; case 2: { QListIterator<DocLnk> dit( vFiles.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it->text(0)) { if(QFileInfo( dit.current()->file()).exists()) d->selectedFiles->addToSelection( **dit ); } } } break; case 0: break; }; tabWidget->setCurrentPage(0); } } + void PlayListWidget::tabChanged(QWidget *) { switch ( tabWidget->currentPageIndex()) { case 0: { - if( !tbDeletePlaylist->isHidden()) + if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); + } d->tbRemoveFromList->setEnabled(TRUE); d->tbAddToList->setEnabled(FALSE); } break; case 1: { audioView->clear(); populateAudioView(); - if( !tbDeletePlaylist->isHidden()) + if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); + } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); } break; case 2: { videoView->clear(); populateVideoView(); - if( !tbDeletePlaylist->isHidden()) + if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); + } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); } break; case 3: { - if( tbDeletePlaylist->isHidden()) + if( tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->show(); + } playLists->reread(); } break; }; } -void PlayListWidget::btnPlay(bool b) { +void PlayListWidget::btnPlay(bool b) { // mediaPlayerState->setPlaying(b); switch ( tabWidget->currentPageIndex()) { case 0: { mediaPlayerState->setPlaying(b); } break; case 1: { addToSelection( audioView->currentItem() ); mediaPlayerState->setPlaying(b); d->selectedFiles->removeSelected( ); tabWidget->setCurrentPage(1); d->selectedFiles->unSelect(); insanityBool=FALSE; }// audioView->clearSelection(); break; case 2: { addToSelection( videoView->currentItem() ); mediaPlayerState->setPlaying(b); qApp->processEvents(); d->selectedFiles->removeSelected( ); tabWidget->setCurrentPage(2); d->selectedFiles->unSelect(); insanityBool=FALSE; }// videoView->clearSelection(); break; }; } void PlayListWidget::deletePlaylist() { switch( QMessageBox::information( this, (tr("Remove Playlist?")), (tr("You really want to delete\nthis playlist?")), (tr("Yes")), (tr("No")), 0 )){ case 0: // Yes clicked, QFile().remove(playLists->selected()->file()); QFile().remove(playLists->selected()->linkFile()); playLists->reread(); break; case 1: // Cancel break; }; } -void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) { - switch (mouse) { - case 1: - break; - case 2:{ - QPopupMenu m; - m.insertItem( tr( "Play" ), this, SLOT( playSelected() )); - m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); - m.exec( QCursor::pos() ); - } - break; - }; -} void PlayListWidget::playSelected() { btnPlay( TRUE); } -void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *, const QPoint& , int ) { - switch (mouse) { - case 1: - - break; - case 2: - { - QPopupMenu m; - m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); - m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() )); - m.exec( QCursor::pos() ); - } - break; - }; -} - void PlayListWidget::scanForAudio() { // qDebug("scan for audio"); files.detachChildren(); QListIterator<DocLnk> sdit( files.children() ); for ( ; sdit.current(); ++sdit ) { delete sdit.current(); } Global::findDocuments(&files, "audio/*"); audioScan = TRUE; } void PlayListWidget::scanForVideo() { // qDebug("scan for video"); vFiles.detachChildren(); QListIterator<DocLnk> sdit( vFiles.children() ); for ( ; sdit.current(); ++sdit ) { delete sdit.current(); } Global::findDocuments(&vFiles, "video/*"); videoScan = TRUE; } void PlayListWidget::populateAudioView() { - audioView->clear(); StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); - if(!audioScan) scanForAudio(); + if(!audioScan) { + scanForAudio(); + } QListIterator<DocLnk> dit( files.children() ); QListIterator<FileSystem> it ( fs ); QString storage; for ( ; dit.current(); ++dit ) { for( ; it.current(); ++it ){ const QString name = (*it)->name(); const QString path = (*it)->path(); - if(dit.current()->file().find(path) != -1 ) storage=name; + if(dit.current()->file().find(path) != -1 ) { + storage = name; + } } QListViewItem * newItem; if ( QFile( dit.current()->file()).exists() ) { // qDebug(dit.current()->name()); newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(), QString::number( QFile( dit.current()->file()).size() ), storage); newItem->setPixmap(0, Resource::loadPixmap( "opieplayer2/musicfile" )); } } - } + void PlayListWidget::populateVideoView() { videoView->clear(); StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); - if(!videoScan ) scanForVideo(); + if(!videoScan ) { + scanForVideo(); + } QListIterator<DocLnk> Vdit( vFiles.children() ); QListIterator<FileSystem> it ( fs ); videoView->clear(); QString storage; for ( ; Vdit.current(); ++Vdit ) { for( ; it.current(); ++it ){ const QString name = (*it)->name(); const QString path = (*it)->path(); - if( Vdit.current()->file().find(path) != -1 ) storage=name; + if( Vdit.current()->file().find(path) != -1 ) { + storage=name; + } } QListViewItem * newItem; if ( QFile( Vdit.current()->file()).exists() ) { newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), QString::number( QFile( Vdit.current()->file()).size() ), storage); newItem->setPixmap(0, Resource::loadPixmap( "opieplayer2/videofile" )); } } } + void PlayListWidget::openFile() { QString filename, name; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { filename = fileDlg->text(); qDebug("Selected filename is "+filename); if(filename.right(3) == "m3u") { readm3u( filename ); } else if(filename.right(3) == "pls") { readPls( filename ); } else { /* FIXME ....... AUDIO/X-MPEGURL is bad*/ DocLnk lnk; - lnk.setName(filename); //sets file name lnk.setFile(filename); //sets File property //qWarning( "Mimetype: " + MimeType( QFile::encodeName(filename) ).id() ); lnk.setType( MimeType( QFile::encodeName(filename) ).id() ); lnk.setExec("opieplayer"); lnk.setIcon("opieplayer2/MPEGPlayer"); if(!lnk.writeLink()) { qDebug("Writing doclink did not work"); } d->selectedFiles->addToSelection( lnk); } } if(fileDlg) { delete fileDlg; } } -void PlayListWidget::keyReleaseEvent( QKeyEvent *e) -{ +void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_F9: //activity // if(audioUI->isHidden()) // audioUI->showMaximized(); break; case Key_F10: //contacts // if( videoUI->isHidden()) // videoUI->showMaximized(); break; case Key_F11: //menu break; case Key_F12: //home // doBlank(); break; case Key_F13: //mail // doUnblank(); break; case Key_Q: //add to playlist addSelected(); break; case Key_R: //remove from playlist removeSelected(); break; // case Key_P: //play // qDebug("Play"); // playSelected(); // break; case Key_Space: // playSelected(); puh break; case Key_1: tabWidget->setCurrentPage(0); break; case Key_2: tabWidget->setCurrentPage(1); break; case Key_3: tabWidget->setCurrentPage(2); break; case Key_4: tabWidget->setCurrentPage(3); break; case Key_Down: if ( !d->selectedFiles->next() ) d->selectedFiles->first(); break; case Key_Up: if ( !d->selectedFiles->prev() ) // d->selectedFiles->last(); break; } } -void PlayListWidget::keyPressEvent( QKeyEvent *) -{ - // qDebug("Key press"); - // switch ( e->key() ) { - // ////////////////////////////// Zaurus keys - // case Key_A: //add to playlist - // qDebug("Add"); - // addSelected(); - // break; - // case Key_R: //remove from playlist - // removeSelected(); - // break; - // case Key_P: //play - // qDebug("Play"); - // playSelected(); - // break; - // case Key_Space: - // qDebug("Play"); - // playSelected(); - // break; - // } -} - - - void PlayListWidget::readm3u(const QString &filename) { - qDebug("m3u filename is "+filename); QFile f(filename); if(f.open(IO_ReadOnly)) { QTextStream t(&f); QString s;//, first, second; int i=0; while ( !t.atEnd()) { s=t.readLine(); if(s.find("#",0,TRUE) == -1) { if(s.find(" ",0,TRUE) == -1) { // not sure if this is neede since cf uses vfat if(s.left(2) == "E:" || s.left(2) == "P:") { s=s.right(s.length()-2); - // if(QFile(s).exists()) { DocLnk lnk( s ); QFileInfo f(s); QString name = f.baseName(); name = name.right( name.length()-name.findRev( "\\",-1,TRUE ) -1 ); lnk.setName( name ); s=s.replace( QRegExp("\\"),"/"); lnk.setFile( s ); lnk.writeLink(); qDebug("add "+name); d->selectedFiles->addToSelection( lnk); - // } } else { // is url s.replace(QRegExp("%20")," "); DocLnk lnk( s ); QString name; if(name.left(4)=="http") { name = s.right( s.length() - 7); } else { name = s; } lnk.setName(name); if(s.at(s.length()-4) == '.') { lnk.setFile( s); } else { lnk.setFile( s+"/"); } lnk.setType("audio/x-mpegurl"); lnk.writeLink(); d->selectedFiles->addToSelection( lnk); } i++; } } } } f.close(); } void PlayListWidget::writem3u() { - InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Save m3u Playlist "),TRUE, 0); fileDlg->exec(); QString filename,list; if( fileDlg->result() == 1 ) { filename = fileDlg->text(); qDebug(filename); int noOfFiles = 0; d->selectedFiles->first(); do { // we dont check for existance because of url's // qDebug(d->selectedFiles->current()->file()); + + // so maybe we should do some net checking to ,-) list += d->selectedFiles->current()->file()+"\n"; noOfFiles++; } while ( d->selectedFiles->next() ); qDebug(list); - if(filename.left(1) != "/") + if( filename.left( 1) != "/" ) { filename=QPEApplication::documentDir()+"/"+filename; - if(filename.right(3) != "m3u") + } + if( filename.right( 3 ) != "m3u" ) { filename=filename+".m3u"; - + } QFile f(filename); f.open(IO_WriteOnly); f.writeBlock(list, list.length()); f.close(); } - if(fileDlg) delete fileDlg; + if( fileDlg ) { + delete fileDlg; + } } void PlayListWidget::readPls(const QString &filename) { qDebug("pls filename is "+filename); QFile f(filename); if(f.open(IO_ReadOnly)) { QTextStream t(&f); QString s;//, first, second; int i=0; while ( !t.atEnd()) { s=t.readLine(); if(s.left(4) == "File") { s=s.right(s.length() - 6); s.replace(QRegExp("%20")," "); qDebug("adding "+s+" to playlist"); // numberofentries=2 // File1=http // Title // Length // Version // File2=http s=s.replace( QRegExp("\\"),"/"); DocLnk lnk( s ); QFileInfo f(s); QString name = f.baseName(); - if(name.left(4)=="http") + if( name.left( 4 ) == "http" ) { name = s.right( s.length() - 7); - else + } else { name=s; + } name = name.right(name.length()-name.findRev("\\",-1,TRUE)-1); lnk.setName( name); if(s.at(s.length()-4) == '.') // if this is probably a file lnk.setFile( s); else { //if its a url - if( name.right(1).find('/') == -1) + if( name.right( 1 ).find( '/' ) == -1) { s+="/"; + } lnk.setFile( s); } lnk.setType("audio/x-mpegurl"); - qDebug("DocLnk add "+name); + //qDebug("DocLnk add "+name); d->selectedFiles->addToSelection( lnk); } } i++; } } void PlayListWidget::pmViewActivated(int index) { // qDebug("%d", index); switch(index) { case -16: { - mediaPlayerState->toggleFullscreen(); bool b=mediaPlayerState->fullscreen(); pmView->setItemChecked( index,b); Config cfg( "OpiePlayer" ); cfg.writeEntry("FullScreen", b); - } break; }; } void PlayListWidget::populateSkinsMenu() { int item=0; defaultSkinIndex=0; QString skinName; Config cfg( "OpiePlayer" ); cfg.setGroup("Options"); QString skin = cfg.readEntry("Skin","default"); QDir skinsDir(QPEApplication::qpeDir()+"/pics/opieplayer2/skins"); skinsDir.setFilter( QDir::Dirs); skinsDir.setSorting(QDir::Name); const QFileInfoList *skinslist = skinsDir.entryInfoList(); QFileInfoListIterator it( *skinslist ); QFileInfo *fi; while ( (fi=it.current()) ) { skinName = fi->fileName(); qDebug( fi->fileName()); - if( skinName != "." && skinName != ".." && skinName !="CVS") + if( skinName != "." && skinName != ".." && skinName !="CVS" ) { item = skinsMenu->insertItem( fi->fileName()); - if( skinName == "default") + } + if( skinName == "default" ) { defaultSkinIndex = item; - if( skinName == skin) + } + if( skinName == skin ) { skinsMenu->setItemChecked( item, TRUE); - + } ++it; } } void PlayListWidget::skinsMenuActivated(int item) { for(uint i = defaultSkinIndex; i > defaultSkinIndex - skinsMenu->count(); i--) { skinsMenu->setItemChecked( i, FALSE); } skinsMenu->setItemChecked( item, TRUE); Config cfg( "OpiePlayer" ); cfg.setGroup("Options"); cfg.writeEntry("Skin", skinsMenu->text( item)); } diff --git a/noncore/multimedia/opieplayer2/playlistwidget.h b/noncore/multimedia/opieplayer2/playlistwidget.h index 8710a99..2742252 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.h +++ b/noncore/multimedia/opieplayer2/playlistwidget.h @@ -1,111 +1,120 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ #ifndef PLAY_LIST_WIDGET_H #define PLAY_LIST_WIDGET_H #include <qmainwindow.h> #include <qpe/applnk.h> #include <qtabwidget.h> #include <qpe/fileselector.h> #include <qpushbutton.h> #include <qpopupmenu.h> -/* #include <qtimer.h> */ +#include "playlistwidgetgui.h" -class PlayListWidgetPrivate; +//class PlayListWidgetPrivate; class Config; class QListViewItem; class QListView; class QPoint; class QAction; class QLabel; -class PlayListWidget : public QMainWindow { +class PlayListWidget : public PlayListWidgetGui { Q_OBJECT public: PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 ); ~PlayListWidget(); - QTabWidget * tabWidget; -// MenuItem *fullScreenButton, *scaleButton; -// QAction *fullScreenButton, *scaleButton; DocLnkSet files; DocLnkSet vFiles; - QListView *audioView, *videoView, *playlistView; - QLabel *libString; - QPopupMenu *pmView ; bool fromSetDocument; bool insanityBool; QString setDocFileRef; // retrieve the current playlist entry (media file link) const DocLnk *current(); void useSelectedDocument(); -/* QTimer * menuTimer; */ - FileSelector* playLists; - QPushButton *tbDeletePlaylist; int selected; + public slots: bool first(); bool last(); bool next(); bool prev(); void writeConfig( Config& cfg ) const; -/* void setFullScreen(); */ -/* void setScaled(); */ + protected: -/* void contentsMousePressEvent( QMouseEvent * e ); */ -/* void contentsMouseReleaseEvent( QMouseEvent * e ); */ void keyReleaseEvent( QKeyEvent *e); -void keyPressEvent( QKeyEvent *e); + private: int defaultSkinIndex; - QPopupMenu *skinsMenu; bool audioScan, videoScan; void readm3u(const QString &); void readPls(const QString &); - void initializeStates(); void readConfig( Config& cfg ); - PlayListWidgetPrivate *d; // Private implementation data void populateAudioView(); void populateVideoView(); + private slots: void populateSkinsMenu(); void skinsMenuActivated(int); void pmViewActivated(int); void writem3u(); void scanForAudio(); void scanForVideo(); void openFile(); void setDocument( const QString& fileref ); void addToSelection( const DocLnk& ); // Add a media file to the playlist void addToSelection( QListViewItem* ); // Add a media file to the playlist - void setActiveWindow(); // need to handle this to show the right view void setPlaylist( bool ); // Show/Hide the playlist - void setView( char ); void clearList(); void addAllToList(); void addAllMusicToList(); void addAllVideoToList(); void saveList(); // Save the playlist void loadList( const DocLnk &); // Load a playlist void playIt( QListViewItem *); - void btnPlay(bool); void deletePlaylist(); void addSelected(); void removeSelected(); void tabChanged(QWidget*); void viewPressed( int, QListViewItem *, const QPoint&, int); void playlistViewPressed( int, QListViewItem *, const QPoint&, int); void playSelected(); - -protected slots: -/* void cancelMenuTimer(); */ -/* void showFileMenu(); */ - - }; - #endif // PLAY_LIST_WIDGET_H diff --git a/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp new file mode 100644 index 0000000..6ecd016 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp @@ -0,0 +1,207 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#include <qpe/qpemenubar.h> +#include <qpe/qpetoolbar.h> +#include <qpe/fileselector.h> +#include <qpe/qpeapplication.h> +#include <qpe/storage.h> +#include <qpe/mimetype.h> +#include <qpe/config.h> +#include <qpe/global.h> +#include <qpe/resource.h> + +#include <qpopupmenu.h> +#include <qaction.h> +#include <qcursor.h> +#include <qdir.h> +#include <qlayout.h> + +#include "playlistselection.h" +#include "playlistwidget.h" +#include "mediaplayerstate.h" +#include "inputDialog.h" + +//only needed for the random play +#include <stdlib.h> + +#include "audiowidget.h" +#include "videowidget.h" +#include "mediaplayerstate.h" + +extern MediaPlayerState *mediaPlayerState; + +PlayListWidgetGui::PlayListWidgetGui( QWidget* parent, const char* name, WFlags fl ) + : QMainWindow( parent, name, fl ) { + + d = new PlayListWidgetPrivate; + d->setDocumentUsed = FALSE; + d->current = NULL; + + setBackgroundMode( PaletteButton ); + setToolBarsMovable( FALSE ); + + // Create Toolbar + QPEToolBar *toolbar = new QPEToolBar( this ); + toolbar->setHorizontalStretchable( TRUE ); + + // Create Menubar + QPEMenuBar *menu = new QPEMenuBar( toolbar ); + menu->setMargin( 0 ); + + bar = new QPEToolBar( this ); + bar->setLabel( tr( "Play Operations" ) ); + + tbDeletePlaylist = new QPushButton( Resource::loadIconSet( "trash" ), "", bar, "close" ); + tbDeletePlaylist->setFlat( TRUE ); + tbDeletePlaylist->setFixedSize( 20, 20 ); + + tbDeletePlaylist->hide(); + + pmPlayList = new QPopupMenu( this ); + menu->insertItem( tr( "File" ), pmPlayList ); + + pmView = new QPopupMenu( this ); + menu->insertItem( tr( "View" ), pmView ); + pmView->isCheckable(); + + skinsMenu = new QPopupMenu( this ); + pmView->insertItem( tr( "Skins" ), skinsMenu ); + skinsMenu->isCheckable(); + + vbox5 = new QVBox( this ); + QVBox *vbox4 = new QVBox( vbox5 ); + QHBox *hbox6 = new QHBox( vbox4 ); + + tabWidget = new QTabWidget( hbox6, "tabWidget" ); + + QWidget *pTab; + pTab = new QWidget( tabWidget, "pTab" ); + tabWidget->insertTab( pTab,"Playlist"); + + QGridLayout *Playout = new QGridLayout( pTab ); + Playout->setSpacing( 2); + Playout->setMargin( 2); + + // Add the playlist area + QVBox *vbox3 = new QVBox( pTab ); + d->playListFrame = vbox3; + + QHBox *hbox2 = new QHBox( vbox3 ); + d->selectedFiles = new PlayListSelection( hbox2 ); + + vbox1 = new QVBox( hbox2 ); + QPEApplication::setStylusOperation( d->selectedFiles->viewport(), QPEApplication::RightOnHold ); + QVBox *stretch1 = new QVBox( vbox1 ); // add stretch + + Playout->addMultiCellWidget( vbox3, 0, 0, 0, 1 ); + + QWidget *aTab; + aTab = new QWidget( tabWidget, "aTab" ); + + QGridLayout *Alayout = new QGridLayout( aTab ); + Alayout->setSpacing( 2 ); + Alayout->setMargin( 2 ); + audioView = new QListView( aTab, "Audioview" ); + audioView->addColumn( tr( "Title" ), 140 ); + audioView->addColumn( tr( "Size" ), -1 ); + audioView->addColumn( tr( "Media" ), -1 ); + audioView->setColumnAlignment( 1, Qt::AlignRight ); + audioView->setColumnAlignment( 2, Qt::AlignRight ); + audioView->setAllColumnsShowFocus( TRUE ); + audioView->setSorting( 0, TRUE ); + audioView->setMultiSelection( TRUE ); + audioView->setSelectionMode( QListView::Extended ); + Alayout->addMultiCellWidget( audioView, 0, 0, 0, 1 ); + tabWidget->insertTab( aTab, tr( "Audio" ) ); + + QPEApplication::setStylusOperation( audioView->viewport(), QPEApplication::RightOnHold ); + + QWidget *vTab; + vTab = new QWidget( tabWidget, "vTab" ); + + QGridLayout *Vlayout = new QGridLayout( vTab ); + Vlayout->setSpacing( 2 ); + Vlayout->setMargin( 2 ); + videoView = new QListView( vTab, "Videoview" ); + videoView->addColumn( tr( "Title" ), 140); + videoView->addColumn( tr( "Size" ), -1 ); + videoView->addColumn(tr( "Media" ), -1 ); + videoView->setColumnAlignment( 1, Qt::AlignRight ); + videoView->setColumnAlignment( 2, Qt::AlignRight ); + videoView->setAllColumnsShowFocus( TRUE ); + videoView->setSorting( 0, TRUE ); + videoView->setMultiSelection( TRUE ); + videoView->setSelectionMode( QListView::Extended ); + Vlayout->addMultiCellWidget( videoView, 0, 0, 0, 1 ); + + QPEApplication::setStylusOperation( videoView->viewport(), QPEApplication::RightOnHold ); + + tabWidget->insertTab( vTab, tr( "Video" ) ); + + //playlists list + QWidget *LTab; + LTab = new QWidget( tabWidget, "LTab" ); + QGridLayout *Llayout = new QGridLayout( LTab ); + Llayout->setSpacing( 2 ); + Llayout->setMargin( 2 ); + + playLists = new FileSelector( "playlist/plain", LTab, "fileselector" , FALSE, FALSE ); //buggy + Llayout->addMultiCellWidget( playLists, 0, 0, 0, 1 ); + + tabWidget->insertTab( LTab, tr( "Lists" ) ); + + setCentralWidget( vbox5 ); +} + + + +PlayListWidgetGui::~PlayListWidgetGui() { +} + +void PlayListWidgetGui::setView( char view ) { + if ( view == 'l' ) + showMaximized(); + else + hide(); +} + + +void PlayListWidgetGui::setActiveWindow() { + // qDebug("SETTING active window"); + // When we get raised we need to ensure that it switches views + char origView = mediaPlayerState->view(); + mediaPlayerState->setView( 'l' ); // invalidate + mediaPlayerState->setView( origView ); // now switch back +} + diff --git a/noncore/multimedia/opieplayer2/playlistwidgetgui.h b/noncore/multimedia/opieplayer2/playlistwidgetgui.h new file mode 100644 index 0000000..4c8d737 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/playlistwidgetgui.h @@ -0,0 +1,126 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#ifndef PLAY_LIST_WIDGET_GUI_H +#define PLAY_LIST_WIDGET_GUI_H + +#include <qmainwindow.h> +#include <qpe/applnk.h> +#include <qpe/resource.h> +#include <qpe/qpemenubar.h> + +#include <qtabwidget.h> +#include <qpe/fileselector.h> +#include <qpushbutton.h> +#include <qpopupmenu.h> +#include <qaction.h> + + +class PlayListWidgetPrivate; +class PlayListSelection; + +class Config; +class QPEToolBar; +class QListViewItem; +class QListView; +class QPoint; +class QAction; +class QLabel; + +class PlayListWidgetPrivate { +public: + QToolButton *tbPlay, *tbFull, *tbLoop, *tbShuffle, *tbAddToList, *tbRemoveFromList, *tbMoveUp, *tbMoveDown, *tbRemove; + QFrame *playListFrame; + FileSelector *files; + PlayListSelection *selectedFiles; + bool setDocumentUsed; + DocLnk *current; +}; + + +class ToolButton : public QToolButton { +public: + ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) + : QToolButton( parent, name ) { + setTextLabel( name ); + setPixmap( Resource::loadPixmap( icon ) ); + setAutoRaise( TRUE ); + setFocusPolicy( QWidget::NoFocus ); + setToggleButton( t ); + connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); + QPEMenuToolFocusManager::manager()->addWidget( this ); + } +}; + + +class MenuItem : public QAction { + +public: + MenuItem( QWidget *parent, const QString& text, QObject *handler, const QString& slot ) + : QAction( text, QString::null, 0, 0 ) { + connect( this, SIGNAL( activated() ), handler, slot ); + addTo( parent ); + } +}; + +class PlayListWidgetGui : public QMainWindow { + Q_OBJECT +public: + PlayListWidgetGui( QWidget* parent=0, const char* name=0, WFlags fl=0 ); + ~PlayListWidgetGui(); + +protected: + QTabWidget * tabWidget; + QListView *audioView, *videoView, *playlistView; + QLabel *libString; + QPopupMenu *pmView ; + bool fromSetDocument; + bool insanityBool; + QString setDocFileRef; + // retrieve the current playlist entry (media file link) + QPushButton *tbDeletePlaylist; + int selected; + QPopupMenu *pmPlayList; + FileSelector* playLists; + QPopupMenu *skinsMenu; + PlayListWidgetPrivate *d; // Private implementation data + QVBox *vbox1; + QVBox *vbox5; + QPEToolBar *bar; + void setActiveWindow(); // need to handle this to show the right view + void setView( char ); + +}; + +#endif + |