Commit e58244f783849d4efecb44f95e13376e19ed563f

Authored by Paulo Henrique Junqueira Amorim
1 parent aa3b6fed

ENH: Added language change in the preferences window

invesalius/constants.py
... ... @@ -508,3 +508,4 @@ STYLE_LEVEL = {SLICE_STATE_EDITOR: 1,
508 508 #------------ Prefereces options key ------------
509 509 RENDERING = 0
510 510 SURFACE_INTERPOLATION = 1
  511 +LANGUAGE = 2
... ...
invesalius/gui/frame.py
... ... @@ -330,10 +330,11 @@ class Frame(wx.Frame):
330 330 if self.preferences.ShowModal() == wx.ID_OK:
331 331 values = self.preferences.GetPreferences()
332 332 self.preferences.Close()
333   -
  333 +
334 334 ses.Session().rendering = values[const.RENDERING]
335 335 ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION]
336   -
  336 + ses.Session().language = values[const.LANGUAGE]
  337 +
337 338 ps.Publisher().sendMessage('Remove Volume')
338 339 ps.Publisher().sendMessage('Reset Reaycasting')
339 340 ps.Publisher().sendMessage('Update Surface Interpolation')
... ...
invesalius/gui/language_dialog.py
... ... @@ -25,19 +25,9 @@ import i18n
25 25  
26 26 ICON_DIR = os.path.abspath(os.path.join('..', 'icons'))
27 27  
28   -class LanguageDialog(wx.Dialog):
29   - """Class define the language to be used in the InVesalius,
30   - exist chcLanguage that list language EN and PT. The language
31   - selected is writing in the config.ini"""
  28 +class ComboBoxLanguage:
32 29  
33   - def __init__(self, parent=None, startApp=None):
34   - super(LanguageDialog, self).__init__(parent, title="")
35   - self.__TranslateMessage__()
36   - self.SetTitle(_('Language selection'))
37   - self.__init_gui()
38   - self.Centre()
39   -
40   - def __init_combobox_bitmap__(self):
  30 + def __init__(self, parent):
41 31 """Initialize combobox bitmap"""
42 32  
43 33 # Retrieve locales dictionary
... ... @@ -59,7 +49,7 @@ class LanguageDialog(wx.Dialog):
59 49 selection = self.locales_key.index('en')
60 50  
61 51 # Create bitmap combo
62   - self.bitmapCmb = bitmapCmb = wx.combo.BitmapComboBox(self, style=wx.CB_READONLY)
  52 + self.bitmapCmb = bitmapCmb = wx.combo.BitmapComboBox(parent, style=wx.CB_READONLY)
63 53 for key in self.locales_key:
64 54 # Based on composed flag filename, get bitmap
65 55 filepath = os.path.join(ICON_DIR, "%s.bmp"%(key))
... ... @@ -71,6 +61,61 @@ class LanguageDialog(wx.Dialog):
71 61 selection = self.locales_key.index(key)
72 62 bitmapCmb.SetSelection(selection)
73 63  
  64 + def GetComboBox(self):
  65 + return self.bitmapCmb
  66 +
  67 + def GetLocalesKey(self):
  68 + return self.locales_key
  69 +
  70 +class LanguageDialog(wx.Dialog):
  71 + """Class define the language to be used in the InVesalius,
  72 + exist chcLanguage that list language EN and PT. The language
  73 + selected is writing in the config.ini"""
  74 +
  75 + def __init__(self, parent=None, startApp=None):
  76 + super(LanguageDialog, self).__init__(parent, title="")
  77 + self.__TranslateMessage__()
  78 + self.SetTitle(_('Language selection'))
  79 + self.__init_gui()
  80 + self.Centre()
  81 +
  82 + #def __init_combobox_bitmap__(self):
  83 + # """Initialize combobox bitmap"""
  84 +
  85 + # # Retrieve locales dictionary
  86 + # dict_locales = i18n.GetLocales()
  87 +
  88 + # # Retrieve locales names and sort them
  89 + # self.locales = dict_locales.values()
  90 + # self.locales.sort()
  91 +
  92 + # # Retrieve locales keys (eg: pt_BR for Portuguese(Brazilian))
  93 + # self.locales_key = [dict_locales.get_key(value)[0] for value in self.locales]
  94 +
  95 + # # Find out OS locale
  96 + # self.os_locale = i18n.GetLocaleOS()
  97 +
  98 + # os_lang = self.os_locale[0:2]
  99 +
  100 + # # Default selection will be English
  101 + # selection = self.locales_key.index('en')
  102 +
  103 + # # Create bitmap combo
  104 + # self.bitmapCmb = bitmapCmb = wx.combo.BitmapComboBox(self, style=wx.CB_READONLY)
  105 + # for key in self.locales_key:
  106 + # # Based on composed flag filename, get bitmap
  107 + # filepath = os.path.join(ICON_DIR, "%s.bmp"%(key))
  108 + # bmp = wx.Bitmap(filepath, wx.BITMAP_TYPE_BMP)
  109 + # # Add bitmap and info to Combo
  110 + # bitmapCmb.Append(dict_locales[key], bmp, key)
  111 + # # Set default combo item if available on the list
  112 + # if key.startswith(os_lang):
  113 + # selection = self.locales_key.index(key)
  114 + # bitmapCmb.SetSelection(selection)
  115 +
  116 + def GetComboBox(self):
  117 + return self.bitmapCmb
  118 +
74 119  
75 120 def __init_gui(self):
76 121 self.txtMsg = wx.StaticText(self, -1,
... ... @@ -86,7 +131,9 @@ class LanguageDialog(wx.Dialog):
86 131 btnsizer.AddButton(btn)
87 132 btnsizer.Realize()
88 133  
89   - self.__init_combobox_bitmap__()
  134 + #self.__init_combobox_bitmap__()
  135 + self.cmb = ComboBoxLanguage(self)
  136 + self.bitmapCmb = self.cmb.GetComboBox()
90 137  
91 138 sizer = wx.BoxSizer(wx.VERTICAL)
92 139 sizer.Add(self.txtMsg, 0, wx.EXPAND | wx.ALL, 5)
... ... @@ -101,6 +148,7 @@ class LanguageDialog(wx.Dialog):
101 148  
102 149 def GetSelectedLanguage(self):
103 150 """Return String with Selected Language"""
  151 + self.locales_key = self.cmb.GetLocalesKey()
104 152 return self.locales_key[self.bitmapCmb.GetSelection()]
105 153  
106 154 def __TranslateMessage__(self):
... ...
invesalius/gui/preferences.py
... ... @@ -2,6 +2,7 @@ import wx
2 2 import constants as const
3 3 import wx.lib.pubsub as ps
4 4 import session as ses
  5 +from language_dialog import ComboBoxLanguage
5 6  
6 7 ID = wx.NewId()
7 8  
... ... @@ -59,15 +60,22 @@ class Preferences(wx.Dialog):
59 60  
60 61  
61 62 def GetPreferences(self):
62   -
63   - return self.pnl_viewer3d.GetSelection()
  63 + values = {}
  64 + lang = self.pnl_language.GetSelection()
  65 + viewer = self.pnl_viewer3d.GetSelection()
  66 + values.update(lang)
  67 + values.update(viewer)
  68 + return values
64 69  
65 70 def LoadPreferences(self, pub_evt):
66   -
67   - values = {const.RENDERING:ses.Session().rendering,
68   - const.SURFACE_INTERPOLATION:ses.Session().surface_interpolation}
  71 + se = ses.Session()
  72 + values = {const.RENDERING:se.rendering,
  73 + const.SURFACE_INTERPOLATION:se.surface_interpolation,
  74 + const.LANGUAGE:se.language
  75 + }
69 76  
70 77 self.pnl_viewer3d.LoadSelection(values)
  78 + self.pnl_language.LoadSelection(values)
71 79  
72 80  
73 81  
... ... @@ -126,17 +134,31 @@ class Language(wx.Panel):
126 134 def __init__(self, parent):
127 135  
128 136 wx.Panel.__init__(self, parent)
129   -
130 137  
  138 + self.lg = lg = ComboBoxLanguage(self)
  139 + self.cmb_lang = cmb_lang = lg.GetComboBox()
  140 +
131 141 box = wx.StaticBox(self, -1, "Language")
132 142 bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
133   -
134   - t = wx.StaticText(self, -1, "Control Test....")
135   - bsizer.Add(t, 0, wx.TOP|wx.LEFT, 10)
136   -
  143 +
  144 + text = wx.StaticText(self, -1, "Takes effect the next time you \n open the InVesalius.")
  145 + bsizer.Add(cmb_lang, 0, wx.TOP|wx.CENTER, 20)
  146 + bsizer.Add(text, 0, wx.TOP|wx.CENTER, 10)
137 147  
138 148 border = wx.BoxSizer()
139 149 border.Add(bsizer, 1, wx.EXPAND|wx.ALL, 20)
140 150 self.SetSizer(border)
141 151  
142 152 border.Fit(self)
  153 +
  154 + def GetSelection(self):
  155 + selection = self.cmb_lang.GetSelection()
  156 + locales = self.lg.GetLocalesKey()
  157 + options = {const.LANGUAGE:locales[selection]}
  158 + return options
  159 +
  160 + def LoadSelection(self, values):
  161 + language = values[const.LANGUAGE]
  162 + locales = self.lg.GetLocalesKey()
  163 + selection = locales.index(language)
  164 + self.cmb_lang.SetSelection(int(selection))
... ...