Commit e58244f783849d4efecb44f95e13376e19ed563f
1 parent
aa3b6fed
Exists in
master
and in
67 other branches
ENH: Added language change in the preferences window
Showing
4 changed files
with
98 additions
and
26 deletions
Show diff stats
invesalius/constants.py
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)) | ... | ... |