diff options
Diffstat (limited to 'interfaces/tdemediaplayer/tdefileaudiopreview/tdefileaudiopreview.cpp')
-rw-r--r-- | interfaces/tdemediaplayer/tdefileaudiopreview/tdefileaudiopreview.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/interfaces/tdemediaplayer/tdefileaudiopreview/tdefileaudiopreview.cpp b/interfaces/tdemediaplayer/tdefileaudiopreview/tdefileaudiopreview.cpp new file mode 100644 index 000000000..7dd746c4f --- /dev/null +++ b/interfaces/tdemediaplayer/tdefileaudiopreview/tdefileaudiopreview.cpp @@ -0,0 +1,146 @@ +#include "tdefileaudiopreview.h" + +#include <tqcheckbox.h> +#include <tqhbox.h> +#include <tqlayout.h> +#include <tqvgroupbox.h> + +#include <kglobal.h> +#include <tdeconfig.h> +#include <klibloader.h> +#include <klocale.h> +#include <tdemediaplayer/player.h> +#include <kmimetype.h> +#include <tdeparts/componentfactory.h> + +#include <kplayobjectfactory.h> + +#include <config-tdefile.h> + +class KFileAudioPreviewFactory : public KLibFactory +{ +protected: + virtual TQObject *createObject( TQObject *parent, const char *name, + const char *className, const TQStringList & args) + { + Q_UNUSED(className); + Q_UNUSED(args); + return TQT_TQOBJECT(new KFileAudioPreview( dynamic_cast<TQWidget*>( parent ), name )); + } +}; + +K_EXPORT_COMPONENT_FACTORY( tdefileaudiopreview, KFileAudioPreviewFactory ) + + +/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// + + +class KFileAudioPreview::KFileAudioPreviewPrivate +{ +public: + KFileAudioPreviewPrivate( TQWidget *parent ) + { + player = KParts::ComponentFactory::createInstanceFromQuery<KMediaPlayer::Player>( "KMediaPlayer/Player", TQString(), TQT_TQOBJECT(parent) ); + } + + ~KFileAudioPreviewPrivate() + { + delete player; + } + + KMediaPlayer::Player *player; +}; + + +KFileAudioPreview::KFileAudioPreview( TQWidget *parent, const char *name ) + : KPreviewWidgetBase( parent, name ) +{ + TDEGlobal::locale()->insertCatalogue("tdefileaudiopreview"); + + TQStringList formats = KDE::PlayObjectFactory::mimeTypes(); + // ### + TQStringList::ConstIterator it = formats.begin(); + for ( ; it != formats.end(); ++it ) + m_supportedFormats.insert( *it, (void*) 1 ); + + TQVGroupBox *box = new TQVGroupBox( i18n("Media Player"), this ); + TQVBoxLayout *layout = new TQVBoxLayout( this ); + layout->addWidget( box ); + + (void) new TQWidget( box ); // spacer + + d = new KFileAudioPreviewPrivate( 0L ); // not box -- being reparented anyway + if ( d->player ) // only if there actually is a component... + { + setSupportedMimeTypes( formats ); + KMediaPlayer::View *view = d->player->view(); + view->setEnabled( false ); + + // if we have access to the video widget, show it above the player + // So, reparent first the video widget, then the view. + if ( view->videoWidget() ) + { + TQHBox *frame = new TQHBox( box ); + frame->setFrameStyle( TQFrame::Panel | TQFrame::Sunken ); + frame->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Expanding ) ); + view->videoWidget()->reparent( frame, TQPoint(0,0) ); + } + + view->reparent( box, TQPoint(0,0) ); + } + + m_autoPlay = new TQCheckBox( i18n("Play &automatically"), box ); + TDEConfigGroup config( TDEGlobal::config(), ConfigGroup ); + m_autoPlay->setChecked( config.readBoolEntry( "Autoplay sounds", true ) ); + connect( m_autoPlay, TQT_SIGNAL(toggled(bool)), TQT_SLOT(toggleAuto(bool)) ); +} + +KFileAudioPreview::~KFileAudioPreview() +{ + TDEConfigGroup config( TDEGlobal::config(), ConfigGroup ); + config.writeEntry( "Autoplay sounds", m_autoPlay->isChecked() ); + + delete d; +} + +void KFileAudioPreview::showPreview( const KURL &url ) +{ + if ( !d->player || !url.isValid() ) + return; + + KMimeType::Ptr mt = KMimeType::findByURL( url ); + bool supported = m_supportedFormats.find( mt->name() ); + d->player->view()->setEnabled( supported ); + if ( !supported ) + return; + + static_cast<KParts::ReadOnlyPart*>(d->player)->openURL( url ); + if ( m_autoPlay->isChecked() ) + d->player->play(); +} + +void KFileAudioPreview::clearPreview() +{ + if ( d->player ) + { + d->player->stop(); + d->player->closeURL(); + } +} + +void KFileAudioPreview::toggleAuto( bool on ) +{ + if ( !d->player ) + return; + + if ( on && m_currentURL.isValid() && d->player->view()->isEnabled() ) + d->player->play(); + else + d->player->stop(); +} + +void KFileAudioPreview::virtual_hook( int, void* ) +{} + +#include "tdefileaudiopreview.moc" |