Merge branch 'stable' master
authorandrei1089 <andrei.mirestean@gmail.com>
Mon, 22 Mar 2010 21:26:56 +0000 (23:26 +0200)
committerandrei1089 <andrei.mirestean@gmail.com>
Mon, 22 Mar 2010 21:26:56 +0000 (23:26 +0200)
1  2 
src/usr/lib/hildon-desktop/pedometer_widget_home.py

@@@ -24,8 -24,6 +24,8 @@@ import gobjec
  import gconf
  import gtk
  import cairo
 +import locale
 +import gettext
  
  import pygst
  pygst.require("0.10")
@@@ -34,8 -32,6 +34,8 @@@ import gs
  import hildondesktop
  import hildon
  
 +APP_NAME = "pedometer"
 +
  PATH = "/apps/pedometerhomewidget"
  MODE = PATH + "/mode"
  HEIGHT = PATH + "/height"
@@@ -69,49 -65,6 +69,49 @@@ class Singleton(object)
                                  cls, *args, **kwargs)
          return cls._instance
  
 +class Translate(Singleton):
 +
 +    def __init__(self):
 +        if self._references > 1:
 +            return
 +        #Get the local directory since we are not installing anything
 +        #self.local_path = os.path.realpath(os.path.dirname(sys.argv[0]))
 +        self.local_path = os.path.join(os.path.expanduser("~"), "pedometer-widget-0.1", "locale")
 +        # Init the list of languages to support
 +        langs = []
 +        #Check the default locale
 +        lc, encoding = locale.getdefaultlocale()
 +        if (lc):
 +            #If we have a default, it's the first in the list
 +            langs = [lc]
 +        # Now lets get all of the supported languages on the system
 +        language = os.environ.get('LANGUAGE', None)
 +        if (language):
 +            """langage comes back something like en_CA:en_US:en_GB:en
 +            on linuxy systems, on Win32 it's nothing, so we need to
 +            split it up into a list"""
 +            langs += language.split(":")
 +        """Now add on to the back of the list the translations that we
 +        know that we have, our defaults"""
 +        langs += ["en_CA", "en_US", "ro_RO"]
 +
 +        """Now langs is a list of all of the languages that we are going
 +        to try to use.  First we check the default, then what the system
 +        told us, and finally the 'known' list"""
 +
 +        gettext.bindtextdomain(APP_NAME, self.local_path)
 +        print self.local_path
 +        print langs
 +        gettext.textdomain(APP_NAME)
 +        # Get the language to use
 +        self.lang = gettext.translation(APP_NAME, self.local_path
 +            , languages=langs, fallback = True)
 +        """Install the language, map _() (which we marked our
 +        strings to translate with) to self.lang.gettext() which will
 +        translate them."""
 +
 +_ = Translate().lang.gettext
 +
  class PedoIntervalCounter(Singleton):
      MIN_THRESHOLD = 500
      MIN_TIME_STEPS = 0.5
@@@ -977,8 -930,8 +977,8 @@@ class CustomEventBox(gtk.EventBox)
          gtk.EventBox.do_expose_event(self, event)
  
  class GraphController(Singleton):
 -    ytitles = ["Steps", "Average Speed", "Distance", "Calories"]
 -    xtitles = ["Day", "Week"] # "Today"]
 +    ytitles = [_("Steps"), _("Average Speed"), _("Distance"), _("Calories")]
 +    xtitles = [_("Day"), _("Week")] # "Today"]
      widget = None
  
      config = None
          delta = timedelta(days=7)
          ret = []
          for i in range(7):
 -            ret.append(d.strftime("Week %W"))
 +            ret.append(_("Week") + d.strftime("%W"))
              d = d - delta
          return ret
  
              values = self.repository.get_last_weeks()
              d = date.today()
              for i in range(7):
 -                labels.append(d.strftime("Week %W"))
 +                labels.append(_("Week") + " " + d.strftime("%W"))
                  d = d - timedelta(days=7)
          else:
              values = self.repository.get_today()
@@@ -1096,10 -1049,10 +1096,10 @@@ class GraphWidget(gtk.DrawingArea)
  
          """sample values"""
          self.ytext = ["   0", "1000", "2000", "3000", "4000", "5000"]
 -        self.xtext = ["Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday", "Sunday"]
 +        self.xtext = [_("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), _("Saturday"), _("Sunday")]
          self.values = [1500, 3400, 4000, 3600, 3200, 0, 4500]
          self.max_value = 5000
 -        self.text = "All time steps"
 +        self.text = _("All time steps")
  
      def do_expose_event(self, event):
          context = self.window.cairo_create()
@@@ -1345,7 -1298,6 +1345,7 @@@ class Config(Singleton)
      def set_alarm_type(self, value):
          self.client.set_int(ALARM_TYPE, value)
  
 +
  class PedometerHomePlugin(hildondesktop.HomePluginItem):
      button = None
  
      #second view ( day / week/ alltime)
      labelsT = {}
  
 -    second_view_labels = ["All-time", "Today", "This week"]
 +    second_view_labels = [_("All-time"), _("Today"), _("This week")]
  
      controller = None
      graph_controller = None
      def __init__(self):
          hildondesktop.HomePluginItem.__init__(self)
  
 +        print "!!!!!!!!!!!!!!!Pedometer init"
          gobject.type_register(CustomEventBox)
          gobject.type_register(GraphWidget)
  
 +        #global _
 +        #_ = Translate()._
 +
          self.config = Config()
  
          self.button = CustomButton(ICONSPATH + "play.png")
  
          descVBox = gtk.VBox(spacing=1)
          descVBox.add(self.new_label_heading())
 -        descVBox.add(self.new_label_heading("Time:"))
 -        descVBox.add(self.new_label_heading("Steps:"))
 -        descVBox.add(self.new_label_heading("Calories:"))
 -        descVBox.add(self.new_label_heading("Distance:"))
 -        descVBox.add(self.new_label_heading("Avg Speed:"))
 +        descVBox.add(self.new_label_heading(_("Time") + ":"))
 +        descVBox.add(self.new_label_heading(_("Steps") + ":"))
 +        descVBox.add(self.new_label_heading(_("Calories") + ":"))
 +        descVBox.add(self.new_label_heading(_("Distance") + ":"))
 +        descVBox.add(self.new_label_heading(_("Avg Speed") + ":"))
  
          currentVBox = gtk.VBox(spacing=1)
 -        currentVBox.add(self.new_label_heading("Current"))
 +        currentVBox.add(self.new_label_heading(_("Current")))
          currentVBox.add(self.labelsC["timer"])
          currentVBox.add(self.labelsC["count"])
          currentVBox.add(self.labelsC["calories"])
  
          self.mainvbox.show_all()
          self.add(self.mainvbox)
-         self.update_aspect()
  
          self.connect("unrealize", self.close_requested)
          self.set_settings(True)
          self.connect("show-settings", self.show_settings)
  
+         self.config.add_observer(self.update_aspect)
      def eventBoxGraph_clicked(self, widget, data=None):
          widget.set_state(gtk.STATE_ACTIVE)
  
              labelEntry2.set_label(suffix[type])
  
          dialog = gtk.Dialog()
 -        dialog.set_title("Alarm settings")
 -        dialog.add_button("OK", gtk.RESPONSE_OK)
 +        dialog.set_title(_("Alarm settings"))
 +        dialog.add_button(_("OK"), gtk.RESPONSE_OK)
  
          enableButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
 -        enableButton.set_label("Enable alarm")
 +        enableButton.set_label(_("Enable alarm"))
          enableButton.set_active(self.alarm_controller.get_enable())
          enableButton.connect("toggled", enableButton_changed)
  
          testButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          testButton.set_alignment(0, 0.8, 1, 1)
 -        testButton.set_title("Test sound")
 +        testButton.set_title(_("Test sound"))
          testButton.connect("pressed", test_sound)
  
          fileButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          fileButton.set_alignment(0, 0.8, 1, 1)
 -        fileButton.set_title("Alarm sound")
 +        fileButton.set_title(_("Alarm sound"))
          fileButton.set_value(self.alarm_controller.get_alarm_file())
          fileButton.connect("pressed", choose_file)
  
 -        labelEntry = gtk.Label("Notify every:")
 -        suffix = ["mins", "steps", "m/ft", "calories"]
 +        labelEntry = gtk.Label(_("Notify every") + ":")
 +        suffix = [_("mins"), _("steps"), _("m/ft"), _("calories")]
          labelEntry2 = gtk.Label(suffix[self.alarm_controller.get_type()])
          intervalEntry = hildon.Entry(gtk.HILDON_SIZE_AUTO_WIDTH)
          intervalEntry.set_text(str(self.alarm_controller.get_interval()))
  
          selectorType = hildon.TouchSelector(text=True)
          selectorType.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
 -        selectorType.append_text("Time")
 -        selectorType.append_text("Steps")
 -        selectorType.append_text("Distance")
 -        selectorType.append_text("Calories")
 +        selectorType.append_text(_("Time"))
 +        selectorType.append_text(_("Steps"))
 +        selectorType.append_text(_("Distance"))
 +        selectorType.append_text(_("Calories"))
          selectorType.connect("changed", selectorType_changed, labelEntry2)
  
          typePicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          typePicker.set_alignment(0.0, 0.5, 1.0, 1.0)
 -        typePicker.set_title("Alarm type")
 +        typePicker.set_title(_("Alarm type"))
          typePicker.set_selector(selectorType)
          typePicker.set_active(self.alarm_controller.get_type())
  
                  self.config.set_alarrm_interval(value)
                  break
              except:
 -                hildon.hildon_banner_show_information(self, "None", "Invalid interval")
 +                hildon.hildon_banner_show_information(self, "None", _("Invalid interval"))
  
          dialog.destroy()
  
      def show_settings(self, widget):
          def reset_total_counter(arg):
 -            note = hildon.hildon_note_new_confirmation(self.dialog, "Are you sure you want to delete all your pedometer history?")
 +            note = hildon.hildon_note_new_confirmation(self.dialog, _("Are you sure you want to delete all your pedometer history?"))
              ret = note.run()
              if ret == gtk.RESPONSE_OK:
                  self.controller.reset_all_values()
 -                hildon.hildon_banner_show_information(self, "None", "All history was deleted")
 +                hildon.hildon_banner_show_information(self, "None", _("All history was deleted"))
              note.destroy()
  
          def alarmButton_pressed(widget):
  
          def selectorUI_changed(selector, data):
              aspect = selectorUI.get_active(0)
-             widget.update_aspect()
+             self.config.set_aspect(aspect)
  
          def logButton_changed(checkButton):
              logging = checkButton.get_active()
                                             " " + self.controller.get_str_weight_unit(self.config.get_unit()) )
  
          def weight_dialog(button):
 -            dialog = gtk.Dialog("Weight", self.dialog)
 -            dialog.add_button("OK", gtk.RESPONSE_OK)
 +            dialog = gtk.Dialog(_("Weight"), self.dialog)
 +            dialog.add_button(_("OK"), gtk.RESPONSE_OK)
  
 -            label = gtk.Label("Weight:")
 +            label = gtk.Label(_("Weight") + ":")
              entry = gtk.Entry()
              entry.set_text(str(self.config.get_weight()))
  
                      update_weight_button()
                      break
                  except:
 -                    hildon.hildon_banner_show_information(self, "None", "Invalid weight")
 +                    hildon.hildon_banner_show_information(self, "None", _("Invalid weight"))
              dialog.destroy()
  
          def sensitivity_dialog(button):
              def seekbar_changed(seekbar):
                  label.set_text(str(seekbar.get_position()) + " %")
  
 -            dialog = gtk.Dialog("Sensitivity", self.dialog)
 -            dialog.add_button("OK", gtk.RESPONSE_OK)
 +            dialog = gtk.Dialog(_("Sensitivity"), self.dialog)
 +            dialog.add_button(_("OK"), gtk.RESPONSE_OK)
              seekbar = hildon.Seekbar()
              seekbar.set_size_request(400, -1)
              seekbar.set_total_time(200)
          def stepLengthButton_value_update():
              if self.config.get_height() == 5:
                  l_unit = ["m", "ft"]
 -                stepLengthButton.set_value("Custom value: %.2f %s" % (self.config.get_step_length(), l_unit[self.config.get_unit()]))
 +                stepLengthButton.set_value(_("Custom value") + ": %.2f %s" % (self.config.get_step_length(), l_unit[self.config.get_unit()]))
              else:
                  h = [ ["< 1.50 m", "1.50 - 1.65 m", "1.66 - 1.80 m", "1.81 - 1.95 m", " > 1.95 m"],
                        ["< 5 ft", "5 - 5.5 ft", "5.5 - 6 ft", "6 - 6.5 ft", "> 6.5 ft"]]
 -                str = "Using predefined value for height: %s" % h[self.config.get_unit()][self.config.get_height()]
 +                str = _("Using predefined value for height") + ": %s" % h[self.config.get_unit()][self.config.get_height()]
                  stepLengthButton.set_value(str)
  
          def stepLength_dialog(button):
  
              def manualButton_clicked(button, dialog):
                  dlg = gtk.Dialog()
 -                dlg.set_title("Custom step length")
 -                dlg.add_button("OK", gtk.RESPONSE_OK)
 +                dlg.set_title(_("Custom step length"))
 +                dlg.add_button(_("OK"), gtk.RESPONSE_OK)
  
 -                label = gtk.Label("Length")
 +                label = gtk.Label(_("Length"))
  
                  entry = hildon.Entry(gtk.HILDON_SIZE_AUTO_WIDTH)
                  if self.config.get_height() == 5:
                          stepLengthButton_value_update()
                          break
                      except ValueError:
 -                        hildon.hildon_banner_show_information(self, "None", "Invalid length")
 +                        hildon.hildon_banner_show_information(self, "None", _("Invalid length"))
                  dlg.destroy()
                  dialog.destroy()
  
                  dialog.destroy()
  
              dialog = gtk.Dialog()
 -            dialog.set_title("Step length")
 +            dialog.set_title(_("Step length"))
  
              manualButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -            manualButton.set_title("Enter custom value")
 +            manualButton.set_title(_("Enter custom value"))
              manualButton.set_alignment(0, 0.8, 1, 1)
              manualButton.connect("clicked", manualButton_clicked, dialog)
  
  
              heightPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
              heightPicker.set_alignment(0.0, 0.5, 1.0, 1.0)
 -            heightPicker.set_title("Use predefined values for height")
 +            heightPicker.set_title(_("Use predefined values for height"))
  
  
              unit = self.config.get_unit()
              os.system(command)
  
          dialog = gtk.Dialog()
 -        dialog.set_title("Settings")
 -        dialog.add_button("OK", gtk.RESPONSE_OK)
 +        dialog.set_title(_("Settings"))
 +        dialog.add_button(_("OK"), gtk.RESPONSE_OK)
          self.dialog = dialog
  
          stepLengthButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        stepLengthButton.set_title("Step length")
 +        stepLengthButton.set_title(_("Step length"))
          stepLengthButton.set_alignment(0, 0.8, 1, 1)
          stepLengthButton.connect("clicked", stepLength_dialog)
          stepLengthButton_value_update()
  
          resetButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        resetButton.set_title("Reset")
 -        resetButton.set_value("All the stored values will be erased")
 +        resetButton.set_title(_("Reset"))
 +        resetButton.set_value(_("All the stored values will be erased"))
          resetButton.set_alignment(0, 0.8, 1, 1)
          resetButton.connect("clicked", reset_total_counter)
  
          alarmButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        alarmButton.set_title("Alarm")
 +        alarmButton.set_title(_("Alarm"))
          if self.config.get_alarm_enable():
 -            alarmButton.set_value("Enabled")
 +            alarmButton.set_value(_("Enabled"))
          else:
 -            alarmButton.set_value("Disabled")
 +            alarmButton.set_value(_("Disabled"))
          alarmButton.set_alignment(0, 0.8, 1, 1)
          alarmButton.connect("clicked", alarmButton_pressed)
  
          selector = hildon.TouchSelector(text=True)
          selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
 -        selector.append_text("Walk")
 -        selector.append_text("Run")
 +        selector.append_text(_("Walk"))
 +        selector.append_text(_("Run"))
          selector.connect("changed", selector_changed)
  
          modePicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          modePicker.set_alignment(0.0, 0.5, 1.0, 1.0)
 -        modePicker.set_title("Mode")
 +        modePicker.set_title(_("Mode"))
          modePicker.set_selector(selector)
          modePicker.set_active(self.config.get_mode())
  
          weightButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        weightButton.set_title("Weight")
 +        weightButton.set_title(_("Weight"))
          weightButton.set_alignment(0, 0.8, 1, 1)
          update_weight_button()
          weightButton.connect("clicked", weight_dialog)
  
          selectorUnit = hildon.TouchSelector(text=True)
          selectorUnit.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
 -        selectorUnit.append_text("Metric (km)")
 -        selectorUnit.append_text("English (mi)")
 +        selectorUnit.append_text(_("Metric (km)"))
 +        selectorUnit.append_text(_("English (mi)"))
          selectorUnit.connect("changed", selectorUnit_changed)
  
          unitPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          unitPicker.set_alignment(0.0, 0.5, 1.0, 1.0)
 -        unitPicker.set_title("Unit")
 +        unitPicker.set_title(_("Unit"))
          unitPicker.set_selector(selectorUnit)
          unitPicker.set_active(self.config.get_unit())
  
          selectorUI = hildon.TouchSelector(text=True)
          selectorUI = hildon.TouchSelector(text=True)
          selectorUI.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
 -        selectorUI.append_text("Show current + total + graph")
 -        selectorUI.append_text("Show current + total")
 -        selectorUI.append_text("Show only current")
 -        selectorUI.append_text("Show only total")
 +        selectorUI.append_text(_("Show current + total + graph"))
 +        selectorUI.append_text(_("Show current + total"))
 +        selectorUI.append_text(_("Show only current"))
 +        selectorUI.append_text(_("Show only total"))
          selectorUI.connect("changed", selectorUI_changed)
  
          UIPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
          UIPicker.set_alignment(0.0, 0.5, 1.0, 1.0)
 -        UIPicker.set_title("Widget aspect")
 +        UIPicker.set_title(_("Widget aspect"))
          UIPicker.set_selector(selectorUI)
          UIPicker.set_active(self.config.get_aspect())
  
          sensitivityButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        sensitivityButton.set_title("Sensitivity")
 +        sensitivityButton.set_title(_("Sensitivity"))
          sensitivityButton.set_alignment(0, 0.8, 1, 1)
          sensitivityButton.set_value(str(self.config.get_sensitivity()) + " %")
          sensitivityButton.connect("clicked", sensitivity_dialog)
  
          donateButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
 -        donateButton.set_title("Donate")
 -        donateButton.set_value("Please support the development of this opensource widget!")
 +        donateButton.set_title(_("Donate"))
 +        donateButton.set_value(_("Please support the development of this opensource widget!"))
          donateButton.set_alignment(0, 0.8, 1, 1)
          donateButton.connect("clicked", donateButton_clicked, dialog)
  
          logButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
 -        logButton.set_label("Log data")
 +        logButton.set_label(_("Log data"))
          logButton.set_active(self.config.get_logging())
          logButton.connect("toggled", logButton_changed)
  
          idleButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
 -        idleButton.set_label("Pause time when not walking")
 +        idleButton.set_label(_("Pause time when not walking"))
          idleButton.set_active(self.config.get_noidletime())
          idleButton.connect("toggled", idleButton_changed)
  
          else:
              self.controller.start_pedometer()
              self.button.set_icon(ICONSPATH + "stop.png")
 -            hildon.hildon_banner_show_information(self, "None", "Keep the N900 in a pocket close to your hip for best results")
 +            hildon.hildon_banner_show_information(self, "None", _("Keep the N900 in a pocket close to your hip for best results"))
  
      def do_expose_event(self, event):
          cr = self.window.cairo_create()