New version
[ussd-widget] / ussd-widget / src / usr / lib / hildon-desktop / ussd-widget.py
index 0256a0c..2b1ab82 100755 (executable)
@@ -23,6 +23,7 @@ except IOError:
        _ = retme
 
 ussd_languages = ["German", "English", "Italian", "French", "Spanish", "Dutch", "Swedish", "Danish", "Portuguese", "Finnish", "Norwegian", "Greek", "Turkish", "Reserved1", "Reserved2", "Unspecified"]
+ussd_languages_localized = [_("German"), _("English"), _("Italian"), _("French"), _("Spanish"), _("Dutch"), _("Swedish"), _("Danish"), _("Portuguese"), _("Finnish"), _("Norwegian"), _("Greek"), _("Turkish"), _("Reserved1"), _("Reserved2"), _("Unspecified")]
 
 # TODO Cutt off too long messages and show them in separate dialog
 # how TODO widget vertical minimum size policy
@@ -31,8 +32,8 @@ ussd_languages = ["German", "English", "Italian", "French", "Spanish", "Dutch",
 class USSD_Controller:
        def __init__( self, widget ) :
                self.widget = widget
-               # number, parser, chain, interval, regexp, width, execute_at_start, retry pattern, font, name, language, show_message_box, message_box_parser, additional arguments 
-               self.default_config = ["", "", "", 0, "", 0, True, [], pango.FontDescription("Nokia Sans 18"), _("Click to update"), 15, False, "", ""]
+               # number, parser, chain, interval, regexp, width, execute_at_start, retry pattern, font, name, language, show_message_box, message_box_parser, additional arguments, regexp group 
+               self.default_config = ["", "", "", 0, "", 0, True, [], pango.FontDescription("Nokia Sans 18"), _("Click to update"), 15, False, "", "", 1]
                self.config = self.default_config
                self.timeout_version = 0
                self.retry_version = 0
@@ -86,6 +87,7 @@ class USSD_Controller:
                fconfig.writelines(["#Show banner\n", "show_box="+str(self.config[11]), "\n"])
                fconfig.writelines(["#USSD reply language\n", "language="+str(self.config[10]), "\n"])
                fconfig.writelines(["#Additional ussdquery.py arguments\n", "args="+self.config[13], "\n"])
+               fconfig.writelines(["#Regexp matching group\n", "reggroup="+self.config[14], "\n"])
                fconfig.close()
 
                fcntl.flock(lockf,fcntl.LOCK_UN)
@@ -203,6 +205,13 @@ class USSD_Controller:
                                                print _("Error reading config on line %(line)d. Integer expected.")%{"line":i}
                                elif line[0] == "args" :
                                        self.config[13] = line[1].strip()
+                               elif line[0] == "reggroup" :
+                                       try:
+                                               self.config[14] = int(line[1].strip())
+                                       except:
+                                               error = True
+                                               print _("Error reading config on line %(line)d. Integer expected.")%{"line":i}
+                                               continue
                                else :
                                        error = True
                                        print _("Error reading config on line %(line)d. Unexpected variable: ")%{"line":i}+line[0]
@@ -274,7 +283,8 @@ class USSD_Controller:
                        dialog.language.get_active(),
                        dialog.show_box.get_active(),
                        dialog.b_parser.get_text(),
-                       dialog.args.get_text()
+                       dialog.args.get_text(),
+                       dialog.reggroup.get_value()
                ]
 
                widget.set_bg_color(dialog.bg_color)
@@ -350,7 +360,7 @@ class USSD_Controller:
                        # Apply regexp
                        if self.config[4] != "":
                                try :
-                                       reply = re.match( self.config[4], reply ).group( 1 )
+                                       reply = re.search( self.config[4], reply, re.MULTILINE | re.UNICODE ).group( self.config[14] )
                                except Exception, e:
                                        self.widget.error = 1
                                        reply = _("Regexp Error: ") + str( e ) + "\n" + reply
@@ -443,9 +453,11 @@ class UssdConfigDialog(gtk.Dialog):
                self.retryEdit = hildon.Entry(gtk.HILDON_SIZE_AUTO)
                self.args = hildon.Entry(gtk.HILDON_SIZE_AUTO)
                self.args.set_text(config[13])
+               self.reggroup = hildon.NumberEditor(0, 255)
+               self.reggroup.set_value(config[14])
 
                selector = hildon.TouchSelector(text=True)
-               for i in ussd_languages:
+               for i in ussd_languages_localized:
                        selector.append_text(i)
                self.language = hildon.PickerButton(gtk.HILDON_SIZE_AUTO, hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
                self.language.set_selector(selector)
@@ -510,8 +522,6 @@ class UssdConfigDialog(gtk.Dialog):
                numberBox.add(self.ussdNumber)
                vbox.add(numberBox)
 
-               vbox.add(self.language)
-
                vbox.add(self.query_at_start)
 
                nameBox = gtk.HBox()
@@ -552,14 +562,22 @@ class UssdConfigDialog(gtk.Dialog):
                vbox.add(self.chain)
 
                regexpBox = gtk.HBox()
-               regexpLabel = gtk.Label(_("RegExp"))
+               regexpLabel = gtk.Label(_("Regular expression"))
                regexpLabel.set_alignment(0,0.6)
                regexpLabel.set_size_request(200, -1)
+               regexpGroupLabel = gtk.Label(_("Group"))
+               regexpGroupLabel.set_size_request(1, -1)
                reghelp.set_size_request(10, -1)
                regexpBox.add(regexpLabel)
                regexpBox.add(reghelp)
+               regexpBox.add(regexpGroupLabel)
                vbox.add(regexpBox)
-               vbox.add(self.regexp)           
+               self.reggroup.set_size_request(1,-1);
+               self.regexp.set_size_request(250,-1);
+               regexpInputBox = gtk.HBox()
+               regexpInputBox.add(self.regexp)
+               regexpInputBox.add(self.reggroup)
+               vbox.add(regexpInputBox)                
 
                widthBox = gtk.HBox()
                widthLabel = gtk.Label(_("Max. width"))
@@ -605,6 +623,9 @@ class UssdConfigDialog(gtk.Dialog):
                viewBox.add(self.textColorButton)
                viewBox.add(self.colorButton)
                vbox.add(viewBox)
+               
+               vbox.add(gtk.Label(_("DO NOT CHANGE. Unspecified is what you want.")))
+               vbox.add(self.language)
 
                self.show_all()
                self.parent