sync with linuxport @ 18013
[xbmc:xbmc-antiquated.git] / xbmc / PlayListPlayer.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2008 Team XBMC
4  *      http://www.xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 #include "IMsgTargetCallback.h"
24 #include <boost/shared_ptr.hpp>
25
26 #define PLAYLIST_NONE    -1
27 #define PLAYLIST_MUSIC   0
28 #define PLAYLIST_VIDEO   1
29
30 class CFileItem; typedef boost::shared_ptr<CFileItem> CFileItemPtr;
31 class CFileItemList;
32
33 namespace PLAYLIST
34 {
35 /*!
36  \ingroup windows
37  \brief Manages playlist playing.
38  */
39 enum REPEAT_STATE { REPEAT_NONE = 0, REPEAT_ONE, REPEAT_ALL };
40
41 class CPlayList;
42
43 class CPlayListPlayer : public IMsgTargetCallback
44 {
45
46 public:
47   CPlayListPlayer(void);
48   virtual ~CPlayListPlayer(void);
49   virtual bool OnMessage(CGUIMessage &message);
50   void PlayNext(int offset = 1, bool bAutoPlay = false);
51   void PlayPrevious();
52   void Play();
53   void Play(int iSong, bool bAutoPlay = false, bool bPlayPrevious = false);
54   int GetCurrentSong() const;
55   int GetNextSong(int offset) const; ///< Returns the song index that is offset away from the current song
56   int GetNextSong();
57   void SetCurrentSong(int iSong);
58   void SetCurrentPlaylist(int iPlaylist);
59   int GetCurrentPlaylist() const;
60   CPlayList& GetPlaylist(int iPlaylist);
61   const CPlayList& GetPlaylist(int iPlaylist) const;
62   int RemoveDVDItems();
63   void Reset();
64   void ClearPlaylist(int iPlaylist);
65   void Clear();
66   void SetShuffle(int iPlaylist, bool bYesNo);
67   bool IsShuffled(int iPlaylist) const;
68   bool HasPlayedFirstFile() const;
69
70   void SetRepeat(int iPlaylist, REPEAT_STATE state);
71   REPEAT_STATE GetRepeat(int iPlaylist) const;
72
73   // add items via the playlist player
74   void Add(int iPlaylist, CPlayList& playlist);
75   void Add(int iPlaylist, const CFileItemPtr &pItem);
76   void Add(int iPlaylist, CFileItemList& items);
77
78 protected:
79   bool Repeated(int iPlaylist) const;
80   bool RepeatedOne(int iPlaylist) const;
81   void ReShuffle(int iPlaylist, int iPosition);
82
83   bool m_bPlayedFirstFile;
84   bool m_bPlaybackStarted;
85   int m_iFailedSongs;
86   DWORD m_failedSongsStart;
87   int m_iCurrentSong;
88   int m_iCurrentPlayList;
89   CPlayList* m_PlaylistMusic;
90   CPlayList* m_PlaylistVideo;
91   CPlayList* m_PlaylistEmpty;
92   REPEAT_STATE m_repeatState[2];
93 };
94
95 }
96
97 /*!
98  \ingroup windows
99  \brief Global instance of playlist player
100  */
101 extern PLAYLIST::CPlayListPlayer g_playlistPlayer;