diff options
| author | LarsAC <LarsAC@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-08 10:48:44 +0000 |
|---|---|---|
| committer | LarsAC <LarsAC@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-08 10:48:44 +0000 |
| commit | a6cd0e97d915a7e5fcb3db6fd25eaac624b03d57 (patch) | |
| tree | b7f566dca8eec3e8ddb21b189bb23b57273efa24 | |
| parent | cda41f99d3dcf6b5a3d2a341d95db58c53b0d932 (diff) | |
| download | vdr-plugin-muggle-a6cd0e97d915a7e5fcb3db6fd25eaac624b03d57.tar.gz vdr-plugin-muggle-a6cd0e97d915a7e5fcb3db6fd25eaac624b03d57.tar.bz2 | |
Made major revisions in OSD behavior
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk@30 e10066b5-e1e2-0310-b819-94efdf66514b
| -rw-r--r-- | muggle-plugin/menu.txt | 117 | ||||
| -rw-r--r-- | muggle-plugin/vdr_menu.c | 446 | ||||
| -rw-r--r-- | muggle-plugin/vdr_menu.h | 21 |
3 files changed, 295 insertions, 289 deletions
diff --git a/muggle-plugin/menu.txt b/muggle-plugin/menu.txt index 08c7b2e..57f0049 100644 --- a/muggle-plugin/menu.txt +++ b/muggle-plugin/menu.txt @@ -1,76 +1,73 @@ -PLAYLIST ---------- -OK --// should start playing in the future -BACK -- - -UP select previous item (VDR-mechanism) -DOWN select next item (VDR-mechanism) -LEFT selection pg-up (VDR-mechanism) -RIGHT selection pg-down (VDR-mechanism) - -RED ==>display Tracklist(current filter setting) -GREEN ==>DisplayFilter -Yellow ==>DisplayTrackInfo(current) -Blue ==>DisplayTree( m_root ) - -FILTER ---------- - - - TREE --------- -OK Leaf: ==>DisplayTrackInfo( leaf ) +OK Leaf: ==>DisplayTrackInfo( leaf ) // TODO Node: ==> DisplayTree( child ); // expand BACK ==> DisplayTree( parent ); // collapse + ==> on root: return to VDR main menu UP select previous item (VDR-mechanism) -DOWN select next item (VDR-mechanism) -LEFT selection pg-up (VDR-mechanism) -RIGHT selection pg-down (VDR-mechanism) +DOWN select next item (VDR-mechanism) +LEFT selection pg-up (VDR-mechanism) +RIGHT selection pg-down (VDR-mechanism) RED add all tracks under currently highlighted node to playlist -GREEN ==>DisplayFilter -YELLOW ==>DisplayPlaylist(); -BLUE -- - // Should be in the future: Collapse all and goto default View - - -TRACKS (Tracklist) ------------------- - // Andi, ich kapier es nicht. Was unterscheidet Tracks from Tree? - // IMHO ist Tracks eine Sonderform von Tree, der nur Leaves hat, oder? -OK DisplayTrackInfo(current) -BACK ==> DisplayTree( parent ); // collapse +GREEN ==>Switch to next tree view(TODO?) +YELLOW ==>Cycle to playlist view +BLUE ==>Enter tree view submenu -UP select previous item (VDR-mechanism) -DOWN select next item (VDR-mechanism) -LEFT selection pg-up (VDR-mechanism) -RIGHT selection pg-down (VDR-mechanism) +PLAYLIST +--------- +OK -- // should start playing in the future +BACK -- -RED add currend item to playlist -GREEN ==>DisplayFilter -YELLOW ==>DisplayPlaylist(); -BLUE ==>DisplayTree(root) +UP select previous item (VDR-mechanism) +DOWN select next item (VDR-mechanism) +LEFT selection pg-up (VDR-mechanism) +RIGHT selection pg-down (VDR-mechanism) -TRACKINFO (previous == TREE || previous == TRACKS ) ------------------- -OK PlayItem -BACK go to previous view (==> DisplayTracklist || ==>DisplayTree ) +RED ==>Edit playlist (mark/move, VDR mechanism) TODO +GREEN ==>Playlist -> Track info -> Album info -> Playlist +YELLOW ==>Cycle to filter view +BLUE ==>Playlist submenu -RED add currend item to playlist -GREEN ==>DisplayFilter -YELLOW ==>DisplayPlaylist(); -BLUE -- +TRACKINFO (TODO) +--------- +OK PlayItem (jump/skip to item? useful choice?) +BACK go to previous view (?) -TRACKINFO (previous == playlist ) ------------------- -OK PlayItem -BACK ==>DisplayPlaylist(); +RED ?? +GREEN ==>Album info (TODO) +YELLOW ==>Cycle to filter view +BLUE ==>Playlist submenu -RED -- -GREEN ==>DisplayFilter -YELLOW ==>DisplayPlaylist(); // also on back -BLUE -- +ALBUMINFO +--------- +OK PlayItem (track? album?) +BACK ==>DisplayPlaylist(); (?) +RED ?? +GREEN ==>Cycle to playlist view +YELLOW ==>Cycle to filter view +BLUE ==>Playlist submenu +FILTER +------ +OK Confirm entry (really? VDR mechanism) +BACK ? + +UP Previous filter entry (VDR mechanism) +DOWN Next filter entry (VDR mechanism) + +RED Perform query, display according to view type entry (TODO) +GREEN ==>Load other filter +YELLOW ==>Cycle to tree view +BLUE ==>Filter submenu + +/************************************************************ + * + * $Log: menu.txt,v $ + * Revision 1.3 2004/02/08 10:48:44 LarsAC + * Made major revisions in OSD behavior + * + * + ************************************************************/ diff --git a/muggle-plugin/vdr_menu.c b/muggle-plugin/vdr_menu.c index 4699bb8..317a647 100644 --- a/muggle-plugin/vdr_menu.c +++ b/muggle-plugin/vdr_menu.c @@ -2,12 +2,12 @@ /*! \file vdr_menu.c * \brief Implements menu handling for broswing media libraries within VDR ******************************************************************** - * \version $Revision: 1.11 $ - * \date $Date: 2004/02/03 21:53:32 $ + * \version $Revision: 1.12 $ + * \date $Date: 2004/02/08 10:48:44 $ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner - * \author file owner: $Author: RaK $ + * \author file owner: $Author: LarsAC $ * - * $Id: vdr_menu.c,v 1.11 2004/02/03 21:53:32 RaK Exp $ + * $Id: vdr_menu.c,v 1.12 2004/02/08 10:48:44 LarsAC Exp $ */ /*******************************************************************/ @@ -105,144 +105,36 @@ void mgMainMenu::SetButtons( ) if( m_state == TREE ) { - SetHelp( "Add", "Filter", "Playlist", "Change View" ); + SetHelp( "Add", "Cycle tree", "Playlist", "Submenu" ); } else if( m_state == PLAYLIST ) { - SetHelp( "Tracks", "Filter", "Edit PL", "Tree" ); + SetHelp( "Edit PL", "Track info", "Filter", "Submenu" ); } else if( m_state == PLAYLIST_TRACKINFO ) { - SetHelp( "Play/Pause", "Album Info", "Filter", "Tree" ); + SetHelp( "Edit PL?", "Album info", "Filter", "Submenu" ); } else if( m_state == PLAYLIST_ALBUMINFO ) { - SetHelp( "Play/Pause", "Filter", "Playlist", "Tree" ); + SetHelp( "Edit PL?", "Playlist", "Filter", "Submenu" ); } else if( m_state == FILTER ) { - SetHelp( "Add", "Playlist", "Filter", "Tree" ); + SetHelp( "Query", "Load", "Tree", "Submenu" ); } - else if( m_state == TRACKS ) + else { - SetHelp( "Add", "Filter", "Playlist", "Tree" ); - } + SetHelp( "t", "o", "d", "o" ); + } } eOSState mgMainMenu::ProcessKey(eKeys key) { mgDebug( 1, "mgMainMenu::ProcessKey" ); eOSState state = cOsdMenu::ProcessKey(key); - - if( m_state == PLAYLIST ) - { - mgDebug( 1, "mgMainMenu: in state PLAYLIST" ); - if( state == osUnknown ) - { - switch( key ) - { - case kOk: - { - mgDebug( 1, "mgMainMenu: Mark" ); - Mark(); // Mark (to move), moving done by VDR, calls Move - state = osContinue; - } break; - case kRed: - { - mgDebug( 1, "mgMainMenu: " ); - // Shuffle? - } - case kYellow: - { - if( m_state == PLAYLIST ) - { - mgDebug( 1, "mgMainMenu: switch to TrackInfo" ); - DisplayTrackInfo(); - } - else if( m_state == PLAYLIST_TRACKINFO ) - { - mgDebug( 1, "mgMainMenu: switch to AlbumInfo" ); - DisplayAlbumInfo(); - } - else if( m_state == PLAYLIST_ALBUMINFO ) - { - mgDebug( 1, "mgMainMenu: switch to Playlist" ); - DisplayPlaylist(); - } - state = osContinue; - } break; - case kBlue: - { - mgDebug( 1, "mgMainMenu: switch to TreeView" ); - m_history.clear(); - DisplayTree( m_root ); - state = osContinue; - } break; - case kGreen: - { - mgDebug( 1, "mgMainMenu: switch to Filter" ); - DisplayFilter(); - state = osContinue; - } break; - default: - { - mgDebug( 1, "mgMainMenu: default" ); - state = osContinue; - }; - } - } - } - else if( m_state == FILTER ) - { - mgDebug( 1, "mgMainMenu: in state FILTER" ); - - if( state == osUnknown ) - { - switch( key ) - { - case kOk: - { - // OK: Create filter and selection tree and display - mgDebug( 1, "mgMainMenu: create and apply filter" ); - // m_media->applyFilters(); - } break; - case kRed: // ??? - { - state = osContinue; - } break; - case kYellow: - { - // Yellow always goes to playlist view - mgDebug( 1, "mgMainMenu: switch to playlist" ); - DisplayPlaylist(); - state = osContinue; - } break; - case kGreen: - { - mgDebug( 1, "mgMainMenu: switch filters" ); - // Green: select other filters - DisplayFilterSelector(); - } break; - case kBlue: - { - // Blue: treeview - mgDebug( 1, "mgMainMenu: switch to treeview" ); - m_history.clear(); - DisplayTree( m_root ); - state = osContinue; - } - default: - { - state = osContinue; - } - } - } - else if( state == osBack ) - { - // m_media->resetFilters(); - } - } - else if( m_state == TREE ) + + if( m_state == TREE ) { mgDebug( 1, "mgMainMenu: in state TREE" ); // Navigate with up/dn, left/right (pgup, pgdn) @@ -253,7 +145,7 @@ eOSState mgMainMenu::ProcessKey(eKeys key) { case kOk: { - mgDebug( 1, "mgMainMenu: switch to filter" ); + mgDebug( 1, "mgMainMenu: expand and descend" ); m_history.push_back( Current() ); mgDebug( 1, "Remember current node #%i", Current() ); @@ -292,24 +184,24 @@ eOSState mgMainMenu::ProcessKey(eKeys key) } state = osContinue; } break; - case kYellow: + case kGreen: { - mgDebug( 1, "mgMainMenu: display playlist" ); - // Yellow always goes to playlist view - DisplayPlaylist(); + mgDebug( 1, "mgMainMenu: cycle treeviews (todo)" ); + state = osContinue; } break; - case kGreen: + case kYellow: { - mgDebug( 1, "mgMainMenu: display filter" ); - DisplayFilter(); - state = osContinue; + mgDebug( 1, "mgMainMenu: cycle to playlist view" ); + + DisplayPlaylist(); } break; case kBlue: { - mgDebug( 1, "mgMainMenu: select other tree view" ); - // Select other views -> Select other Media - DisplayTreeViewSelector(); + mgDebug( 1, "mgMainMenu: submenu (todo)" ); + + DisplayTreeSubmenu(); + state = osContinue; } break; default: @@ -342,110 +234,244 @@ eOSState mgMainMenu::ProcessKey(eKeys key) state = osBack; } + } + } + else if( m_state == TREE_SUBMENU ) + { + if( state == osUnknown ) + { + switch( key ) + { + case k0 ... k9: + { + int n = key - k0; + + TreeSubmenuAction( n ); + + state = osContinue; + } + case kOk: + { + TreeSubmenuAction( Current() ); + + state = osContinue; + } break; + default: + { + state = osContinue; + } break; + } + } + else if( state == osBack ) + { + mgDebug( 1, "mgMainMenu: return from tree view submenu" ); + + // restore last selected entry + int last = m_history.back(); + + DisplayTree( m_node, last ); + + state = osContinue; } } - else if( m_state == TRACKS ) + else if( m_state == PLAYLIST ) { - // Navigate with up/dn, left/right (pgup, pgdn) + mgDebug( 1, "mgMainMenu: in state PLAYLIST" ); if( state == osUnknown ) { switch( key ) { case kOk: { - // Show Song Info + mgDebug( 1, "mgMainMenu: playlist ok" ); state = osContinue; } break; case kRed: { - // Add item to Playlist - if(Current() >= 0 && Current() < (int) m_tracklist->getNumItems()) + mgDebug( 1, "mgMainMenu: edit playlist" ); + Mark(); // Mark (to move), moving done by VDR, calls Move + } + case kGreen: + { + if( m_state == PLAYLIST ) + { + mgDebug( 1, "mgMainMenu: switch to TrackInfo" ); + DisplayTrackInfo(); + } + else if( m_state == PLAYLIST_TRACKINFO ) { - mgContentItem* item = m_tracklist->getItem( Current() ); - mgDebug(3, "Ading item %s to playlist", - item->getTitle().c_str() ); - - m_current_playlist->append( item ); + mgDebug( 1, "mgMainMenu: switch to AlbumInfo" ); + DisplayAlbumInfo(); + } + else if( m_state == PLAYLIST_ALBUMINFO ) + { + mgDebug( 1, "mgMainMenu: switch to Playlist" ); + DisplayPlaylist(); } state = osContinue; } break; - case kGreen: + case kYellow: { - // Green always goes to the filter view + mgDebug( 1, "mgMainMenu: cycle playlist to filter" ); DisplayFilter(); - state = osContinue; + state = osContinue; } break; - case kYellow: + case kBlue: + { + // Submenu + mgDebug( 1, "mgMainMenu: playlist submenu (todo)" ); + + state = osContinue; + } break; + default: + { + mgDebug( 1, "mgMainMenu: default" ); + state = osContinue; + }; + } + } + } + else if( m_state == FILTER ) + { + mgDebug( 1, "mgMainMenu: in state FILTER" ); + + if( state == osUnknown ) + { + switch( key ) + { + case kOk: + { + // OK: Create filter and selection tree and display + mgDebug( 1, "mgMainMenu: create and apply filter" ); + // m_media->applyFilters(); + } break; + case kRed: // ??? { - // Yellow always goes to playlist view - DisplayPlaylist(); state = osContinue; + mgDebug( 1, "mgMainMenu: query and display results" ); } break; - case kBlue: + case kGreen: { - m_history.clear(); - DisplayTree( m_root ); + // cycle FILTER -> TREE + mgDebug( 1, "mgMainMenu: clear filters (todo)" ); + DisplayFilterSelector(); state = osContinue; } break; + case kYellow: + { + // Green: treeview + mgDebug( 1, "mgMainMenu: switch to treeview" ); + + DisplayTreeViewSelector(); + + state = osContinue; + } break; + case kBlue: + { + mgDebug( 1, "mgMainMenu: submenu" ); + } default: { state = osContinue; - } break; + } } } else if( state == osBack ) { - // where to go on back? - state = osContinue; + // m_media->resetFilters();? } } else { mgDebug(1, "Process key: else"); + mgDebug(1, "Process key: %d", (int) state); + } return state; } -void mgMainMenu::Move( int from, int to ) +void mgMainMenu::DisplayTree( mgSelectionTreeNode* node, int select ) { - // check current view, perform move in the content view - if( m_state == PLAYLIST ) + m_state = TREE; + + if( node->expand( ) ) { - // resort + Clear(); + + char buffer[256]; + sprintf( buffer, "Muggle - %s", node->getLabel().c_str() ); + + SetTitle( buffer ); + SetButtons(); + + m_node = node; + mgDebug( 1, "mgBrowseMenu::DisplaySelection: node %s received", node->getLabel().c_str() ); + vector<mgSelectionTreeNode*> children = node->getChildren(); + + mgDebug( 1, "mgBrowseMenu::DisplaySelection: %d elements received", children.size() ); + + for( vector<mgSelectionTreeNode*>::iterator iter = children.begin(); + iter != children.end(); + iter ++ ) + { + Add( new mgMenuTreeItem( *iter ) ); + } + + cOsdItem *item = Get( select ); + SetCurrent( item ); + + RefreshCurrent(); + DisplayCurrent(true); } + Display(); } -void mgMainMenu::DisplayTracklist() +void mgMainMenu::DisplayTreeViewSelector() { - m_state = TRACKS; - mgDebug( 1, "mgBrowseMenu::DisplayTracklist"); + m_history.clear(); + // collapse all! + DisplayTree( m_root ); +} - Clear(); - SetButtons(); +void mgMainMenu::DisplayTreeSubmenu() +{ + m_state = TREE_SUBMENU; - mgDebug( 1, "mgBrowseMenu::DisplayTracklist: %d elements received", - m_tracklist->getNumItems() ); - - static char titlestr[80]; - sprintf( titlestr, "Muggle Tracklist (%d items)", m_tracklist->getNumItems() ); - SetTitle( titlestr ); + Clear(); + + mgDebug( 1, "Creating Muggle tree view submenu" ); + SetButtons(); - // create tracklist with the current filters - if( m_tracklist ) - { - delete m_tracklist; - } - - m_tracklist = m_media->getTracks(); + SetTitle( "Muggle Tree View Commands" ); + + // Add items + Add( new cOsdItem( "1 - Test1" ) ); + Add( new cOsdItem( "9 - Test9" ) ); + Add( new cOsdItem( "0 - Test0" ) ); + + Display(); +} - for( unsigned int i = 0; i < m_tracklist->getNumItems(); i++) +void mgMainMenu::TreeSubmenuAction( int n ) +{ + mgDebug( "mgMainMenu: TreeSubmenuAction( %d )", n ); + + switch( n ) + { + case 0: { - string label = m_tracklist->getLabel( i, " " ); - Add( new cOsdItem( label.c_str() ) ); - } - - Display(); + // action 0 + } break; + case 1: + { + // action 0 + } break; + default: + { + // undefined action + } break; + } } void mgMainMenu::DisplayPlaylist() @@ -478,55 +504,28 @@ void mgMainMenu::DisplayPlaylist() void mgMainMenu::DisplayTrackInfo() { m_state = PLAYLIST_TRACKINFO; + SetButtons(); + // show info of the currently playing track } void mgMainMenu::DisplayAlbumInfo() { m_state = PLAYLIST_ALBUMINFO; - // show info of the currently playing track + SetButtons(); + + // show info of the currently playing album } -void mgMainMenu::DisplayTree( mgSelectionTreeNode* node, int select ) +void mgMainMenu::Move( int from, int to ) { - m_state = TREE; - - if( node->expand( ) ) + // check current view, perform move in the content view + if( m_state == PLAYLIST ) { - Clear(); - - char buffer[256]; - sprintf( buffer, "Muggle - %s", node->getLabel().c_str() ); - - SetTitle( buffer ); - SetButtons(); - - m_node = node; - mgDebug( 1, "mgBrowseMenu::DisplaySelection: node %s received", node->getLabel().c_str() ); - vector<mgSelectionTreeNode*> children = node->getChildren(); - - mgDebug( 1, "mgBrowseMenu::DisplaySelection: %d elements received", children.size() ); - - for( vector<mgSelectionTreeNode*>::iterator iter = children.begin(); - iter != children.end(); - iter ++ ) - { - Add( new mgMenuTreeItem( *iter ) ); - } - - cOsdItem *item = Get( select ); - SetCurrent( item ); - - RefreshCurrent(); - DisplayCurrent(true); + // resort } - Display(); -} -void mgMainMenu::DisplayTreeViewSelector() -{ - m_history.clear(); - DisplayTree( m_root ); + // what now? } void mgMainMenu::DisplayFilter() @@ -581,12 +580,15 @@ void mgMainMenu::DisplayFilter() void mgMainMenu::DisplayFilterSelector() { - + // show available filters, load on OK? } /************************************************************ * * $Log: vdr_menu.c,v $ + * Revision 1.12 2004/02/08 10:48:44 LarsAC + * Made major revisions in OSD behavior + * * Revision 1.11 2004/02/03 21:53:32 RaK * beak = break in l 212 * diff --git a/muggle-plugin/vdr_menu.h b/muggle-plugin/vdr_menu.h index 1b318c0..76317bc 100644 --- a/muggle-plugin/vdr_menu.h +++ b/muggle-plugin/vdr_menu.h @@ -2,12 +2,12 @@ /*! \file vdr_menu.h * \brief Implements menu handling for broswing media libraries within VDR ******************************************************************** - * \version $Revision: 1.7 $ - * \date $Date: 2004/02/03 19:28:46 $ + * \version $Revision: 1.8 $ + * \date $Date: 2004/02/08 10:48:44 $ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner * \author file owner: $Author: LarsAC $ * - * $Id: vdr_menu.h,v 1.7 2004/02/03 19:28:46 LarsAC Exp $ + * $Id: vdr_menu.h,v 1.8 2004/02/08 10:48:44 LarsAC Exp $ * */ /*******************************************************************/ @@ -63,21 +63,25 @@ class mgMainMenu : public cOsdMenu enum MuggleStatus { - TREE, FILTER, TRACKS, + TREE, TREE_SUBMENU, PLAYLIST, PLAYLIST_TRACKINFO, PLAYLIST_ALBUMINFO, + FILTER }; - // To be rewritten mode dependent void SetButtons(); + // Tree view handling void DisplayTree( mgSelectionTreeNode *node, int select = 0 ); void DisplayTreeViewSelector(); + void DisplayTreeSubmenu(); + void TreeSubmenuAction( int n ); + // Filter view handling void DisplayFilter(); void DisplayFilterSelector(); + // Playlist view handling void DisplayPlaylist(); - void DisplayTracklist(); void DisplayTrackInfo(); void DisplayAlbumInfo(); @@ -89,7 +93,7 @@ class mgMainMenu : public cOsdMenu mgSelectionTreeNode *m_node; mgPlaylist *m_current_playlist; mgTracklist *m_tracklist; - + // filter items char *m_title, *m_interpret, *m_album, *m_playlist, *m_filtername; int m_year_min, m_year_max, m_filter; @@ -104,6 +108,9 @@ class mgMainMenu : public cOsdMenu /************************************************************ * * $Log: vdr_menu.h,v $ + * Revision 1.8 2004/02/08 10:48:44 LarsAC + * Made major revisions in OSD behavior + * * Revision 1.7 2004/02/03 19:28:46 LarsAC * Playlist now created in plugin instead of in menu. * |
