add special color for marked and selected
[enigma2.git] / lib / service / listboxservice.cpp
index 035658ee1a6d5f3c9543106375b9a5e760a2e471..c869b49c3fb31eb47225631162ed70e89ebc1edb 100644 (file)
@@ -3,12 +3,29 @@
 #include <lib/gdi/font.h>
 #include <lib/dvb/epgcache.h>
 #include <lib/dvb/pmt.h>
+#include <lib/python/connections.h>
 
-void eListboxServiceContent::setRoot(const eServiceReference &root)
+void eListboxServiceContent::addService(const eServiceReference &service)
+{
+       m_list.push_back(service);
+}
+
+void eListboxServiceContent::FillFinished()
+{
+       m_size = m_list.size();
+       cursorHome();
+
+       if (m_listbox)
+               m_listbox->entryReset();
+}
+
+void eListboxServiceContent::setRoot(const eServiceReference &root, bool justSet)
 {
        m_list.clear();
        m_root = root;
-       
+
+       if (justSet)
+               return;
        assert(m_service_center);
        
        ePtr<iListableService> lst;
@@ -18,11 +35,7 @@ void eListboxServiceContent::setRoot(const eServiceReference &root)
                if (lst->getContent(m_list))
                        eDebug("getContent failed");
 
-       m_size = m_list.size();
-       cursorHome();
-       
-       if (m_listbox)
-               m_listbox->entryReset();
+       FillFinished();
 }
 
 void eListboxServiceContent::setCurrent(const eServiceReference &ref)
@@ -35,6 +48,8 @@ void eListboxServiceContent::setCurrent(const eServiceReference &ref)
                        m_cursor_number = index;
                        break;
                }
+       if (m_listbox)
+               m_listbox->moveSelectionTo(index);
 }
 
 void eListboxServiceContent::getCurrent(eServiceReference &ref)
@@ -129,7 +144,7 @@ void eListboxServiceContent::setVisualMode(int mode)
        if (m_visual_mode == visModeSimple)
        {
                m_element_position[celServiceName] = eRect(ePoint(0, 0), m_itemsize);
-               m_element_font[celServiceName] = new gFont("Arial", 23);
+               m_element_font[celServiceName] = new gFont("Regular", 23);
                m_element_position[celServiceNumber] = eRect();
                m_element_font[celServiceNumber] = 0;
                m_element_position[celIcon] = eRect();
@@ -176,6 +191,11 @@ void eListboxServiceContent::cursorHome()
 {
        if (m_current_marked && m_saved_cursor == m_list.end())
        {
+               if (m_cursor_number >= m_size)
+               {
+                       m_cursor_number = m_size-1;
+                       --m_cursor;
+               }
                while (m_cursor_number)
                {
                        std::iter_swap(m_cursor--, m_cursor);
@@ -338,7 +358,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const
        if (m_current_marked && selected)
                style.setStyle(painter, eWindowStyle::styleListboxMarked);
        else if (cursorValid() && isMarked(*m_cursor))
-               style.setStyle(painter, eWindowStyle::styleListboxMarked);
+               style.setStyle(painter, selected ? eWindowStyle::styleListboxMarkedAndSelected : eWindowStyle::styleListboxMarked);
        else
                style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
        painter.clear();