beautify messagebox
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Fri, 23 Dec 2005 05:19:57 +0000 (05:19 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Fri, 23 Dec 2005 05:19:57 +0000 (05:19 +0000)
add functionality to the messagebox

data/keymap.xml
data/skin.xml
lib/python/Plugins/Makefile.am
lib/python/Plugins/example.py
lib/python/Screens/HarddiskSetup.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/MessageBox.py
lib/python/Screens/MovieSelection.py

index a60935f5872c4db1d2fecd6b520316ce747cf876..2462ef6ef2f45aa827eeb5e99621cedf184c3028 100644 (file)
        </map>
 
        <map context="MsgBoxActions">
-               <key id="KEY_GREEN" mapto="ok" flags="m" />
+               <key id="KEY_GREEN" mapto="alwaysOK" flags="m" />
                <key id="KEY_OK" mapto="ok" flags="m" />                
                <key id="KEY_RED" mapto="cancel" flags="m" />
                <key id="KEY_EXIT" mapto="cancel" flags="m" />
index 4c1a25c0b71721f6bb2e3d761fa857f9cbd4cfc6..e8e8a9ecc3c59da425b09bc30082f4c131695838 100644 (file)
                        <eLabel position="500,40" size="220,60" text="help..." font="Regular;50" />
                </screen>
                <screen name="MessageBox" position="0,300" size="720,10" title="Message">
-                       <widget name="text" position="0,35" size="650,0" font="Regular;22" />
-                       <widget name="key_red" position="0,0" size="140,30" backgroundColor="red" font="Regular;21" />
-                       <widget name="key_green" position="140,0" size="140,30" backgroundColor="green" font="Regular;21" />
+                       <widget name="text" position="60,10" size="650,0" font="Regular;22" />
+                       <widget name="ErrorPixmap" pixmap="/usr/share/enigma2/error.png" position="0,0" zPosition="3" size="53,53" alphatest="on" transparent="1" />
+                       <widget name="QuestionPixmap" pixmap="/usr/share/enigma2/question.png" position="0,0" zPosition="3" size="53,53" alphatest="on" transparent="1" />
+                       <widget name="list" position="100,100" size="550,375" />
                        <applet type="onLayoutFinish">
 # this should be factored out into some helper code, but currently demonstrates applets.
 from enigma import eSize, ePoint
@@ -283,8 +284,11 @@ textsize = self["text"].getSize()
 
 # y size still must be fixed in font stuff...
 textsize = (textsize[0] + 50, textsize[1] + 50)
-wsizex = textsize[0] + 50
-wsizey = textsize[1] + 50
+offset = 0
+if self.type == self.TYPE_YESNO:
+       offset = 60
+wsizex = textsize[0] + offset
+wsizey = textsize[1] + offset
 if (280 > wsizex):
        wsizex = 280
 wsize = (wsizex, wsizey)
@@ -296,6 +300,11 @@ self.instance.resize(eSize(*wsize))
 # resize label
 self["text"].instance.resize(eSize(*textsize))
 
+# move list
+listsize = (wsizex, 50)
+self["list"].instance.move(ePoint(0, textsize[1]))
+self["list"].instance.resize(eSize(*listsize))
+
 # center window
 newwidth = wsize[0]
 self.instance.move(ePoint(orgpos.x() + (orgwidth - newwidth)/2, orgpos.y()))
index 6cf5ffa7e09ea29965d650d9d9e5a9928647527b..610314d460be535eb45ddeeb64d09dc799e4fb7e 100644 (file)
@@ -2,5 +2,5 @@ installdir = $(LIBDIR)/enigma2/python/Plugins
 
 install_PYTHON =       \
        __init__.py \
-       update.py 
+       update.py
 #      example.py 
index 5b96ee3783000183b9baf3e86c22255ab60d01f9..f20119124b2f789f75e5e2ae0f1816de259a9c5c 100644 (file)
@@ -1,5 +1,7 @@
 from enigma import *
 from Screens.Screen import Screen
+from Screens.MessageBox import MessageBox
+
 from Components.ActionMap import ActionMap
 from Components.Label import Label
 
@@ -13,16 +15,17 @@ class Example(Screen):
                self.skin = Example.skin
                Screen.__init__(self, session)
 
-               self["text"] = Label("Small test")
+               self["text"] = Label("Big test")
 
                self["actions"] = ActionMap(["WizardActions"], 
                {
-                       "ok": self.ok
+                       "ok": self.ok,
+                       "back": self.close
                }, -1)
                
        def ok(self):
-               self.close()
-               
+               self.session.open(MessageBox, "Bla bla bla bla bla bla bla bla\n bla bla bla bla bla bla\n bla bla bla bla bla bla\n bla bla bla bla bla", MessageBox.TYPE_YESNO)
+                               
 def main(session):
        session.open(Example)
        
index 72480ce852ff08b182fada8077f2b105830d49ba..290d0bac8410765412f89805fcf736b004d99b25 100644 (file)
@@ -44,7 +44,7 @@ class HarddiskSetup(Screen):
        def hddReady(self, result):
                print "Result: " + str(result)
                if (result != 0):
-                       self.session.open(MessageBox, _("Unable to initialize harddisk.\nPlease refer to the user manual.\nError: ") + str(self.hdd.errorList[0 - result]))
+                       self.session.open(MessageBox, _("Unable to initialize harddisk.\nPlease refer to the user manual.\nError: ") + str(self.hdd.errorList[0 - result]), MessageBox.TYPE_ERROR)
                else:
                        self.close()
                        
index 0fcb6ba9a9d42e24fd21b56c7bae635003f6fa8b..96d858777e0a63270d04c73d3ba6beba8935d999 100644 (file)
@@ -668,7 +668,7 @@ class InfoBarInstantRecord:
                try:
                        stat = os.stat("/hdd/movies")
                except:
-                       self.session.open(MessageBox, "No HDD found!")
+                       self.session.open(MessageBox, "No HDD found!", MessageBox.TYPE_ERROR)
                        return
        
                if self.isInstantRecordRunning():
index 87da7f9c33ea1d72de9f9d632362002d24437f55..632c9bc5dc9157e9519b9661701eeb6c07d9e8f9 100644 (file)
@@ -2,21 +2,42 @@ from Screen import Screen
 from Components.ActionMap import ActionMap
 from Components.Label import Label
 from Components.Button import Button
+from Components.Pixmap import Pixmap
+from Components.MenuList import MenuList
 from enigma import eSize, ePoint
 
 class MessageBox(Screen):
-       def __init__(self, session, text):
+       TYPE_YESNO = 0
+       TYPE_INFO = 1
+       TYPE_WARNING = 2
+       TYPE_ERROR = 3
+       
+       def __init__(self, session, text, type = TYPE_YESNO):
+               self.type = type
                Screen.__init__(self, session)
                
                self["text"] = Label(text)
                
-               self["key_green"] = Button("OK")
-               self["key_red"] = Button("Exit")
+               self["ErrorPixmap"] = Pixmap()
+               self["QuestionPixmap"] = Pixmap()
+               
+               self.list = []
+               if type != self.TYPE_ERROR:
+                       self.onShown.append(self["ErrorPixmap"].hideWidget)
+               elif type != self.TYPE_YESNO:
+                       self.onShown.append(self["QuestionPixmap"].hideWidget)
+
+               if type == self.TYPE_YESNO:
+                       self.list = [ (_("yes"), 0), (_("no"), 1) ]
 
+
+               self["list"] = MenuList(self.list)
+               
                self["actions"] = ActionMap(["MsgBoxActions"], 
                        {
                                "cancel": self.cancel,
-                               "ok": self.ok
+                               "ok": self.ok,
+                               "alwaysOK": self.alwaysOK
                        })
                        
        
@@ -24,4 +45,10 @@ class MessageBox(Screen):
                self.close(False)
        
        def ok(self):
-               self.close(True)
+               if self.type == self.TYPE_YESNO:
+                       self.close(self["list"].getCurrent()[1] == 0)
+               else:
+                       self.close(True)
+
+       def alwaysOK(self):
+               self.close(True)
\ No newline at end of file
index ffa73c14c36252483ba1665fbd2b908bd606f737..2ba2d059f4b46bdf40480ee317706fa2507a0f91 100644 (file)
@@ -32,7 +32,7 @@ class ChannelContextMenu(FixedMenu):
                if result == True:
                        self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Do you really want to delete this recording?"))
                else:
-                       self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"))
+                       self.session.openWithCallback(self.close, MessageBox, _("You cannot delete this!"), MessageBox.TYPE_ERROR)
 
        def deleteConfirmed(self, confirmed):
                if not confirmed:
@@ -47,7 +47,7 @@ class ChannelContextMenu(FixedMenu):
                                result = True
                
                if result == False:
-                       self.session.openWithCallback(self.close, MessageBox, _("Delete failed!"))
+                       self.session.openWithCallback(self.close, MessageBox, _("Delete failed!"), MessageBox.TYPE_ERROR)
                else:
                        list = self.csel["list"]
                        currentIndex = list.getCurrentIndex()