You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmplayer/src/kmplayerpartbase.h

306 lines
9.3 KiB

/**
* Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License version 2 as published by the Free Software Foundation.
*
* This library 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., 51 Franklin Steet, Fifth Floor,
* Boston, MA 02110-1301, USA.
**/
#ifndef KMPLAYERPARTBASE_H
#define KMPLAYERPARTBASE_H
#include <config.h>
#include "kmplayer_def.h"
#include <tqobject.h>
#include <tqguardedptr.h>
#include <tqstringlist.h>
#include <tqmap.h>
#include <dcopobject.h>
#include <tdemediaplayer/player.h>
#include <kurl.h>
#include "kmplayerview.h"
#include "kmplayersource.h"
class TDEAboutData;
class TDEInstance;
class TDEActionCollection;
class KBookmarkMenu;
class TDEConfig;
class TQIODevice;
class TQTextStream;
class TQListViewItem;
namespace TDEIO {
class Job;
}
namespace KMPlayer {
class PartBase;
class Process;
class MPlayer;
class BookmarkOwner;
class BookmarkManager;
class MEncoder;
class MPlayerDumpstream;
class FFMpeg;
class Xine;
class Settings;
/*
* Source from URLs
*/
class KMPLAYER_EXPORT URLSource : public Source {
Q_OBJECT
//
public:
URLSource (PartBase * player, const KURL & url = KURL ());
virtual ~URLSource ();
virtual void dimensions (int & w, int & h);
virtual bool hasLength ();
virtual TQString prettyName ();
virtual void reset ();
virtual void setURL (const KURL & url);
public slots:
virtual void init ();
virtual void activate ();
virtual void deactivate ();
virtual void playCurrent ();
virtual void forward ();
virtual void backward ();
virtual void jump (NodePtr e);
void play ();
private slots:
void kioData (TDEIO::Job *, const TQByteArray &);
void kioMimetype (TDEIO::Job *, const TQString &);
void kioResult (TDEIO::Job *);
protected:
virtual bool requestPlayURL (NodePtr mrl);
virtual bool resolveURL (NodePtr mrl);
private:
void read (NodePtr mrl, TQTextStream &);
void stopResolving ();
struct ResolveInfo {
ResolveInfo (NodePtr mrl, TDEIO::Job * j, SharedPtr <ResolveInfo> & n)
: resolving_mrl (mrl), job (j), progress (0), next (n) {}
NodePtrW resolving_mrl;
TDEIO::Job * job;
TQByteArray data;
int progress;
SharedPtr <ResolveInfo> next;
};
SharedPtr <ResolveInfo> m_resolve_info;
bool activated; // 'solve' an singleShot race w/ cmdline url's
};
/*
* KDE's KMediaPlayer::Player implementation and base for KMPlayerPart
*/
class KMPLAYER_EXPORT PartBase : public KMediaPlayer::Player {
Q_OBJECT
//
K_DCOP
public:
typedef TQMap <TQString, Process *> ProcessMap;
PartBase (TQWidget * parent, const char * wname,TQObject * objectParent, const char * name, TDEConfig *);
~PartBase ();
void init (TDEActionCollection * = 0L);
virtual KMediaPlayer::View* view ();
static TDEAboutData* createAboutData ();
Settings * settings () const { return m_settings; }
void keepMovieAspect (bool);
KURL url () const { return m_sources ["urlsource"]->url (); }
void setURL (const KURL & url) { m_sources ["urlsource"]->setURL (url); }
/* Changes the backend process */
void setProcess (const char *);
bool setProcess (Mrl *mrl);
void setRecorder (const char *);
/* Changes the source,
* calls init() and reschedules an activate() on the source
* */
void setSource (Source * source);
void connectPanel (ControlPanel * panel);
void connectPlaylist (PlayListView * playlist);
void connectInfoPanel (InfoWindow * infopanel);
void connectSource (Source * old_source, Source * source);
Process * process () const { return m_process; }
Process * recorder () const { return m_recorder; }
Source * source () const { return m_source; }
TQMap <TQString, Process *> & players () { return m_players; }
TQMap <TQString, Process *> & recorders () { return m_recorders; }
TQMap <TQString, Source *> & sources () { return m_sources; }
TDEConfig * config () const { return m_config; }
bool mayResize () const { return !m_noresize; }
void updatePlayerMenu (ControlPanel *);
void updateInfo (const TQString & msg);
void updateStatus (const TQString & msg);
#ifdef HAVE_DBUS
void setServiceName (const TQString & srv) { m_service = srv; }
TQString serviceName () const { return m_service; }
#endif
// these are called from Process
void changeURL (const TQString & url);
void updateTree (bool full=true, bool force=false);
void setLanguages (const TQStringList & alang, const TQStringList & slang);
public slots:
virtual bool openURL (const KURL & url);
virtual bool openURL (const KURL::List & urls);
virtual bool closeURL ();
virtual void pause (void);
virtual void play (void);
virtual void stop (void);
void record ();
virtual void seek (unsigned long msec);
void adjustVolume (int incdec);
bool playing () const;
void showConfigDialog ();
void showPlayListWindow ();
void slotPlayerMenu (int);
void back ();
void forward ();
void addBookMark (const TQString & title, const TQString & url);
void volumeChanged (int);
void increaseVolume ();
void decreaseVolume ();
void setPosition (int position, int length);
virtual void setLoaded (int percentage);
public:
virtual bool isSeekable (void) const;
virtual unsigned long position (void) const;
virtual bool hasLength (void) const;
virtual unsigned long length (void) const;
k_dcop:
void toggleFullScreen ();
bool isPlaying ();
bool isPaused ();
signals:
void sourceChanged (KMPlayer::Source * old, KMPlayer::Source * nw);
void sourceDimensionChanged ();
void loading (int percentage);
void urlAdded (const TQString & url);
void urlChanged (const TQString & url);
void processChanged (const char *);
void treeChanged (int id, NodePtr root, NodePtr, bool select, bool open);
void treeUpdated ();
void infoUpdated (const TQString & msg);
void statusUpdated (const TQString & msg);
void languagesUpdated(const TQStringList & alang, const TQStringList & slang);
void audioIsSelected (int id);
void subtitleIsSelected (int id);
void positioned (int pos, int length);
void toggleMinimalMode ();
protected:
bool openFile();
virtual void timerEvent (TQTimerEvent *);
protected slots:
void posSliderPressed ();
void posSliderReleased ();
void positionValueChanged (int val);
void contrastValueChanged (int val);
void brightnessValueChanged (int val);
void hueValueChanged (int val);
void saturationValueChanged (int val);
void sourceHasChangedAspects ();
void fullScreen ();
void minimalMode ();
void playListItemClicked (TQListViewItem *);
void playListItemExecuted (TQListViewItem *);
virtual void playingStarted ();
virtual void playingStopped ();
void recordingStarted ();
void recordingStopped ();
void settingsChanged ();
void audioSelected (int);
void subtitleSelected (int);
protected:
TDEConfig * m_config;
TQGuardedPtr <View> m_view;
TQMap <TQString, TQString> temp_backends;
Settings * m_settings;
Process * m_process;
Process * m_recorder;
Source * m_source;
ProcessMap m_players;
ProcessMap m_recorders;
TQMap <TQString, Source *> m_sources;
BookmarkManager * m_bookmark_manager;
BookmarkOwner * m_bookmark_owner;
KBookmarkMenu * m_bookmark_menu;
#ifdef HAVE_DBUS
TQString m_service;
#endif
int m_record_timer;
int m_update_tree_timer;
bool m_noresize : 1;
bool m_auto_controls : 1;
bool m_use_slave : 1;
bool m_bPosSliderPressed : 1;
bool m_in_update_tree : 1;
bool m_update_tree_full : 1;
};
class KMPLAYER_NO_EXPORT DataCache : public TQObject {
Q_OBJECT
//
typedef TQMap <TQString, TQByteArray> DataMap;
typedef TQMap <TQString, bool> PreserveMap;
DataMap cache_map;
PreserveMap preserve_map;
public:
DataCache () {}
~DataCache () {}
void add (const TQString &, const TQByteArray &);
bool get (const TQString &, TQByteArray &);
bool preserve (const TQString &);
bool unpreserve (const TQString &);
bool isPreserved (const TQString &);
signals:
void preserveRemoved (const TQString &); // ready or canceled
};
class KMPLAYER_NO_EXPORT RemoteObjectPrivate : public TQObject {
Q_OBJECT
//
public:
RemoteObjectPrivate (RemoteObject * r);
~RemoteObjectPrivate ();
bool download (const TQString &);
void clear ();
TDEIO::Job * job;
TQString url;
TQByteArray data;
TQString mime;
private slots:
void slotResult (TDEIO::Job*);
void slotData (TDEIO::Job*, const TQByteArray& qb);
void slotMimetype (TDEIO::Job * job, const TQString & mimestr);
void cachePreserveRemoved (const TQString &);
private:
RemoteObject * remote_object;
bool preserve_wait;
};
} // namespace
#endif