jumping to an entry beginning with a character nearly works now
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 30 Nov 2005 14:15:56 +0000 (14:15 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Wed, 30 Nov 2005 14:15:56 +0000 (14:15 +0000)
lib/gui/elistbox.cpp
lib/gui/elistbox.h
lib/python/Components/ServiceList.py
lib/python/Screens/ChannelSelection.py
lib/service/listboxservice.cpp
lib/service/listboxservice.h

index 28d220a2dc20e74c5d4ab4b8351c8eca22e4a02d..873cc937cb30807aaf430cd585c4d9e8f52360fe 100644 (file)
@@ -121,6 +121,12 @@ void eListbox::moveSelection(int dir)
        }
 }
 
        }
 }
 
+void eListbox::moveSelectionTo(int index)
+{
+       printf("Moving to listbox-entry with index %d\n", index);
+       // TODO: implement it
+}
+
 int eListbox::event(int event, void *data, void *data2)
 {
        switch (event)
 int eListbox::event(int event, void *data, void *data2)
 {
        switch (event)
index a7ed637d55ff70836c734b25e5f175afa3847c0f..60429d2e49ac5c55872c80c4ee80d86738d15eac 100644 (file)
@@ -63,6 +63,7 @@ public:
        }; */
        
        void moveSelection(int how);
        }; */
        
        void moveSelection(int how);
+       void moveSelectionTo(int index);
 
        enum ListboxActions {
                moveUp,
 
        enum ListboxActions {
                moveUp,
index 89b40ed2260eaa48bcaaaad8f35992a819f1fb18..e04594ee79cff0858f13fb6429be341bcf16a0e2 100644 (file)
@@ -3,6 +3,8 @@ from GUIComponent import *
 
 from enigma import *
 
 
 from enigma import *
 
+from string import upper
+
 class ServiceList(HTMLComponent, GUIComponent):
 
        MODE_NORMAL = 0
 class ServiceList(HTMLComponent, GUIComponent):
 
        MODE_NORMAL = 0
@@ -28,6 +30,16 @@ class ServiceList(HTMLComponent, GUIComponent):
 
        def moveDown(self):
                self.instance.moveSelection(self.instance.moveDown)
 
        def moveDown(self):
                self.instance.moveSelection(self.instance.moveDown)
+               
+       def moveToChar(self, char):
+               # TODO fill with life
+               print "Next char: "
+               index = self.l.getNextBeginningWithChar(char)
+               indexup = self.l.getNextBeginningWithChar(upper(char))
+               if (index > indexup):
+                       index = indexup
+               self.instance.moveSelectionTo(index)
+               print "Moving to character " + str(char)
 
        def GUIcreate(self, parent):
                self.instance = eListbox(parent)
 
        def GUIcreate(self, parent):
                self.instance = eListbox(parent)
index 565655f9f75188669170347b9dac1694af2ad5e7..3cca57fad2ad2d48438ac978c3778aebdbc7d2d4 100644 (file)
@@ -276,9 +276,10 @@ class ChannelSelectionBase(Screen):
                self.setRoot(self.bouquet_root)
 
        def keyNumberGlobal(self, number):
                self.setRoot(self.bouquet_root)
 
        def keyNumberGlobal(self, number):
+               char = self.numericalTextInput.getKey(number)
                print "You pressed number " + str(number)
                print "You pressed number " + str(number)
-               print "You would go to character " + str(self.numericalTextInput.getKey(number))
-               # TODO let the servicelist jump to the next entry strating with the chosen character
+               print "You would go to character " + str(char)
+               self.servicelist.moveToChar(char)
 
        def enterBouquet(self, action):
                if action[:7] == "bouquet":
 
        def enterBouquet(self, action):
                if action[:7] == "bouquet":
index 9eafc853cc1d212c47e1ef0a3380da8fdcd4c8ea..e336dc175dc670291d1bcd5f959d1f88a7b1c7f2 100644 (file)
@@ -44,6 +44,23 @@ void eListboxServiceContent::getCurrent(eServiceReference &ref)
                ref = eServiceReference();
 }
 
                ref = eServiceReference();
 }
 
+int eListboxServiceContent::getNextBeginningWithChar(char c)
+{
+//     printf("Char: %c\n", c);
+       int index=0;
+       for (list::iterator i(m_list.begin()); i != m_list.end(); ++i, ++index)
+       {
+               std::string text;
+               ePtr<iStaticServiceInformation> service_info;
+               m_service_center->info(*i, service_info);
+               service_info->getName(*i, text);
+//             printf("%c\n", text.c_str()[0]);
+               if (text.c_str()[0] == c)
+                       return index;
+       }
+       return 0;
+}
+
 void eListboxServiceContent::initMarked()
 {
        m_marked.clear();
 void eListboxServiceContent::initMarked()
 {
        m_marked.clear();
index 1d5dc2a200b11e0b4bf6bbc643bd59866b36b105..ae0ec5a6ebda938a7858734846068d4bafe6a7ae 100644 (file)
@@ -15,6 +15,8 @@ public:
        eListboxServiceContent();
        void setRoot(const eServiceReference &ref);
        void getCurrent(eServiceReference &ref);
        eListboxServiceContent();
        void setRoot(const eServiceReference &ref);
        void getCurrent(eServiceReference &ref);
+       
+       int getNextBeginningWithChar(char c);
 
                /* support for marked services */
        void initMarked();
 
                /* support for marked services */
        void initMarked();