Formulator / qt /scripts /config.py
ango
04.16 commit
ef62e40
raw
history blame
4.2 kB
import json
import os
from qt.components.config import ConfigWidget
from qt.components.equipments import EquipmentsWidget
from utils.parser import Parser
if not os.path.exists("config"):
CONFIG = {}
else:
CONFIG = json.load(open("config", encoding="utf-8"))
def config_script(parser: Parser, config_widget: ConfigWidget, equipments_widget: EquipmentsWidget):
def load_config():
config_name = config_widget.config_select.combo_box.currentText()
config = CONFIG.get(parser.school.school, {}).get(config_name, {})
if not config:
return
for label, equipment in equipments_widget.items():
if 'equipment' not in config[label]:
continue
else:
index = equipment.equipment.combo_box.findText(config[label]['equipment'])
equipment.equipment.combo_box.setCurrentIndex(index)
equipment.strength_level.combo_box.setCurrentIndex(config[label]['strength_level'])
if 'enchant' in config[label]:
index = equipment.enchant.combo_box.findText(config[label]['enchant'])
equipment.enchant.combo_box.setCurrentIndex(index)
if 'special_enchant' in config[label]:
if equipment.special_enchant.radio_button.isChecked() != config[label]['special_enchant']:
equipment.special_enchant.radio_button.click()
if 'embed_levels' in config[label]:
for i, embed_level in enumerate(equipment.embed_levels):
embed_level.combo_box.setCurrentIndex(config[label]['embed_levels'][i])
if 'stone_level' in config[label]:
equipment.stone_level.combo_box.setCurrentIndex(config[label]['stone_level'])
if 'stone_attrs' in config[label]:
for i, stone_attr in enumerate(equipment.stone_attrs):
index = equipment.stone_attrs[i].combo_box.findText(config[label]['stone_attrs'][i])
stone_attr.combo_box.setCurrentIndex(index)
config_widget.config_name.text_browser.setText(config_name)
config_widget.load_config.clicked.connect(load_config)
def save_config():
config_name = config_widget.config_name.text_browser.text()
if parser.school.school not in CONFIG:
CONFIG[parser.school.school] = {}
if config_name not in CONFIG[parser.school.school]:
CONFIG[parser.school.school][config_name] = {}
config = CONFIG[parser.school.school][config_name]
for label, equipment in equipments_widget.items():
config[label] = {}
if not (text := equipment.equipment.combo_box.currentText()):
continue
else:
config[label]['equipment'] = text
config[label]['strength_level'] = equipment.strength_level.combo_box.currentIndex()
if equipment.enchant:
config[label]['enchant'] = equipment.enchant.combo_box.currentText()
if equipment.special_enchant:
config[label]['special_enchant'] = equipment.special_enchant.radio_button.isChecked()
if equipment.embed_levels:
config[label]['embed_levels'] = [
embed_level.combo_box.currentIndex() for embed_level in equipment.embed_levels
]
if equipment.stone_level:
config[label]['stone_level'] = equipment.stone_level.combo_box.currentIndex()
if equipment.stone_attrs:
config[label]['stone_attrs'] = [
stone_attr.combo_box.currentText() for stone_attr in equipment.stone_attrs
]
json.dump(CONFIG, open("config", "w", encoding="utf-8"), ensure_ascii=False)
config_choices = list(CONFIG.get(parser.school.school, {}))
if current_select := config_widget.config_select.combo_box.currentText():
default_index = config_choices.index(current_select)
else:
default_index = -1
config_widget.config_select.set_items(config_choices, default_index=default_index)
config_widget.save_config.clicked.connect(save_config)