summaryrefslogtreecommitdiff
path: root/vdr_player.h
blob: 5d603449e317c0e9e743fccd2458412d273d555b (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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*!
 * \file vdr_player.h
 * \brief A player/control combination to let VDR play music
 *
 * \version $Revision: 1.2 $
 * \date    $Date$
 * \author  Ralf Klueber, Lars von Wedel, Andreas Kellner
 * \author  Responsible author: $Author$
 *
 * $Id$
 *
 * Adapted from
 * MP3/MPlayer plugin to VDR (C++)
 * (C) 2001,2002 Stefan Huelswitt <huels@iname.com>
 */

#ifndef ___VDR_PLAYER_H
#define ___VDR_PLAYER_H

#include <player.h>
#include "mg_selection.h"
#if VDRVERSNUM >= 10307
class cOsd;
#endif

// -------------------------------------------------------------------

class mgPCMPlayer;

// -------------------------------------------------------------------

/*!
 *  \brief exerts control over the player itself
 *
 *  This control is launched from the main menu and manages a link
 *  to the player. Key events are caught and signaled to the player.
 */
class mgPlayerControl:public cControl
{
    private:

//! \brief the reference to the player
        mgPCMPlayer * player;

//! \brief indicates, whether the osd should be visible
        bool m_visible;

//! \brief indicates, whether an osd is currently displayed
        bool m_has_osd;

        bool m_track_view;
        bool m_progress_view;

#if VDRVERSNUM >= 10307
//! \brief a replay display to show the progress during playback
        cSkinDisplayReplay *m_display;
        cSkinDisplayMenu *m_menu;

        cOsd *osd;
        const cFont *font;
#endif

//! \brief Last Message for Statusmonitor
        char *m_szLastShowStatusMsg;

    public:

/*! \brief construct a control with a playlist
 *
 *  \param plist - the playlist to be played
 */
        mgPlayerControl (mgSelection * plist);

/*! \brief destructor
 */
        virtual ~ mgPlayerControl ();

//! \brief indicate whether the corresponding player is active
        bool Active ();

//! \brief stop the corresponding player
        void Stop ();

//! \brief toggle the pause mode of the corresponding player
        void Pause ();

//! \brief start playing
        void Play ();

//! \brief skip to the next song
        void Forward ();

//! \brief skip to the previous song
        void Backward ();

/*! \brief skip a specified number of seconds
 *
 *  \param seconds - the number of seconds to skip
 */
        void SkipSeconds (int seconds);

/*! \brief goto a certain position in the playlist
 *
 *  \param index - the position in the playlist to skip to
 *  \param still - currently unused
 */
        void Goto (int index, bool still = false);

//! \brief toggle the shuffle mode of the corresponding player
        void ToggleShuffle ();

//! \brief toggle the loop mode of the corresponding player
        void ToggleLoop ();

	/*! \brief tell the player to reload the play list. 
	 * This is needed if we play a collection
	 * and the user changed the collection while playing it
	 */
	void ReloadPlaylist();

/*! \brief signal a new playlist
 *
 *  The caller has to take care of deallocating the previous list
 *
 *  \param plist - the new playlist to be played
 */
        void NewPlaylist (mgSelection * plist);

//! \brief a progress display
        void ShowProgress ();

        void Display ();

        void ShowContents ();

//! \brief hide the osd, if present
        void Hide ();

//! \brief hide the osd, if present
        void InternalHide ();

//! \brief process key events
        eOSState ProcessKey (eKeys key);

    protected:
//! \brief signal a played file to any cStatusMonitor inside vdr
        void StatusMsgReplaying ();
};
#endif                                            //___VDR_PLAYER_H