- minor bugfix (allow empty content)
authorFelix Domke <tmbinc@elitedvb.net>
Sat, 29 Jan 2005 04:36:01 +0000 (04:36 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Sat, 29 Jan 2005 04:36:01 +0000 (04:36 +0000)
 - allow tuples as list elements
 - fake main menu

components.py
lib/gui/elistbox.cpp
lib/gui/elistboxcontent.cpp
mytest.py
screens.py

index 52c9460651ddb8dd831ba8978fc4e049fc2b07c3..76423387d25242b633a35e8126d21e53e7944552 100644 (file)
@@ -224,23 +224,20 @@ class VolumeBar(HTMLComponent, GUIComponent, VariableValue):
                g.setRange(0, 100)
                return g
 
+
 class MenuList(HTMLComponent, GUIComponent):
-       def __init__(self):
+       def __init__(self, list):
                GUIComponent.__init__(self)
+               self.l = eListboxPythonStringContent()
+               self.l.setList(list)
        
        def getCurrent(self):
-#              return self.l.getCurrentSelection()
-               return "none"
+               return self.l.getCurrentSelection()
        
        def GUIcreateInstance(self, priv, parent, skindata):
                g = eListbox(parent)
-               # BIG BIG HACK. :( we have to ensure that the eListboxPythonStringContent doesn't get destroyed.
-               # we really have to take a look at the GC stuff
-               l = eListboxPythonStringContent()
-               l.setList(["Test Object 1", "Item #2", "Item #3", "nun kommt eine Zahl:", 15, "Bla fasel", "lulabla"])
-               g.setContent(l)
+               g.setContent(self.l)
                return g
        
        def GUIdeleteInstance(self, g):
                g.setContent(None)
-               #del self.l
index e06ab3e6deb129c2ceca06af5bba88459c2c1a7e..5a9ee4d6f3a5c5e35236b653978be331ef88de8a 100644 (file)
@@ -10,7 +10,8 @@ void eListbox::setContent(iListboxContent *content)
 {
        m_content = content;
        invalidate();
-       m_content->cursorHome();
+       if (m_content)
+               m_content->cursorHome();
        m_top = 0;
        m_selected = 0;
 }
index 2f05f5dcbc523865a4b2b0ce85ecd791a6d6e1fc..d3a2e77a6932d489388c1ff33b789765ca25ff6c 100644 (file)
@@ -337,6 +337,10 @@ void eListboxPythonStringContent::paint(gPainter &painter, eWindowStyle &style,
        {
                PyObject *item = PyList_GetItem(m_list, m_cursor); // borrowed reference!
                painter.setFont(fnt);
+
+                       /* the user can supply tuples, in this case the first one will be displayed. */         
+               if (PyTuple_Check(item))
+                       item = PyTuple_GetItem(item, 0);
                
                const char *string = PyString_Check(item) ? PyString_AsString(item) : "<not-a-string>";
                
index e4a722ac3cc265c527271649b03ac83c85e7a650..edaf24a5e79111f8dfd2d821e3c8a9102d2d5fda 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -70,7 +70,7 @@ class Session:
                self.currentDialog = None
        
        def processDelay(self):
-               self.currentDialog.close()
+               self.currentDialog.doClose()
                if self.currentWindow != None:
                        self.currentWindow.hide()
                
index cf1dac10ee4e0d355530b9eaa97b6b44a1ac7a58..a04772db3620e9d9a1bee435dc5c66904c9f0c1f 100644 (file)
@@ -8,15 +8,34 @@ def doGlobal(screen):
 class Screen(dict, HTMLSkin, GUISkin):
        """ bla """
        
-       def close(self):
+       # never call this directly - it will be called from the session!
+       def doClose(self):
                GUISkin.close(self)
        
+       def close(self, retval=None):
+               self.session.close()
+       
 # a test dialog
 class testDialog(Screen):
        def testDialogClick(self):
-               self["title"].setText(self["menu"].getCurrent())
-
-               self.tries += 1
+               selection = self["menu"].getCurrent()
+               selection[1]()
+       
+       def goMain(self):
+#              self.close(0)
+               self["title"].setText("you selected the main menu!");
+               
+       def goEmu(self):
+#              self.close(1)
+               self["title"].setText("EMUs ARE ILLEGAL AND NOT SUPPORTED!");
+       
+       def goTimeshift(self):
+#              self.close(2)
+               self["title"].setText("JUST PRESS THE YELLOW BUTTON!");
+       
+       def goHDTV(self):
+#              self.close(3)
+               self["title"].setText("HDTV GREEN FLASHES: ENABLED");
 
        def __init__(self):
                GUISkin.__init__(self)
@@ -24,10 +43,23 @@ class testDialog(Screen):
                b.onClick = [ self.testDialogClick ]
                self["okbutton"] = b
                self["title"] = Header("Test Dialog - press ok to leave!")
-               self["menu"] = MenuList()
+               self["menu"] = MenuList(
+                       [
+                               ("MAIN MENU", self.goMain), 
+                               ("EMU SETUP", self.goEmu),
+                               ("TIMESHIFT SETUP", self.goTimeshift),
+                               ("HDTV PIP CONFIG", self.goHDTV)
+                       ])
+
+
+class MainMenu(Screen):
+       def __init__(self):
+               GUISkin.__init__(self)
                
-               self.tries = 0
+               self["ok"] = Button("ok")
+               self["ok"].onClick = [ self.close ]
 
+       
 # a clock display dialog
 class clockDisplay(Screen):
        def okbutton(self):