summaryrefslogtreecommitdiff
path: root/vdr_menu.h
blob: 41bba01afeadeaa94cff58417e37840f94f88d57 (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
/*! 
 * \file   vdr_menu.h
 * \brief  Implements menu handling for broswing media libraries within VDR
 *
 * \version $Revision: 1.13 $
 * \date    $Date$
 * \author  Ralf Klueber, Lars von Wedel, Andreas Kellner
 * \author  Responsible author: $Author$
 *
 *  $Id$
 */

#ifndef _VDR_MENU_H
#define _VDR_MENU_H

#include <string>
#include <list>
#include <vector>

#include <osd.h>
#include "i18n.h"

class cCommands;

class mgMedia;
class mgSelectionTreeNode;
class mgPlaylist;
class mgTracklist;

/*!
 * \brief a special menu item
 */
class mgMenuTreeItem : public cOsdItem
{
 public:

  mgMenuTreeItem( mgSelectionTreeNode *node );

  mgSelectionTreeNode *Node();

  void Set();

 private: 

  mgSelectionTreeNode *m_node;

};

/*!
 * \brief the muggle main OSD
 */
class mgMainMenu : public cOsdMenu
{
 public:
  
  mgMainMenu(mgMedia *media, mgSelectionTreeNode *root, 
	     mgPlaylist *playlist, cCommands *playlist_commands );

  mgSelectionTreeNode *CurrentNode();
  mgMenuTreeItem *CurrentItem();
  
  eOSState ProcessKey(eKeys Key);

 protected:

  enum MuggleStatus
    { 
      TREE, TREE_SUBMENU,
      PLAYLIST, LOAD_PLAYLIST, SAVE_PLAYLIST,
      PLAYLIST_SUBMENU, PLAYLIST_COMMANDS,
      FILTER, FILTER_SUBMENU
    };

  void SetButtons();
  void Move( int from, int to );

  // Tree view handling
  void DisplayTree( mgSelectionTreeNode *node, int select = 0 );
  void DisplayTreeViewSelector();
  void DisplayTreeSubmenu();
  eOSState TreeSubmenuAction( int n );

  // Playlist view handling
  void DisplayPlaylist( int index_current = -1 );
  void DisplayTrackInfo();
  void DisplayAlbumInfo();  

  void LoadPlaylist();
  void SavePlaylist();
  void RenamePlaylist();
  void DisplayPlaylistSubmenu();
  eOSState PlaylistSubmenuAction( int n );
  void DisplayPlaylistCommands();
  eOSState ExecutePlaylistCommand( int current );

  // Filter view handling
  void DisplayFilter();
  void DisplayFilterSelector();

 private:
  //! \brief launch the actual player
  void Play( mgPlaylist *plist, int first = -1 );

  // content stuff
  mgMedia *m_media;
  mgSelectionTreeNode *m_root;
  mgSelectionTreeNode *m_node;
  mgSelectionTreeNode *m_menu_item;
  mgPlaylist          *m_current_playlist;
  std::vector< std::string > *m_plists;

  MuggleStatus m_state;
  std::list< int > m_history;

  cCommands *m_playlist_commands;

  int      m_last_osd_index;
};

#endif