import copy
import os
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QWidget
import nxbrew_dl
from .gui_utils import set_ordered_list, add_item_to_list
from .layout_regions_languages import Ui_FormRegionsLanguages
from ..util import load_yml
[docs]
class RegionLanguageWindow(QWidget):
def __init__(
self,
user_config=None,
general_config=None,
parent=None,
):
"""NXBrew-dl region/language window
This part controls the advanced region/language options,
where order is important and there are quite a few options!
Args:
user_config (dict): user config. If None, will
load in from expected path
general_config (dict): general config. If None,
will load in from expected path
"""
super().__init__()
self.ui = Ui_FormRegionsLanguages()
self.ui.setupUi(self)
# Read in the general config
self.mod_dir = os.path.dirname(nxbrew_dl.__file__)
general_config_filename = os.path.join(self.mod_dir, "configs", "general.yml")
if general_config is None:
general_config = load_yml(general_config_filename)
self.general_config = copy.deepcopy(general_config)
# Read in the user config
user_config_file = os.path.join(os.getcwd(), "config.yml")
if user_config is None:
if os.path.exists(user_config_file):
user_config = load_yml(user_config_file)
else:
user_config = {}
self.user_config = copy.deepcopy(user_config)
self.region_items = {}
self.language_items = {}
[docs]
def load_config(self):
"""Load the region/language configuration"""
# Set regions, but only if the dictionary's empty
if not self.region_items:
self.region_items = self.populate_list(
"regions",
self.ui.listWidgetConfigRegionsLanguagesRegions,
check_state=False,
)
# Set default regions, if not in the config file
if "regions" not in self.user_config:
self.populate_list(
"default_selected_regions",
self.ui.listWidgetConfigRegionsLanguagesRegions,
item_dict=self.region_items,
check_state=True,
)
self.set_regions()
# Set languages, but only if the dictionary's empty
if not self.language_items:
self.language_items = self.populate_list(
"languages",
self.ui.listWidgetConfigRegionsLanguagesLanguages,
check_state=False,
)
# Set default languages, if not in the config file
if "languages" not in self.user_config:
self.populate_list(
"default_selected_languages",
self.ui.listWidgetConfigRegionsLanguagesLanguages,
item_dict=self.language_items,
check_state=True,
)
self.set_languages()
[docs]
def populate_list(
self,
default_config_key,
list_widget,
item_dict=None,
check_state=None,
):
"""Load items from a dict, potentially checked/unchecked"""
if item_dict is None:
item_dict = {}
all_keys = self.general_config[default_config_key]
for key in all_keys:
if key not in item_dict:
item = add_item_to_list(
list_widget,
self.tr(key),
check_state=check_state,
)
else:
item = item_dict[key]["item"]
if check_state is not None:
if not check_state:
item.setCheckState(Qt.CheckState.Unchecked)
else:
item.setCheckState(Qt.CheckState.Checked)
item_dict[key] = {
"item": item,
"check_state": check_state,
}
return item_dict
[docs]
def set_regions(self):
"""Set regions from the user config"""
if "regions" not in self.user_config:
return False
# Set up the region list
regions = self.user_config["regions"]
set_ordered_list(
self.ui.listWidgetConfigRegionsLanguagesRegions,
item_dict=self.region_items,
items=regions,
)
[docs]
def set_languages(self):
"""Set languages from the user config"""
if "languages" not in self.user_config:
return False
# Set up the language list
languages = self.user_config["languages"]
set_ordered_list(
self.ui.listWidgetConfigRegionsLanguagesLanguages,
item_dict=self.language_items,
items=languages,
)