summaryrefslogtreecommitdiff
authorharlekin <harlekin>2002-08-21 20:42:09 (UTC)
committer harlekin <harlekin>2002-08-21 20:42:09 (UTC)
commit462117a0f60287d5309932937c24da3ab1292476 (patch) (side-by-side diff)
tree1877224879c5d953b257712171637de87a2966dc
parent10739e8b7d203e56ef30011770f6d12d8b0bb270 (diff)
downloadopie-462117a0f60287d5309932937c24da3ab1292476.zip
opie-462117a0f60287d5309932937c24da3ab1292476.tar.gz
opie-462117a0f60287d5309932937c24da3ab1292476.tar.bz2
started taking playlistwidget apart, also made gui a bit more beautiful
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/opieplayer2.pro11
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidget.cpp455
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidget.h69
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidgetgui.cpp207
-rw-r--r--noncore/multimedia/opieplayer2/playlistwidgetgui.h126
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,335 +1,156 @@
+/*
+                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++ ) {
@@ -339,25 +160,24 @@ void PlayListWidget::readConfig( Config& cfg ) {
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...
@@ -391,56 +211,90 @@ void PlayListWidget::addToSelection( const DocLnk& 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();
@@ -450,40 +304,30 @@ void PlayListWidget::setDocument(const QString& fileref) {
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();
}
}
@@ -507,36 +351,38 @@ const DocLnk *PlayListWidget::current() { // this is fugly
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 {
@@ -621,41 +467,35 @@ void PlayListWidget::loadList( const DocLnk & lnk) {
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
@@ -688,35 +528,38 @@ void PlayListWidget::addSelected() {
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 );
}
@@ -731,68 +574,73 @@ void PlayListWidget::addToSelection( QListViewItem *it) {
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( );
@@ -821,174 +669,151 @@ void PlayListWidget::deletePlaylist() {
(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;
@@ -1028,77 +853,49 @@ void PlayListWidget::keyReleaseEvent( QKeyEvent *e)
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);
@@ -1109,53 +906,57 @@ void PlayListWidget::readm3u(const QString &filename) {
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()) {
@@ -1165,88 +966,90 @@ void PlayListWidget::readPls(const QString &filename) {
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");
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
+