summaryrefslogtreecommitdiffstats
path: root/src/part/part.cpp
blob: 20d1577329be90ae8d533162de14576ab4f8f695 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Author:    Max Howell <[email protected]>, (C) 2005
// Copyright: See COPYING file that comes with this distribution

#include "codeine.h"
#include "debug.h"
#include <kaboutdata.h>
#include <kparts/genericfactory.h>
#include "part.h"
#include <qtimer.h>
#include "toolbar.h"
#include "videoWindow.h"

#include <kaction.h>
#include <qslider.h>

namespace Codeine
{
   typedef KParts::GenericFactory<Codeine::Part> Factory;
}


K_EXPORT_COMPONENT_FACTORY( libcodeine, Codeine::Factory )


namespace Codeine
{
   Part::Part( QWidget *parentWidget, const char *widgetName, QObject *parent, const char *name, const QStringList& )
         : ReadOnlyPart( parent, name )
         , m_statusBarExtension( new KParts::StatusBarExtension( this ) )
   {
      setInstance( Factory::instance() );
      setWidget( new VideoWindow( parentWidget, widgetName ) );

      if( !videoWindow()->init() )
         //FIXME this will terminate the host, eg Konqueror
         Debug::fatal() << "Couldn't init xine!\n";

      KAction *play = new KToggleAction( i18n("Play"), "player_play", Qt::Key_Space, videoWindow(), SLOT(togglePlay()), actionCollection(), "play" );
      KAction *mute = new KToggleAction( i18n("Mute"), "player_mute", Qt::Key_M, videoWindow(), SLOT(toggleMute()), actionCollection(), "mute" );
      KToolBar *toolBar = new MouseOverToolBar( widget() );
      play->plug( toolBar );
      mute->plug( toolBar );
      m_slider = new QSlider( Qt::Horizontal, toolBar, "slider" );
      m_slider->setMaxValue( 65535 );
      toolBar->setStretchableWidget( m_slider );
      toolBar->addSeparator(); //FIXME ugly

      QObject *o = (QObject*)statusBar();
      connect( videoWindow(), SIGNAL(statusMessage( const QString& )), o, SLOT(message( const QString& )) );
      connect( videoWindow(), SIGNAL(titleChanged( const QString& )), o, SLOT(message( const QString& )) ); //FIXME
   }

   bool
   Part::openURL( const KURL &url )
   {
      //FIXME nasty, we'd rather not do this way
      killTimers();
      startTimer( 100 );

      return videoWindow()->play( m_url = url );
   }

   bool
   Part::closeURL()
   {
      m_url = KURL();
      videoWindow()->eject();
      return true;
   }

   KAboutData*
   Part::createAboutData()
   {
      // generic factory expects this on the heap
      return new KAboutData( APP_NAME, PRETTY_NAME, APP_VERSION );
   }

   void
   Part::timerEvent( QTimerEvent* )
   {
      m_slider->setValue( videoWindow()->position() );
   }
}