[pvr] channel group selection without channel switch, do not change
authorxhaggi <sascha.woo@gmail.com>
Thu, 13 Sep 2012 00:58:09 +0000 (02:58 +0200)
committerxhaggi <sascha.woo@gmail.com>
Thu, 13 Sep 2012 01:12:36 +0000 (03:12 +0200)
overall playing group

xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp
xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h

index fcbcff9..bfffaf5 100644 (file)
@@ -62,6 +62,7 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
   {
   case GUI_MSG_WINDOW_DEINIT:
     {
+      g_PVRManager.SetPlayingGroup(m_group);
       Clear();
     }
     break;
@@ -74,8 +75,12 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
         Close();
         return true;
       }
+
+      m_group = GetPlayingGroup();
+
       CGUIWindow::OnMessage(message);
-      Update();
+      Update(true);
+
       return true;
     }
     break;
@@ -111,12 +116,8 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
 
       if (iAction == ACTION_MOVE_RIGHT || iAction == ACTION_MOVE_LEFT)
       {
-          CPVRChannelPtr channel;
-        g_PVRManager.GetCurrentChannel(channel);
-
-        CPVRChannelGroupPtr group = g_PVRManager.GetPlayingGroup(channel->IsRadio());
+        CPVRChannelGroupPtr group = GetPlayingGroup();
         CPVRChannelGroupPtr nextGroup = iAction == ACTION_MOVE_RIGHT ? group->GetNextGroup() : group->GetPreviousGroup();
-
         g_PVRManager.SetPlayingGroup(nextGroup);
 
         Clear();
@@ -131,8 +132,20 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
   return CGUIDialog::OnMessage(message);
 }
 
+CPVRChannelGroupPtr CGUIDialogPVRChannelsOSD::GetPlayingGroup()
+{
+  CPVRChannelPtr channel;
+  g_PVRManager.GetCurrentChannel(channel);
+  return g_PVRManager.GetPlayingGroup(channel->IsRadio());
+}
+
 void CGUIDialogPVRChannelsOSD::Update()
 {
+  CGUIDialogPVRChannelsOSD::Update(false);
+}
+
+void CGUIDialogPVRChannelsOSD::Update(bool selectPlayingChannel)
+{
   // lock our display, as this window is rendered from the player thread
   g_graphicsContext.Lock();
 
@@ -152,7 +165,7 @@ void CGUIDialogPVRChannelsOSD::Update()
   {
     group->GetMembers(*m_vecItems);
     m_viewControl.SetItems(*m_vecItems);
-    m_viewControl.SetSelectedItem(group->GetIndex(*channel));
+    m_viewControl.SetSelectedItem(selectPlayingChannel ? group->GetIndex(*channel) : 0);
   }
 
   g_graphicsContext.Unlock();
@@ -197,6 +210,8 @@ void CGUIDialogPVRChannelsOSD::GotoChannel(int item)
   else
     CApplicationMessenger::Get().PlayFile(*pItem);
 
+  m_group = GetPlayingGroup();
+
   CloseOrSelect(item);
 }
 
index 8f559cd..e1eb931 100644 (file)
@@ -22,6 +22,7 @@
 #include "guilib/GUIDialog.h"
 #include "GUIViewControl.h"
 #include "utils/Observer.h"
+#include "pvr/channels/PVRChannelGroupsContainer.h"
 
 class CFileItemList;
 
@@ -43,10 +44,15 @@ namespace PVR
     void ShowInfo(int item);
     void Clear();
     void Update();
+    void Update(bool selectPlayingChannel);
+    CPVRChannelGroupPtr GetPlayingGroup();
     CGUIControl *GetFirstFocusableControl(int id);
 
     CFileItemList    *m_vecItems;
     CGUIViewControl   m_viewControl;
+
+  private:
+    CPVRChannelGroupPtr m_group;
   };
 }