blender-addons/ui_translate/settings.py
Inês Almeida b3f7398f28 UI Translate: update to 2.8
Make operator properties into variable annotations.
Cleanup includes and descriptions.
PEP-8 compliance pass.
2018-11-11 15:03:02 +01:00

221 lines
7.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
import os
if "bpy" in locals():
import importlib
importlib.reload(settings_i18n)
else:
import bpy
from bpy.types import (
Operator,
AddonPreferences,
)
from bpy.props import (
BoolProperty,
StringProperty,
)
from bl_i18n_utils import settings as settings_i18n
settings = settings_i18n.I18nSettings()
# Operators ###################################################################
class UI_OT_i18n_settings_load(Operator):
"""Load translations' settings from a persistent JSon file"""
bl_idname = "ui.i18n_settings_load"
bl_label = "I18n Load Settings"
bl_option = {'REGISTER'}
# Operator Arguments
filepath: StringProperty(
subtype='FILE_PATH',
description="Path to the saved settings file",
)
filter_glob: StringProperty(
default="*.json",
options={'HIDDEN'}
)
# /End Operator Arguments
def invoke(self, context, event):
if not self.properties.is_property_set("filepath"):
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
else:
return self.execute(context)
def execute(self, context):
if not (self.filepath and settings):
return {'CANCELLED'}
settings.load(self.filepath, reset=True)
return {'FINISHED'}
class UI_OT_i18n_settings_save(Operator):
"""Save translations' settings in a persistent JSon file"""
bl_idname = "ui.i18n_settings_save"
bl_label = "I18n Save Settings"
bl_option = {'REGISTER'}
# Operator Arguments
filepath: StringProperty(
description="Path to the saved settings file",
subtype='FILE_PATH',
)
filter_glob: StringProperty(
default="*.json",
options={'HIDDEN'},
)
# /End Operator Arguments
def invoke(self, context, event):
if not self.properties.is_property_set("filepath"):
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
else:
return self.execute(context)
def execute(self, context):
if not (self.filepath and settings):
return {'CANCELLED'}
settings.save(self.filepath)
return {'FINISHED'}
# Addon Preferences ###########################################################
def _setattr(self, name, val):
print(self, name, val)
setattr(self, name, val)
class UI_AP_i18n_settings(AddonPreferences):
bl_idname = __name__.split(".")[0] # We want "top" module name!
bl_option = {'REGISTER'}
_settings = settings
WARN_MSGID_NOT_CAPITALIZED: BoolProperty(
name="Warn Msgid Not Capitalized",
description="Warn about messages not starting by a capitalized letter (with a few allowed exceptions!)",
default=True,
get=lambda self: self._settings.WARN_MSGID_NOT_CAPITALIZED,
set=lambda self, val: _setattr(self._settings, "WARN_MSGID_NOT_CAPITALIZED", val),
)
GETTEXT_MSGFMT_EXECUTABLE: StringProperty(
name="Gettext 'msgfmt' executable",
description="The gettext msgfmt 'compiler'. Youll likely have to edit it if youre under Windows",
subtype='FILE_PATH',
default="msgfmt",
get=lambda self: self._settings.GETTEXT_MSGFMT_EXECUTABLE,
set=lambda self, val: setattr(self._settings, "GETTEXT_MSGFMT_EXECUTABLE", val),
)
FRIBIDI_LIB: StringProperty(
name="Fribidi Library",
description="The FriBidi C compiled library (.so under Linux, .dll under windows...), youll likely have "
"to edit it if youre under Windows, e.g. using the one included in svn's libraries repository",
subtype='FILE_PATH',
default="libfribidi.so.0",
get=lambda self: self._settings.FRIBIDI_LIB,
set=lambda self, val: setattr(self._settings, "FRIBIDI_LIB", val),
)
SOURCE_DIR: StringProperty(
name="Source Root",
description="The Blender source root path",
subtype='FILE_PATH',
default="blender",
get=lambda self: self._settings.SOURCE_DIR,
set=lambda self, val: setattr(self._settings, "SOURCE_DIR", val),
)
I18N_DIR: StringProperty(
name="Translation Root",
description="The bf-translation repository",
subtype='FILE_PATH',
default="i18n",
get=lambda self: self._settings.I18N_DIR,
set=lambda self, val: setattr(self._settings, "I18N_DIR", val),
)
SPELL_CACHE: StringProperty(
name="Spell Cache",
description="A cache storing validated msgids, to avoid re-spellchecking them",
subtype='FILE_PATH',
default=os.path.join("/tmp", ".spell_cache"),
get=lambda self: self._settings.SPELL_CACHE,
set=lambda self, val: setattr(self._settings, "SPELL_CACHE", val),
)
PY_SYS_PATHS: StringProperty(
name="Import Paths",
description="Additional paths to add to sys.path (';' separated)",
default="",
get=lambda self: self._settings.PY_SYS_PATHS,
set=lambda self, val: setattr(self._settings, "PY_SYS_PATHS", val),
)
persistent_data_path: StringProperty(
name="Persistent Data Path",
description="The name of a json file storing those settings (unfortunately, Blender's system "
"does not work here)",
subtype='FILE_PATH',
default=os.path.join("ui_translate_settings.json"),
)
_is_init = False
def draw(self, context):
layout = self.layout
layout.label(text="WARNING: preferences are lost when add-on is disabled, be sure to use \"Save Persistent\" "
"if you want to keep your settings!")
layout.prop(self, "WARN_MSGID_NOT_CAPITALIZED")
layout.prop(self, "GETTEXT_MSGFMT_EXECUTABLE")
layout.prop(self, "FRIBIDI_LIB")
layout.prop(self, "SOURCE_DIR")
layout.prop(self, "I18N_DIR")
layout.prop(self, "SPELL_CACHE")
layout.prop(self, "PY_SYS_PATHS")
layout.separator()
split = layout.split(factor=0.75)
col = split.column()
col.prop(self, "persistent_data_path")
row = col.row()
row.operator("ui.i18n_settings_save", text="Save").filepath = self.persistent_data_path
row.operator("ui.i18n_settings_load", text="Load").filepath = self.persistent_data_path
col = split.column()
col.operator("ui.i18n_settings_save", text="Save Persistent To...")
col.operator("ui.i18n_settings_load", text="Load Persistent From...")
classes = (
UI_OT_i18n_settings_load,
UI_OT_i18n_settings_save,
UI_AP_i18n_settings,
)