implemented threads amount options, added checkbox to language options and changed some part of the Option class

This commit is contained in:
Faraphel 2022-07-22 11:59:36 +02:00
parent 0e4c318c19
commit 332edcdcc5
4 changed files with 57 additions and 16 deletions

View file

@ -150,16 +150,20 @@ class Menu(tkinter.Menu):
class Language(tkinter.Menu):
def __init__(self, master: tkinter.Menu):
super().__init__(master, tearoff=False)
master.add_cascade(label=_("LANGUAGE_SELECTION"), menu=self)
self.variable = tkinter.StringVar(value=self.master.master.options["language"])
def callback(file: Path):
def func(): self.master.master.options["language"] = file.stem
return func
for file in Path("./assets/language/").iterdir():
self.add_command(
label=json.loads(file.read_text(encoding="utf8"))["name"],
lang_json = json.loads(file.read_text(encoding="utf8"))
self.add_radiobutton(
label=lang_json["name"],
value=file.stem,
variable=self.variable,
command=callback(file)
)
@ -179,6 +183,27 @@ class Menu(tkinter.Menu):
master.add_cascade(label=_("ADVANCED_CONFIGURATION"), menu=self)
self.add_command(label="Debug mode")
self.threads_used = self.ThreadsUsed(self)
class ThreadsUsed(tkinter.Menu):
def __init__(self, master: tkinter.Menu):
super().__init__(master, tearoff=False)
master.add_cascade(label=_("THREADS_USED"), menu=self)
self.variable = tkinter.IntVar(value=self.master.master.master.options["threads"])
def callback(threads_amount: int):
def func(): self.master.master.master.options["threads"] = threads_amount
return func
for i in [1, 2, 4, 8, 12, 16]:
self.add_radiobutton(
label=_("USE", f" {i} ", "THREADS"),
value=i,
variable=self.variable,
command=callback(i),
)
# Help menu
class Help(tkinter.Menu):
def __init__(self, master: tkinter.Menu):
@ -377,7 +402,14 @@ class ButtonInstall(ttk.Button):
game = Game(source_path)
mod_config = self.master.get_mod_config()
output_type = self.master.get_output_type()
self.master.progress_function(game.install_mod(destination_path, mod_config, output_type))
self.master.progress_function(
game.install_mod(
dest=destination_path,
mod_config=mod_config,
output_type=output_type,
options=self.master.options
)
)
finally:
self.master.set_state(InstallerState.IDLE)

View file

@ -3,6 +3,7 @@ from typing import Generator
from source.mkw.ExtractedGame import ExtractedGame
from source.mkw.ModConfig import ModConfig
from source.option import Option
from source.wt.wit import WITPath, Region, Extension
@ -87,11 +88,13 @@ class Game:
return extracted_game
def install_mod(self, dest: Path, mod_config: ModConfig, output_type: Extension) -> Generator[dict, None, None]:
def install_mod(self, dest: Path, mod_config: ModConfig, options: "Option", output_type: Extension
) -> Generator[dict, None, None]:
"""
Patch the game with the mod
:dest: destination directory
:mod_config: mod configuration
:options: others options for customized installation
:output_type: type of the destination game
"""
# create a cache directory for some files
@ -122,7 +125,7 @@ class Game:
cache_autoadd_directory,
cache_cttracks_directory,
cache_ogtracks_directory,
8
options["threads"],
)
# patch the game

View file

@ -7,15 +7,21 @@ from source import restart_program
class Option:
__slots__ = ("_path", "_options")
reboot_on_change: list[any] = ["language"]
reboot_on_change: list[str] = [
"language",
]
default_options: dict[str, any] = {
"language": "en"
"language": "en",
"threads": 8,
}
def __init__(self, language=None):
def __init__(self, **options):
self._path: Path | None = None
self._options: dict[str, any] = self.default_options.copy()
if language is not None: self._options["language"] = language
for option_name, option_value in options.items():
self._options[option_name] = option_value
def __getitem__(self, key: str) -> any:
"""
@ -55,11 +61,7 @@ class Option:
:param option_dict: dict containing the configuration
:return: Option
"""
kwargs = {}
for key in cls.default_options.keys():
if "key" in option_dict: kwargs[key] = option_dict[key]
return cls(**kwargs)
return cls(**option_dict)
@classmethod
def from_file(cls, option_file: str | Path) -> "Option":

View file

@ -22,7 +22,11 @@ def translate(*text) -> str:
:param text: list of text to translate
:return: translated text
"""
return "".join([self._language_data["translation"].get(word, word) for word in text])
return "".join([
self._language_data["translation"].get(word, word) if isinstance(word, str)
else str(word)
for word in text
])