mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2025-12-22 00:19:40 +01:00
added language selection
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
|
import locale
|
||||||
import os
|
import os
|
||||||
from enum import Enum, IntEnum
|
from enum import Enum, IntEnum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -92,7 +93,6 @@ class Settings:
|
|||||||
settings = ext_settings or get_settings()
|
settings = ext_settings or get_settings()
|
||||||
|
|
||||||
if self.__VERSION > settings.get("version", 0):
|
if self.__VERSION > settings.get("version", 0):
|
||||||
write_settings(get_default_settings())
|
|
||||||
raise SettingsException("Outdated version of the settings format!")
|
raise SettingsException("Outdated version of the settings format!")
|
||||||
|
|
||||||
self._settings = settings
|
self._settings = settings
|
||||||
@@ -127,6 +127,10 @@ class Settings:
|
|||||||
if force_write:
|
if force_write:
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def reset_to_default():
|
||||||
|
write_settings(get_default_settings())
|
||||||
|
|
||||||
def get_default(self, p_name):
|
def get_default(self, p_name):
|
||||||
""" Returns default value for current settings type """
|
""" Returns default value for current settings type """
|
||||||
return self.setting_type.get_default_settings().get(p_name)
|
return self.setting_type.get_default_settings().get(p_name)
|
||||||
@@ -185,6 +189,14 @@ class Settings:
|
|||||||
for k, v in s_type.get_default_settings().items():
|
for k, v in s_type.get_default_settings().items():
|
||||||
self._cp_settings[k] = v
|
self._cp_settings[k] = v
|
||||||
|
|
||||||
|
@property
|
||||||
|
def language(self):
|
||||||
|
return self._settings.get("language", locale.getlocale()[0] or "en_US")
|
||||||
|
|
||||||
|
@language.setter
|
||||||
|
def language(self, value):
|
||||||
|
self._settings["language"] = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def host(self):
|
def host(self):
|
||||||
return self._cp_settings.get("host", self.get_default("host"))
|
return self._cp_settings.get("host", self.get_default("host"))
|
||||||
|
|||||||
@@ -2123,6 +2123,7 @@ def start_app():
|
|||||||
except SettingsException as e:
|
except SettingsException as e:
|
||||||
msg = "{} \n{}".format(e, "All setting were reset. Restart the program!")
|
msg = "{} \n{}".format(e, "All setting were reset. Restart the program!")
|
||||||
show_dialog(DialogType.INFO, transient=Gtk.Dialog(), text=msg)
|
show_dialog(DialogType.INFO, transient=Gtk.Dialog(), text=msg)
|
||||||
|
Settings.reset_to_default()
|
||||||
else:
|
else:
|
||||||
app = Application()
|
app = Application()
|
||||||
app.run(sys.argv)
|
app.run(sys.argv)
|
||||||
|
|||||||
@@ -1090,6 +1090,72 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkFrame" id="lang_frame">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">5</property>
|
||||||
|
<property name="margin_right">5</property>
|
||||||
|
<property name="margin_top">5</property>
|
||||||
|
<property name="margin_bottom">5</property>
|
||||||
|
<property name="label_xalign">0</property>
|
||||||
|
<property name="shadow_type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="lang_box">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">5</property>
|
||||||
|
<property name="margin_right">5</property>
|
||||||
|
<property name="margin_top">5</property>
|
||||||
|
<property name="margin_bottom">5</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="lang_label">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Language:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkComboBoxText" id="lang_combo_box">
|
||||||
|
<property name="width_request">150</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="focus_on_click">False</property>
|
||||||
|
<property name="active">0</property>
|
||||||
|
<items>
|
||||||
|
<item id="en_US" translatable="yes">English</item>
|
||||||
|
<item id="de_DE" translatable="yes">Deutsch</item>
|
||||||
|
<item id="es_ES" translatable="yes">Español</item>
|
||||||
|
<item id="nl_NL" translatable="yes">Nederlands</item>
|
||||||
|
<item id="pt_PT" translatable="yes">Português</item>
|
||||||
|
<item id="ru_RU" translatable="yes">Русский</item>
|
||||||
|
</items>
|
||||||
|
<signal name="changed" handler="on_lang_changed" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="label_item">
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame" id="settings_type_frame">
|
<object class="GtkFrame" id="settings_type_frame">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@@ -1175,7 +1241,7 @@ Author: Dmitriy Yefremov
|
|||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">True</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1312,7 +1378,7 @@ Author: Dmitriy Yefremov
|
|||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">True</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -1394,7 +1460,7 @@ Author: Dmitriy Yefremov
|
|||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">True</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ class SettingsDialog:
|
|||||||
"on_profile_inserted": self.on_profile_inserted,
|
"on_profile_inserted": self.on_profile_inserted,
|
||||||
"on_profile_edited": self.on_profile_edited,
|
"on_profile_edited": self.on_profile_edited,
|
||||||
"on_profile_selected": self.on_profile_selected,
|
"on_profile_selected": self.on_profile_selected,
|
||||||
"on_profile_set_default": self.on_profile_set_default}
|
"on_profile_set_default": self.on_profile_set_default,
|
||||||
|
"on_lang_changed": self.on_lang_changed}
|
||||||
|
|
||||||
builder = Gtk.Builder()
|
builder = Gtk.Builder()
|
||||||
builder.add_from_file(UI_RESOURCES_PATH + "settings_dialog.glade")
|
builder.add_from_file(UI_RESOURCES_PATH + "settings_dialog.glade")
|
||||||
@@ -104,6 +105,8 @@ class SettingsDialog:
|
|||||||
self._profile_view = builder.get_object("profile_tree_view")
|
self._profile_view = builder.get_object("profile_tree_view")
|
||||||
self._profile_add_button = builder.get_object("profile_add_button")
|
self._profile_add_button = builder.get_object("profile_add_button")
|
||||||
self._profile_remove_button = builder.get_object("profile_remove_button")
|
self._profile_remove_button = builder.get_object("profile_remove_button")
|
||||||
|
# Language
|
||||||
|
self._lang_combo_box = builder.get_object("lang_combo_box")
|
||||||
# Settings
|
# Settings
|
||||||
self._settings = settings
|
self._settings = settings
|
||||||
self._profiles = self._settings.profiles
|
self._profiles = self._settings.profiles
|
||||||
@@ -122,6 +125,7 @@ class SettingsDialog:
|
|||||||
self._extra_support_grid.set_sensitive(is_enigma_profile)
|
self._extra_support_grid.set_sensitive(is_enigma_profile)
|
||||||
http_active = self._support_http_api_switch.get_active()
|
http_active = self._support_http_api_switch.get_active()
|
||||||
self._click_mode_zap_button.set_sensitive(is_enigma_profile and http_active)
|
self._click_mode_zap_button.set_sensitive(is_enigma_profile and http_active)
|
||||||
|
self._lang_combo_box.set_active_id(self._settings.language)
|
||||||
self.on_info_bar_close() if is_enigma_profile else self.show_info_message(
|
self.on_info_bar_close() if is_enigma_profile else self.show_info_message(
|
||||||
"The Neutrino has only experimental support. Not all features are supported!", Gtk.MessageType.WARNING)
|
"The Neutrino has only experimental support. Not all features are supported!", Gtk.MessageType.WARNING)
|
||||||
|
|
||||||
@@ -226,6 +230,7 @@ class SettingsDialog:
|
|||||||
self._settings.backup_before_save = self._before_save_switch.get_active()
|
self._settings.backup_before_save = self._before_save_switch.get_active()
|
||||||
self._settings.backup_before_downloading = self._before_downloading_switch.get_active()
|
self._settings.backup_before_downloading = self._before_downloading_switch.get_active()
|
||||||
self._settings.fav_click_mode = self.get_fav_click_mode()
|
self._settings.fav_click_mode = self.get_fav_click_mode()
|
||||||
|
self._settings.language = self._lang_combo_box.get_active_id()
|
||||||
|
|
||||||
if self._s_type is SettingsType.ENIGMA_2:
|
if self._s_type is SettingsType.ENIGMA_2:
|
||||||
self._settings.use_colors = self._set_color_switch.get_active()
|
self._settings.use_colors = self._set_color_switch.get_active()
|
||||||
@@ -339,6 +344,7 @@ class SettingsDialog:
|
|||||||
is_default = row[1]
|
is_default = row[1]
|
||||||
self._profiles.pop(row[0], None)
|
self._profiles.pop(row[0], None)
|
||||||
del model[paths]
|
del model[paths]
|
||||||
|
|
||||||
if is_default:
|
if is_default:
|
||||||
model.set_value(model.get_iter_first(), 1, DEFAULT_ICON)
|
model.set_value(model.get_iter_first(), 1, DEFAULT_ICON)
|
||||||
|
|
||||||
@@ -361,21 +367,24 @@ class SettingsDialog:
|
|||||||
self.update_local_paths(new_value)
|
self.update_local_paths(new_value)
|
||||||
self.on_profile_selected(self._profile_view)
|
self.on_profile_selected(self._profile_view)
|
||||||
|
|
||||||
def update_local_paths(self, profile_name):
|
def update_local_paths(self, p_name):
|
||||||
data_path = self._settings.data_local_path
|
data_path = self._settings.data_local_path
|
||||||
self._settings.data_local_path = "{}/{}/".format(Path(data_path).parent, profile_name)
|
|
||||||
if os.path.isdir(data_path):
|
|
||||||
os.rename(data_path, self._settings.data_local_path)
|
|
||||||
|
|
||||||
picons_path = self._settings.picons_local_path
|
picons_path = self._settings.picons_local_path
|
||||||
self._settings.picons_local_path = "{}/{}/".format(Path(picons_path).parent, profile_name)
|
|
||||||
if os.path.isdir(picons_path):
|
|
||||||
os.rename(picons_path, self._settings.picons_local_path)
|
|
||||||
|
|
||||||
backup_path = self._settings.backup_local_path
|
backup_path = self._settings.backup_local_path
|
||||||
self._settings.backup_local_path = "{}/{}/".format(Path(self._settings.backup_local_path).parent, profile_name)
|
|
||||||
if os.path.isdir(backup_path):
|
try:
|
||||||
os.rename(backup_path, self._settings.backup_local_path)
|
if os.path.isdir(picons_path):
|
||||||
|
os.rename(picons_path, self._settings.picons_local_path)
|
||||||
|
if os.path.isdir(data_path):
|
||||||
|
os.rename(data_path, self._settings.data_local_path)
|
||||||
|
if os.path.isdir(backup_path):
|
||||||
|
os.rename(backup_path, self._settings.backup_local_path)
|
||||||
|
except OSError as e:
|
||||||
|
self.show_info_message(str(e), Gtk.MessageType.ERROR)
|
||||||
|
else:
|
||||||
|
self._settings.data_local_path = "{}/{}/".format(Path(data_path).parent, p_name)
|
||||||
|
self._settings.picons_local_path = "{}/{}/".format(Path(picons_path).parent, p_name)
|
||||||
|
self._settings.backup_local_path = "{}/{}/".format(Path(self._settings.backup_local_path).parent, p_name)
|
||||||
|
|
||||||
def on_profile_selected(self, view):
|
def on_profile_selected(self, view):
|
||||||
model, paths = self._profile_view.get_selection().get_selected_rows()
|
model, paths = self._profile_view.get_selection().get_selected_rows()
|
||||||
@@ -395,6 +404,10 @@ class SettingsDialog:
|
|||||||
def on_profile_inserted(self, model, path, itr):
|
def on_profile_inserted(self, model, path, itr):
|
||||||
self._profile_remove_button.set_sensitive(len(model) > 1)
|
self._profile_remove_button.set_sensitive(len(model) > 1)
|
||||||
|
|
||||||
|
def on_lang_changed(self, box):
|
||||||
|
if box.get_active_id() != self._settings.language:
|
||||||
|
self.show_info_message("Save and restart the program to apply the settings.", Gtk.MessageType.WARNING)
|
||||||
|
|
||||||
@run_idle
|
@run_idle
|
||||||
def set_fav_click_mode(self, mode):
|
def set_fav_click_mode(self, mode):
|
||||||
mode = FavClickMode(mode)
|
mode = FavClickMode(mode)
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import locale
|
import locale
|
||||||
import os
|
import os
|
||||||
|
from enum import Enum, IntEnum
|
||||||
|
from app.settings import Settings, SettingsException
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
from enum import Enum, IntEnum
|
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk, Gdk
|
from gi.repository import Gtk, Gdk
|
||||||
|
|
||||||
@@ -11,12 +11,16 @@ from gi.repository import Gtk, Gdk
|
|||||||
UI_RESOURCES_PATH = "app/ui/" if os.path.exists("app/ui/") else "/usr/share/demoneditor/app/ui/"
|
UI_RESOURCES_PATH = "app/ui/" if os.path.exists("app/ui/") else "/usr/share/demoneditor/app/ui/"
|
||||||
|
|
||||||
IS_GNOME_SESSION = int(bool(os.environ.get("GNOME_DESKTOP_SESSION_ID")))
|
IS_GNOME_SESSION = int(bool(os.environ.get("GNOME_DESKTOP_SESSION_ID")))
|
||||||
|
|
||||||
# translation
|
# translation
|
||||||
TEXT_DOMAIN = "demon-editor"
|
TEXT_DOMAIN = "demon-editor"
|
||||||
if UI_RESOURCES_PATH == "app/ui/":
|
try:
|
||||||
LANG_DIR = UI_RESOURCES_PATH + "lang"
|
settings = Settings.get_instance()
|
||||||
locale.bindtextdomain(TEXT_DOMAIN, UI_RESOURCES_PATH + "lang")
|
except SettingsException:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
os.environ["LANGUAGE"] = settings.language
|
||||||
|
if UI_RESOURCES_PATH == "app/ui/":
|
||||||
|
locale.bindtextdomain(TEXT_DOMAIN, UI_RESOURCES_PATH + "lang")
|
||||||
|
|
||||||
theme = Gtk.IconTheme.get_default()
|
theme = Gtk.IconTheme.get_default()
|
||||||
_IMAGE_MISSING = theme.load_icon("image-missing", 16, 0) if theme.lookup_icon("image-missing", 16, 0) else None
|
_IMAGE_MISSING = theme.load_icon("image-missing", 16, 0) if theme.lookup_icon("image-missing", 16, 0) else None
|
||||||
|
|||||||
Reference in New Issue
Block a user