summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--apps/Applications/opieplayer3.desktop30
-rw-r--r--noncore/multimedia/opieplayer3/audiowidget.cpp125
-rw-r--r--noncore/multimedia/opieplayer3/audiowidget.h46
-rw-r--r--noncore/multimedia/opieplayer3/config.in6
-rw-r--r--noncore/multimedia/opieplayer3/mwindow.cpp320
-rw-r--r--noncore/multimedia/opieplayer3/mwindow.h120
-rw-r--r--noncore/multimedia/opieplayer3/opieplayer3.pro26
-rw-r--r--noncore/multimedia/opieplayer3/playlist.cpp210
-rw-r--r--noncore/multimedia/opieplayer3/playlist.h100
-rw-r--r--noncore/multimedia/opieplayer3/videowidget.cpp122
-rw-r--r--noncore/multimedia/opieplayer3/videowidget.h53
-rw-r--r--packages1
12 files changed, 1159 insertions, 0 deletions
diff --git a/apps/Applications/opieplayer3.desktop b/apps/Applications/opieplayer3.desktop
new file mode 100644
index 0000000..cc2574d
--- a/dev/null
+++ b/apps/Applications/opieplayer3.desktop
@@ -0,0 +1,30 @@
+[Desktop Entry]
+Exec=opie-mediaplayer3
+Icon=opieplayer2/OpiePlayer
+MimeType=audio/mpeg;audio/x-wav;audio/x-mpegurl;audio/x-ogg;video/x-ogm;video/x-ms-asf;video/quicktime;video/mpeg;video/x-msvideo;playlist/plain;
+MimeTypeIcons=Sound;Sound;Sound;Sound;MPEGPlayer;MPEGPlayer;MPEGPlayer;MPEGPlayer;MPEGPlayer;opieplayer2/playlist2
+Type=Application
+Name=Opie Media Player 3
+Comment=A Media Player
+Name[da]=Opie Player 3
+Comment[da]=En medie-afspiller
+Name[de]=Media Player 3
+Comment[de]=Ein Abspielprogramm fuer Multimediadateien
+Name[es]=Multimedia
+Comment[es]=Reproductor de ficheros multimedia
+Name[fr]=Opie Media Player 3
+Comment[fr]=Lecteur multimédia
+Name[it]=Lettore Multimediale 3
+Comment[it]=Lettore di file multimediali
+Name[pt]=Multimédia
+Comment[pt]=Leitor de ficheiros multimédia
+Name[pt_BR]=Leitor multimédia
+Comment[pt_BR]=Leitor de ficheiros multimédia
+Name[sl]=Večpredstavnostni predvajalnik
+Comment[sl]=Večpredstavnostni predvajalnik
+Name[nl]=Mediaspeler
+Comment[nl]=Speler voor Audio en Filmpjes
+Name[lv]=Medijuplejeris
+Comment[lv]=Programma Audio failu atskaņošanai
+Name[ru]=Медиаплеер Opie
+Comment[ru]=Медиаплеер
diff --git a/noncore/multimedia/opieplayer3/audiowidget.cpp b/noncore/multimedia/opieplayer3/audiowidget.cpp
new file mode 100644
index 0000000..7ba6274
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/audiowidget.cpp
@@ -0,0 +1,125 @@
+#include "audiowidget.h"
+#include "../opieplayer2/lib.h"
+#include "../opieplayer2/threadutil.h"
+
+#include <opie2/odebug.h>
+
+#include <qlayout.h>
+#include <qtextview.h>
+#include <qslider.h>
+#include <qlabel.h>
+
+AudioWidget::AudioWidget( QWidget * parent, const char * name, WFlags f)
+ :QWidget(parent,name,f)
+{
+ m_xineLib = 0;
+
+ m_MainLayout = new QVBoxLayout(this);
+ m_MainLayout->setAutoAdd(true);
+ m_InfoBox = new QTextView(this);
+ m_PosSlider = new QSlider(QSlider::Horizontal,this);
+ m_PosSlider->setTickInterval(60);
+ connect(m_PosSlider,SIGNAL(valueChanged(int)),this,SLOT(slotNewPos(int)));
+ connect(m_PosSlider,SIGNAL(sliderMoved(int)),this,SLOT(slotNewPos(int)));
+ connect(m_PosSlider,SIGNAL(sliderPressed()),this,SLOT(sliderPressed()));
+ connect(m_PosSlider,SIGNAL(sliderReleased()),this,SLOT(sliderReleased()));
+ m_pressed = false;
+ m_uppos=0;
+}
+
+AudioWidget::~AudioWidget()
+{
+}
+
+void AudioWidget::slotNewPos(int pos)
+{
+ if (!m_xineLib) return;
+ if (m_uppos==pos) return;
+ m_xineLib->seekTo(pos);
+}
+
+void AudioWidget::sliderPressed()
+{
+ m_pressed = true;
+}
+
+void AudioWidget::sliderReleased()
+{
+ m_pressed = false;
+}
+
+void AudioWidget::closeEvent(QCloseEvent*e)
+{
+ odebug << "AudioWidget::closeEvent(QCloseEvent*e)" << oendl;
+ if (m_xineLib) {
+ m_xineLib->stop();
+ }
+ QWidget::closeEvent(e);
+}
+
+void AudioWidget::playFile(const DocLnk&aLnk,XINE::Lib*aLib)
+{
+ m_current = aLnk;
+ if (m_xineLib != aLib) {
+ disconnect(m_xineLib);
+ m_xineLib = aLib;
+ }
+ if (!m_xineLib) {
+ return;
+ }
+ m_uppos=0;
+ m_PosSlider->setValue(0);
+ m_xineLib->setShowVideo(false);
+ m_xineLib->play(m_current.file());
+ // title
+ QString title = m_xineLib->metaInfo(0);
+ // artist
+ QString artist = m_xineLib->metaInfo(2);
+ // album
+ QString album = m_xineLib->metaInfo(4);
+
+ int l = m_xineLib->length();
+ m_PosSlider->setRange(0,l);
+ QString laenge="";
+ int h = l/3600;
+ l-=h*3600;
+ int m = l/60;
+ l-=m*60;
+ if (h>0) {
+ laenge+=QString("%1 h").arg(h);
+ }
+ if (m>0) {
+ if (!laenge.isEmpty()) laenge+=" ";
+ laenge+=QString("%1 m").arg(m);
+ }
+ if (l>0) {
+ if (!laenge.isEmpty()) laenge+=" ";
+ laenge+=QString("%1 s").arg(l);
+ }
+ QString text = "<qt>";
+ if (artist.length()) {
+ text+="<H2><center>"+artist+"</center></h2>";
+ }
+ if (title.length()) {
+ text+="<H2><center>"+title+"</center></h2>";
+ }
+ if (album.length()) {
+ text+="<H2><center>"+album+"</center></h2>";
+ }
+ text+="<h3><center>"+laenge+"</center></h3>";
+ m_InfoBox->setText(text);
+}
+
+void AudioWidget::stopPlaying()
+{
+ if (m_xineLib) {
+ m_xineLib->stop();
+ }
+}
+
+void AudioWidget::updatePos(int val)
+{
+ if (m_pressed) return;
+ m_uppos = val;
+ m_PosSlider->setValue(val);
+}
diff --git a/noncore/multimedia/opieplayer3/audiowidget.h b/noncore/multimedia/opieplayer3/audiowidget.h
new file mode 100644
index 0000000..07b51b6
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/audiowidget.h
@@ -0,0 +1,46 @@
+#ifndef _audiowidget_h
+#define _audiowidget_h
+
+#include <qwidget.h>
+
+#include <qpe/applnk.h>
+
+namespace XINE {
+ class Lib;
+}
+
+class QVBoxLayout;
+class QTextView;
+class QSlider;
+class QLabel;
+
+class AudioWidget:public QWidget
+{
+ Q_OBJECT
+public:
+ AudioWidget( QWidget * parent=0, const char * name=0, WFlags f=0 );
+ virtual ~AudioWidget();
+
+ void playFile(const DocLnk&,XINE::Lib*);
+
+public slots:
+ virtual void stopPlaying();
+ virtual void updatePos(int);
+
+protected:
+ XINE::Lib*m_xineLib;
+ DocLnk m_current;
+ QVBoxLayout*m_MainLayout;
+ QTextView*m_InfoBox;
+ QSlider*m_PosSlider;
+ bool m_pressed;
+ int m_uppos;
+
+protected slots:
+ virtual void closeEvent(QCloseEvent*e);
+ virtual void slotNewPos(int pos);
+ virtual void sliderPressed();
+ virtual void sliderReleased();
+};
+
+#endif
diff --git a/noncore/multimedia/opieplayer3/config.in b/noncore/multimedia/opieplayer3/config.in
new file mode 100644
index 0000000..f2465a8
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/config.in
@@ -0,0 +1,6 @@
+ config OPIEPLAYER3
+ boolean "opieplayer3 (multimedia player based on libxine)"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI && LIBXINE_DEP
+ comment "opieplayer2 requires libopie2core, libopie2ui and libxine"
+ depends !( ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI && LIBXINE_DEP )
diff --git a/noncore/multimedia/opieplayer3/mwindow.cpp b/noncore/multimedia/opieplayer3/mwindow.cpp
new file mode 100644
index 0000000..dab910a
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/mwindow.cpp
@@ -0,0 +1,320 @@
+/*
+ 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 "mwindow.h"
+#include "playlist.h"
+#include "audiowidget.h"
+#include "videowidget.h"
+#include "../opieplayer2/lib.h"
+
+#include <opie2/oapplicationfactory.h>
+#include <opie2/owidgetstack.h>
+#include <opie2/ofileselector.h>
+#include <opie2/odebug.h>
+
+#include <qpe/resource.h>
+
+#include <qfileinfo.h>
+#include <qfile.h>
+#include <qtoolbar.h>
+#include <qpopupmenu.h>
+#include <qmenubar.h>
+#include <qtimer.h>
+
+OPIE_EXPORT_APP( Opie::Core::OApplicationFactory<PMainWindow>)
+
+using namespace Opie::Ui;
+
+PMainWindow::PMainWindow(QWidget*w, const char*name, WFlags f)
+ : QMainWindow(w,name,f)
+{
+ setCaption( QObject::tr("Opie Mediaplayer 3" ) );
+ setupActions();
+ setupToolBar();
+ setupMenu();
+
+ m_stack = new OWidgetStack(this);
+ m_stack->forceMode(Opie::Ui::OWidgetStack::SmallScreen);
+ setCentralWidget(m_stack );
+ m_playList = new PlaylistView(m_stack,"playlist");
+ m_stack->addWidget(m_playList,stack_list);
+
+ m_sfl = new OFileSelector("video/*;audio/*",m_stack);
+ m_stack->addWidget(m_sfl,stack_file);
+ connect(m_sfl, SIGNAL(fileSelected(const DocLnk &)), m_playList, SLOT(slotAddFile(const DocLnk &)));
+ m_AudioPlayer = new AudioWidget(m_stack);
+ m_stack->addWidget(m_AudioPlayer,stack_audio);
+ connect(this,SIGNAL(sigPos(int)),m_AudioPlayer,SLOT(updatePos(int)));
+ m_VideoPlayer = new VideoWidget(m_stack);
+ m_stack->addWidget(m_VideoPlayer,stack_video);
+ connect(this,SIGNAL(sigPos(int)),m_VideoPlayer,SLOT(updatePos(int)));
+ connect(m_VideoPlayer,SIGNAL(videoclicked()),this,SLOT(slotVideoclicked()));
+
+ m_stack->raiseWidget(stack_list);
+ m_PlayLib = 0;
+ m_LastItem = 0;
+}
+
+void PMainWindow::checkLib()
+{
+ if (m_PlayLib == 0) {
+ m_PlayLib = new XINE::Lib(XINE::Lib::InitializeImmediately);
+ m_PlayLib->ensureInitialized();
+ connect(m_PlayLib,SIGNAL(stopped()),this,SLOT(slotStopped()));
+ }
+}
+
+PMainWindow::~PMainWindow()
+{
+ if (m_PlayLib) {
+ m_PlayLib->stop();
+ delete m_PlayLib;
+ }
+}
+
+void PMainWindow::fileSelected(const DocLnk&)
+{
+}
+
+void PMainWindow::slotAppendFiles()
+{
+ m_stack->raiseWidget(m_sfl);
+}
+
+void PMainWindow::slotShowList()
+{
+ m_stack->raiseWidget(m_playList);
+}
+
+void PMainWindow::slotPlayList()
+{
+ if (m_playing && m_LastItem && m_PlayLib) {
+ if (!m_LastItem->isVideo()) {
+ m_stack->raiseWidget(stack_audio);
+ } else {
+ m_stack->raiseWidget(stack_video);
+ }
+ return;
+ }
+
+ m_LastItem = m_playList->currentItem();
+ if (!m_LastItem) {
+ slotPlayNext();
+ return;
+ }
+ //m_VideoPlayer->setFullScreen(a_ShowFull->isOn());
+ slotPlayCurrent();
+}
+
+void PMainWindow::hideVideo()
+{
+ if (m_VideoPlayer->isVisible() && a_ShowFull->isOn()) {
+ m_VideoPlayer->showNormal();
+ m_VideoPlayer->hide();
+ }
+}
+
+void PMainWindow::slotPlayCurrent()
+{
+ if (!m_LastItem) {
+ if (m_PlayLib) m_PlayLib->stop();
+ hideVideo();
+ m_stack->raiseWidget(stack_list);
+ return;
+ }
+ checkLib();
+ m_CurrentPos = 0;
+ m_playList->setCurrentItem(m_LastItem);
+ odebug << "Pos: " << m_PlayLib->currentTime() << oendl;
+ if (!m_LastItem->isVideo()) {
+ hideVideo();
+ m_playing = true;
+ QTimer::singleShot( 500, this, SLOT( slotCheckPos() ) );
+ m_stack->raiseWidget(stack_audio);
+ m_AudioPlayer->playFile(m_LastItem->Lnk(),m_PlayLib);
+ } else {
+ m_playing = true;
+ QTimer::singleShot( 500, this, SLOT( slotCheckPos() ) );
+ setupVideo(a_ShowFull->isOn());
+ m_VideoPlayer->playFile(m_LastItem->Lnk(),m_PlayLib);
+ }
+}
+
+void PMainWindow::slotPlayNext()
+{
+ PlaylistItem*item = m_playList->nextItem(m_LastItem);
+ if (!item) return;
+ m_LastItem = item;
+ slotPlayCurrent();
+}
+
+void PMainWindow::slotGoNext()
+{
+ m_LastItem = m_playList->nextItem(m_LastItem);
+ slotPlayCurrent();
+}
+
+void PMainWindow::slotPlayPrevious()
+{
+ PlaylistItem*item = m_playList->prevItem(m_LastItem);
+ if (!item) return;
+ m_LastItem = item;
+ slotPlayCurrent();
+}
+
+void PMainWindow::slotUserStop()
+{
+ if (!m_playing || !m_PlayLib) return;
+ m_playing = false;
+ m_PlayLib->stop();
+ hideVideo();
+ m_stack->raiseWidget(stack_list);
+}
+
+void PMainWindow::slotStopped()
+{
+ if (!m_playing) return;
+ m_playing = false;
+ slotGoNext();
+}
+
+void PMainWindow::slotCheckPos()
+{
+ if (!m_playing) return;
+ emit sigPos(m_PlayLib->currentTime());
+ QTimer::singleShot( 1000, this, SLOT( slotCheckPos() ) );
+}
+
+void PMainWindow::slotRemoveFiles()
+{
+ slotUserStop();
+ PlaylistItem* Item = m_playList->currentItem();
+ m_stack->raiseWidget(stack_list);
+ m_playList->removeFromList(Item);
+}
+
+void PMainWindow::setupActions()
+{
+ a_appendFiles = new QAction(tr("Open file(s)"),Resource::loadIconSet( "opieplayer2/add_to_playlist" ), 0, 0, this, 0, false );
+ connect(a_appendFiles,SIGNAL(activated()),this,SLOT(slotAppendFiles()));
+ a_showPlaylist = new QAction(tr("Show playlist"),Resource::loadIconSet( "txt" ), 0, 0, this, 0, false );
+ connect(a_showPlaylist,SIGNAL(activated()),this,SLOT(slotShowList()));
+ a_removeFiles = new QAction(tr("Remove file"),Resource::loadIconSet( "opieplayer2/remove_from_playlist" ), 0, 0, this, 0, false );
+ connect(a_removeFiles,SIGNAL(activated()),this,SLOT(slotRemoveFiles()));
+
+ playersGroup = new QActionGroup(this,"playgroup",false);
+
+ a_playAction = new QAction(tr("Play list"),Resource::loadIconSet( "opieplayer2/play" ), 0, 0, this, 0, false );
+ connect(a_playAction,SIGNAL(activated()),this,SLOT(slotPlayList()));
+ a_playNext = new QAction(tr("Play next in list"),Resource::loadIconSet( "fastforward" ), 0, 0, this, 0, false );
+ connect(a_playNext,SIGNAL(activated()),this,SLOT(slotPlayNext()));
+ a_playPrevious = new QAction(tr("Play previous in list"),Resource::loadIconSet( "fastback" ), 0, 0, this, 0, false );
+ connect(a_playPrevious,SIGNAL(activated()),this,SLOT(slotPlayPrevious()));
+ a_ShowFull = new QAction(tr("Show videos fullscreen"),Resource::loadIconSet( "fullscreen" ), 0, 0, this, 0, true );
+ connect(a_ShowFull,SIGNAL(toggled(bool)),this,SLOT(slotToggleFull(bool)));
+ a_stopPlay = new QAction(tr("Show videos fullscreen"),Resource::loadIconSet( "stop" ), 0, 0, this, 0, false );
+ connect(a_stopPlay,SIGNAL(activated()),this,SLOT(slotUserStop()));
+
+ playersGroup->insert(a_playPrevious);
+ playersGroup->insert(a_playAction);
+ playersGroup->insert(a_stopPlay);
+ playersGroup->insert(a_playNext);
+ //playersGroup->insert(a_ShowFull);
+}
+
+void PMainWindow::setupToolBar()
+{
+ setToolBarsMovable( false );
+ m_toolBar = new QToolBar( this );
+ //m_menuBar = new QMenuBar(m_toolBar);
+ m_menuBar=menuBar();
+ addToolBar(m_toolBar);
+ m_toolBar->setHorizontalStretchable( true );
+ a_appendFiles->addTo(m_toolBar);
+ a_removeFiles->addTo(m_toolBar);
+ a_showPlaylist->addTo(m_toolBar);
+ a_ShowFull->addTo(m_toolBar);
+ playersGroup->addTo(m_toolBar);
+}
+
+void PMainWindow::setupVideo(bool full)
+{
+ if (full) {
+ m_VideoPlayer->setBackgroundColor(black);
+ m_VideoPlayer->reparent(0, WStyle_Customize | WStyle_NoBorderEx, QPoint(0,0));
+ m_VideoPlayer->setGeometry(0,0,qApp->desktop()->size().width(),qApp->desktop()->size().height());
+ m_VideoPlayer->showFullScreen();
+ } else {
+ m_VideoPlayer->hide();
+ m_stack->addWidget(m_VideoPlayer,stack_video);
+ m_stack->raiseWidget(stack_video);
+ }
+ m_VideoPlayer->fullScreen(full);
+ m_VideoPlayer->disconnect(this);
+ connect(m_VideoPlayer,SIGNAL(videoclicked()),this,SLOT(slotVideoclicked()));
+}
+
+void PMainWindow::slotVideoclicked()
+{
+ odebug << "PMainWindow::slotVideoclicked()" << oendl;
+ if (a_ShowFull->isOn()) {
+ a_ShowFull->setOn(false);
+ slotToggleFull(false);
+ }
+}
+
+void PMainWindow::slotToggleFull(bool how)
+{
+ if (m_PlayLib && m_VideoPlayer->isVisible() && m_PlayLib->isShowingVideo()) {
+ m_PlayLib->pause(true);
+ setupVideo(how);
+ m_PlayLib->pause(false);
+ }
+}
+
+void PMainWindow::setupMenu()
+{
+ fileMenu = new QPopupMenu( m_menuBar );
+ m_menuBar->insertItem( tr( "Playlist" ), fileMenu );
+ a_appendFiles->addTo(fileMenu);
+ a_removeFiles->addTo(fileMenu);
+
+ dispMenu = new QPopupMenu( m_menuBar );
+ m_menuBar->insertItem( tr( "Show" ), dispMenu );
+ a_showPlaylist->addTo(dispMenu);
+ a_ShowFull->addTo(dispMenu);
+ playMenu = new QPopupMenu(m_menuBar);
+ m_menuBar->insertItem(tr("Playing"),playMenu);
+
+ playersGroup->addTo(playMenu);
+}
diff --git a/noncore/multimedia/opieplayer3/mwindow.h b/noncore/multimedia/opieplayer3/mwindow.h
new file mode 100644
index 0000000..28f820f
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/mwindow.h
@@ -0,0 +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 _mwindow_h
+#define _mwindow_h
+
+#include <qmainwindow.h>
+
+#include <qpe/applnk.h>
+
+#include <qaction.h>
+
+namespace Opie {
+namespace Ui {
+ class OWidgetStack;
+ class OFileSelector;
+}
+}
+
+namespace XINE {
+ class Lib;
+}
+
+class PlaylistView;
+class QToolBar;
+class QPopupMenu;
+class QMenuBar;
+class AudioWidget;
+class VideoWidget;
+class PlaylistItem;
+
+class PMainWindow : public QMainWindow {
+ Q_OBJECT
+public:
+ static QString appName() { return QString::fromLatin1("opie-mediaplayer3" ); }
+ PMainWindow(QWidget*, const char*, WFlags );
+ virtual ~PMainWindow();
+
+public slots:
+ virtual void slotVideoclicked();
+protected:
+ static const int stack_list = 0;
+ static const int stack_file = 1;
+ static const int stack_audio = 2;
+ static const int stack_video = 3;
+ Opie::Ui::OWidgetStack *m_stack;
+ Opie::Ui::OFileSelector*m_sfl;
+ PlaylistView*m_playList;
+ AudioWidget*m_AudioPlayer;
+ VideoWidget*m_VideoPlayer;
+
+ QAction*a_appendFiles,*a_removeFiles,*a_showPlaylist,*a_playAction,*a_deleteItem,*a_stopAction;
+ QAction*a_playNext,*a_playPrevious,*a_ShowFull,*a_stopPlay;
+ QActionGroup*playersGroup;
+ QToolBar*m_toolBar;
+ QPopupMenu *fileMenu,*dispMenu,*playMenu;
+ QMenuBar*m_menuBar;
+ XINE::Lib*m_PlayLib;
+
+ void setupActions();
+ void setupToolBar();
+ void setupMenu();
+ void checkLib();
+ void setupVideo(bool full);
+ void hideVideo();
+
+ bool m_playing:1;
+ int m_CurrentPos;
+ PlaylistItem*m_LastItem;
+
+protected slots:
+ virtual void fileSelected(const DocLnk&);
+ virtual void slotAppendFiles();
+ virtual void slotRemoveFiles();
+ virtual void slotShowList();
+ virtual void slotPlayList();
+ virtual void slotPlayNext();
+ virtual void slotPlayPrevious();
+ virtual void slotPlayCurrent();
+ virtual void slotStopped();
+ virtual void slotCheckPos();
+ virtual void slotToggleFull(bool);
+ virtual void slotUserStop();
+ virtual void slotGoNext();
+
+signals:
+ void sigPos(int);
+};
+
+#endif
diff --git a/noncore/multimedia/opieplayer3/opieplayer3.pro b/noncore/multimedia/opieplayer3/opieplayer3.pro
new file mode 100644
index 0000000..1c7149f
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/opieplayer3.pro
@@ -0,0 +1,26 @@
+CONFIG = qt warn_on quick-app
+HEADERS = mwindow.h playlist.h ../opieplayer2/lib.h ../opieplayer2/threadutil.h \
+ ../opieplayer2/alphablend.h ../opieplayer2/yuv2rgb.h \
+ audiowidget.h ../opieplayer2/xinevideowidget.h \
+ videowidget.h
+SOURCES = mwindow.cpp playlist.cpp ../opieplayer2/lib.cpp ../opieplayer2/threadutil.cpp \
+ ../opieplayer2/nullvideo.c \
+ ../opieplayer2/alphablend.c ../opieplayer2/yuv2rgb.c \
+ audiowidget.cpp ../opieplayer2/xinevideowidget.cpp \
+ videowidget.cpp ../opieplayer2/yuv2rgb_arm2.c ../opieplayer2/yuv2rgb_arm4l.S
+
+TARGET = opie-mediaplayer3
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += $(OPIEDIR)/include
+LIBS += -lqpe -lpthread -lopiecore2 -lopieui2 -lqtaux2 -lxine
+MOC_DIR = qpeobj
+OBJECTS_DIR = qpeobj
+
+include( $(OPIEDIR)/include.pro )
+
+!isEmpty( LIBXINE_INC_DIR ) {
+ INCLUDEPATH = $$LIBXINE_INC_DIR $$INCLUDEPATH
+}
+!isEmpty( LIBXINE_LIB_DIR ) {
+ LIBS = -L$$LIBXINE_LIB_DIR $$LIBS
+}
diff --git a/noncore/multimedia/opieplayer3/playlist.cpp b/noncore/multimedia/opieplayer3/playlist.cpp
new file mode 100644
index 0000000..272a71e
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/playlist.cpp
@@ -0,0 +1,210 @@
+/*
+ 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 "playlist.h"
+#include "../opieplayer2/lib.h"
+
+#include <opie2/odebug.h>
+#include <opie2/oresource.h>
+
+#include <qpe/resource.h>
+
+#include <qfileinfo.h>
+
+PlaylistItem::PlaylistItem(const DocLnk& aLink,PlaylistView*parent)
+ :QListViewItem(parent),m_Content(aLink),m_video(false)
+{
+}
+
+PlaylistItem::PlaylistItem(const DocLnk&aLink,PlaylistView*parent,PlaylistItem*after)
+ :QListViewItem(parent,after),m_Content(aLink),m_video(false)
+{
+}
+
+void PlaylistItem::Video(bool y)
+{
+ m_video=y;
+ if (m_video) {
+ setPixmap(0,Opie::Core::OResource::loadPixmap("opieplayer2/videofile"));
+ } else {
+ setPixmap(0,Opie::Core::OResource::loadPixmap("opieplayer2/musicfile"));
+ }
+}
+
+PlaylistItem::~PlaylistItem()
+{
+}
+
+/* PlaylistView Methods */
+PlaylistView::PlaylistView(QWidget *parent, const char *name)
+ : QListView(parent,name)
+{
+// columnLabels << tr("FullName");
+ columnLabels << tr(""); // icon
+ columnLabels << tr("File");
+ columnLabels << tr("Playtime");
+ columnLabels << tr("Artist");
+ columnLabels << tr("Album");
+ columnLabels << tr("Title");
+ columnLabels << tr("Type");
+ columnLabels << tr("Size");
+ for (QStringList::Iterator it = columnLabels.begin(); it != columnLabels.end(); ++it) {
+ addColumn(*it);
+ }
+ m_Infolib=0;
+ setAllColumnsShowFocus(true);
+ setSelectionMode(Single);
+ setSorting(-1);
+ m_lastItem = 0;
+}
+
+PlaylistView::~PlaylistView()
+{
+ if (m_Infolib) delete m_Infolib;
+}
+
+void PlaylistView::checkLib()
+{
+ if (!m_Infolib) {
+ m_Infolib = new XINE::Lib(XINE::Lib::InitializeImmediately);
+ m_Infolib->ensureInitialized();
+ }
+}
+
+void PlaylistView::slotAddFile(const DocLnk&aLink)
+{
+ QFileInfo fileInfo(aLink.file());
+ if (!fileInfo.exists()) return;
+ checkLib();
+
+ m_Infolib->stop();
+
+ if (m_lastItem) {
+ m_lastItem = new PlaylistItem(aLink,this,m_lastItem);
+ } else {
+ m_lastItem = new PlaylistItem(aLink,this);
+ }
+ m_lastItem->setExpandable(false);
+ m_lastItem->setText(1,aLink.name());
+ int i = m_Infolib->setfile(aLink.file());
+ odebug << "File set: " << i << oendl;
+ if (i<1) {
+ return;
+ }
+
+ QString codec = m_Infolib->metaInfo(6);
+ if (codec.isEmpty()) {
+ codec = m_Infolib->metaInfo(7);
+ }
+ // codec
+ m_lastItem->setText(COL_TYPE,codec);
+ // title
+ m_lastItem->setText(COL_TITLE,m_Infolib->metaInfo(0));
+ // artist
+ m_lastItem->setText(COL_ARTIST,m_Infolib->metaInfo(2));
+ // album
+ m_lastItem->setText(COL_ALBUM,m_Infolib->metaInfo(4));
+ int l = m_Infolib->length();
+ int h = l/3600;
+ l-=h*3600;
+ int m = l/60;
+ l-=m*60;
+ codec = "";
+ if (h>0) {
+ codec+=QString("%1 h").arg(h);
+ }
+ if (m>0) {
+ if (!codec.isEmpty()) codec+=" ";
+ codec+=QString("%1 m").arg(m);
+ }
+ if (l>0) {
+ if (!codec.isEmpty()) codec+=" ";
+ codec+=QString("%1 s").arg(l);
+ }
+ // time
+ m_lastItem->setText(COL_TIME,codec);
+ m_lastItem->Video(m_Infolib->hasVideo());
+ m_items.append(m_lastItem);
+}
+
+void PlaylistView::removeFromList(PlaylistItem*Item)
+{
+ if (!Item)return;
+ t_itemlist::Iterator iter;
+ iter = m_items.find(Item);
+ if (iter!=m_items.end()) {
+ m_items.remove(iter);
+ }
+ delete Item;
+}
+
+XINE::Lib*PlaylistView::getXine()
+{
+ checkLib();
+ return m_Infolib;
+}
+
+void PlaylistView::setCurrentItem(PlaylistItem*aItem)
+{
+ setSelected(aItem,true);
+}
+
+PlaylistItem* PlaylistView::currentItem()const
+{
+ QListViewItem*it = selectedItem();
+ if (!it) return 0;
+ return (PlaylistItem*)it;
+}
+
+PlaylistItem* PlaylistView::nextItem(PlaylistItem*parent)const
+{
+ if (m_items.count()==0) return 0;
+ if (!parent) return m_items[0];
+ for (unsigned j=0; j<m_items.count()-1;++j) {
+ if (m_items[j]==parent) {
+ return m_items[j+1];
+ }
+ }
+ return 0;
+}
+
+PlaylistItem* PlaylistView::prevItem(PlaylistItem*parent)const
+{
+ if (m_items.count()==0) return 0;
+ if (!parent) return m_items[m_items.count()-1];
+ for (unsigned j=m_items.count()-1; j>0;--j) {
+ if (m_items[j]==parent) {
+ return m_items[j-1];
+ }
+ }
+ return 0;
+}
diff --git a/noncore/multimedia/opieplayer3/playlist.h b/noncore/multimedia/opieplayer3/playlist.h
new file mode 100644
index 0000000..ad4c472
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/playlist.h
@@ -0,0 +1,100 @@
+/*
+ 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 __playlist_h
+#define __playlist_h
+
+#include <qpe/applnk.h>
+
+#include <qlistview.h>
+#include <qstringlist.h>
+
+namespace XINE {
+ class Lib;
+}
+
+class PlaylistView;
+
+class PlaylistItem:public QListViewItem
+{
+public:
+ PlaylistItem(const DocLnk&aLink,PlaylistView*parent);
+ PlaylistItem(const DocLnk&aLink,PlaylistView*parent,PlaylistItem*after);
+ virtual ~PlaylistItem();
+
+ const DocLnk&Lnk()const{return m_Content;}
+ void Video(bool y);
+ bool isVideo()const{return m_video;}
+
+protected:
+ DocLnk m_Content;
+ bool m_video:1;
+};
+
+typedef QValueList<PlaylistItem*> t_itemlist;
+
+class PlaylistView:public QListView
+{
+ Q_OBJECT
+public:
+ PlaylistView( QWidget *parent = 0, const char *name = 0);
+ virtual ~PlaylistView();
+ XINE::Lib*getXine();
+ PlaylistItem* currentItem()const;
+ void setCurrentItem(PlaylistItem*);
+ PlaylistItem* nextItem(PlaylistItem*parent)const;
+ PlaylistItem* prevItem(PlaylistItem*parent)const;
+
+ void removeFromList(PlaylistItem*Item);
+
+ enum itemcolumns{
+ COL_ICON=0,
+ COL_FILE=1,
+ COL_TIME=2,
+ COL_ARTIST=3,
+ COL_ALBUM=4,
+ COL_TITLE=5,
+ COL_TYPE=6,
+ COL_SIZE=7
+ };
+public slots:
+ virtual void slotAddFile(const DocLnk&);
+
+protected:
+ void checkLib();
+ QStringList columnLabels;
+ XINE::Lib*m_Infolib;
+ PlaylistItem*m_lastItem;
+ t_itemlist m_items;
+};
+
+#endif
diff --git a/noncore/multimedia/opieplayer3/videowidget.cpp b/noncore/multimedia/opieplayer3/videowidget.cpp
new file mode 100644
index 0000000..c5c63c7
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/videowidget.cpp
@@ -0,0 +1,122 @@
+#include "videowidget.h"
+#include "../opieplayer2/lib.h"
+#include "../opieplayer2/threadutil.h"
+#include "../opieplayer2/xinevideowidget.h"
+
+#include <opie2/odebug.h>
+
+#include <qpe/qpeapplication.h>
+
+#include <qlayout.h>
+#include <qslider.h>
+#include <qlabel.h>
+
+VideoWidget::VideoWidget( QWidget * parent, const char * name, WFlags f)
+ :QWidget(parent,name,f)
+{
+ m_xineLib = 0;
+
+ m_MainLayout = new QVBoxLayout(this);
+ m_MainLayout->setAutoAdd(true);
+ m_Videodisplay = new XineVideoWidget(this,"videodisp");
+ m_PosSlider = new QSlider(QSlider::Horizontal,this);
+ m_PosSlider->setTickInterval(60);
+ connect(m_PosSlider,SIGNAL(valueChanged(int)),this,SLOT(slotNewPos(int)));
+ connect(m_PosSlider,SIGNAL(sliderMoved(int)),this,SLOT(slotNewPos(int)));
+ connect(m_PosSlider,SIGNAL(sliderPressed()),this,SLOT(sliderPressed()));
+ connect(m_PosSlider,SIGNAL(sliderReleased()),this,SLOT(sliderReleased()));
+ connect(m_Videodisplay,SIGNAL(videoResized ( const QSize & )),this,SLOT(slot_Videoresized(const QSize&)));
+ connect(m_Videodisplay,SIGNAL(clicked()),this,SLOT(slotClicked()));
+ m_pressed = false;
+ m_uppos=0;
+}
+
+VideoWidget::~VideoWidget()
+{
+}
+
+void VideoWidget::slotClicked()
+{
+ odebug << "clicked " << oendl;
+ emit videoclicked();
+}
+
+void VideoWidget::closeEvent(QCloseEvent*e)
+{
+}
+
+void VideoWidget::slotNewPos(int pos)
+{
+ if (!m_xineLib) return;
+ if (m_uppos==pos) return;
+ m_xineLib->seekTo(pos);
+}
+
+void VideoWidget::sliderPressed()
+{
+ m_pressed = true;
+}
+
+void VideoWidget::sliderReleased()
+{
+ m_pressed = false;
+}
+
+void VideoWidget::fullScreen(bool how)
+{
+ if (how) {
+ m_PosSlider->hide();
+ } else {
+ m_PosSlider->show();
+ }
+}
+
+void VideoWidget::playFile(const DocLnk&aLnk,XINE::Lib*aLib)
+{
+ m_current = aLnk;
+ if (m_xineLib != aLib) {
+ disconnect(m_xineLib);
+ m_xineLib = aLib;
+ if (aLib) m_xineLib->setWidget(m_Videodisplay);
+ }
+ if (!m_xineLib) {
+ return;
+ }
+ connect(m_xineLib,SIGNAL(stopped()),this,SLOT(slotStopped()));
+ m_uppos=0;
+ m_PosSlider->setValue(0);
+ m_xineLib->setWidget(m_Videodisplay);
+ m_xineLib->setShowVideo(true);
+ m_xineLib->resize(m_Videodisplay->size());
+ m_xineLib->play(m_current.file());
+ int l = m_xineLib->length();
+ m_PosSlider->setRange(0,l);
+ m_PosSlider->setPageStep(l/10);
+}
+
+void VideoWidget::stopPlaying()
+{
+ if (m_xineLib) {
+ m_xineLib->stop();
+ }
+}
+
+void VideoWidget::slotStopped()
+{
+// check fullscreen here!
+}
+
+void VideoWidget::slot_Videoresized(const QSize&s)
+{
+ odebug << "Videoresized: " << s << oendl;
+ if (m_xineLib) {
+ m_xineLib->resize(s);
+ }
+}
+
+void VideoWidget::updatePos(int val)
+{
+ if (m_pressed) return;
+ m_uppos = val;
+ m_PosSlider->setValue(val);
+}
diff --git a/noncore/multimedia/opieplayer3/videowidget.h b/noncore/multimedia/opieplayer3/videowidget.h
new file mode 100644
index 0000000..f181980
--- a/dev/null
+++ b/noncore/multimedia/opieplayer3/videowidget.h
@@ -0,0 +1,53 @@
+#ifndef __videowidget_h
+#define __videowidget_h
+#include <qwidget.h>
+
+#include <qpe/applnk.h>
+
+namespace XINE {
+ class Lib;
+}
+
+class QVBoxLayout;
+class QSlider;
+class QLabel;
+class XineVideoWidget;
+
+class VideoWidget:public QWidget
+{
+ Q_OBJECT
+public:
+ VideoWidget( QWidget * parent=0, const char * name=0, WFlags f=0 );
+ virtual ~VideoWidget();
+
+ void playFile(const DocLnk&,XINE::Lib*);
+ void fullScreen(bool how);
+
+signals:
+ void videoclicked();
+
+public slots:
+ virtual void stopPlaying();
+ virtual void updatePos(int);
+
+protected:
+ XINE::Lib*m_xineLib;
+ DocLnk m_current;
+ QVBoxLayout*m_MainLayout;
+ XineVideoWidget*m_Videodisplay;
+ QWidget * m_holder;
+ QSlider*m_PosSlider;
+ bool m_pressed:1;
+ int m_uppos;
+
+protected slots:
+ virtual void closeEvent(QCloseEvent*e);
+ virtual void slotNewPos(int pos);
+ virtual void sliderPressed();
+ virtual void sliderReleased();
+ virtual void slot_Videoresized(const QSize&);
+ virtual void slotStopped();
+ virtual void slotClicked();
+};
+
+#endif
diff --git a/packages b/packages
index 59b0873..fab711b 100644
--- a/packages
+++ b/packages
@@ -99,128 +99,129 @@ CONFIG_LIBOPIE2UI libopie2/opieui opieui.pro
CONFIG_LIBOPIETOOTH noncore/net/opietooth/lib lib.pro
CONFIG_LIBOPIE noncore/unsupported/libopie libopie.pro
CONFIG_LIBQPE library library.pro
CONFIG_LIBQPE-X11 x11/libqpe-x11 libqpe-x11.pro
CONFIG_LIBQRSYNC rsync rsync.pro
CONFIG_LIBQTAUX libqtaux libqtaux.pro
CONFIG_LIBSLCOMPAT libslcompat libslcompat.pro
CONFIG_LIBSQL libsql libsql.pro
CONFIG_LIBTREMOR core/multimedia/opieplayer/vorbis/tremor tremor.pro
CONFIG_LIBTREMORPLUGIN core/multimedia/opieplayer/vorbis libtremor.pro
CONFIG_LIGHT-AND-POWER core/settings/light-and-power light-and-power.pro
CONFIG_LIQUID noncore/styles/liquid liquid.pro
CONFIG_LOCKAPPLET core/applets/lockapplet lockapplet.pro
CONFIG_LOGOUTAPPLET core/applets/logoutapplet logoutapplet.pro
CONFIG_MAIL3 noncore/net/mail mail.pro
CONFIG_MAILAPPLET noncore/net/mail/taskbarapplet taskbarapplet.pro
CONFIG_MAILIT noncore/unsupported/mailit mailit.pro
CONFIG_MAIN_TAB_EXAMPLE examples/main-tab main-tab.pro
CONFIG_MEDIUMMOUNT noncore/settings/mediummount mediummount.pro
CONFIG_MEMORYAPPLET noncore/applets/memoryapplet memoryapplet.pro
CONFIG_METAL noncore/styles/metal metal.pro
CONFIG_MINDBREAKER noncore/games/mindbreaker mindbreaker.pro
CONFIG_MINESWEEP noncore/games/minesweep minesweep.pro
CONFIG_MOBILEMSG noncore/comm/mobilemsg mobilemsg.pro
CONFIG_MODPLUG core/multimedia/opieplayer/modplug modplug.pro
CONFIG_MULTIAUTH_BLUEPING noncore/securityplugins/blueping bluepingplugin.pro
CONFIG_MULTIAUTH_DUMMY noncore/securityplugins/dummy dummyplugin.pro
CONFIG_MULTIAUTH_NOTICE noncore/securityplugins/notice noticeplugin.pro
CONFIG_MULTIAUTH_PIN noncore/securityplugins/pin pinplugin.pro
CONFIG_MULTIKEYAPPLET core/applets/multikeyapplet multikeyapplet.pro
CONFIG_MULTIKEY inputmethods/multikey multikey.pro
CONFIG_NETSYSTEMTIME noncore/settings/netsystemtime netsystemtime.pro
CONFIG_NETWORKAPPLET noncore/applets/networkapplet networkapplet.pro
CONFIG_NETWORKSETUP noncore/settings/networksettings networksettings.pro
CONFIG_NOTESAPPLET noncore/applets/notesapplet notesapplet.pro
CONFIG_NS2BT noncore/settings/networksettings2/bluetooth bluetooth.pro
CONFIG_NS2GPRS noncore/settings/networksettings2/gprs GPRS.pro
CONFIG_NS2CABLE noncore/settings/networksettings2/cable cable.pro
CONFIG_NS2CORE noncore/settings/networksettings2/networksettings2 networksettings2.pro
CONFIG_NS2OPIETOOTH noncore/settings/networksettings2/opietooth2 opietooth2.pro
CONFIG_NS2OPIETOOTHAPPLET noncore/settings/networksettings2/opietooth2_applet opietooth2_applet.pro
CONFIG_NS2IRDA noncore/settings/networksettings2/irda irda.pro
CONFIG_NS2LANCARD noncore/settings/networksettings2/lancard lancard.pro
CONFIG_NS2MODEM noncore/settings/networksettings2/modem modem.pro
CONFIG_NS2NETWORK noncore/settings/networksettings2/network network.pro
CONFIG_NS2 noncore/settings/networksettings2 networksettings.pro
CONFIG_NS2PPP noncore/settings/networksettings2/ppp ppp.pro
CONFIG_NS2PROFILE noncore/settings/networksettings2/profile profile.pro
CONFIG_NS2USB noncore/settings/networksettings2/usb usb.pro
CONFIG_NS2VPN noncore/settings/networksettings2/vpn vpn.pro
CONFIG_NS2WLAN noncore/settings/networksettings2/wlan wlan.pro
CONFIG_OAPP core/apps/oapp oapp.pro
CONFIG_OBEX core/obex obex.pro
CONFIG_ODICT noncore/apps/odict odict.pro
CONFIG_OIPKG noncore/unsupported/oipkg oipkg.pro
CONFIG_OPIEALARM core/opiealarm opiealarm.pro
CONFIG_OPIE-CONSOLE noncore/apps/opie-console opie-console.pro
CONFIG_OPIE_EYE noncore/graphics/opie-eye phunk_view.pro
CONFIG_OPIE_EYE_SLAVE noncore/graphics/opie-eye/slave slave.pro
CONFIG_OPIEFTP noncore/net/opieftp opieftp.pro
CONFIG_OPIEIRC noncore/net/opieirc opieirc.pro
CONFIG_OPIE-LOGIN core/opie-login opie-login.pro
CONFIG_OPIEMAIL2 noncore/unsupported/mail2 mail.pro
CONFIG_OPIEPLAYER2 noncore/multimedia/opieplayer2 opieplayer2.pro
+CONFIG_OPIEPLAYER3 noncore/multimedia/opieplayer3 opieplayer3.pro
CONFIG_OPIEPLAYER core/multimedia/opieplayer opieplayer.pro
CONFIG_OPIE-RDESKTOP noncore/net/opierdesktop opierdesktop.pro
CONFIG_OPIE-READER noncore/apps/opie-reader opie-reader.pro
CONFIG_OPIEREC noncore/multimedia/opierec opierec.pro
CONFIG_OPIE-SHEET noncore/apps/opie-sheet opie-sheet.pro
CONFIG_OPIE-SH noncore/tools/opie-sh opie-sh.pro
CONFIG_OPIETOOTH-APPLET noncore/net/opietooth/applet applet.pro
CONFIG_OPIETOOTH-MANAGER noncore/net/opietooth/manager manager.pro
CONFIG_OPIE-WRITE noncore/apps/opie-write opie-write.pro
CONFIG_OSEARCH core/pim/osearch osearch.pro
CONFIG_OXYGEN noncore/apps/oxygen oxygen.pro
CONFIG_PACKAGEMANAGER noncore/settings/packagemanager packagemanager.pro
CONFIG_PARASHOOT noncore/games/parashoot parashoot.pro
CONFIG_PHASE noncore/styles/phase phase.pro
CONFIG_PICKBOARD inputmethods/pickboard pickboard.pro
CONFIG_PIMCONVERTER noncore/tools/pimconverter converter.pro
CONFIG_POWERCHORD noncore/multimedia/powerchord powerchord.pro
CONFIG_PPP noncore/settings/networksettings/ppp ppp.pro
CONFIG_PYQUICKLAUNCH-APPLET noncore/applets/pyquicklaunch pyquicklaunch.pro
CONFIG_PYQUICKLAUNCHER noncore/tools/pyquicklauncher pyquicklauncher.pro
CONFIG_PYTHON-EXAMPLES examples/python bla.pro
CONFIG_QASHMONEY noncore/unsupported/qashmoney qashmoney.pro
CONFIG_QASTEROIDS noncore/games/qasteroids qasteroids.pro
CONFIG_QCOP core/apps/qcop qcop.pro
CONFIG_QPDF noncore/unsupported/qpdf qpdf.pro
CONFIG_QSS core/apps/qss qss.pro
CONFIG_QUICKLAUNCHER core/tools/quicklauncher quicklauncher.pro
CONFIG_QWS core/qws qws.pro
CONFIG_REMOTE noncore/tools/remote remote.pro
CONFIG_RESTARTAPPLET2 core/applets/restartapplet2 restartapplet2.pro
CONFIG_RESTARTAPPLET core/applets/restartapplet restartapplet.pro
CONFIG_ROTATEAPPLET core/applets/rotateapplet rotateapplet.pro
CONFIG_ROTATION noncore/settings/rotation rotation.pro
CONFIG_RUNAPPLET core/applets/runapplet runapplet.pro
CONFIG_SCREENSHOTAPPLET core/applets/screenshotapplet screenshotapplet.pro
CONFIG_SECURITY core/settings/security security.pro
CONFIG_MULTIAUTH_DEMO core/settings/security/demo multiauth.pro
CONFIG_SFCAVE noncore/games/sfcave sfcave.pro
CONFIG_SFCAVE-SDL noncore/games/sfcave-sdl sfcave-sdl.pro
CONFIG_SHOWIMG noncore/unsupported/showimg showimg.pro
CONFIG_SIMPLE_EXAMPLE examples/simple simple.pro
CONFIG_SIMPLE_ICON examples/simple-icon simple-icon.pro
CONFIG_SIMPLE_MAIN examples/simple-main simple-main.pro
CONFIG_SIMPLE noncore/tools/calc2/simple simple.pro
CONFIG_SIMPLE_PIM examples/simple-pim simple-pim.pro
CONFIG_SINGLE single single.pro
CONFIG_SNAKE noncore/games/snake snake.pro
CONFIG_SOLITAIRE noncore/games/solitaire solitaire.pro
CONFIG_SOUND noncore/settings/sound sound.pro
CONFIG_SSHKEYS noncore/settings/sshkeys sshkeys.pro
CONFIG_SUSPENDAPPLET core/applets/suspendapplet suspendapplet.pro
CONFIG_SYMLINKER core/symlinker symlinker.pro
CONFIG_SYSINFO noncore/settings/sysinfo sysinfo.pro
CONFIG_TABLEVIEWER noncore/apps/tableviewer tableviewer.pro
CONFIG_TABMANAGER noncore/settings/tabmanager tabmanager.pro
CONFIG_TABOAPP core/apps/taboapp taboapp.pro
CONFIG_TEST libsql/test test.pro
CONFIG_TEST noncore/apps/opie-console/test test.pro
CONFIG_TETRIX noncore/games/tetrix tetrix.pro
CONFIG_TEXTEDIT core/apps/textedit textedit.pro
CONFIG_THEME noncore/styles/theme theme.pro
CONFIG_TICTAC noncore/games/tictac tictac.pro
CONFIG_TINYKATE noncore/apps/tinykate tinykate.pro
CONFIG_TODAY_ADDRESSBOOK core/pim/today/plugins/addressbook addressbook.pro